From 433a58ccb61c25512dcc3df155b8e285256917ef Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 25 Apr 2023 09:21:14 +0800 Subject: [PATCH 0001/1346] fix(compiler-sfc): props bindings should not override user declared bindings fix #8148 --- .../__tests__/compileScript/defineProps.spec.ts | 15 +++++++++++++++ packages/compiler-sfc/src/script/defineProps.ts | 8 ++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts b/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts index cf61c98406c..f52307d41b3 100644 --- a/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts @@ -571,6 +571,21 @@ const props = defineProps({ foo: String }) ).toMatch(`foo: { type: Number`) }) + // #8148 + test('should not override local bindings', () => { + const { bindings } = compile(` + + `) + expect(bindings).toStrictEqual({ + bar: BindingTypes.SETUP_MAYBE_REF, + computed: BindingTypes.SETUP_CONST + }) + }) + describe('errors', () => { test('w/ both type and non-type args', () => { expect(() => { diff --git a/packages/compiler-sfc/src/script/defineProps.ts b/packages/compiler-sfc/src/script/defineProps.ts index 16ea02fe3cf..dde415c21a1 100644 --- a/packages/compiler-sfc/src/script/defineProps.ts +++ b/packages/compiler-sfc/src/script/defineProps.ts @@ -58,7 +58,9 @@ export function processDefineProps( // register bindings if (ctx.propsRuntimeDecl) { for (const key of getObjectOrArrayExpressionKeys(ctx.propsRuntimeDecl)) { - ctx.bindingMetadata[key] = BindingTypes.PROPS + if (!(key in ctx.bindingMetadata)) { + ctx.bindingMetadata[key] = BindingTypes.PROPS + } } } @@ -170,7 +172,9 @@ function genRuntimePropsFromTypes(ctx: ScriptCompileContext) { for (const prop of props) { propStrings.push(genRuntimePropFromType(ctx, prop, hasStaticDefaults)) // register bindings - ctx.bindingMetadata[prop.key] = BindingTypes.PROPS + if (!(prop.key in ctx.bindingMetadata)) { + ctx.bindingMetadata[prop.key] = BindingTypes.PROPS + } } let propsDecls = `{ From a370e8006a70ea49a7d04c8c1a42d0947eba5dea Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 25 Apr 2023 09:29:30 +0800 Subject: [PATCH 0002/1346] perf(compiler-sfc): infer ref binding type for more built-in methods --- .../compiler-sfc/__tests__/compileScript.spec.ts | 15 +++++++++++++++ .../__tests__/compileScript/defineProps.spec.ts | 2 +- packages/compiler-sfc/src/compileScript.ts | 12 ++++++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/compiler-sfc/__tests__/compileScript.spec.ts b/packages/compiler-sfc/__tests__/compileScript.spec.ts index eec434758e8..afe656b4a2c 100644 --- a/packages/compiler-sfc/__tests__/compileScript.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript.spec.ts @@ -1520,4 +1520,19 @@ describe('SFC genDefaultAs', () => { ) assertCode(content) }) + + test('binding type for edge cases', () => { + const { bindings } = compile( + `` + ) + expect(bindings).toStrictEqual({ + toRef: BindingTypes.SETUP_CONST, + props: BindingTypes.SETUP_REACTIVE_CONST, + foo: BindingTypes.SETUP_REF + }) + }) }) diff --git a/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts b/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts index f52307d41b3..fe5ef293ad4 100644 --- a/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts @@ -581,7 +581,7 @@ const props = defineProps({ foo: String }) `) expect(bindings).toStrictEqual({ - bar: BindingTypes.SETUP_MAYBE_REF, + bar: BindingTypes.SETUP_REF, computed: BindingTypes.SETUP_CONST }) }) diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 2fa022ec2d7..1fbbb8f5c96 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -1095,8 +1095,16 @@ function walkDeclaration( : BindingTypes.SETUP_CONST } else if (isConst) { if ( - isCallOf(init, userImportAliases['ref']) || - isCallOf(init, DEFINE_MODEL) + isCallOf( + init, + m => + m === userImportAliases['ref'] || + m === userImportAliases['computed'] || + m === userImportAliases['shallowRef'] || + m === userImportAliases['customRef'] || + m === userImportAliases['toRef'] || + m === DEFINE_MODEL + ) ) { bindingType = BindingTypes.SETUP_REF } else { From 1c0be5c7444966fa444460e87633cf44ec60292a Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 25 Apr 2023 16:30:11 +0800 Subject: [PATCH 0003/1346] feat(compiler-sfc): support project references when resolving types close #8140 --- .../compileScript/resolveType.spec.ts | 38 +++ packages/compiler-sfc/package.json | 1 + .../compiler-sfc/src/script/resolveType.ts | 241 +++++++++++------- pnpm-lock.yaml | 9 + 4 files changed, 194 insertions(+), 95 deletions(-) diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts index dd8f82e1db0..12a414cc1f2 100644 --- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts @@ -607,6 +607,44 @@ describe('resolveType', () => { ]) }) + test('ts module resolve w/ project reference & extends', () => { + const files = { + '/tsconfig.json': JSON.stringify({ + references: [ + { + path: './tsconfig.app.json' + } + ] + }), + '/tsconfig.app.json': JSON.stringify({ + include: ['**/*.ts', '**/*.vue'], + extends: './tsconfig.web.json' + }), + '/tsconfig.web.json': JSON.stringify({ + compilerOptions: { + composite: true, + paths: { + bar: ['./user.ts'] + } + } + }), + '/user.ts': 'export type User = { bar: string }' + } + + const { props, deps } = resolve( + ` + import { User } from 'bar' + defineProps() + `, + files + ) + + expect(props).toStrictEqual({ + bar: ['String'] + }) + expect(deps && [...deps]).toStrictEqual(['/user.ts']) + }) + test('global types', () => { const files = { // ambient diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index 8b0e8adfb06..aa3a34d9c50 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -51,6 +51,7 @@ "hash-sum": "^2.0.0", "lru-cache": "^5.1.1", "merge-source-map": "^1.1.0", + "minimatch": "^9.0.0", "postcss-modules": "^4.0.0", "postcss-selector-parser": "^6.0.4", "pug": "^3.0.1", diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index d0fd9c5896c..bf29ae089bd 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -40,6 +40,7 @@ import { parse } from '../parse' import { createCache } from '../cache' import type TS from 'typescript' import { extname, dirname } from 'path' +import { minimatch as isMatch } from 'minimatch' /** * TypeResolveContext is compatible with ScriptCompileContext @@ -77,15 +78,19 @@ interface WithScope { type ScopeTypeNode = Node & WithScope & { _ns?: TSModuleDeclaration & WithScope } -export interface TypeScope { - filename: string - source: string - offset: number - imports: Record - types: Record - exportedTypes: Record - declares: Record - exportedDeclares: Record +export class TypeScope { + constructor( + public filename: string, + public source: string, + public offset: number = 0, + public imports: Record = Object.create(null), + public types: Record = Object.create(null), + public declares: Record = Object.create(null) + ) {} + + resolvedImportSources: Record = Object.create(null) + exportedTypes: Record = Object.create(null) + exportedDeclares: Record = Object.create(null) } export interface MaybeWithScope { @@ -716,33 +721,38 @@ function importSourceToScope( scope ) } - let resolved - if (source.startsWith('.')) { - // relative import - fast path - const filename = joinPaths(scope.filename, '..', source) - resolved = resolveExt(filename, fs) - } else { - // module or aliased import - use full TS resolution, only supported in Node - if (!__NODE_JS__) { - ctx.error( - `Type import from non-relative sources is not supported in the browser build.`, - node, - scope - ) + + let resolved: string | undefined = scope.resolvedImportSources[source] + if (!resolved) { + if (source.startsWith('.')) { + // relative import - fast path + const filename = joinPaths(scope.filename, '..', source) + resolved = resolveExt(filename, fs) + } else { + // module or aliased import - use full TS resolution, only supported in Node + if (!__NODE_JS__) { + ctx.error( + `Type import from non-relative sources is not supported in the browser build.`, + node, + scope + ) + } + if (!ts) { + ctx.error( + `Failed to resolve import source ${JSON.stringify(source)}. ` + + `typescript is required as a peer dep for vue in order ` + + `to support resolving types from module imports.`, + node, + scope + ) + } + resolved = resolveWithTS(scope.filename, source, fs) } - if (!ts) { - ctx.error( - `Failed to resolve import source ${JSON.stringify(source)}. ` + - `typescript is required as a peer dep for vue in order ` + - `to support resolving types from module imports.`, - node, - scope - ) + if (resolved) { + resolved = scope.resolvedImportSources[source] = normalizePath(resolved) } - resolved = resolveWithTS(scope.filename, source, fs) } if (resolved) { - resolved = normalizePath(resolved) // (hmr) register dependency file on ctx ;(ctx.deps || (ctx.deps = new Set())).add(resolved) return fileToScope(ctx, resolved) @@ -768,10 +778,13 @@ function resolveExt(filename: string, fs: FS) { ) } -const tsConfigCache = createCache<{ - options: TS.CompilerOptions - cache: TS.ModuleResolutionCache -}>() +interface CachedConfig { + config: TS.ParsedCommandLine + cache?: TS.ModuleResolutionCache +} + +const tsConfigCache = createCache() +const tsConfigRefMap = new Map() function resolveWithTS( containingFile: string, @@ -783,51 +796,102 @@ function resolveWithTS( // 1. resolve tsconfig.json const configPath = ts.findConfigFile(containingFile, fs.fileExists) // 2. load tsconfig.json - let options: TS.CompilerOptions - let cache: TS.ModuleResolutionCache | undefined + let tsCompilerOptions: TS.CompilerOptions + let tsResolveCache: TS.ModuleResolutionCache | undefined if (configPath) { + let configs: CachedConfig[] const normalizedConfigPath = normalizePath(configPath) const cached = tsConfigCache.get(normalizedConfigPath) if (!cached) { - // The only case where `fs` is NOT `ts.sys` is during tests. - // parse config host requires an extra `readDirectory` method - // during tests, which is stubbed. - const parseConfigHost = __TEST__ - ? { - ...fs, - useCaseSensitiveFileNames: true, - readDirectory: () => [] + configs = loadTSConfig(configPath, fs).map(config => ({ config })) + tsConfigCache.set(normalizedConfigPath, configs) + } else { + configs = cached + } + let matchedConfig: CachedConfig | undefined + if (configs.length === 1) { + matchedConfig = configs[0] + } else { + // resolve which config matches the current file + for (const c of configs) { + const base = normalizePath( + (c.config.options.pathsBasePath as string) || + dirname(c.config.options.configFilePath as string) + ) + const included: string[] = c.config.raw?.include + const excluded: string[] = c.config.raw?.exclude + if ( + (!included && (!base || containingFile.startsWith(base))) || + included.some(p => isMatch(containingFile, joinPaths(base, p))) + ) { + if ( + excluded && + excluded.some(p => isMatch(containingFile, joinPaths(base, p))) + ) { + continue } - : ts.sys - const parsed = ts.parseJsonConfigFileContent( - ts.readConfigFile(configPath, fs.readFile).config, - parseConfigHost, - dirname(configPath), - undefined, - configPath - ) - options = parsed.options - cache = ts.createModuleResolutionCache( + matchedConfig = c + break + } + } + if (!matchedConfig) { + matchedConfig = configs[configs.length - 1] + } + } + tsCompilerOptions = matchedConfig.config.options + tsResolveCache = + matchedConfig.cache || + (matchedConfig.cache = ts.createModuleResolutionCache( process.cwd(), createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames), - options - ) - tsConfigCache.set(normalizedConfigPath, { options, cache }) - } else { - ;({ options, cache } = cached) - } + tsCompilerOptions + )) } else { - options = {} + tsCompilerOptions = {} } // 3. resolve - const res = ts.resolveModuleName(source, containingFile, options, fs, cache) + const res = ts.resolveModuleName( + source, + containingFile, + tsCompilerOptions, + fs, + tsResolveCache + ) if (res.resolvedModule) { return res.resolvedModule.resolvedFileName } } +function loadTSConfig(configPath: string, fs: FS): TS.ParsedCommandLine[] { + // The only case where `fs` is NOT `ts.sys` is during tests. + // parse config host requires an extra `readDirectory` method + // during tests, which is stubbed. + const parseConfigHost = __TEST__ + ? { + ...fs, + useCaseSensitiveFileNames: true, + readDirectory: () => [] + } + : ts.sys + const config = ts.parseJsonConfigFileContent( + ts.readConfigFile(configPath, fs.readFile).config, + parseConfigHost, + dirname(configPath), + undefined, + configPath + ) + const res = [config] + if (config.projectReferences) { + for (const ref of config.projectReferences) { + tsConfigRefMap.set(ref.path, configPath) + res.unshift(...loadTSConfig(ref.path, fs)) + } + } + return res +} + const fileToScopeCache = createCache() /** @@ -837,6 +901,8 @@ export function invalidateTypeCache(filename: string) { filename = normalizePath(filename) fileToScopeCache.delete(filename) tsConfigCache.delete(filename) + const affectedConfig = tsConfigRefMap.get(filename) + if (affectedConfig) tsConfigCache.delete(affectedConfig) } export function fileToScope( @@ -852,16 +918,7 @@ export function fileToScope( const fs = ctx.options.fs || ts?.sys const source = fs.readFile(filename) || '' const body = parseFile(filename, source, ctx.options.babelParserPlugins) - const scope: TypeScope = { - filename, - source, - offset: 0, - imports: recordImports(body), - types: Object.create(null), - exportedTypes: Object.create(null), - declares: Object.create(null), - exportedDeclares: Object.create(null) - } + const scope = new TypeScope(filename, source, 0, recordImports(body)) recordTypes(ctx, body, scope, asGlobal) fileToScopeCache.set(filename, scope) return scope @@ -923,19 +980,12 @@ function ctxToScope(ctx: TypeResolveContext): TypeScope { ? [...ctx.scriptAst.body, ...ctx.scriptSetupAst!.body] : ctx.scriptSetupAst!.body - const scope: TypeScope = { - filename: ctx.filename, - source: ctx.source, - offset: 'startOffset' in ctx ? ctx.startOffset! : 0, - imports: - 'userImports' in ctx - ? Object.create(ctx.userImports) - : recordImports(body), - types: Object.create(null), - exportedTypes: Object.create(null), - declares: Object.create(null), - exportedDeclares: Object.create(null) - } + const scope = new TypeScope( + ctx.filename, + ctx.source, + 'startOffset' in ctx ? ctx.startOffset! : 0, + 'userImports' in ctx ? Object.create(ctx.userImports) : recordImports(body) + ) recordTypes(ctx, body, scope) @@ -950,14 +1000,15 @@ function moduleDeclToScope( if (node._resolvedChildScope) { return node._resolvedChildScope } - const scope: TypeScope = { - ...parentScope, - imports: Object.create(parentScope.imports), - types: Object.create(parentScope.types), - declares: Object.create(parentScope.declares), - exportedTypes: Object.create(null), - exportedDeclares: Object.create(null) - } + + const scope = new TypeScope( + parentScope.filename, + parentScope.source, + parentScope.offset, + Object.create(parentScope.imports), + Object.create(parentScope.types), + Object.create(parentScope.declares) + ) if (node.body.type === 'TSModuleDeclaration') { const decl = node.body as TSModuleDeclaration & WithScope diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 817ac5a0999..8320181887e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -136,6 +136,7 @@ importers: lru-cache: ^5.1.1 magic-string: ^0.30.0 merge-source-map: ^1.1.0 + minimatch: ^9.0.0 postcss: ^8.1.10 postcss-modules: ^4.0.0 postcss-selector-parser: ^6.0.4 @@ -161,6 +162,7 @@ importers: hash-sum: 2.0.0 lru-cache: 5.1.1 merge-source-map: 1.1.0 + minimatch: 9.0.0 postcss-modules: 4.3.1_postcss@8.4.21 postcss-selector-parser: 6.0.11 pug: 3.0.2 @@ -3759,6 +3761,13 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch/9.0.0: + resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist-options/4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} From a778034a3ecdc12fe6fb5795916962a03d0e3d65 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 25 Apr 2023 16:41:04 +0800 Subject: [PATCH 0004/1346] release: v3.3.0-beta.2 --- CHANGELOG.md | 21 +++++++++ package.json | 2 +- packages/compiler-core/package.json | 4 +- packages/compiler-dom/package.json | 6 +-- packages/compiler-sfc/package.json | 12 ++--- packages/compiler-ssr/package.json | 6 +-- packages/dts-test/package.json | 2 +- packages/reactivity-transform/package.json | 6 +-- packages/reactivity/package.json | 4 +- packages/runtime-core/package.json | 6 +-- packages/runtime-dom/package.json | 6 +-- packages/runtime-test/package.json | 6 +-- packages/server-renderer/package.json | 8 ++-- packages/sfc-playground/package.json | 2 +- packages/shared/package.json | 2 +- packages/size-check/package.json | 2 +- packages/template-explorer/package.json | 2 +- packages/vue-compat/package.json | 4 +- packages/vue/package.json | 12 ++--- pnpm-lock.yaml | 52 +++++++++++----------- 20 files changed, 93 insertions(+), 72 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a13d099e7a..fa7cef8c76c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +# [3.3.0-beta.2](https://github.com/vuejs/core/compare/v3.3.0-beta.1...v3.3.0-beta.2) (2023-04-25) + + +### Bug Fixes + +* **compiler-sfc:** avoid all hard errors when inferring runtime type ([2d9f6f9](https://github.com/vuejs/core/commit/2d9f6f926453c46f542789927bcd30d15da9c24b)) +* **compiler-sfc:** normalize windows paths when resolving types ([#8136](https://github.com/vuejs/core/issues/8136)) ([29da504](https://github.com/vuejs/core/commit/29da50468770fcee16ba5d5bec7166dd5bc120ee)) +* **compiler-sfc:** props bindings should not override user declared bindings ([433a58c](https://github.com/vuejs/core/commit/433a58ccb61c25512dcc3df155b8e285256917ef)), closes [#8148](https://github.com/vuejs/core/issues/8148) + + +### Features + +* **compiler-sfc:** support project references when resolving types ([1c0be5c](https://github.com/vuejs/core/commit/1c0be5c7444966fa444460e87633cf44ec60292a)), closes [#8140](https://github.com/vuejs/core/issues/8140) + + +### Performance Improvements + +* **compiler-sfc:** infer ref binding type for more built-in methods ([a370e80](https://github.com/vuejs/core/commit/a370e8006a70ea49a7d04c8c1a42d0947eba5dea)) + + + # [3.3.0-beta.1](https://github.com/vuejs/core/compare/v3.3.0-alpha.13...v3.3.0-beta.1) (2023-04-21) diff --git a/package.json b/package.json index 8fc4e41353d..da0090026a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "packageManager": "pnpm@7.26.0", "type": "module", "scripts": { diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index 4dc11f6e717..24850c819bd 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-core", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "@vue/compiler-core", "main": "index.js", "module": "dist/compiler-core.esm-bundler.js", @@ -33,7 +33,7 @@ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-core#readme", "dependencies": { "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.0-beta.1", + "@vue/shared": "3.3.0-beta.2", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" }, diff --git a/packages/compiler-dom/package.json b/packages/compiler-dom/package.json index 7429bd404fe..8665081dba0 100644 --- a/packages/compiler-dom/package.json +++ b/packages/compiler-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-dom", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "@vue/compiler-dom", "main": "index.js", "module": "dist/compiler-dom.esm-bundler.js", @@ -37,7 +37,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-dom#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.1", - "@vue/compiler-core": "3.3.0-beta.1" + "@vue/shared": "3.3.0-beta.2", + "@vue/compiler-core": "3.3.0-beta.2" } } diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index aa3a34d9c50..98b6c12df42 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-sfc", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "@vue/compiler-sfc", "main": "dist/compiler-sfc.cjs.js", "module": "dist/compiler-sfc.esm-browser.js", @@ -33,11 +33,11 @@ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-sfc#readme", "dependencies": { "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.0-beta.1", - "@vue/compiler-dom": "3.3.0-beta.1", - "@vue/compiler-ssr": "3.3.0-beta.1", - "@vue/reactivity-transform": "3.3.0-beta.1", - "@vue/shared": "3.3.0-beta.1", + "@vue/compiler-core": "3.3.0-beta.2", + "@vue/compiler-dom": "3.3.0-beta.2", + "@vue/compiler-ssr": "3.3.0-beta.2", + "@vue/reactivity-transform": "3.3.0-beta.2", + "@vue/shared": "3.3.0-beta.2", "estree-walker": "^2.0.2", "magic-string": "^0.30.0", "postcss": "^8.1.10", diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json index 51820cc142e..d5da981d380 100644 --- a/packages/compiler-ssr/package.json +++ b/packages/compiler-ssr/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-ssr", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "@vue/compiler-ssr", "main": "dist/compiler-ssr.cjs.js", "types": "dist/compiler-ssr.d.ts", @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-ssr#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.1", - "@vue/compiler-dom": "3.3.0-beta.1" + "@vue/shared": "3.3.0-beta.2", + "@vue/compiler-dom": "3.3.0-beta.2" } } diff --git a/packages/dts-test/package.json b/packages/dts-test/package.json index c1f403ae67b..e230f0d9db8 100644 --- a/packages/dts-test/package.json +++ b/packages/dts-test/package.json @@ -4,5 +4,5 @@ "dependencies": { "vue": "workspace:*" }, - "version": "3.3.0-beta.1" + "version": "3.3.0-beta.2" } diff --git a/packages/reactivity-transform/package.json b/packages/reactivity-transform/package.json index 15d2435a41d..998e8eeafac 100644 --- a/packages/reactivity-transform/package.json +++ b/packages/reactivity-transform/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity-transform", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "@vue/reactivity-transform", "main": "dist/reactivity-transform.cjs.js", "files": [ @@ -29,8 +29,8 @@ "homepage": "https://github.com/vuejs/core/tree/dev/packages/reactivity-transform#readme", "dependencies": { "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.0-beta.1", - "@vue/shared": "3.3.0-beta.1", + "@vue/compiler-core": "3.3.0-beta.2", + "@vue/shared": "3.3.0-beta.2", "estree-walker": "^2.0.2", "magic-string": "^0.30.0" }, diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json index cc426067f38..390cd6e978c 100644 --- a/packages/reactivity/package.json +++ b/packages/reactivity/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "@vue/reactivity", "main": "index.js", "module": "dist/reactivity.esm-bundler.js", @@ -36,6 +36,6 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/reactivity#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.1" + "@vue/shared": "3.3.0-beta.2" } } diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index 94d65eeca6b..3478b555cd3 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-core", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "@vue/runtime-core", "main": "index.js", "module": "dist/runtime-core.esm-bundler.js", @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-core#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.1", - "@vue/reactivity": "3.3.0-beta.1" + "@vue/shared": "3.3.0-beta.2", + "@vue/reactivity": "3.3.0-beta.2" } } diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json index 52928eb66e0..a81e9319897 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-dom", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "@vue/runtime-dom", "main": "index.js", "module": "dist/runtime-dom.esm-bundler.js", @@ -35,8 +35,8 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-dom#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.1", - "@vue/runtime-core": "3.3.0-beta.1", + "@vue/shared": "3.3.0-beta.2", + "@vue/runtime-core": "3.3.0-beta.2", "csstype": "^3.1.1" } } diff --git a/packages/runtime-test/package.json b/packages/runtime-test/package.json index df68e5e00fb..db7e76365e1 100644 --- a/packages/runtime-test/package.json +++ b/packages/runtime-test/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-test", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "@vue/runtime-test", "private": true, "main": "index.js", @@ -25,7 +25,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-test#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.1", - "@vue/runtime-core": "3.3.0-beta.1" + "@vue/shared": "3.3.0-beta.2", + "@vue/runtime-core": "3.3.0-beta.2" } } diff --git a/packages/server-renderer/package.json b/packages/server-renderer/package.json index d3175bf2239..3939016180b 100644 --- a/packages/server-renderer/package.json +++ b/packages/server-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/server-renderer", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "@vue/server-renderer", "main": "index.js", "module": "dist/server-renderer.esm-bundler.js", @@ -32,10 +32,10 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/server-renderer#readme", "peerDependencies": { - "vue": "3.3.0-beta.1" + "vue": "3.3.0-beta.2" }, "dependencies": { - "@vue/shared": "3.3.0-beta.1", - "@vue/compiler-ssr": "3.3.0-beta.1" + "@vue/shared": "3.3.0-beta.2", + "@vue/compiler-ssr": "3.3.0-beta.2" } } diff --git a/packages/sfc-playground/package.json b/packages/sfc-playground/package.json index 1759fd823d8..c9e9bed1dab 100644 --- a/packages/sfc-playground/package.json +++ b/packages/sfc-playground/package.json @@ -1,6 +1,6 @@ { "name": "@vue/sfc-playground", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "private": true, "scripts": { "dev": "vite", diff --git a/packages/shared/package.json b/packages/shared/package.json index 02d9c9fd859..98a08262161 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vue/shared", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "internal utils shared across @vue packages", "main": "index.js", "module": "dist/shared.esm-bundler.js", diff --git a/packages/size-check/package.json b/packages/size-check/package.json index 61010cf906c..3dd527cb48a 100644 --- a/packages/size-check/package.json +++ b/packages/size-check/package.json @@ -1,6 +1,6 @@ { "name": "@vue/size-check", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "private": true, "scripts": { "build": "vite build" diff --git a/packages/template-explorer/package.json b/packages/template-explorer/package.json index a1a821bfeeb..42657e98dae 100644 --- a/packages/template-explorer/package.json +++ b/packages/template-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/template-explorer", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "private": true, "buildOptions": { "formats": [ diff --git a/packages/vue-compat/package.json b/packages/vue-compat/package.json index b1dd4879849..fd5424e0c89 100644 --- a/packages/vue-compat/package.json +++ b/packages/vue-compat/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compat", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "Vue 3 compatibility build for Vue 2", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -43,6 +43,6 @@ "source-map-js": "^1.0.2" }, "peerDependencies": { - "vue": "3.3.0-beta.1" + "vue": "3.3.0-beta.2" } } diff --git a/packages/vue/package.json b/packages/vue/package.json index 2a6c4538126..eb566006483 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "3.3.0-beta.1", + "version": "3.3.0-beta.2", "description": "The progressive JavaScript framework for building modern web UI.", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -81,10 +81,10 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/vue#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.1", - "@vue/compiler-dom": "3.3.0-beta.1", - "@vue/runtime-dom": "3.3.0-beta.1", - "@vue/compiler-sfc": "3.3.0-beta.1", - "@vue/server-renderer": "3.3.0-beta.1" + "@vue/shared": "3.3.0-beta.2", + "@vue/compiler-dom": "3.3.0-beta.2", + "@vue/runtime-dom": "3.3.0-beta.2", + "@vue/compiler-sfc": "3.3.0-beta.2", + "@vue/server-renderer": "3.3.0-beta.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8320181887e..517eceae939 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,7 +100,7 @@ importers: specifiers: '@babel/parser': ^7.21.3 '@babel/types': ^7.21.3 - '@vue/shared': 3.3.0-beta.1 + '@vue/shared': 3.3.0-beta.2 estree-walker: ^2.0.2 source-map-js: ^1.0.2 dependencies: @@ -113,8 +113,8 @@ importers: packages/compiler-dom: specifiers: - '@vue/compiler-core': 3.3.0-beta.1 - '@vue/shared': 3.3.0-beta.1 + '@vue/compiler-core': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.2 dependencies: '@vue/compiler-core': link:../compiler-core '@vue/shared': link:../shared @@ -125,12 +125,12 @@ importers: '@babel/types': ^7.21.3 '@types/estree': ^0.0.48 '@types/lru-cache': ^5.1.0 - '@vue/compiler-core': 3.3.0-beta.1 - '@vue/compiler-dom': 3.3.0-beta.1 - '@vue/compiler-ssr': 3.3.0-beta.1 + '@vue/compiler-core': 3.3.0-beta.2 + '@vue/compiler-dom': 3.3.0-beta.2 + '@vue/compiler-ssr': 3.3.0-beta.2 '@vue/consolidate': ^0.17.3 - '@vue/reactivity-transform': 3.3.0-beta.1 - '@vue/shared': 3.3.0-beta.1 + '@vue/reactivity-transform': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.2 estree-walker: ^2.0.2 hash-sum: ^2.0.0 lru-cache: ^5.1.1 @@ -170,8 +170,8 @@ importers: packages/compiler-ssr: specifiers: - '@vue/compiler-dom': 3.3.0-beta.1 - '@vue/shared': 3.3.0-beta.1 + '@vue/compiler-dom': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.2 dependencies: '@vue/compiler-dom': link:../compiler-dom '@vue/shared': link:../shared @@ -184,7 +184,7 @@ importers: packages/reactivity: specifiers: - '@vue/shared': 3.3.0-beta.1 + '@vue/shared': 3.3.0-beta.2 dependencies: '@vue/shared': link:../shared @@ -193,8 +193,8 @@ importers: '@babel/core': ^7.21.3 '@babel/parser': ^7.20.15 '@babel/types': ^7.21.3 - '@vue/compiler-core': 3.3.0-beta.1 - '@vue/shared': 3.3.0-beta.1 + '@vue/compiler-core': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.2 estree-walker: ^2.0.2 magic-string: ^0.30.0 dependencies: @@ -209,16 +209,16 @@ importers: packages/runtime-core: specifiers: - '@vue/reactivity': 3.3.0-beta.1 - '@vue/shared': 3.3.0-beta.1 + '@vue/reactivity': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.2 dependencies: '@vue/reactivity': link:../reactivity '@vue/shared': link:../shared packages/runtime-dom: specifiers: - '@vue/runtime-core': 3.3.0-beta.1 - '@vue/shared': 3.3.0-beta.1 + '@vue/runtime-core': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.2 csstype: ^3.1.1 dependencies: '@vue/runtime-core': link:../runtime-core @@ -227,16 +227,16 @@ importers: packages/runtime-test: specifiers: - '@vue/runtime-core': 3.3.0-beta.1 - '@vue/shared': 3.3.0-beta.1 + '@vue/runtime-core': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.2 dependencies: '@vue/runtime-core': link:../runtime-core '@vue/shared': link:../shared packages/server-renderer: specifiers: - '@vue/compiler-ssr': 3.3.0-beta.1 - '@vue/shared': 3.3.0-beta.1 + '@vue/compiler-ssr': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.2 dependencies: '@vue/compiler-ssr': link:../compiler-ssr '@vue/shared': link:../shared @@ -277,11 +277,11 @@ importers: packages/vue: specifiers: - '@vue/compiler-dom': 3.3.0-beta.1 - '@vue/compiler-sfc': 3.3.0-beta.1 - '@vue/runtime-dom': 3.3.0-beta.1 - '@vue/server-renderer': 3.3.0-beta.1 - '@vue/shared': 3.3.0-beta.1 + '@vue/compiler-dom': 3.3.0-beta.2 + '@vue/compiler-sfc': 3.3.0-beta.2 + '@vue/runtime-dom': 3.3.0-beta.2 + '@vue/server-renderer': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.2 dependencies: '@vue/compiler-dom': link:../compiler-dom '@vue/compiler-sfc': link:../compiler-sfc From b434d12bf6cbd49a7c99b1646d9517d8393ea49f Mon Sep 17 00:00:00 2001 From: Evan You Date: Thu, 27 Apr 2023 16:55:37 +0800 Subject: [PATCH 0005/1346] fix(compiler-core): handle slot argument parsing edge case ref https://github.com/vuejs/language-tools/issues/2710 --- .../compiler-core/__tests__/parse.spec.ts | 31 ++++++++++++++++++- packages/compiler-core/src/parse.ts | 5 ++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/packages/compiler-core/__tests__/parse.spec.ts b/packages/compiler-core/__tests__/parse.spec.ts index 191be158fd7..7a32f21a00a 100644 --- a/packages/compiler-core/__tests__/parse.spec.ts +++ b/packages/compiler-core/__tests__/parse.spec.ts @@ -11,7 +11,8 @@ import { Position, TextNode, InterpolationNode, - ConstantTypes + ConstantTypes, + DirectiveNode } from '../src/ast' describe('compiler: parse', () => { @@ -1164,6 +1165,34 @@ describe('compiler: parse', () => { }) }) + // #3494 + test('directive argument edge case', () => { + const ast = baseParse('
') + const directive = (ast.children[0] as ElementNode) + .props[0] as DirectiveNode + expect(directive.arg).toMatchObject({ + loc: { + start: { offset: 12, line: 1, column: 13 }, + end: { offset: 16, line: 1, column: 17 }, + source: 'slot' + } + }) + }) + + // https://github.com/vuejs/language-tools/issues/2710 + test('directive argument edge case (2)', () => { + const ast = baseParse('
') + const directive = (ast.children[0] as ElementNode) + .props[0] as DirectiveNode + expect(directive.arg).toMatchObject({ + loc: { + start: { offset: 6, line: 1, column: 7 }, + end: { offset: 15, line: 1, column: 16 }, + source: 'item.item' + } + }) + }) + test('directive with dynamic argument', () => { const ast = baseParse('
') const directive = (ast.children[0] as ElementNode).props[0] diff --git a/packages/compiler-core/src/parse.ts b/packages/compiler-core/src/parse.ts index 73a1953348e..b72ad028b4b 100644 --- a/packages/compiler-core/src/parse.ts +++ b/packages/compiler-core/src/parse.ts @@ -817,7 +817,10 @@ function parseAttribute( if (match[2]) { const isSlot = dirName === 'slot' - const startOffset = name.lastIndexOf(match[2]) + const startOffset = name.lastIndexOf( + match[2], + name.length - (match[3]?.length || 0) + ) const loc = getSelection( context, getNewPosition(context, start, startOffset), From be389221d8f860c26748f0b0768dc6a0a4e71b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Mon, 1 May 2023 11:04:59 +0800 Subject: [PATCH 0006/1346] chore: remove deprecated package (#8196) see https://github.com/remorses/esbuild-plugins/pull/29#issuecomment-1497077035 --- package.json | 2 +- pnpm-lock.yaml | 68 +++++++++++++++----------------------------------- scripts/dev.js | 4 +-- 3 files changed, 23 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index da0090026a0..c3f07b0beda 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,6 @@ "devDependencies": { "@babel/parser": "^7.21.3", "@babel/types": "^7.21.3", - "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "@rollup/plugin-alias": "^4.0.3", "@rollup/plugin-commonjs": "^24.0.1", "@rollup/plugin-json": "^6.0.0", @@ -73,6 +72,7 @@ "conventional-changelog-cli": "^2.0.31", "enquirer": "^2.3.2", "esbuild": "^0.17.4", + "esbuild-plugin-polyfill-node": "^0.2.0", "eslint": "^8.33.0", "eslint-plugin-jest": "^27.2.1", "estree-walker": "^2.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 517eceae939..9c8ef1f4b49 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,6 @@ importers: specifiers: '@babel/parser': ^7.21.3 '@babel/types': ^7.21.3 - '@esbuild-plugins/node-modules-polyfill': ^0.2.2 '@rollup/plugin-alias': ^4.0.3 '@rollup/plugin-commonjs': ^24.0.1 '@rollup/plugin-json': ^6.0.0 @@ -22,6 +21,7 @@ importers: conventional-changelog-cli: ^2.0.31 enquirer: ^2.3.2 esbuild: ^0.17.4 + esbuild-plugin-polyfill-node: ^0.2.0 eslint: ^8.33.0 eslint-plugin-jest: ^27.2.1 estree-walker: ^2.0.2 @@ -52,7 +52,6 @@ importers: devDependencies: '@babel/parser': 7.21.3 '@babel/types': 7.21.3 - '@esbuild-plugins/node-modules-polyfill': 0.2.2_esbuild@0.17.5 '@rollup/plugin-alias': 4.0.3_rollup@3.20.2 '@rollup/plugin-commonjs': 24.0.1_rollup@3.20.2 '@rollup/plugin-json': 6.0.0_rollup@3.20.2 @@ -68,6 +67,7 @@ importers: conventional-changelog-cli: 2.2.2 enquirer: 2.3.6 esbuild: 0.17.5 + esbuild-plugin-polyfill-node: 0.2.0_esbuild@0.17.5 eslint: 8.33.0 eslint-plugin-jest: 27.2.1_qesohl5arz7pvqyycxtsqomlr4 estree-walker: 2.0.2 @@ -500,16 +500,6 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - /@esbuild-plugins/node-modules-polyfill/0.2.2_esbuild@0.17.5: - resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} - peerDependencies: - esbuild: '*' - dependencies: - esbuild: 0.17.5 - escape-string-regexp: 4.0.0 - rollup-plugin-node-polyfills: 0.2.1 - dev: true - /@esbuild/android-arm/0.17.5: resolution: {integrity: sha512-crmPUzgCmF+qZXfl1YkiFoUta2XAfixR1tEnr/gXIixE+WL8Z0BGqfydP5oox0EUOgQMMRgtATtakyAcClQVqQ==} engines: {node: '>=12'} @@ -799,6 +789,10 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /@jspm/core/2.0.1: + resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} + dev: true + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2238,6 +2232,16 @@ packages: is-symbol: 1.0.4 dev: true + /esbuild-plugin-polyfill-node/0.2.0_esbuild@0.17.5: + resolution: {integrity: sha512-rpCoK4mag0nehBtFlFMLSuL9bNBLEh8h3wZ/FsrJEDompA/AwOqInx6Xow01+CXAcvZYhkoJ0SIZiS37qkecDA==} + peerDependencies: + esbuild: '*' + dependencies: + '@jspm/core': 2.0.1 + esbuild: 0.17.5 + import-meta-resolve: 2.2.2 + dev: true + /esbuild/0.17.5: resolution: {integrity: sha512-Bu6WLCc9NMsNoMJUjGl3yBzTjVLXdysMltxQWiLAypP+/vQrf+3L1Xe8fCXzxaECus2cEJ9M7pk4yKatEwQMqQ==} engines: {node: '>=12'} @@ -2439,10 +2443,6 @@ packages: engines: {node: '>=4.0'} dev: true - /estree-walker/0.6.1: - resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} - dev: true - /estree-walker/2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -2998,6 +2998,10 @@ packages: resolve-from: 4.0.0 dev: true + /import-meta-resolve/2.2.2: + resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} + dev: true + /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -3614,12 +3618,6 @@ packages: yallist: 4.0.0 dev: true - /magic-string/0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - dependencies: - sourcemap-codec: 1.4.8 - dev: true - /magic-string/0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} @@ -4672,21 +4670,6 @@ packages: - supports-color dev: true - /rollup-plugin-inject/3.0.2: - resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. - dependencies: - estree-walker: 0.6.1 - magic-string: 0.25.9 - rollup-pluginutils: 2.8.2 - dev: true - - /rollup-plugin-node-polyfills/0.2.1: - resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} - dependencies: - rollup-plugin-inject: 3.0.2 - dev: true - /rollup-plugin-polyfill-node/0.12.0_rollup@3.20.2: resolution: {integrity: sha512-PWEVfDxLEKt8JX1nZ0NkUAgXpkZMTb85rO/Ru9AQ69wYW8VUCfDgP4CGRXXWYni5wDF0vIeR1UoF3Jmw/Lt3Ug==} peerDependencies: @@ -4696,12 +4679,6 @@ packages: rollup: 3.20.2 dev: true - /rollup-pluginutils/2.8.2: - resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - dependencies: - estree-walker: 0.6.1 - dev: true - /rollup/3.20.2: resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -4918,11 +4895,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /sourcemap-codec/1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: true - /spdx-correct/3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: diff --git a/scripts/dev.js b/scripts/dev.js index d3dc9311717..8342f5237b7 100644 --- a/scripts/dev.js +++ b/scripts/dev.js @@ -9,7 +9,7 @@ import { resolve, relative, dirname } from 'node:path' import { fileURLToPath } from 'node:url' import { createRequire } from 'node:module' import minimist from 'minimist' -import { NodeModulesPolyfillPlugin as nodePolyfills } from '@esbuild-plugins/node-modules-polyfill' +import { polyfillNode } from 'esbuild-plugin-polyfill-node' const require = createRequire(import.meta.url) const __dirname = dirname(fileURLToPath(import.meta.url)) @@ -92,7 +92,7 @@ const plugins = [ ] if (format === 'cjs' || pkg.buildOptions?.enableNonBrowserBranches) { - plugins.push(nodePolyfills()) + plugins.push(polyfillNode()) } esbuild From de87e6e405dfaf9a917d7eb423fcee35237c2020 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 1 May 2023 11:26:47 +0800 Subject: [PATCH 0007/1346] fix(types): fix provide type checking for ref value fix #8201 --- packages/dts-test/inject.test-d.ts | 15 ++++++++++++++- packages/runtime-core/src/apiInject.ts | 5 ++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/dts-test/inject.test-d.ts b/packages/dts-test/inject.test-d.ts index c34485a61dc..f0522f25451 100644 --- a/packages/dts-test/inject.test-d.ts +++ b/packages/dts-test/inject.test-d.ts @@ -1,6 +1,9 @@ -import { provide, inject, InjectionKey } from 'vue' +import { provide, inject, ref, Ref, InjectionKey } from 'vue' import { expectType } from './utils' +provide('foo', 123) +provide(123, 123) + const key: InjectionKey = Symbol() provide(key, 1) @@ -14,3 +17,13 @@ expectType(inject(key, () => 1, true /* treatDefaultAsFactory */)) expectType<() => number>(inject('foo', () => 1)) expectType<() => number>(inject('foo', () => 1, false)) expectType(inject('foo', () => 1, true)) + +// #8201 +type Cube = { + size: number +} + +const injectionKeyRef = Symbol('key') as InjectionKey> + +// @ts-expect-error +provide(injectionKeyRef, ref({})) diff --git a/packages/runtime-core/src/apiInject.ts b/packages/runtime-core/src/apiInject.ts index 4559c1b702f..9b765914937 100644 --- a/packages/runtime-core/src/apiInject.ts +++ b/packages/runtime-core/src/apiInject.ts @@ -6,7 +6,10 @@ import { warn } from './warning' export interface InjectionKey extends Symbol {} -export function provide(key: InjectionKey | string | number, value: T) { +export function provide>( + key: T | string | number, + value: T extends InjectionKey ? V : any +) { if (!currentInstance) { if (__DEV__) { warn(`provide() can only be used inside setup().`) From 45765488d498d94f8760c9e82f1177070057b17c Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 1 May 2023 11:30:58 +0800 Subject: [PATCH 0008/1346] feat(compiler-sfc): expose parseCache So that users can adjust cache's max size. close #8202 --- packages/compiler-sfc/src/cache.ts | 2 +- packages/compiler-sfc/src/index.ts | 2 +- packages/compiler-sfc/src/parse.ts | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/compiler-sfc/src/cache.ts b/packages/compiler-sfc/src/cache.ts index eb6bad0f86d..36d240810c7 100644 --- a/packages/compiler-sfc/src/cache.ts +++ b/packages/compiler-sfc/src/cache.ts @@ -1,6 +1,6 @@ import LRU from 'lru-cache' -export function createCache(size = 500) { +export function createCache(size = 500): Map & { max?: number } { if (__GLOBAL__ || __ESM_BROWSER__) { return new Map() } diff --git a/packages/compiler-sfc/src/index.ts b/packages/compiler-sfc/src/index.ts index 78a89c7b498..3821c255d52 100644 --- a/packages/compiler-sfc/src/index.ts +++ b/packages/compiler-sfc/src/index.ts @@ -1,7 +1,7 @@ export const version = __VERSION__ // API -export { parse } from './parse' +export { parse, parseCache } from './parse' export { compileTemplate } from './compileTemplate' export { compileStyle, compileStyleAsync } from './compileStyle' export { compileScript } from './compileScript' diff --git a/packages/compiler-sfc/src/parse.ts b/packages/compiler-sfc/src/parse.ts index 29c91cc1977..da8cf6d8669 100644 --- a/packages/compiler-sfc/src/parse.ts +++ b/packages/compiler-sfc/src/parse.ts @@ -93,7 +93,7 @@ export interface SFCParseResult { errors: (CompilerError | SyntaxError)[] } -const sourceToSFC = createCache() +export const parseCache = createCache() export function parse( source: string, @@ -108,7 +108,7 @@ export function parse( ): SFCParseResult { const sourceKey = source + sourceMap + filename + sourceRoot + pad + compiler.parse - const cache = sourceToSFC.get(sourceKey) + const cache = parseCache.get(sourceKey) if (cache) { return cache } @@ -284,7 +284,7 @@ export function parse( descriptor, errors } - sourceToSFC.set(sourceKey, result) + parseCache.set(sourceKey, result) return result } From c117d9c257820481b85304db26ce5c77af5d050c Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 1 May 2023 12:21:10 +0800 Subject: [PATCH 0009/1346] fix(hmr): keep slots proxy mutable for hmr close #8188 --- packages/runtime-core/src/component.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 087e901354b..684f028fd5b 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -971,14 +971,6 @@ function getSlotsProxy(instance: ComponentInternalInstance): Slots { get(target, key: string) { track(instance, TrackOpTypes.GET, '$slots') return target[key] - }, - set() { - warn(`setupContext.slots is readonly.`) - return false - }, - deleteProperty() { - warn(`setupContext.slots is readonly.`) - return false } })) ) From 5d4c3c60a87fcf224e2ba4749889ce176e7aa7e5 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 1 May 2023 12:28:29 +0800 Subject: [PATCH 0010/1346] release: v3.3.0-beta.3 --- CHANGELOG.md | 16 +++++++ package.json | 2 +- packages/compiler-core/package.json | 4 +- packages/compiler-dom/package.json | 6 +-- packages/compiler-sfc/package.json | 12 ++--- packages/compiler-ssr/package.json | 6 +-- packages/dts-test/package.json | 2 +- packages/reactivity-transform/package.json | 6 +-- packages/reactivity/package.json | 4 +- packages/runtime-core/package.json | 6 +-- packages/runtime-dom/package.json | 6 +-- packages/runtime-test/package.json | 6 +-- packages/server-renderer/package.json | 8 ++-- packages/sfc-playground/package.json | 2 +- packages/shared/package.json | 2 +- packages/size-check/package.json | 2 +- packages/template-explorer/package.json | 2 +- packages/vue-compat/package.json | 4 +- packages/vue/package.json | 12 ++--- pnpm-lock.yaml | 52 +++++++++++----------- 20 files changed, 88 insertions(+), 72 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa7cef8c76c..6736d5a7880 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +# [3.3.0-beta.3](https://github.com/vuejs/core/compare/v3.3.0-beta.2...v3.3.0-beta.3) (2023-05-01) + + +### Bug Fixes + +* **compiler-core:** handle slot argument parsing edge case ([b434d12](https://github.com/vuejs/core/commit/b434d12bf6cbd49a7c99b1646d9517d8393ea49f)) +* **hmr:** keep slots proxy mutable for hmr ([c117d9c](https://github.com/vuejs/core/commit/c117d9c257820481b85304db26ce5c77af5d050c)), closes [#8188](https://github.com/vuejs/core/issues/8188) +* **types:** fix provide type checking for ref value ([de87e6e](https://github.com/vuejs/core/commit/de87e6e405dfaf9a917d7eb423fcee35237c2020)), closes [#8201](https://github.com/vuejs/core/issues/8201) + + +### Features + +* **compiler-sfc:** expose parseCache ([4576548](https://github.com/vuejs/core/commit/45765488d498d94f8760c9e82f1177070057b17c)), closes [#8202](https://github.com/vuejs/core/issues/8202) + + + # [3.3.0-beta.2](https://github.com/vuejs/core/compare/v3.3.0-beta.1...v3.3.0-beta.2) (2023-04-25) diff --git a/package.json b/package.json index c3f07b0beda..7dbebf29dc9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "packageManager": "pnpm@7.26.0", "type": "module", "scripts": { diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index 24850c819bd..63da1532918 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-core", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "@vue/compiler-core", "main": "index.js", "module": "dist/compiler-core.esm-bundler.js", @@ -33,7 +33,7 @@ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-core#readme", "dependencies": { "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.0-beta.2", + "@vue/shared": "3.3.0-beta.3", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" }, diff --git a/packages/compiler-dom/package.json b/packages/compiler-dom/package.json index 8665081dba0..686a38b8219 100644 --- a/packages/compiler-dom/package.json +++ b/packages/compiler-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-dom", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "@vue/compiler-dom", "main": "index.js", "module": "dist/compiler-dom.esm-bundler.js", @@ -37,7 +37,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-dom#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.2", - "@vue/compiler-core": "3.3.0-beta.2" + "@vue/shared": "3.3.0-beta.3", + "@vue/compiler-core": "3.3.0-beta.3" } } diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index 98b6c12df42..25eed8b4fcd 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-sfc", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "@vue/compiler-sfc", "main": "dist/compiler-sfc.cjs.js", "module": "dist/compiler-sfc.esm-browser.js", @@ -33,11 +33,11 @@ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-sfc#readme", "dependencies": { "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.0-beta.2", - "@vue/compiler-dom": "3.3.0-beta.2", - "@vue/compiler-ssr": "3.3.0-beta.2", - "@vue/reactivity-transform": "3.3.0-beta.2", - "@vue/shared": "3.3.0-beta.2", + "@vue/compiler-core": "3.3.0-beta.3", + "@vue/compiler-dom": "3.3.0-beta.3", + "@vue/compiler-ssr": "3.3.0-beta.3", + "@vue/reactivity-transform": "3.3.0-beta.3", + "@vue/shared": "3.3.0-beta.3", "estree-walker": "^2.0.2", "magic-string": "^0.30.0", "postcss": "^8.1.10", diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json index d5da981d380..dbb498dcc1b 100644 --- a/packages/compiler-ssr/package.json +++ b/packages/compiler-ssr/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-ssr", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "@vue/compiler-ssr", "main": "dist/compiler-ssr.cjs.js", "types": "dist/compiler-ssr.d.ts", @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-ssr#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.2", - "@vue/compiler-dom": "3.3.0-beta.2" + "@vue/shared": "3.3.0-beta.3", + "@vue/compiler-dom": "3.3.0-beta.3" } } diff --git a/packages/dts-test/package.json b/packages/dts-test/package.json index e230f0d9db8..3fe186abf83 100644 --- a/packages/dts-test/package.json +++ b/packages/dts-test/package.json @@ -4,5 +4,5 @@ "dependencies": { "vue": "workspace:*" }, - "version": "3.3.0-beta.2" + "version": "3.3.0-beta.3" } diff --git a/packages/reactivity-transform/package.json b/packages/reactivity-transform/package.json index 998e8eeafac..a986d30e7a2 100644 --- a/packages/reactivity-transform/package.json +++ b/packages/reactivity-transform/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity-transform", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "@vue/reactivity-transform", "main": "dist/reactivity-transform.cjs.js", "files": [ @@ -29,8 +29,8 @@ "homepage": "https://github.com/vuejs/core/tree/dev/packages/reactivity-transform#readme", "dependencies": { "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.0-beta.2", - "@vue/shared": "3.3.0-beta.2", + "@vue/compiler-core": "3.3.0-beta.3", + "@vue/shared": "3.3.0-beta.3", "estree-walker": "^2.0.2", "magic-string": "^0.30.0" }, diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json index 390cd6e978c..eb20454e7b2 100644 --- a/packages/reactivity/package.json +++ b/packages/reactivity/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "@vue/reactivity", "main": "index.js", "module": "dist/reactivity.esm-bundler.js", @@ -36,6 +36,6 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/reactivity#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.2" + "@vue/shared": "3.3.0-beta.3" } } diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index 3478b555cd3..a58e676dcb6 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-core", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "@vue/runtime-core", "main": "index.js", "module": "dist/runtime-core.esm-bundler.js", @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-core#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.2", - "@vue/reactivity": "3.3.0-beta.2" + "@vue/shared": "3.3.0-beta.3", + "@vue/reactivity": "3.3.0-beta.3" } } diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json index a81e9319897..3b8ad6ace2f 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-dom", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "@vue/runtime-dom", "main": "index.js", "module": "dist/runtime-dom.esm-bundler.js", @@ -35,8 +35,8 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-dom#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.2", - "@vue/runtime-core": "3.3.0-beta.2", + "@vue/shared": "3.3.0-beta.3", + "@vue/runtime-core": "3.3.0-beta.3", "csstype": "^3.1.1" } } diff --git a/packages/runtime-test/package.json b/packages/runtime-test/package.json index db7e76365e1..1f980ca5a6e 100644 --- a/packages/runtime-test/package.json +++ b/packages/runtime-test/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-test", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "@vue/runtime-test", "private": true, "main": "index.js", @@ -25,7 +25,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-test#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.2", - "@vue/runtime-core": "3.3.0-beta.2" + "@vue/shared": "3.3.0-beta.3", + "@vue/runtime-core": "3.3.0-beta.3" } } diff --git a/packages/server-renderer/package.json b/packages/server-renderer/package.json index 3939016180b..feada4e2489 100644 --- a/packages/server-renderer/package.json +++ b/packages/server-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/server-renderer", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "@vue/server-renderer", "main": "index.js", "module": "dist/server-renderer.esm-bundler.js", @@ -32,10 +32,10 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/server-renderer#readme", "peerDependencies": { - "vue": "3.3.0-beta.2" + "vue": "3.3.0-beta.3" }, "dependencies": { - "@vue/shared": "3.3.0-beta.2", - "@vue/compiler-ssr": "3.3.0-beta.2" + "@vue/shared": "3.3.0-beta.3", + "@vue/compiler-ssr": "3.3.0-beta.3" } } diff --git a/packages/sfc-playground/package.json b/packages/sfc-playground/package.json index c9e9bed1dab..202699a240c 100644 --- a/packages/sfc-playground/package.json +++ b/packages/sfc-playground/package.json @@ -1,6 +1,6 @@ { "name": "@vue/sfc-playground", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "private": true, "scripts": { "dev": "vite", diff --git a/packages/shared/package.json b/packages/shared/package.json index 98a08262161..02fa119d3e2 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vue/shared", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "internal utils shared across @vue packages", "main": "index.js", "module": "dist/shared.esm-bundler.js", diff --git a/packages/size-check/package.json b/packages/size-check/package.json index 3dd527cb48a..5edb6cc7f49 100644 --- a/packages/size-check/package.json +++ b/packages/size-check/package.json @@ -1,6 +1,6 @@ { "name": "@vue/size-check", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "private": true, "scripts": { "build": "vite build" diff --git a/packages/template-explorer/package.json b/packages/template-explorer/package.json index 42657e98dae..1691b011153 100644 --- a/packages/template-explorer/package.json +++ b/packages/template-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/template-explorer", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "private": true, "buildOptions": { "formats": [ diff --git a/packages/vue-compat/package.json b/packages/vue-compat/package.json index fd5424e0c89..ecc315fb250 100644 --- a/packages/vue-compat/package.json +++ b/packages/vue-compat/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compat", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "Vue 3 compatibility build for Vue 2", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -43,6 +43,6 @@ "source-map-js": "^1.0.2" }, "peerDependencies": { - "vue": "3.3.0-beta.2" + "vue": "3.3.0-beta.3" } } diff --git a/packages/vue/package.json b/packages/vue/package.json index eb566006483..b6d3878d82a 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "3.3.0-beta.2", + "version": "3.3.0-beta.3", "description": "The progressive JavaScript framework for building modern web UI.", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -81,10 +81,10 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/vue#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.2", - "@vue/compiler-dom": "3.3.0-beta.2", - "@vue/runtime-dom": "3.3.0-beta.2", - "@vue/compiler-sfc": "3.3.0-beta.2", - "@vue/server-renderer": "3.3.0-beta.2" + "@vue/shared": "3.3.0-beta.3", + "@vue/compiler-dom": "3.3.0-beta.3", + "@vue/runtime-dom": "3.3.0-beta.3", + "@vue/compiler-sfc": "3.3.0-beta.3", + "@vue/server-renderer": "3.3.0-beta.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9c8ef1f4b49..1a39c6ba9f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,7 +100,7 @@ importers: specifiers: '@babel/parser': ^7.21.3 '@babel/types': ^7.21.3 - '@vue/shared': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.3 estree-walker: ^2.0.2 source-map-js: ^1.0.2 dependencies: @@ -113,8 +113,8 @@ importers: packages/compiler-dom: specifiers: - '@vue/compiler-core': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@vue/compiler-core': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.3 dependencies: '@vue/compiler-core': link:../compiler-core '@vue/shared': link:../shared @@ -125,12 +125,12 @@ importers: '@babel/types': ^7.21.3 '@types/estree': ^0.0.48 '@types/lru-cache': ^5.1.0 - '@vue/compiler-core': 3.3.0-beta.2 - '@vue/compiler-dom': 3.3.0-beta.2 - '@vue/compiler-ssr': 3.3.0-beta.2 + '@vue/compiler-core': 3.3.0-beta.3 + '@vue/compiler-dom': 3.3.0-beta.3 + '@vue/compiler-ssr': 3.3.0-beta.3 '@vue/consolidate': ^0.17.3 - '@vue/reactivity-transform': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@vue/reactivity-transform': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.3 estree-walker: ^2.0.2 hash-sum: ^2.0.0 lru-cache: ^5.1.1 @@ -170,8 +170,8 @@ importers: packages/compiler-ssr: specifiers: - '@vue/compiler-dom': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@vue/compiler-dom': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.3 dependencies: '@vue/compiler-dom': link:../compiler-dom '@vue/shared': link:../shared @@ -184,7 +184,7 @@ importers: packages/reactivity: specifiers: - '@vue/shared': 3.3.0-beta.2 + '@vue/shared': 3.3.0-beta.3 dependencies: '@vue/shared': link:../shared @@ -193,8 +193,8 @@ importers: '@babel/core': ^7.21.3 '@babel/parser': ^7.20.15 '@babel/types': ^7.21.3 - '@vue/compiler-core': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@vue/compiler-core': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.3 estree-walker: ^2.0.2 magic-string: ^0.30.0 dependencies: @@ -209,16 +209,16 @@ importers: packages/runtime-core: specifiers: - '@vue/reactivity': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@vue/reactivity': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.3 dependencies: '@vue/reactivity': link:../reactivity '@vue/shared': link:../shared packages/runtime-dom: specifiers: - '@vue/runtime-core': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@vue/runtime-core': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.3 csstype: ^3.1.1 dependencies: '@vue/runtime-core': link:../runtime-core @@ -227,16 +227,16 @@ importers: packages/runtime-test: specifiers: - '@vue/runtime-core': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@vue/runtime-core': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.3 dependencies: '@vue/runtime-core': link:../runtime-core '@vue/shared': link:../shared packages/server-renderer: specifiers: - '@vue/compiler-ssr': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@vue/compiler-ssr': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.3 dependencies: '@vue/compiler-ssr': link:../compiler-ssr '@vue/shared': link:../shared @@ -277,11 +277,11 @@ importers: packages/vue: specifiers: - '@vue/compiler-dom': 3.3.0-beta.2 - '@vue/compiler-sfc': 3.3.0-beta.2 - '@vue/runtime-dom': 3.3.0-beta.2 - '@vue/server-renderer': 3.3.0-beta.2 - '@vue/shared': 3.3.0-beta.2 + '@vue/compiler-dom': 3.3.0-beta.3 + '@vue/compiler-sfc': 3.3.0-beta.3 + '@vue/runtime-dom': 3.3.0-beta.3 + '@vue/server-renderer': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.3 dependencies: '@vue/compiler-dom': link:../compiler-dom '@vue/compiler-sfc': link:../compiler-sfc From 4e2607a3d316b6d8784c1af5f6e96cc495b74416 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 1 May 2023 14:01:38 +0800 Subject: [PATCH 0011/1346] chore: move files into correct test block --- .../__tests__/compileScript/resolveType.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts index 12a414cc1f2..551e10237dc 100644 --- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts @@ -455,11 +455,11 @@ describe('resolveType', () => { }) describe('external type imports', () => { - const files = { - '/foo.ts': 'export type P = { foo: number }', - '/bar.d.ts': 'type X = { bar: string }; export { X as Y }' - } test('relative ts', () => { + const files = { + '/foo.ts': 'export type P = { foo: number }', + '/bar.d.ts': 'type X = { bar: string }; export { X as Y }' + } const { props, deps } = resolve( ` import { P } from './foo' From 918ec8a5cbc825a3947cd35fe966671c245af087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20S=C3=A1nchez?= Date: Tue, 2 May 2023 04:21:19 +0200 Subject: [PATCH 0012/1346] feat(compiler-dom): treat inert as boolean attribute (#8209) close #8208 --- packages/shared/src/domAttrConfig.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/shared/src/domAttrConfig.ts b/packages/shared/src/domAttrConfig.ts index 54fc3035317..5f7f851b0df 100644 --- a/packages/shared/src/domAttrConfig.ts +++ b/packages/shared/src/domAttrConfig.ts @@ -20,7 +20,7 @@ export const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs) export const isBooleanAttr = /*#__PURE__*/ makeMap( specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` + - `loop,open,required,reversed,scoped,seamless,` + + `inert,loop,open,required,reversed,scoped,seamless,` + `checked,muted,multiple,selected` ) @@ -67,7 +67,7 @@ export const isKnownHtmlAttr = /*#__PURE__*/ makeMap( `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` + `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` + `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` + - `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` + + `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,` + `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` + `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` + `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` + From bff63c5498f5fa098689c18defe48ae08d47eadb Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 2 May 2023 11:06:24 +0800 Subject: [PATCH 0013/1346] feat(types): provide ExtractPublicPropTypes utility type ref #5272 close #8168 --- .../compiler-sfc/src/script/resolveType.ts | 3 +- packages/dts-test/extractProps.test-d.ts | 30 +++++++++++++++++ packages/dts-test/utils.d.ts | 2 ++ packages/runtime-core/src/componentProps.ts | 32 +++++++++++++++++-- packages/runtime-core/src/index.ts | 1 + 5 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 packages/dts-test/extractProps.test-d.ts diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index bf29ae089bd..2fa8d028c65 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -162,7 +162,8 @@ function innerResolveTypeElements( case 'TSTypeReference': { const typeName = getReferenceName(node) if ( - typeName === 'ExtractPropTypes' && + (typeName === 'ExtractPropTypes' || + typeName === 'ExtractPublicPropTypes') && node.typeParameters && scope.imports[typeName]?.source === 'vue' ) { diff --git a/packages/dts-test/extractProps.test-d.ts b/packages/dts-test/extractProps.test-d.ts new file mode 100644 index 00000000000..a40a15ef383 --- /dev/null +++ b/packages/dts-test/extractProps.test-d.ts @@ -0,0 +1,30 @@ +import { ExtractPropTypes, ExtractPublicPropTypes } from 'vue' +import { expectType, Prettify } from './utils' + +const propsOptions = { + foo: { + default: 1 + }, + bar: { + type: String, + required: true + }, + baz: Boolean, + qux: Array +} as const + +// internal facing props +declare const props: Prettify> + +expectType(props.foo) +expectType(props.bar) +expectType(props.baz) +expectType(props.qux) + +// external facing props +declare const publicProps: Prettify> + +expectType(publicProps.foo) +expectType(publicProps.bar) +expectType(publicProps.baz) +expectType(publicProps.qux) diff --git a/packages/dts-test/utils.d.ts b/packages/dts-test/utils.d.ts index 790098d962d..c478b30cb6f 100644 --- a/packages/dts-test/utils.d.ts +++ b/packages/dts-test/utils.d.ts @@ -17,3 +17,5 @@ export type IsUnion = ( : true export type IsAny = 0 extends 1 & T ? true : false + +export type Prettify = { [K in keyof T]: T[K] } & {} diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index 887ce4f39c6..4d402789555 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -128,14 +128,42 @@ type InferPropType = [T] extends [null] : V : T +/** + * Extract prop types from a runtime props options object. + * The extracted types are **internal** - i.e. the resolved props received by + * the component. + * - Boolean props are always present + * - Props with default values are always present + * + * To extract accepted props from the parent, use {@link ExtractPublicPropTypes}. + */ export type ExtractPropTypes = { - // use `keyof Pick>` instead of `RequiredKeys` to support IDE features + // use `keyof Pick>` instead of `RequiredKeys` to + // support IDE features [K in keyof Pick>]: InferPropType } & { - // use `keyof Pick>` instead of `OptionalKeys` to support IDE features + // use `keyof Pick>` instead of `OptionalKeys` to + // support IDE features [K in keyof Pick>]?: InferPropType } +type PublicRequiredKeys = { + [K in keyof T]: T[K] extends { required: true } ? K : never +}[keyof T] + +type PublicOptionalKeys = Exclude> + +/** + * Extract prop types from a runtime props options object. + * The extracted types are **public** - i.e. the expected props that can be + * passed to component. + */ +export type ExtractPublicPropTypes = { + [K in keyof Pick>]: InferPropType +} & { + [K in keyof Pick>]?: InferPropType +} + const enum BooleanFlags { shouldCast, shouldCastTrue diff --git a/packages/runtime-core/src/index.ts b/packages/runtime-core/src/index.ts index a115b0179c1..0d5fc39d5f6 100644 --- a/packages/runtime-core/src/index.ts +++ b/packages/runtime-core/src/index.ts @@ -254,6 +254,7 @@ export type { ComponentPropsOptions, ComponentObjectPropsOptions, ExtractPropTypes, + ExtractPublicPropTypes, ExtractDefaultPropTypes } from './componentProps' export type { From d40d4a33803d6740c4af395a80d1d339eb58d7d6 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 2 May 2023 16:23:02 +0800 Subject: [PATCH 0014/1346] chore: experimental warnings for reactive props destructure and defineModel --- packages/compiler-sfc/src/script/defineModel.ts | 9 +++++++++ .../compiler-sfc/src/script/definePropsDestructure.ts | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/packages/compiler-sfc/src/script/defineModel.ts b/packages/compiler-sfc/src/script/defineModel.ts index 0584196707a..2e7800aba48 100644 --- a/packages/compiler-sfc/src/script/defineModel.ts +++ b/packages/compiler-sfc/src/script/defineModel.ts @@ -9,6 +9,7 @@ import { unwrapTSNode } from './utils' import { BindingTypes } from '@vue/compiler-dom' +import { warnOnce } from '../warn' export const DEFINE_MODEL = 'defineModel' @@ -26,6 +27,14 @@ export function processDefineModel( if (!ctx.options.defineModel || !isCallOf(node, DEFINE_MODEL)) { return false } + + warnOnce( + `This project is using defineModel(), which is an experimental ` + + ` feature. It may receive breaking changes or be removed in the future, so ` + + `use at your own risk.\n` + + `To stay updated, follow the RFC at https://github.com/vuejs/rfcs/discussions/503.` + ) + ctx.hasDefineModelCall = true const type = diff --git a/packages/compiler-sfc/src/script/definePropsDestructure.ts b/packages/compiler-sfc/src/script/definePropsDestructure.ts index 9f693f8519d..f735b324eb6 100644 --- a/packages/compiler-sfc/src/script/definePropsDestructure.ts +++ b/packages/compiler-sfc/src/script/definePropsDestructure.ts @@ -21,6 +21,7 @@ import { genPropsAccessExp } from '@vue/shared' import { isCallOf, resolveObjectKey, unwrapTSNode } from './utils' import { ScriptCompileContext } from './context' import { DEFINE_PROPS } from './defineProps' +import { warnOnce } from '../warn' export function processPropsDestructure( ctx: ScriptCompileContext, @@ -30,6 +31,13 @@ export function processPropsDestructure( return } + warnOnce( + `This project is using reactive props destructure, which is an experimental ` + + ` feature. It may receive breaking changes or be removed in the future, so ` + + `use at your own risk.\n` + + `To stay updated, follow the RFC at https://github.com/vuejs/rfcs/discussions/502.` + ) + ctx.propsDestructureDecl = declId const registerBinding = ( From 038cd830d5b34b47d7e7e1c61f0973d27cd8b915 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 2 May 2023 21:35:28 +0800 Subject: [PATCH 0015/1346] fix(types): retain compatibility for provide() usage with explicit type parameter --- packages/dts-test/inject.test-d.ts | 13 +++++++++++++ packages/runtime-core/src/apiInject.ts | 6 +++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/dts-test/inject.test-d.ts b/packages/dts-test/inject.test-d.ts index f0522f25451..e611f900de5 100644 --- a/packages/dts-test/inject.test-d.ts +++ b/packages/dts-test/inject.test-d.ts @@ -1,6 +1,7 @@ import { provide, inject, ref, Ref, InjectionKey } from 'vue' import { expectType } from './utils' +// non-symbol keys provide('foo', 123) provide(123, 123) @@ -9,6 +10,8 @@ const key: InjectionKey = Symbol() provide(key, 1) // @ts-expect-error provide(key, 'foo') +// @ts-expect-error +provide(key, null) expectType(inject(key)) expectType(inject(key, 1)) @@ -27,3 +30,13 @@ const injectionKeyRef = Symbol('key') as InjectionKey> // @ts-expect-error provide(injectionKeyRef, ref({})) + +// naive-ui: explicit provide type parameter +provide('cube', { size: 123 }) +provide(123, { size: 123 }) +provide(injectionKeyRef, { size: 123 }) + +// @ts-expect-error +provide('cube', { size: 'foo' }) +// @ts-expect-error +provide(123, { size: 'foo' }) diff --git a/packages/runtime-core/src/apiInject.ts b/packages/runtime-core/src/apiInject.ts index 9b765914937..bbf925102d8 100644 --- a/packages/runtime-core/src/apiInject.ts +++ b/packages/runtime-core/src/apiInject.ts @@ -6,9 +6,9 @@ import { warn } from './warning' export interface InjectionKey extends Symbol {} -export function provide>( - key: T | string | number, - value: T extends InjectionKey ? V : any +export function provide | string | number>( + key: K, + value: K extends InjectionKey ? V : T ) { if (!currentInstance) { if (__DEV__) { From 1b1242f4d1349e361335b2815f41742d41283a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Fri, 5 May 2023 16:00:01 +0800 Subject: [PATCH 0016/1346] fix(runtime-core): handle template ref with number values (#8233) close #8230 --- packages/runtime-core/src/vnode.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/runtime-core/src/vnode.ts b/packages/runtime-core/src/vnode.ts index bed2b4f1eee..a69b34ed941 100644 --- a/packages/runtime-core/src/vnode.ts +++ b/packages/runtime-core/src/vnode.ts @@ -404,6 +404,9 @@ const normalizeRef = ({ ref_key, ref_for }: VNodeProps): VNodeNormalizedRefAtom | null => { + if (typeof ref === 'number') { + ref = '' + ref + } return ( ref != null ? isString(ref) || isRef(ref) || isFunction(ref) From 3cb4dc9e5538e1c2bde9fa691b001615a848c546 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Fri, 5 May 2023 17:12:51 +0800 Subject: [PATCH 0017/1346] feat(types): add slots types for built-in components (#6033) --- packages/runtime-core/src/components/BaseTransition.ts | 3 +++ packages/runtime-core/src/components/KeepAlive.ts | 3 +++ packages/runtime-core/src/components/Suspense.ts | 8 +++++++- packages/runtime-core/src/components/Teleport.ts | 7 ++++++- 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/runtime-core/src/components/BaseTransition.ts b/packages/runtime-core/src/components/BaseTransition.ts index 043b9736525..a4e862335eb 100644 --- a/packages/runtime-core/src/components/BaseTransition.ts +++ b/packages/runtime-core/src/components/BaseTransition.ts @@ -283,6 +283,9 @@ if (__COMPAT__) { export const BaseTransition = BaseTransitionImpl as unknown as { new (): { $props: BaseTransitionProps + $slots: { + default(): VNode[] + } } } diff --git a/packages/runtime-core/src/components/KeepAlive.ts b/packages/runtime-core/src/components/KeepAlive.ts index d5813f90e09..8c1b6318887 100644 --- a/packages/runtime-core/src/components/KeepAlive.ts +++ b/packages/runtime-core/src/components/KeepAlive.ts @@ -344,6 +344,9 @@ export const KeepAlive = KeepAliveImpl as any as { __isKeepAlive: true new (): { $props: VNodeProps & KeepAliveProps + $slots: { + default(): VNode[] + } } } diff --git a/packages/runtime-core/src/components/Suspense.ts b/packages/runtime-core/src/components/Suspense.ts index aef62db4a31..fd6a7e0fac8 100644 --- a/packages/runtime-core/src/components/Suspense.ts +++ b/packages/runtime-core/src/components/Suspense.ts @@ -104,7 +104,13 @@ export const Suspense = (__FEATURE_SUSPENSE__ ? SuspenseImpl : null) as unknown as { __isSuspense: true - new (): { $props: VNodeProps & SuspenseProps } + new (): { + $props: VNodeProps & SuspenseProps + $slots: { + default(): VNode[] + fallback(): VNode[] + } + } } function triggerEvent( diff --git a/packages/runtime-core/src/components/Teleport.ts b/packages/runtime-core/src/components/Teleport.ts index f9f845298dc..6e66d0444f9 100644 --- a/packages/runtime-core/src/components/Teleport.ts +++ b/packages/runtime-core/src/components/Teleport.ts @@ -393,7 +393,12 @@ function hydrateTeleport( // Force-casted public typing for h and TSX props inference export const Teleport = TeleportImpl as unknown as { __isTeleport: true - new (): { $props: VNodeProps & TeleportProps } + new(): { + $props: VNodeProps & TeleportProps + $slots: { + default(): VNode[] + } + } } function updateCssVars(vnode: VNode) { From cc09cc7e2889c8e7b6d298e070ede02235c82225 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 5 May 2023 17:15:14 +0800 Subject: [PATCH 0018/1346] release: v3.3.0-beta.4 --- CHANGELOG.md | 17 +++++++ package.json | 2 +- packages/compiler-core/package.json | 4 +- packages/compiler-dom/package.json | 6 +-- packages/compiler-sfc/package.json | 12 ++--- packages/compiler-ssr/package.json | 6 +-- packages/dts-test/package.json | 2 +- packages/reactivity-transform/package.json | 6 +-- packages/reactivity/package.json | 4 +- packages/runtime-core/package.json | 6 +-- packages/runtime-dom/package.json | 6 +-- packages/runtime-test/package.json | 6 +-- packages/server-renderer/package.json | 8 ++-- packages/sfc-playground/package.json | 2 +- packages/shared/package.json | 2 +- packages/size-check/package.json | 2 +- packages/template-explorer/package.json | 2 +- packages/vue-compat/package.json | 4 +- packages/vue/package.json | 12 ++--- pnpm-lock.yaml | 52 +++++++++++----------- 20 files changed, 89 insertions(+), 72 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6736d5a7880..9a0d1c3e041 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +# [3.3.0-beta.4](https://github.com/vuejs/core/compare/v3.3.0-beta.3...v3.3.0-beta.4) (2023-05-05) + + +### Bug Fixes + +* **runtime-core:** handle template ref with number values ([#8233](https://github.com/vuejs/core/issues/8233)) ([1b1242f](https://github.com/vuejs/core/commit/1b1242f4d1349e361335b2815f41742d41283a94)), closes [#8230](https://github.com/vuejs/core/issues/8230) +* **types:** retain compatibility for provide() usage with explicit type parameter ([038cd83](https://github.com/vuejs/core/commit/038cd830d5b34b47d7e7e1c61f0973d27cd8b915)) + + +### Features + +* **compiler-dom:** treat inert as boolean attribute ([#8209](https://github.com/vuejs/core/issues/8209)) ([918ec8a](https://github.com/vuejs/core/commit/918ec8a5cbc825a3947cd35fe966671c245af087)), closes [#8208](https://github.com/vuejs/core/issues/8208) +* **types:** add slots types for built-in components ([#6033](https://github.com/vuejs/core/issues/6033)) ([3cb4dc9](https://github.com/vuejs/core/commit/3cb4dc9e5538e1c2bde9fa691b001615a848c546)) +* **types:** provide ExtractPublicPropTypes utility type ([bff63c5](https://github.com/vuejs/core/commit/bff63c5498f5fa098689c18defe48ae08d47eadb)), closes [#5272](https://github.com/vuejs/core/issues/5272) [#8168](https://github.com/vuejs/core/issues/8168) + + + # [3.3.0-beta.3](https://github.com/vuejs/core/compare/v3.3.0-beta.2...v3.3.0-beta.3) (2023-05-01) diff --git a/package.json b/package.json index 7dbebf29dc9..d8be2cf84df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "packageManager": "pnpm@7.26.0", "type": "module", "scripts": { diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index 63da1532918..36ef0bd0af9 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-core", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "@vue/compiler-core", "main": "index.js", "module": "dist/compiler-core.esm-bundler.js", @@ -33,7 +33,7 @@ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-core#readme", "dependencies": { "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.0-beta.3", + "@vue/shared": "3.3.0-beta.4", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" }, diff --git a/packages/compiler-dom/package.json b/packages/compiler-dom/package.json index 686a38b8219..ff581adf71d 100644 --- a/packages/compiler-dom/package.json +++ b/packages/compiler-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-dom", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "@vue/compiler-dom", "main": "index.js", "module": "dist/compiler-dom.esm-bundler.js", @@ -37,7 +37,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-dom#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.3", - "@vue/compiler-core": "3.3.0-beta.3" + "@vue/shared": "3.3.0-beta.4", + "@vue/compiler-core": "3.3.0-beta.4" } } diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index 25eed8b4fcd..1ae44330e07 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-sfc", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "@vue/compiler-sfc", "main": "dist/compiler-sfc.cjs.js", "module": "dist/compiler-sfc.esm-browser.js", @@ -33,11 +33,11 @@ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-sfc#readme", "dependencies": { "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.0-beta.3", - "@vue/compiler-dom": "3.3.0-beta.3", - "@vue/compiler-ssr": "3.3.0-beta.3", - "@vue/reactivity-transform": "3.3.0-beta.3", - "@vue/shared": "3.3.0-beta.3", + "@vue/compiler-core": "3.3.0-beta.4", + "@vue/compiler-dom": "3.3.0-beta.4", + "@vue/compiler-ssr": "3.3.0-beta.4", + "@vue/reactivity-transform": "3.3.0-beta.4", + "@vue/shared": "3.3.0-beta.4", "estree-walker": "^2.0.2", "magic-string": "^0.30.0", "postcss": "^8.1.10", diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json index dbb498dcc1b..32207821c85 100644 --- a/packages/compiler-ssr/package.json +++ b/packages/compiler-ssr/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-ssr", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "@vue/compiler-ssr", "main": "dist/compiler-ssr.cjs.js", "types": "dist/compiler-ssr.d.ts", @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-ssr#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.3", - "@vue/compiler-dom": "3.3.0-beta.3" + "@vue/shared": "3.3.0-beta.4", + "@vue/compiler-dom": "3.3.0-beta.4" } } diff --git a/packages/dts-test/package.json b/packages/dts-test/package.json index 3fe186abf83..01a4530b888 100644 --- a/packages/dts-test/package.json +++ b/packages/dts-test/package.json @@ -4,5 +4,5 @@ "dependencies": { "vue": "workspace:*" }, - "version": "3.3.0-beta.3" + "version": "3.3.0-beta.4" } diff --git a/packages/reactivity-transform/package.json b/packages/reactivity-transform/package.json index a986d30e7a2..e7bde20f1a2 100644 --- a/packages/reactivity-transform/package.json +++ b/packages/reactivity-transform/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity-transform", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "@vue/reactivity-transform", "main": "dist/reactivity-transform.cjs.js", "files": [ @@ -29,8 +29,8 @@ "homepage": "https://github.com/vuejs/core/tree/dev/packages/reactivity-transform#readme", "dependencies": { "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.0-beta.3", - "@vue/shared": "3.3.0-beta.3", + "@vue/compiler-core": "3.3.0-beta.4", + "@vue/shared": "3.3.0-beta.4", "estree-walker": "^2.0.2", "magic-string": "^0.30.0" }, diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json index eb20454e7b2..ef29d6cb440 100644 --- a/packages/reactivity/package.json +++ b/packages/reactivity/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "@vue/reactivity", "main": "index.js", "module": "dist/reactivity.esm-bundler.js", @@ -36,6 +36,6 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/reactivity#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.3" + "@vue/shared": "3.3.0-beta.4" } } diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index a58e676dcb6..2f912dd501f 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-core", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "@vue/runtime-core", "main": "index.js", "module": "dist/runtime-core.esm-bundler.js", @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-core#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.3", - "@vue/reactivity": "3.3.0-beta.3" + "@vue/shared": "3.3.0-beta.4", + "@vue/reactivity": "3.3.0-beta.4" } } diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json index 3b8ad6ace2f..09bb726bf79 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-dom", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "@vue/runtime-dom", "main": "index.js", "module": "dist/runtime-dom.esm-bundler.js", @@ -35,8 +35,8 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-dom#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.3", - "@vue/runtime-core": "3.3.0-beta.3", + "@vue/shared": "3.3.0-beta.4", + "@vue/runtime-core": "3.3.0-beta.4", "csstype": "^3.1.1" } } diff --git a/packages/runtime-test/package.json b/packages/runtime-test/package.json index 1f980ca5a6e..57a87500881 100644 --- a/packages/runtime-test/package.json +++ b/packages/runtime-test/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-test", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "@vue/runtime-test", "private": true, "main": "index.js", @@ -25,7 +25,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-test#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.3", - "@vue/runtime-core": "3.3.0-beta.3" + "@vue/shared": "3.3.0-beta.4", + "@vue/runtime-core": "3.3.0-beta.4" } } diff --git a/packages/server-renderer/package.json b/packages/server-renderer/package.json index feada4e2489..d57b0e96231 100644 --- a/packages/server-renderer/package.json +++ b/packages/server-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/server-renderer", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "@vue/server-renderer", "main": "index.js", "module": "dist/server-renderer.esm-bundler.js", @@ -32,10 +32,10 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/server-renderer#readme", "peerDependencies": { - "vue": "3.3.0-beta.3" + "vue": "3.3.0-beta.4" }, "dependencies": { - "@vue/shared": "3.3.0-beta.3", - "@vue/compiler-ssr": "3.3.0-beta.3" + "@vue/shared": "3.3.0-beta.4", + "@vue/compiler-ssr": "3.3.0-beta.4" } } diff --git a/packages/sfc-playground/package.json b/packages/sfc-playground/package.json index 202699a240c..d302bdda97d 100644 --- a/packages/sfc-playground/package.json +++ b/packages/sfc-playground/package.json @@ -1,6 +1,6 @@ { "name": "@vue/sfc-playground", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "private": true, "scripts": { "dev": "vite", diff --git a/packages/shared/package.json b/packages/shared/package.json index 02fa119d3e2..57fc194b400 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vue/shared", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "internal utils shared across @vue packages", "main": "index.js", "module": "dist/shared.esm-bundler.js", diff --git a/packages/size-check/package.json b/packages/size-check/package.json index 5edb6cc7f49..6fe548f4462 100644 --- a/packages/size-check/package.json +++ b/packages/size-check/package.json @@ -1,6 +1,6 @@ { "name": "@vue/size-check", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "private": true, "scripts": { "build": "vite build" diff --git a/packages/template-explorer/package.json b/packages/template-explorer/package.json index 1691b011153..abd764f2c24 100644 --- a/packages/template-explorer/package.json +++ b/packages/template-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/template-explorer", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "private": true, "buildOptions": { "formats": [ diff --git a/packages/vue-compat/package.json b/packages/vue-compat/package.json index ecc315fb250..b8a214d16bd 100644 --- a/packages/vue-compat/package.json +++ b/packages/vue-compat/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compat", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "Vue 3 compatibility build for Vue 2", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -43,6 +43,6 @@ "source-map-js": "^1.0.2" }, "peerDependencies": { - "vue": "3.3.0-beta.3" + "vue": "3.3.0-beta.4" } } diff --git a/packages/vue/package.json b/packages/vue/package.json index b6d3878d82a..32912ef5b91 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "3.3.0-beta.3", + "version": "3.3.0-beta.4", "description": "The progressive JavaScript framework for building modern web UI.", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -81,10 +81,10 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/vue#readme", "dependencies": { - "@vue/shared": "3.3.0-beta.3", - "@vue/compiler-dom": "3.3.0-beta.3", - "@vue/runtime-dom": "3.3.0-beta.3", - "@vue/compiler-sfc": "3.3.0-beta.3", - "@vue/server-renderer": "3.3.0-beta.3" + "@vue/shared": "3.3.0-beta.4", + "@vue/compiler-dom": "3.3.0-beta.4", + "@vue/runtime-dom": "3.3.0-beta.4", + "@vue/compiler-sfc": "3.3.0-beta.4", + "@vue/server-renderer": "3.3.0-beta.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1a39c6ba9f1..2e39216fc17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,7 +100,7 @@ importers: specifiers: '@babel/parser': ^7.21.3 '@babel/types': ^7.21.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.4 estree-walker: ^2.0.2 source-map-js: ^1.0.2 dependencies: @@ -113,8 +113,8 @@ importers: packages/compiler-dom: specifiers: - '@vue/compiler-core': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/compiler-core': 3.3.0-beta.4 + '@vue/shared': 3.3.0-beta.4 dependencies: '@vue/compiler-core': link:../compiler-core '@vue/shared': link:../shared @@ -125,12 +125,12 @@ importers: '@babel/types': ^7.21.3 '@types/estree': ^0.0.48 '@types/lru-cache': ^5.1.0 - '@vue/compiler-core': 3.3.0-beta.3 - '@vue/compiler-dom': 3.3.0-beta.3 - '@vue/compiler-ssr': 3.3.0-beta.3 + '@vue/compiler-core': 3.3.0-beta.4 + '@vue/compiler-dom': 3.3.0-beta.4 + '@vue/compiler-ssr': 3.3.0-beta.4 '@vue/consolidate': ^0.17.3 - '@vue/reactivity-transform': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/reactivity-transform': 3.3.0-beta.4 + '@vue/shared': 3.3.0-beta.4 estree-walker: ^2.0.2 hash-sum: ^2.0.0 lru-cache: ^5.1.1 @@ -170,8 +170,8 @@ importers: packages/compiler-ssr: specifiers: - '@vue/compiler-dom': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/compiler-dom': 3.3.0-beta.4 + '@vue/shared': 3.3.0-beta.4 dependencies: '@vue/compiler-dom': link:../compiler-dom '@vue/shared': link:../shared @@ -184,7 +184,7 @@ importers: packages/reactivity: specifiers: - '@vue/shared': 3.3.0-beta.3 + '@vue/shared': 3.3.0-beta.4 dependencies: '@vue/shared': link:../shared @@ -193,8 +193,8 @@ importers: '@babel/core': ^7.21.3 '@babel/parser': ^7.20.15 '@babel/types': ^7.21.3 - '@vue/compiler-core': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/compiler-core': 3.3.0-beta.4 + '@vue/shared': 3.3.0-beta.4 estree-walker: ^2.0.2 magic-string: ^0.30.0 dependencies: @@ -209,16 +209,16 @@ importers: packages/runtime-core: specifiers: - '@vue/reactivity': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/reactivity': 3.3.0-beta.4 + '@vue/shared': 3.3.0-beta.4 dependencies: '@vue/reactivity': link:../reactivity '@vue/shared': link:../shared packages/runtime-dom: specifiers: - '@vue/runtime-core': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/runtime-core': 3.3.0-beta.4 + '@vue/shared': 3.3.0-beta.4 csstype: ^3.1.1 dependencies: '@vue/runtime-core': link:../runtime-core @@ -227,16 +227,16 @@ importers: packages/runtime-test: specifiers: - '@vue/runtime-core': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/runtime-core': 3.3.0-beta.4 + '@vue/shared': 3.3.0-beta.4 dependencies: '@vue/runtime-core': link:../runtime-core '@vue/shared': link:../shared packages/server-renderer: specifiers: - '@vue/compiler-ssr': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/compiler-ssr': 3.3.0-beta.4 + '@vue/shared': 3.3.0-beta.4 dependencies: '@vue/compiler-ssr': link:../compiler-ssr '@vue/shared': link:../shared @@ -277,11 +277,11 @@ importers: packages/vue: specifiers: - '@vue/compiler-dom': 3.3.0-beta.3 - '@vue/compiler-sfc': 3.3.0-beta.3 - '@vue/runtime-dom': 3.3.0-beta.3 - '@vue/server-renderer': 3.3.0-beta.3 - '@vue/shared': 3.3.0-beta.3 + '@vue/compiler-dom': 3.3.0-beta.4 + '@vue/compiler-sfc': 3.3.0-beta.4 + '@vue/runtime-dom': 3.3.0-beta.4 + '@vue/server-renderer': 3.3.0-beta.4 + '@vue/shared': 3.3.0-beta.4 dependencies: '@vue/compiler-dom': link:../compiler-dom '@vue/compiler-sfc': link:../compiler-sfc From 862edfd91a2c2f6b75f943cb1a9682c4be5d7fa8 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sat, 6 May 2023 16:55:38 +0800 Subject: [PATCH 0019/1346] fix(compiler-sfc): enable props destructure when reactivity transform option is enabled ...to retain backwards compatible behavior before removal --- packages/compiler-sfc/src/script/definePropsDestructure.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compiler-sfc/src/script/definePropsDestructure.ts b/packages/compiler-sfc/src/script/definePropsDestructure.ts index f735b324eb6..3d2c3d3844b 100644 --- a/packages/compiler-sfc/src/script/definePropsDestructure.ts +++ b/packages/compiler-sfc/src/script/definePropsDestructure.ts @@ -27,7 +27,7 @@ export function processPropsDestructure( ctx: ScriptCompileContext, declId: ObjectPattern ) { - if (!ctx.options.propsDestructure) { + if (!ctx.options.propsDestructure && !ctx.options.reactivityTransform) { return } From 1279b1730079f77692a0817d51bbba57eb2b871b Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 8 May 2023 11:53:49 +0800 Subject: [PATCH 0020/1346] fix(types): remove short syntax support in defineSlots() ref: https://github.com/vuejs/language-tools/issues/2758 --- packages/dts-test/setupHelpers.test-d.ts | 8 -------- packages/runtime-core/src/apiSetupHelpers.ts | 4 ++-- packages/runtime-core/src/component.ts | 4 ++-- packages/runtime-core/src/componentPublicInstance.ts | 4 ++-- packages/runtime-core/src/componentSlots.ts | 7 ++++++- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/packages/dts-test/setupHelpers.test-d.ts b/packages/dts-test/setupHelpers.test-d.ts index f738e58b9eb..9b68b345268 100644 --- a/packages/dts-test/setupHelpers.test-d.ts +++ b/packages/dts-test/setupHelpers.test-d.ts @@ -186,14 +186,6 @@ describe('defineEmits w/ runtime declaration', () => { }) describe('defineSlots', () => { - // short syntax - const slots = defineSlots<{ - default: { foo: string; bar: number } - optional?: string - }>() - expectType<(scope: { foo: string; bar: number }) => VNode[]>(slots.default) - expectType VNode[])>(slots.optional) - // literal fn syntax (allow for specifying return type) const fnSlots = defineSlots<{ default(props: { foo: string; bar: number }): any diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index de7426ad325..554115240b3 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -28,7 +28,7 @@ import { PropOptions } from './componentProps' import { warn } from './warning' -import { SlotsType, TypedSlots } from './componentSlots' +import { SlotsType, StrictUnwrapSlotsType } from './componentSlots' import { Ref, ref } from '@vue/reactivity' import { watch } from './apiWatch' @@ -205,7 +205,7 @@ export function defineOptions< export function defineSlots< S extends Record = Record ->(): TypedSlots> { +>(): StrictUnwrapSlotsType> { if (__DEV__) { warnRuntimeUsage(`defineSlots`) } diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 684f028fd5b..33229630e49 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -32,7 +32,7 @@ import { InternalSlots, Slots, SlotsType, - TypedSlots + UnwrapSlotsType } from './componentSlots' import { warn } from './warning' import { ErrorCodes, callWithErrorHandling, handleError } from './errorHandling' @@ -188,7 +188,7 @@ export type SetupContext< > = E extends any ? { attrs: Data - slots: TypedSlots + slots: UnwrapSlotsType emit: EmitFn expose: (exposed?: Record) => void } diff --git a/packages/runtime-core/src/componentPublicInstance.ts b/packages/runtime-core/src/componentPublicInstance.ts index dd2d29670e6..79bcedda759 100644 --- a/packages/runtime-core/src/componentPublicInstance.ts +++ b/packages/runtime-core/src/componentPublicInstance.ts @@ -40,7 +40,7 @@ import { ComponentInjectOptions } from './componentOptions' import { EmitsOptions, EmitFn } from './componentEmits' -import { SlotsType, TypedSlots } from './componentSlots' +import { SlotsType, UnwrapSlotsType } from './componentSlots' import { markAttrsAccessed } from './componentRenderUtils' import { currentRenderingInstance } from './componentRenderContext' import { warn } from './warning' @@ -213,7 +213,7 @@ export type ComponentPublicInstance< > $attrs: Data $refs: Data - $slots: TypedSlots + $slots: UnwrapSlotsType $root: ComponentPublicInstance | null $parent: ComponentPublicInstance | null $emit: EmitFn diff --git a/packages/runtime-core/src/componentSlots.ts b/packages/runtime-core/src/componentSlots.ts index 8f59099d833..afc5f03933b 100644 --- a/packages/runtime-core/src/componentSlots.ts +++ b/packages/runtime-core/src/componentSlots.ts @@ -41,7 +41,12 @@ export type SlotsType = Record> = { [SlotSymbol]?: T } -export type TypedSlots< +export type StrictUnwrapSlotsType< + S extends SlotsType, + T = NonNullable +> = [keyof S] extends [never] ? Slots : Readonly + +export type UnwrapSlotsType< S extends SlotsType, T = NonNullable > = [keyof S] extends [never] From b2be75bad4ba70da1da6930eb914e51ce2c630b2 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 8 May 2023 12:06:39 +0800 Subject: [PATCH 0021/1346] fix(runtime-core): ensure defineComponent name in extraOptions takes higher priority --- packages/runtime-core/src/apiDefineComponent.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime-core/src/apiDefineComponent.ts b/packages/runtime-core/src/apiDefineComponent.ts index 722a3693e3f..9edb9965e27 100644 --- a/packages/runtime-core/src/apiDefineComponent.ts +++ b/packages/runtime-core/src/apiDefineComponent.ts @@ -279,6 +279,6 @@ export function defineComponent( extraOptions?: ComponentOptions ) { return isFunction(options) - ? extend({}, extraOptions, { setup: options, name: options.name }) + ? extend({ name: options.name }, extraOptions, { setup: options }) : options } From c2172f3a0ebbd7153e209dd8df6d9724bc524d9a Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 8 May 2023 12:12:15 +0800 Subject: [PATCH 0022/1346] fix(build): retain defineComponent() treeshakability in Rollup close #8236 --- packages/runtime-core/src/apiDefineComponent.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/runtime-core/src/apiDefineComponent.ts b/packages/runtime-core/src/apiDefineComponent.ts index 9edb9965e27..76e9567fe2f 100644 --- a/packages/runtime-core/src/apiDefineComponent.ts +++ b/packages/runtime-core/src/apiDefineComponent.ts @@ -279,6 +279,9 @@ export function defineComponent( extraOptions?: ComponentOptions ) { return isFunction(options) - ? extend({ name: options.name }, extraOptions, { setup: options }) + ? // #8326: extend call and options.name access are considered side-effects + // by Rollup, so we have to wrap it in a pure-annotated IIFE. + /*#__PURE__*/ (() => + extend({ name: options.name }, extraOptions, { setup: options }))() : options } From 6b194bcf3b8143895c2a472cd87998ebf9856146 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 8 May 2023 12:30:19 +0800 Subject: [PATCH 0023/1346] fix(compiler-sfc): fix built-in type resolving in external files close #8244 --- .../__tests__/compileScript/resolveType.spec.ts | 17 +++++++++++++++++ packages/compiler-sfc/src/script/resolveType.ts | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts index 551e10237dc..4b36880bf1b 100644 --- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts @@ -475,6 +475,23 @@ describe('resolveType', () => { expect(deps && [...deps]).toStrictEqual(Object.keys(files)) }) + // #8244 + test('utility type in external file', () => { + const files = { + '/foo.ts': 'type A = { n?: number }; export type B = Required' + } + const { props } = resolve( + ` + import { B } from './foo' + defineProps() + `, + files + ) + expect(props).toStrictEqual({ + n: ['Number'] + }) + }) + test('relative vue', () => { const files = { '/foo.vue': diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index 2fa8d028c65..550b6c23767 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -518,7 +518,7 @@ function resolveBuiltin( name: GetSetType, scope: TypeScope ): ResolvedElements { - const t = resolveTypeElements(ctx, node.typeParameters!.params[0]) + const t = resolveTypeElements(ctx, node.typeParameters!.params[0], scope) switch (name) { case 'Partial': { const res: ResolvedElements = { props: {}, calls: t.calls } From 3294e50b0b6a81985d1068870e52fdbfdc2072fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Mon, 8 May 2023 14:34:24 +0800 Subject: [PATCH 0024/1346] chore: update tests to use expect.toBeInstanceOf (#8154) --- packages/reactivity/__tests__/collections/Map.spec.ts | 4 ++-- packages/reactivity/__tests__/collections/Set.spec.ts | 4 ++-- packages/reactivity/__tests__/collections/WeakMap.spec.ts | 4 ++-- packages/reactivity/__tests__/collections/WeakSet.spec.ts | 4 ++-- packages/reactivity/__tests__/reactive.spec.ts | 8 ++++---- packages/runtime-dom/__tests__/createApp.spec.ts | 2 +- packages/vue-compat/__tests__/filters.spec.ts | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/reactivity/__tests__/collections/Map.spec.ts b/packages/reactivity/__tests__/collections/Map.spec.ts index aa4874014f6..bac58134819 100644 --- a/packages/reactivity/__tests__/collections/Map.spec.ts +++ b/packages/reactivity/__tests__/collections/Map.spec.ts @@ -14,8 +14,8 @@ describe('reactivity/collections', () => { const original = new Map() const observed = reactive(original) expect(isReactive(observed)).toBe(true) - expect(original instanceof Map).toBe(true) - expect(observed instanceof Map).toBe(true) + expect(original).toBeInstanceOf(Map) + expect(observed).toBeInstanceOf(Map) }) it('should observe mutations', () => { diff --git a/packages/reactivity/__tests__/collections/Set.spec.ts b/packages/reactivity/__tests__/collections/Set.spec.ts index 4fd29876f4c..1632d2175cc 100644 --- a/packages/reactivity/__tests__/collections/Set.spec.ts +++ b/packages/reactivity/__tests__/collections/Set.spec.ts @@ -14,8 +14,8 @@ describe('reactivity/collections', () => { const original = new Set() const observed = reactive(original) expect(isReactive(observed)).toBe(true) - expect(original instanceof Set).toBe(true) - expect(observed instanceof Set).toBe(true) + expect(original).toBeInstanceOf(Set) + expect(observed).toBeInstanceOf(Set) }) it('should observe mutations', () => { diff --git a/packages/reactivity/__tests__/collections/WeakMap.spec.ts b/packages/reactivity/__tests__/collections/WeakMap.spec.ts index a8f722458f7..b25306335d8 100644 --- a/packages/reactivity/__tests__/collections/WeakMap.spec.ts +++ b/packages/reactivity/__tests__/collections/WeakMap.spec.ts @@ -7,8 +7,8 @@ describe('reactivity/collections', () => { const original = new WeakMap() const observed = reactive(original) expect(isReactive(observed)).toBe(true) - expect(original instanceof WeakMap).toBe(true) - expect(observed instanceof WeakMap).toBe(true) + expect(original).toBeInstanceOf(WeakMap) + expect(observed).toBeInstanceOf(WeakMap) }) it('should observe mutations', () => { diff --git a/packages/reactivity/__tests__/collections/WeakSet.spec.ts b/packages/reactivity/__tests__/collections/WeakSet.spec.ts index 646f1a235f3..5d3478f7b22 100644 --- a/packages/reactivity/__tests__/collections/WeakSet.spec.ts +++ b/packages/reactivity/__tests__/collections/WeakSet.spec.ts @@ -7,8 +7,8 @@ describe('reactivity/collections', () => { const original = new WeakSet() const observed = reactive(original) expect(isReactive(observed)).toBe(true) - expect(original instanceof WeakSet).toBe(true) - expect(observed instanceof WeakSet).toBe(true) + expect(original).toBeInstanceOf(WeakSet) + expect(observed).toBeInstanceOf(WeakSet) }) it('should observe mutations', () => { diff --git a/packages/reactivity/__tests__/reactive.spec.ts b/packages/reactivity/__tests__/reactive.spec.ts index f6fed0230c3..51c9ed42c8e 100644 --- a/packages/reactivity/__tests__/reactive.spec.ts +++ b/packages/reactivity/__tests__/reactive.spec.ts @@ -50,7 +50,7 @@ describe('reactivity/reactive', () => { class CustomMap extends Map {} const cmap = reactive(new CustomMap()) - expect(cmap instanceof Map).toBe(true) + expect(cmap).toBeInstanceOf(Map) expect(isReactive(cmap)).toBe(true) cmap.set('key', {}) @@ -60,7 +60,7 @@ describe('reactivity/reactive', () => { class CustomSet extends Set {} const cset = reactive(new CustomSet()) - expect(cset instanceof Set).toBe(true) + expect(cset).toBeInstanceOf(Set) expect(isReactive(cset)).toBe(true) let dummy @@ -77,7 +77,7 @@ describe('reactivity/reactive', () => { class CustomMap extends WeakMap {} const cmap = reactive(new CustomMap()) - expect(cmap instanceof WeakMap).toBe(true) + expect(cmap).toBeInstanceOf(WeakMap) expect(isReactive(cmap)).toBe(true) const key = {} @@ -88,7 +88,7 @@ describe('reactivity/reactive', () => { class CustomSet extends WeakSet {} const cset = reactive(new CustomSet()) - expect(cset instanceof WeakSet).toBe(true) + expect(cset).toBeInstanceOf(WeakSet) expect(isReactive(cset)).toBe(true) let dummy diff --git a/packages/runtime-dom/__tests__/createApp.spec.ts b/packages/runtime-dom/__tests__/createApp.spec.ts index 471dcfc7ce0..b8432f4723e 100644 --- a/packages/runtime-dom/__tests__/createApp.spec.ts +++ b/packages/runtime-dom/__tests__/createApp.spec.ts @@ -11,7 +11,7 @@ describe('createApp for dom', () => { } }).mount(root) expect(root.children.length).toBe(1) - expect(root.children[0] instanceof SVGElement).toBe(true) + expect(root.children[0]).toBeInstanceOf(SVGElement) }) // #4398 diff --git a/packages/vue-compat/__tests__/filters.spec.ts b/packages/vue-compat/__tests__/filters.spec.ts index 22f1cac64af..c1acbd899bc 100644 --- a/packages/vue-compat/__tests__/filters.spec.ts +++ b/packages/vue-compat/__tests__/filters.spec.ts @@ -116,7 +116,7 @@ describe('FILTERS', () => { } } }).$mount() as any - expect(vm.$refs.test.pattern instanceof RegExp).toBe(true) + expect(vm.$refs.test.pattern).toBeInstanceOf(RegExp) expect(vm.$refs.test.pattern.toString()).toBe('/a|b\\//') expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned() }) From 8ccc5700228a7e564e935ec7ede90180968038b7 Mon Sep 17 00:00:00 2001 From: LiuSeen <91084928+code-ManL@users.noreply.github.com> Date: Mon, 8 May 2023 14:43:39 +0800 Subject: [PATCH 0025/1346] chore(compileScript): remove unused methods (#8211) --- packages/compiler-sfc/src/compileScript.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 1fbbb8f5c96..ee8fd85ffa9 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -5,7 +5,7 @@ import { walkIdentifiers } from '@vue/compiler-dom' import { DEFAULT_FILENAME, SFCDescriptor, SFCScriptBlock } from './parse' -import { parse as _parse, ParserPlugin } from '@babel/parser' +import { ParserPlugin } from '@babel/parser' import { generateCodeFrame } from '@vue/shared' import { Node, From bf16697e25ccc904181f65f50389f9570c1f3386 Mon Sep 17 00:00:00 2001 From: ntnyq Date: Mon, 8 May 2023 14:47:02 +0800 Subject: [PATCH 0026/1346] chore: fix broken vite plugin url in warning message (#8224) --- packages/runtime-dom/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime-dom/src/index.ts b/packages/runtime-dom/src/index.ts index 354cc4c5bf5..ad818a34bb7 100644 --- a/packages/runtime-dom/src/index.ts +++ b/packages/runtime-dom/src/index.ts @@ -162,7 +162,7 @@ function injectCompilerOptionsCheck(app: App) { `must be passed to \`@vue/compiler-dom\` in the build setup instead.\n` + `- For vue-loader: pass it via vue-loader's \`compilerOptions\` loader option.\n` + `- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\n` + - `- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-dom` + `- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc` Object.defineProperty(app.config, 'compilerOptions', { get() { From 4495373d28d9fa4479eedd224adb16248ae0b9f4 Mon Sep 17 00:00:00 2001 From: linghaoSu Date: Mon, 8 May 2023 15:26:14 +0800 Subject: [PATCH 0027/1346] fix(runtime-dom): check attribute value when setting option value (#8246) fix #8227 --- .../runtime-dom/__tests__/patchProps.spec.ts | 8 ++++++++ packages/runtime-dom/src/modules/props.ts | 19 +++++++++---------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/packages/runtime-dom/__tests__/patchProps.spec.ts b/packages/runtime-dom/__tests__/patchProps.spec.ts index c49de1a155d..88cf916252b 100644 --- a/packages/runtime-dom/__tests__/patchProps.spec.ts +++ b/packages/runtime-dom/__tests__/patchProps.spec.ts @@ -24,6 +24,14 @@ describe('runtime-dom: props patching', () => { patchProp(el, 'value', null, obj) expect(el.value).toBe(obj.toString()) expect((el as any)._value).toBe(obj) + + const option = document.createElement('option') + patchProp(option, 'textContent', null, 'foo') + expect(option.value).toBe('foo') + expect(option.getAttribute('value')).toBe(null) + patchProp(option, 'value', null, 'foo') + expect(option.value).toBe('foo') + expect(option.getAttribute('value')).toBe('foo') }) test('value for custom elements', () => { diff --git a/packages/runtime-dom/src/modules/props.ts b/packages/runtime-dom/src/modules/props.ts index 1c1ad0c16f7..cdf9d84cf5d 100644 --- a/packages/runtime-dom/src/modules/props.ts +++ b/packages/runtime-dom/src/modules/props.ts @@ -26,23 +26,22 @@ export function patchDOMProp( return } + const tag = el.tagName + if ( key === 'value' && - el.tagName !== 'PROGRESS' && + tag !== 'PROGRESS' && // custom elements may use _value internally - !el.tagName.includes('-') + !tag.includes('-') ) { // store value as _value as well since // non-string values will be stringified. el._value = value + // #4956: \`) + }" + `) + }) + test('', () => { expect( compileWithWrapper(``).code diff --git a/packages/compiler-ssr/src/transforms/ssrVModel.ts b/packages/compiler-ssr/src/transforms/ssrVModel.ts index 589ef6a8650..bd587edcb9c 100644 --- a/packages/compiler-ssr/src/transforms/ssrVModel.ts +++ b/packages/compiler-ssr/src/transforms/ssrVModel.ts @@ -18,7 +18,8 @@ import { import { SSR_LOOSE_EQUAL, SSR_LOOSE_CONTAIN, - SSR_RENDER_DYNAMIC_MODEL + SSR_RENDER_DYNAMIC_MODEL, + SSR_INCLUDE_BOOLEAN_ATTR } from '../runtimeHelpers' import { DirectiveTransformResult } from 'packages/compiler-core/src/transform' @@ -129,8 +130,34 @@ export const ssrTransformModel: DirectiveTransform = (dir, node, context) => { checkDuplicatedValue() node.children = [createInterpolation(model, model.loc)] } else if (node.tag === 'select') { - // NOOP - // select relies on client-side directive to set initial selected state. + node.children.forEach(option => { + if (option.type === NodeTypes.ELEMENT) { + const plainNode = option as PlainElementNode + if (plainNode.props.findIndex(p => p.name === 'selected') === -1) { + const value = findValueBinding(plainNode) + plainNode.ssrCodegenNode!.elements.push( + createConditionalExpression( + createCallExpression(context.helper(SSR_INCLUDE_BOOLEAN_ATTR), [ + createConditionalExpression( + createCallExpression(`Array.isArray`, [model]), + createCallExpression(context.helper(SSR_LOOSE_CONTAIN), [ + model, + value + ]), + createCallExpression(context.helper(SSR_LOOSE_EQUAL), [ + model, + value + ]) + ) + ]), + createSimpleExpression(' selected', true), + createSimpleExpression('', true), + false /* no newline */ + ) + ) + } + } + }) } else { context.onError( createDOMCompilerError( diff --git a/packages/server-renderer/__tests__/ssrDirectives.spec.ts b/packages/server-renderer/__tests__/ssrDirectives.spec.ts index 102e95d5b27..e52ef2db69f 100644 --- a/packages/server-renderer/__tests__/ssrDirectives.spec.ts +++ b/packages/server-renderer/__tests__/ssrDirectives.spec.ts @@ -107,6 +107,30 @@ describe('ssr: directives', () => { ).toBe(``) }) + test('select', async () => { + expect( + await renderToString( + createApp({ + data: () => ({ model: 1 }), + template: `` + }) + ) + ).toBe( + `` + ) + + expect( + await renderToString( + createApp({ + data: () => ({ model: [0, 1] }), + template: `` + }) + ) + ).toBe( + `` + ) + }) + test('checkbox', async () => { expect( await renderToString( From 776ebf25b2e7570e78ac1c148fc45c823c21a542 Mon Sep 17 00:00:00 2001 From: vaakian X Date: Tue, 11 Jul 2023 17:26:31 +0800 Subject: [PATCH 0121/1346] fix(compiler-sfc): fix using imported ref as template ref during dev (#7593) close #7567 --- .../__snapshots__/compileScript.spec.ts.snap | 15 +++++++++++++++ .../__tests__/compileScript.spec.ts | 17 +++++++++++++++++ .../compiler-sfc/src/script/importUsageCheck.ts | 3 +++ 3 files changed, 35 insertions(+) diff --git a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap index 18b5d90eaf6..de19ec5aaf2 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap @@ -775,6 +775,21 @@ return { get FooBaz() { return FooBaz }, get Last() { return Last } } })" `; +exports[`SFC compile + + `) + expect(content).toMatch( + 'return { get foo() { return foo }, get bar() { return bar }, get Baz() { return Baz } }' + ) + assertCode(content) + }) }) describe('inlineTemplate mode', () => { diff --git a/packages/compiler-sfc/src/script/importUsageCheck.ts b/packages/compiler-sfc/src/script/importUsageCheck.ts index b42397d573b..28456a45bba 100644 --- a/packages/compiler-sfc/src/script/importUsageCheck.ts +++ b/packages/compiler-sfc/src/script/importUsageCheck.ts @@ -57,6 +57,9 @@ function resolveTemplateUsageCheckString(sfc: SFCDescriptor) { )}` } } + if (prop.type === NodeTypes.ATTRIBUTE && prop.name === 'ref' && prop.value?.content) { + code += `,${prop.value.content}` + } } } else if (node.type === NodeTypes.INTERPOLATION) { code += `,${processExp( From ceb0732e0b1bb4c8c505d80e97ff6fc89035fa90 Mon Sep 17 00:00:00 2001 From: Kid <44045911+kidonng@users.noreply.github.com> Date: Tue, 11 Jul 2023 17:30:01 +0800 Subject: [PATCH 0122/1346] fix(types/jsx): add `inert` attribute and missing `hidden` values (#8090) --- packages/runtime-dom/src/jsx.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/runtime-dom/src/jsx.ts b/packages/runtime-dom/src/jsx.ts index f76c8d7fb17..d3c0332c7c3 100644 --- a/packages/runtime-dom/src/jsx.ts +++ b/packages/runtime-dom/src/jsx.ts @@ -248,8 +248,9 @@ export interface HTMLAttributes extends AriaAttributes, EventHandlers { contextmenu?: string dir?: string draggable?: Booleanish - hidden?: Booleanish + hidden?: Booleanish | '' | 'hidden' | 'until-found' id?: string + inert?: Booleanish lang?: string placeholder?: string spellcheck?: Booleanish From 140a89b833bceed60838182b875d2953c70af114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E9=9B=BE=E4=B8=89=E8=AF=AD?= <32354856+baiwusanyu-c@users.noreply.github.com> Date: Tue, 11 Jul 2023 17:36:26 +0800 Subject: [PATCH 0123/1346] fix(teleport): handle target change while disabled (#7837) close #7835 --- .../__tests__/components/Teleport.spec.ts | 53 +++++++++++++++++++ .../runtime-core/src/components/Teleport.ts | 7 +++ 2 files changed, 60 insertions(+) diff --git a/packages/runtime-core/__tests__/components/Teleport.spec.ts b/packages/runtime-core/__tests__/components/Teleport.spec.ts index 57180ea139d..7371f53f7b6 100644 --- a/packages/runtime-core/__tests__/components/Teleport.spec.ts +++ b/packages/runtime-core/__tests__/components/Teleport.spec.ts @@ -475,4 +475,57 @@ describe('renderer: teleport', () => { expect(dir.mounted).toHaveBeenCalledTimes(1) expect(dir.unmounted).toHaveBeenCalledTimes(1) }) + + // #7835 + test(`ensure that target changes when disabled are updated correctly when enabled`, async () => { + const root = nodeOps.createElement('div') + const target1 = nodeOps.createElement('div') + const target2 = nodeOps.createElement('div') + const target3 = nodeOps.createElement('div') + const target = ref(target1) + const disabled = ref(true) + + const App = { + setup() { + return () => + h(Fragment, [ + h( + Teleport, + { to: target.value, disabled: disabled.value }, + h('div', 'teleported') + ) + ]) + } + } + render(h(App), root) + disabled.value = false + await nextTick() + expect(serializeInner(target1)).toMatchInlineSnapshot( + `"
teleported
"` + ) + expect(serializeInner(target2)).toMatchInlineSnapshot(`""`) + expect(serializeInner(target3)).toMatchInlineSnapshot(`""`) + + disabled.value = true + await nextTick() + target.value = target2 + await nextTick() + expect(serializeInner(target1)).toMatchInlineSnapshot(`""`) + expect(serializeInner(target2)).toMatchInlineSnapshot(`""`) + expect(serializeInner(target3)).toMatchInlineSnapshot(`""`) + + target.value = target3 + await nextTick() + expect(serializeInner(target1)).toMatchInlineSnapshot(`""`) + expect(serializeInner(target2)).toMatchInlineSnapshot(`""`) + expect(serializeInner(target3)).toMatchInlineSnapshot(`""`) + + disabled.value = false + await nextTick() + expect(serializeInner(target1)).toMatchInlineSnapshot(`""`) + expect(serializeInner(target2)).toMatchInlineSnapshot(`""`) + expect(serializeInner(target3)).toMatchInlineSnapshot( + `"
teleported
"` + ) + }) }) diff --git a/packages/runtime-core/src/components/Teleport.ts b/packages/runtime-core/src/components/Teleport.ts index 6e66d0444f9..4f7d16bc7d1 100644 --- a/packages/runtime-core/src/components/Teleport.ts +++ b/packages/runtime-core/src/components/Teleport.ts @@ -186,6 +186,13 @@ export const TeleportImpl = { internals, TeleportMoveTypes.TOGGLE ) + } else { + // #7835 + // When `teleport` is disabled, `to` may change, making it always old, + // to ensure the correct `to` when enabled + if (n2.props && n1.props && n2.props.to !== n1.props.to) { + n2.props.to = n1.props.to + } } } else { // target changed From 701fa735fc412eb9c0007f1877e5e31ef8ee84a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E9=9B=BE=E4=B8=89=E8=AF=AD?= <32354856+baiwusanyu-c@users.noreply.github.com> Date: Tue, 11 Jul 2023 17:36:54 +0800 Subject: [PATCH 0124/1346] dx(compiler-sfc): enhance `:deep` warnings (#8328) close #8313 --- packages/compiler-sfc/src/style/pluginScoped.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/compiler-sfc/src/style/pluginScoped.ts b/packages/compiler-sfc/src/style/pluginScoped.ts index 1dcc248ad71..f6e9be2fde7 100644 --- a/packages/compiler-sfc/src/style/pluginScoped.ts +++ b/packages/compiler-sfc/src/style/pluginScoped.ts @@ -130,9 +130,10 @@ function rewriteSelector( // DEPRECATED usage // .foo ::v-deep .bar -> .foo[xxxxxxx] .bar warn( - `::v-deep usage as a combinator has ` + - `been deprecated. Use :deep() instead.` + `${value} usage as a combinator has been deprecated. ` + + `Use :deep() instead of ${value} .` ) + const prev = selector.at(selector.index(n) - 1) if (prev && isSpaceCombinator(prev)) { selector.removeChild(prev) From 7c2e44ff5f10e2d381b503979f6193f6c20fa4c1 Mon Sep 17 00:00:00 2001 From: zqran <215244947@qq.com> Date: Tue, 11 Jul 2023 17:37:56 +0800 Subject: [PATCH 0125/1346] test(reactivity): use vitest fn instead of counting manually (#8476) --- packages/reactivity/__tests__/ref.spec.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/reactivity/__tests__/ref.spec.ts b/packages/reactivity/__tests__/ref.spec.ts index b0ba9d9cb1c..0ee32866da8 100644 --- a/packages/reactivity/__tests__/ref.spec.ts +++ b/packages/reactivity/__tests__/ref.spec.ts @@ -28,19 +28,18 @@ describe('reactivity/ref', () => { it('should be reactive', () => { const a = ref(1) let dummy - let calls = 0 - effect(() => { - calls++ + const fn = vi.fn(() => { dummy = a.value }) - expect(calls).toBe(1) + effect(fn) + expect(fn).toHaveBeenCalledTimes(1) expect(dummy).toBe(1) a.value = 2 - expect(calls).toBe(2) + expect(fn).toHaveBeenCalledTimes(2) expect(dummy).toBe(2) // same value should not trigger a.value = 2 - expect(calls).toBe(2) + expect(fn).toHaveBeenCalledTimes(2) }) it('should make nested properties reactive', () => { From 736cf154cc27f422c58b10cd9e1fe20ceab0eb10 Mon Sep 17 00:00:00 2001 From: zqran <215244947@qq.com> Date: Tue, 11 Jul 2023 17:38:32 +0800 Subject: [PATCH 0126/1346] chore(test): replace deprecated `initEvent` (#8490) --- packages/runtime-dom/__tests__/directives/vOn.spec.ts | 6 ++++-- packages/vue-compat/__tests__/utils.ts | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/runtime-dom/__tests__/directives/vOn.spec.ts b/packages/runtime-dom/__tests__/directives/vOn.spec.ts index 8a608343d43..2a4b02478f5 100644 --- a/packages/runtime-dom/__tests__/directives/vOn.spec.ts +++ b/packages/runtime-dom/__tests__/directives/vOn.spec.ts @@ -6,8 +6,10 @@ function triggerEvent( event: string, process?: (e: any) => any ) { - const e = document.createEvent('HTMLEvents') - e.initEvent(event, true, true) + const e = new Event(event, { + bubbles: true, + cancelable: true + }) if (event === 'click') { ;(e as any).button = 0 } diff --git a/packages/vue-compat/__tests__/utils.ts b/packages/vue-compat/__tests__/utils.ts index bcf72b296de..a7242122bcb 100644 --- a/packages/vue-compat/__tests__/utils.ts +++ b/packages/vue-compat/__tests__/utils.ts @@ -3,8 +3,10 @@ export function triggerEvent( event: string, process?: (e: any) => any ) { - const e = document.createEvent('HTMLEvents') - e.initEvent(event, true, true) + const e = new Event(event, { + bubbles: true, + cancelable: true + }) if (process) process(e) target.dispatchEvent(e) return e From 97b6fae6b477d5b1a95e94963667e171e16d5410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Tue, 11 Jul 2023 17:41:09 +0800 Subject: [PATCH 0127/1346] chore(shared): improve isPromise check in accordance with Promise A+ specification (#8506) --- packages/shared/src/general.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/shared/src/general.ts b/packages/shared/src/general.ts index 4138b2730e6..59a1e911b6c 100644 --- a/packages/shared/src/general.ts +++ b/packages/shared/src/general.ts @@ -50,7 +50,11 @@ export const isObject = (val: unknown): val is Record => val !== null && typeof val === 'object' export const isPromise = (val: unknown): val is Promise => { - return isObject(val) && isFunction(val.then) && isFunction(val.catch) + return ( + (isObject(val) || isFunction(val)) && + isFunction(val.then) && + isFunction(val.catch) + ) } export const objectToString = Object.prototype.toString From 438027cf9ecb63260f59d3027e0b188717694795 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Tue, 11 Jul 2023 11:52:43 +0200 Subject: [PATCH 0128/1346] perf: mark `defineComponent` as side-effects-free (#8512) --- package.json | 2 +- .../runtime-core/src/apiAsyncComponent.ts | 1 + .../runtime-core/src/apiDefineComponent.ts | 1 + packages/runtime-dom/src/apiCustomElement.ts | 2 + pnpm-lock.yaml | 90 +++++++++---------- 5 files changed, 46 insertions(+), 50 deletions(-) diff --git a/package.json b/package.json index 4310ae6368b..07caa03dbb5 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "prettier": "^2.7.1", "pug": "^3.0.1", "puppeteer": "~19.6.0", - "rollup": "^3.20.2", + "rollup": "^3.26.0", "rollup-plugin-dts": "^5.3.0", "rollup-plugin-esbuild": "^5.0.0", "rollup-plugin-polyfill-node": "^0.12.0", diff --git a/packages/runtime-core/src/apiAsyncComponent.ts b/packages/runtime-core/src/apiAsyncComponent.ts index bd878a49442..342339042ef 100644 --- a/packages/runtime-core/src/apiAsyncComponent.ts +++ b/packages/runtime-core/src/apiAsyncComponent.ts @@ -40,6 +40,7 @@ export interface AsyncComponentOptions { export const isAsyncWrapper = (i: ComponentInternalInstance | VNode): boolean => !!(i.type as ComponentOptions).__asyncLoader +/*! #__NO_SIDE_EFFECTS__ */ export function defineAsyncComponent< T extends Component = { new (): ComponentPublicInstance } >(source: AsyncComponentLoader | AsyncComponentOptions): T { diff --git a/packages/runtime-core/src/apiDefineComponent.ts b/packages/runtime-core/src/apiDefineComponent.ts index 76e9567fe2f..272bb548751 100644 --- a/packages/runtime-core/src/apiDefineComponent.ts +++ b/packages/runtime-core/src/apiDefineComponent.ts @@ -274,6 +274,7 @@ export function defineComponent< > // implementation, close to no-op +/*! #__NO_SIDE_EFFECTS__ */ export function defineComponent( options: unknown, extraOptions?: ComponentOptions diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index 1e551cc05da..2add422586d 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -140,6 +140,7 @@ export function defineCustomElement(options: { new (...args: any[]): ComponentPublicInstance }): VueElementConstructor +/*! #__NO_SIDE_EFFECTS__ */ export function defineCustomElement( options: any, hydrate?: RootHydrateFunction @@ -155,6 +156,7 @@ export function defineCustomElement( return VueCustomElement } +/*! #__NO_SIDE_EFFECTS__ */ export const defineSSRCustomElement = ((options: any) => { // @ts-ignore return defineCustomElement(options, hydrate) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17029035c31..77ac98cc527 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,22 +16,22 @@ importers: version: 7.21.3 '@rollup/plugin-alias': specifier: ^4.0.3 - version: 4.0.4(rollup@3.20.2) + version: 4.0.4(rollup@3.26.2) '@rollup/plugin-commonjs': specifier: ^24.0.1 - version: 24.1.0(rollup@3.20.2) + version: 24.1.0(rollup@3.26.2) '@rollup/plugin-json': specifier: ^6.0.0 - version: 6.0.0(rollup@3.20.2) + version: 6.0.0(rollup@3.26.2) '@rollup/plugin-node-resolve': specifier: ^15.0.1 - version: 15.1.0(rollup@3.20.2) + version: 15.1.0(rollup@3.26.2) '@rollup/plugin-replace': specifier: ^5.0.2 - version: 5.0.2(rollup@3.20.2) + version: 5.0.2(rollup@3.26.2) '@rollup/plugin-terser': specifier: ^0.4.0 - version: 0.4.0(rollup@3.20.2) + version: 0.4.0(rollup@3.26.2) '@types/hash-sum': specifier: ^1.0.0 version: 1.0.0 @@ -105,17 +105,17 @@ importers: specifier: ~19.6.0 version: 19.6.3 rollup: - specifier: ^3.20.2 - version: 3.20.2 + specifier: ^3.26.0 + version: 3.26.2 rollup-plugin-dts: specifier: ^5.3.0 - version: 5.3.0(rollup@3.20.2)(typescript@5.0.2) + version: 5.3.0(rollup@3.26.2)(typescript@5.0.2) rollup-plugin-esbuild: specifier: ^5.0.0 - version: 5.0.0(esbuild@0.17.19)(rollup@3.20.2) + version: 5.0.0(esbuild@0.17.19)(rollup@3.26.2) rollup-plugin-polyfill-node: specifier: ^0.12.0 - version: 0.12.0(rollup@3.20.2) + version: 0.12.0(rollup@3.26.2) semver: specifier: ^7.3.2 version: 7.5.3 @@ -1130,7 +1130,7 @@ packages: fastq: 1.15.0 dev: true - /@rollup/plugin-alias@4.0.4(rollup@3.20.2): + /@rollup/plugin-alias@4.0.4(rollup@3.26.2): resolution: {integrity: sha512-0CaAY238SMtYAWEXXptWSR8iz8NYZnH7zNBKuJ14xFJSGwLtPgjvXYsoApAHfzYXXH1ejxpVw7WlHss3zhh9SQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1139,11 +1139,11 @@ packages: rollup: optional: true dependencies: - rollup: 3.20.2 + rollup: 3.26.2 slash: 4.0.0 dev: true - /@rollup/plugin-commonjs@24.1.0(rollup@3.20.2): + /@rollup/plugin-commonjs@24.1.0(rollup@3.26.2): resolution: {integrity: sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1152,16 +1152,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.20.2) + '@rollup/pluginutils': 5.0.2(rollup@3.26.2) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.27.0 - rollup: 3.20.2 + rollup: 3.26.2 dev: true - /@rollup/plugin-inject@5.0.3(rollup@3.20.2): + /@rollup/plugin-inject@5.0.3(rollup@3.26.2): resolution: {integrity: sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1170,13 +1170,13 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.20.2) + '@rollup/pluginutils': 5.0.2(rollup@3.26.2) estree-walker: 2.0.2 magic-string: 0.27.0 - rollup: 3.20.2 + rollup: 3.26.2 dev: true - /@rollup/plugin-json@6.0.0(rollup@3.20.2): + /@rollup/plugin-json@6.0.0(rollup@3.26.2): resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1185,11 +1185,11 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.20.2) - rollup: 3.20.2 + '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + rollup: 3.26.2 dev: true - /@rollup/plugin-node-resolve@15.1.0(rollup@3.20.2): + /@rollup/plugin-node-resolve@15.1.0(rollup@3.26.2): resolution: {integrity: sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1198,16 +1198,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.20.2) + '@rollup/pluginutils': 5.0.2(rollup@3.26.2) '@types/resolve': 1.20.2 deepmerge: 4.3.0 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.1 - rollup: 3.20.2 + rollup: 3.26.2 dev: true - /@rollup/plugin-replace@5.0.2(rollup@3.20.2): + /@rollup/plugin-replace@5.0.2(rollup@3.26.2): resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1216,12 +1216,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.20.2) + '@rollup/pluginutils': 5.0.2(rollup@3.26.2) magic-string: 0.27.0 - rollup: 3.20.2 + rollup: 3.26.2 dev: true - /@rollup/plugin-terser@0.4.0(rollup@3.20.2): + /@rollup/plugin-terser@0.4.0(rollup@3.26.2): resolution: {integrity: sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1230,13 +1230,13 @@ packages: rollup: optional: true dependencies: - rollup: 3.20.2 + rollup: 3.26.2 serialize-javascript: 6.0.1 smob: 0.0.6 terser: 5.18.2 dev: true - /@rollup/pluginutils@5.0.2(rollup@3.20.2): + /@rollup/pluginutils@5.0.2(rollup@3.26.2): resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1248,7 +1248,7 @@ packages: '@types/estree': 1.0.0 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.20.2 + rollup: 3.26.2 dev: true /@tootallnate/once@2.0.0: @@ -4996,7 +4996,7 @@ packages: glob: 7.2.3 dev: true - /rollup-plugin-dts@5.3.0(rollup@3.20.2)(typescript@5.0.2): + /rollup-plugin-dts@5.3.0(rollup@3.26.2)(typescript@5.0.2): resolution: {integrity: sha512-8FXp0ZkyZj1iU5klkIJYLjIq/YZSwBoERu33QBDxm/1yw5UU4txrEtcmMkrq+ZiKu3Q4qvPCNqc3ovX6rjqzbQ==} engines: {node: '>=v14'} peerDependencies: @@ -5004,45 +5004,37 @@ packages: typescript: ^4.1 || ^5.0 dependencies: magic-string: 0.30.0 - rollup: 3.20.2 + rollup: 3.26.2 typescript: 5.0.2 optionalDependencies: '@babel/code-frame': 7.22.5 dev: true - /rollup-plugin-esbuild@5.0.0(esbuild@0.17.19)(rollup@3.20.2): + /rollup-plugin-esbuild@5.0.0(esbuild@0.17.19)(rollup@3.26.2): resolution: {integrity: sha512-1cRIOHAPh8WQgdQQyyvFdeOdxuiyk+zB5zJ5+YOwrZP4cJ0MT3Fs48pQxrZeyZHcn+klFherytILVfE4aYrneg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} peerDependencies: esbuild: '>=0.10.1' rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.20.2) + '@rollup/pluginutils': 5.0.2(rollup@3.26.2) debug: 4.3.4 es-module-lexer: 1.1.0 esbuild: 0.17.19 joycon: 3.1.1 jsonc-parser: 3.2.0 - rollup: 3.20.2 + rollup: 3.26.2 transitivePeerDependencies: - supports-color dev: true - /rollup-plugin-polyfill-node@0.12.0(rollup@3.20.2): + /rollup-plugin-polyfill-node@0.12.0(rollup@3.26.2): resolution: {integrity: sha512-PWEVfDxLEKt8JX1nZ0NkUAgXpkZMTb85rO/Ru9AQ69wYW8VUCfDgP4CGRXXWYni5wDF0vIeR1UoF3Jmw/Lt3Ug==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 dependencies: - '@rollup/plugin-inject': 5.0.3(rollup@3.20.2) - rollup: 3.20.2 - dev: true - - /rollup@3.20.2: - resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 + '@rollup/plugin-inject': 5.0.3(rollup@3.26.2) + rollup: 3.26.2 dev: true /rollup@3.26.2: @@ -5808,7 +5800,7 @@ packages: '@types/node': 16.18.38 esbuild: 0.17.19 postcss: 8.4.21 - rollup: 3.20.2 + rollup: 3.26.2 terser: 5.18.2 optionalDependencies: fsevents: 2.3.2 From 6a22b1f6c287b60eda385df8a514335af8e040ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Tue, 11 Jul 2023 17:56:02 +0800 Subject: [PATCH 0129/1346] fix(types): ensure nextTick return type reflect correct Promise value (#8406) --- packages/runtime-core/__tests__/scheduler.spec.ts | 12 ++++++++++++ packages/runtime-core/src/scheduler.ts | 8 ++++---- packages/shared/src/typeUtils.ts | 9 +++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/runtime-core/__tests__/scheduler.spec.ts b/packages/runtime-core/__tests__/scheduler.spec.ts index c06b9afb3e3..6246a87e8f7 100644 --- a/packages/runtime-core/__tests__/scheduler.spec.ts +++ b/packages/runtime-core/__tests__/scheduler.spec.ts @@ -546,4 +546,16 @@ describe('scheduler', () => { await nextTick() expect(spy).toHaveBeenCalledTimes(1) }) + + it('nextTick should return promise', async () => { + const fn = vi.fn(() => { + return 1 + }) + + const p = nextTick(fn) + + expect(p).toBeInstanceOf(Promise) + expect(await p).toBe(1) + expect(fn).toHaveBeenCalledTimes(1) + }) }) diff --git a/packages/runtime-core/src/scheduler.ts b/packages/runtime-core/src/scheduler.ts index 923f3ec8251..64c70ab59ca 100644 --- a/packages/runtime-core/src/scheduler.ts +++ b/packages/runtime-core/src/scheduler.ts @@ -1,5 +1,5 @@ import { ErrorCodes, callWithErrorHandling } from './errorHandling' -import { isArray, NOOP } from '@vue/shared' +import { Awaited, isArray, NOOP } from '@vue/shared' import { ComponentInternalInstance, getComponentName } from './component' import { warn } from './warning' @@ -50,10 +50,10 @@ let currentFlushPromise: Promise | null = null const RECURSION_LIMIT = 100 type CountMap = Map -export function nextTick( +export function nextTick( this: T, - fn?: (this: T) => void -): Promise { + fn?: (this: T) => R +): Promise> { const p = currentFlushPromise || resolvedPromise return fn ? p.then(this ? fn.bind(this) : fn) : p } diff --git a/packages/shared/src/typeUtils.ts b/packages/shared/src/typeUtils.ts index 67fb47c23b3..1deb4729125 100644 --- a/packages/shared/src/typeUtils.ts +++ b/packages/shared/src/typeUtils.ts @@ -12,3 +12,12 @@ export type LooseRequired = { [P in keyof (T & Required)]: T[P] } // If the type T accepts type "any", output type Y, otherwise output type N. // https://stackoverflow.com/questions/49927523/disallow-call-with-any/49928360#49928360 export type IfAny = 0 extends 1 & T ? Y : N + +// To prevent users with TypeScript versions lower than 4.5 from encountering unsupported Awaited type, a copy has been made here. +export type Awaited = T extends null | undefined + ? T // special case for `null | undefined` when not in `--strictNullChecks` mode + : T extends object & { then(onfulfilled: infer F, ...args: infer _): any } // `await` only unwraps object types with a callable `then`. Non-object types are not unwrapped + ? F extends (value: infer V, ...args: infer _) => any // if the argument to `then` is callable, extracts the first argument + ? Awaited // recursively unwrap the value + : never // the argument to `then` was not callable + : T // non-object or non-thenable From f07cb18fedf9a446545aadf76bcdfb957c7ebcbd Mon Sep 17 00:00:00 2001 From: zqran <215244947@qq.com> Date: Tue, 11 Jul 2023 18:35:22 +0800 Subject: [PATCH 0130/1346] fix(types): correct withDefaults return type for boolean prop with undefined default value (#8602) --- packages/dts-test/setupHelpers.test-d.ts | 20 ++++++++++++++++++++ packages/runtime-core/src/apiSetupHelpers.ts | 8 +++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/dts-test/setupHelpers.test-d.ts b/packages/dts-test/setupHelpers.test-d.ts index 77342590dc6..934e6056d2d 100644 --- a/packages/dts-test/setupHelpers.test-d.ts +++ b/packages/dts-test/setupHelpers.test-d.ts @@ -134,6 +134,26 @@ describe('defineProps w/ generic type declaration + withDefaults', (res.bool) }) +describe('withDefaults w/ boolean type', () => { + const res1 = withDefaults( + defineProps<{ + bool?: boolean + }>(), + { bool: false } + ) + expectType(res1.bool) + + const res2 = withDefaults( + defineProps<{ + bool?: boolean + }>(), + { + bool: undefined + } + ) + expectType(res2.bool) +}) + describe('defineProps w/ runtime declaration', () => { // runtime declaration const props = defineProps({ diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index c00937981d9..93200667081 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -303,7 +303,13 @@ type PropsWithDefaults< ? T[K] : NotUndefined : never -} & { readonly [K in BKeys]-?: boolean } +} & { + readonly [K in BKeys]-?: K extends keyof Defaults + ? Defaults[K] extends undefined + ? boolean | undefined + : boolean + : boolean +} /** * Vue ` + + `) + expect(content).toMatch( + `return { get FooBar() { return FooBar }, get foo() { return foo }, ` + + `get bar() { return bar } }` + ) + assertCode(content) + }) + // https://github.com/vuejs/core/issues/4599 test('attribute expressions', () => { const { content } = compile(` diff --git a/packages/compiler-sfc/src/script/importUsageCheck.ts b/packages/compiler-sfc/src/script/importUsageCheck.ts index 28456a45bba..7019dcf2312 100644 --- a/packages/compiler-sfc/src/script/importUsageCheck.ts +++ b/packages/compiler-sfc/src/script/importUsageCheck.ts @@ -50,6 +50,12 @@ function resolveTemplateUsageCheckString(sfc: SFCDescriptor) { if (!isBuiltInDirective(prop.name)) { code += `,v${capitalize(camelize(prop.name))}` } + if (prop.arg && !(prop.arg as SimpleExpressionNode).isStatic) { + code += `,${processExp( + (prop.arg as SimpleExpressionNode).content, + prop.name + )}` + } if (prop.exp) { code += `,${processExp( (prop.exp as SimpleExpressionNode).content, From 2a2810c716e7882a2dbd5ce2007973d5c14e81f5 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 11 Jul 2023 18:44:00 +0800 Subject: [PATCH 0132/1346] chore: upgrade to typescript 5.1 --- package.json | 2 +- packages/dts-test/defineComponent.test-d.tsx | 2 +- packages/shared/src/general.ts | 4 +- pnpm-lock.yaml | 51 +++++++++++--------- 4 files changed, 33 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 07caa03dbb5..f14db16ddae 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "terser": "^5.15.1", "todomvc-app-css": "^2.3.0", "tslib": "^2.5.0", - "typescript": "^5.0.0", + "typescript": "^5.1.6", "vite": "^4.3.0", "vitest": "^0.30.1" } diff --git a/packages/dts-test/defineComponent.test-d.tsx b/packages/dts-test/defineComponent.test-d.tsx index edd8d17eb06..7466249e10f 100644 --- a/packages/dts-test/defineComponent.test-d.tsx +++ b/packages/dts-test/defineComponent.test-d.tsx @@ -1363,13 +1363,13 @@ describe('function syntax w/ runtime props', () => { } ) - // @ts-expect-error prop type mismatch defineComponent( (_props: { msg: string }) => { return () => {} }, { props: { + // @ts-expect-error prop type mismatch msg: Number } } diff --git a/packages/shared/src/general.ts b/packages/shared/src/general.ts index 59a1e911b6c..0117e67000d 100644 --- a/packages/shared/src/general.ts +++ b/packages/shared/src/general.ts @@ -52,8 +52,8 @@ export const isObject = (val: unknown): val is Record => export const isPromise = (val: unknown): val is Promise => { return ( (isObject(val) || isFunction(val)) && - isFunction(val.then) && - isFunction(val.catch) + isFunction((val as any).then) && + isFunction((val as any).catch) ) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77ac98cc527..62d5e18f419 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,7 +40,7 @@ importers: version: 16.18.38 '@typescript-eslint/parser': specifier: ^5.56.0 - version: 5.56.0(eslint@8.33.0)(typescript@5.0.2) + version: 5.56.0(eslint@8.33.0)(typescript@5.1.6) '@vitest/coverage-istanbul': specifier: ^0.29.7 version: 0.29.7(vitest@0.30.1) @@ -67,7 +67,7 @@ importers: version: 8.33.0 eslint-plugin-jest: specifier: ^27.2.1 - version: 27.2.2(eslint@8.33.0)(typescript@5.0.2) + version: 27.2.2(eslint@8.33.0)(typescript@5.1.6) estree-walker: specifier: ^2.0.2 version: 2.0.2 @@ -109,7 +109,7 @@ importers: version: 3.26.2 rollup-plugin-dts: specifier: ^5.3.0 - version: 5.3.0(rollup@3.26.2)(typescript@5.0.2) + version: 5.3.0(rollup@3.26.2)(typescript@5.1.6) rollup-plugin-esbuild: specifier: ^5.0.0 version: 5.0.0(esbuild@0.17.19)(rollup@3.26.2) @@ -135,8 +135,8 @@ importers: specifier: ^2.5.0 version: 2.6.0 typescript: - specifier: ^5.0.0 - version: 5.0.2 + specifier: ^5.1.6 + version: 5.1.6 vite: specifier: ^4.3.0 version: 4.3.1(@types/node@16.18.38)(terser@5.18.2) @@ -1318,7 +1318,7 @@ packages: dev: true optional: true - /@typescript-eslint/parser@5.56.0(eslint@8.33.0)(typescript@5.0.2): + /@typescript-eslint/parser@5.56.0(eslint@8.33.0)(typescript@5.1.6): resolution: {integrity: sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1330,10 +1330,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.56.0 '@typescript-eslint/types': 5.56.0 - '@typescript-eslint/typescript-estree': 5.56.0(typescript@5.0.2) + '@typescript-eslint/typescript-estree': 5.56.0(typescript@5.1.6) debug: 4.3.4 eslint: 8.33.0 - typescript: 5.0.2 + typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true @@ -1364,7 +1364,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.50.0(typescript@5.0.2): + /@typescript-eslint/typescript-estree@5.50.0(typescript@5.1.6): resolution: {integrity: sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1379,13 +1379,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.3 - tsutils: 3.21.0(typescript@5.0.2) - typescript: 5.0.2 + tsutils: 3.21.0(typescript@5.1.6) + typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.56.0(typescript@5.0.2): + /@typescript-eslint/typescript-estree@5.56.0(typescript@5.1.6): resolution: {integrity: sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1400,13 +1400,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.3 - tsutils: 3.21.0(typescript@5.0.2) - typescript: 5.0.2 + tsutils: 3.21.0(typescript@5.1.6) + typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.50.0(eslint@8.33.0)(typescript@5.0.2): + /@typescript-eslint/utils@5.50.0(eslint@8.33.0)(typescript@5.1.6): resolution: {integrity: sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1416,7 +1416,7 @@ packages: '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.50.0 '@typescript-eslint/types': 5.50.0 - '@typescript-eslint/typescript-estree': 5.50.0(typescript@5.0.2) + '@typescript-eslint/typescript-estree': 5.50.0(typescript@5.1.6) eslint: 8.33.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0(eslint@8.33.0) @@ -2643,7 +2643,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-plugin-jest@27.2.2(eslint@8.33.0)(typescript@5.0.2): + /eslint-plugin-jest@27.2.2(eslint@8.33.0)(typescript@5.1.6): resolution: {integrity: sha512-euzbp06F934Z7UDl5ZUaRPLAc9MKjh0rMPERrHT7UhlCEwgb25kBj37TvMgWeHZVkR5I9CayswrpoaqZU1RImw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2656,7 +2656,7 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/utils': 5.50.0(eslint@8.33.0)(typescript@5.0.2) + '@typescript-eslint/utils': 5.50.0(eslint@8.33.0)(typescript@5.1.6) eslint: 8.33.0 transitivePeerDependencies: - supports-color @@ -4996,7 +4996,7 @@ packages: glob: 7.2.3 dev: true - /rollup-plugin-dts@5.3.0(rollup@3.26.2)(typescript@5.0.2): + /rollup-plugin-dts@5.3.0(rollup@3.26.2)(typescript@5.1.6): resolution: {integrity: sha512-8FXp0ZkyZj1iU5klkIJYLjIq/YZSwBoERu33QBDxm/1yw5UU4txrEtcmMkrq+ZiKu3Q4qvPCNqc3ovX6rjqzbQ==} engines: {node: '>=v14'} peerDependencies: @@ -5005,7 +5005,7 @@ packages: dependencies: magic-string: 0.30.0 rollup: 3.26.2 - typescript: 5.0.2 + typescript: 5.1.6 optionalDependencies: '@babel/code-frame': 7.22.5 dev: true @@ -5599,14 +5599,14 @@ packages: resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} dev: true - /tsutils@3.21.0(typescript@5.0.2): + /tsutils@3.21.0(typescript@5.1.6): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.0.2 + typescript: 5.1.6 dev: true /type-check@0.3.2: @@ -5665,6 +5665,13 @@ packages: resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} engines: {node: '>=12.20'} hasBin: true + dev: false + + /typescript@5.1.6: + resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + engines: {node: '>=14.17'} + hasBin: true + dev: true /ufo@1.1.1: resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} From 24db9516d8b4857182ec1a3af86cb7346691679b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Wed, 12 Jul 2023 11:03:14 +0800 Subject: [PATCH 0133/1346] fix(compiler-sfc): don't hoist props and emit (#8535) fix #7805 close #7812 --- .../__snapshots__/compileScript.spec.ts.snap | 87 ++++--------------- .../__tests__/compileScript.spec.ts | 76 ++++------------ .../__snapshots__/defineEmits.spec.ts.snap | 64 +++++++------- .../__snapshots__/defineProps.spec.ts.snap | 48 +++------- .../definePropsDestructure.spec.ts.snap | 59 ++++++++++++- .../compileScript/defineEmits.spec.ts | 6 +- .../definePropsDestructure.spec.ts | 52 +++++++++++ packages/compiler-sfc/src/compileScript.ts | 55 +++++++----- packages/compiler-sfc/src/script/context.ts | 7 +- .../compiler-sfc/src/script/defineEmits.ts | 5 +- .../compiler-sfc/src/script/defineProps.ts | 55 ++++++------ .../src/script/definePropsDestructure.ts | 1 - 12 files changed, 260 insertions(+), 255 deletions(-) diff --git a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap index b7925ada895..949c9946d9f 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap @@ -62,6 +62,24 @@ return { fn } })" `; +exports[`SFC compile - `) - assertCode(content) - expect(content).toMatch(`const a = 1;`) // test correct removal - expect(content).toMatch(`props: ['item'],`) - expect(content).toMatch(`emits: ['a'],`) - }) - - // #6757 - test('defineProps/defineEmits in multi-variable declaration fix #6757 ', () => { - const { content } = compile(` - - `) - assertCode(content) - expect(content).toMatch(`const a = 1;`) // test correct removal - expect(content).toMatch(`props: ['item'],`) - expect(content).toMatch(`emits: ['a'],`) - }) - - // #7422 - test('defineProps/defineEmits in multi-variable declaration fix #7422', () => { - const { content } = compile(` - - `) - assertCode(content) - expect(content).toMatch(`props: ['item'],`) - expect(content).toMatch(`emits: ['foo'],`) - expect(content).toMatch(`const a = 0,`) - expect(content).toMatch(`b = 0;`) - }) - - test('defineProps/defineEmits in multi-variable declaration (full removal)', () => { - const { content } = compile(` - - `) - assertCode(content) - expect(content).toMatch(`props: ['item'],`) - expect(content).toMatch(`emits: ['a'],`) - }) - describe(' + `) + assertCode(content) + + expect(content).toMatch(`console.log('test')`) + expect(content).toMatch(`const props = __props;`) + expect(content).toMatch(`const emit = __emit;`) + expect(content).toMatch(`(function () {})()`) + }) + test('script setup first, named default export', () => { const { content } = compile(` + `) + assertCode(content) + expect(content).toMatch(`const a = 1;`) + expect(content).toMatch(`props: ['item'],`) + }) + + // #6757 + test('multi-variable declaration fix #6757 ', () => { + const { content } = compile(` + + `) + assertCode(content) + expect(content).toMatch(`const a = 1;`) + expect(content).toMatch(`props: ['item'],`) + }) + + // #7422 + test('multi-variable declaration fix #7422', () => { + const { content } = compile(` + + `) + assertCode(content) + expect(content).toMatch(`const a = 0,`) + expect(content).toMatch(`b = 0;`) + expect(content).toMatch(`props: ['item'],`) + }) + + test('defineProps/defineEmits in multi-variable declaration (full removal)', () => { + const { content } = compile(` + + `) + assertCode(content) + expect(content).toMatch(`props: ['item'],`) + expect(content).toMatch(`emits: ['a'],`) + }) + describe('errors', () => { test('should error on deep destructure', () => { expect(() => diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 046797cfbe5..cfcc607c72d 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -552,7 +552,11 @@ export function compileScript( (processDefineSlots(ctx, init, decl.id) || processDefineModel(ctx, init, decl.id)) - if (isDefineProps || isDefineEmits) { + if ( + isDefineProps && + !ctx.propsDestructureRestId && + ctx.propsDestructureDecl + ) { if (left === 1) { ctx.s.remove(node.start! + startOffset, node.end! + startOffset) } else { @@ -570,6 +574,12 @@ export function compileScript( ctx.s.remove(start, end) left-- } + } else if (isDefineEmits) { + ctx.s.overwrite( + startOffset + init.start!, + startOffset + init.end!, + '__emit' + ) } else { lastNonRemoved = i } @@ -781,22 +791,29 @@ export function compileScript( // inject user assignment of props // we use a default __props so that template expressions referencing props // can use it directly - if (ctx.propsIdentifier) { - ctx.s.prependLeft( - startOffset, - `\nconst ${ctx.propsIdentifier} = __props;\n` - ) - } - if (ctx.propsDestructureRestId) { - ctx.s.prependLeft( - startOffset, - `\nconst ${ctx.propsDestructureRestId} = ${ctx.helper( - `createPropsRestProxy` - )}(__props, ${JSON.stringify( - Object.keys(ctx.propsDestructuredBindings) - )});\n` - ) + if (ctx.propsDecl) { + if (ctx.propsDestructureRestId) { + ctx.s.overwrite( + startOffset + ctx.propsCall!.start!, + startOffset + ctx.propsCall!.end!, + `${ctx.helper(`createPropsRestProxy`)}(__props, ${JSON.stringify( + Object.keys(ctx.propsDestructuredBindings) + )})` + ) + ctx.s.overwrite( + startOffset + ctx.propsDestructureDecl!.start!, + startOffset + ctx.propsDestructureDecl!.end!, + ctx.propsDestructureRestId + ) + } else if (!ctx.propsDestructureDecl) { + ctx.s.overwrite( + startOffset + ctx.propsCall!.start!, + startOffset + ctx.propsCall!.end!, + '__props' + ) + } } + // inject temp variables for async context preservation if (hasAwait) { const any = ctx.isTS ? `: any` : `` @@ -807,10 +824,8 @@ export function compileScript( ctx.hasDefineExposeCall || !options.inlineTemplate ? [`expose: __expose`] : [] - if (ctx.emitIdentifier) { - destructureElements.push( - ctx.emitIdentifier === `emit` ? `emit` : `emit: ${ctx.emitIdentifier}` - ) + if (ctx.emitDecl) { + destructureElements.push(`emit: __emit`) } if (destructureElements.length) { args += `, { ${destructureElements.join(', ')} }` diff --git a/packages/compiler-sfc/src/script/context.ts b/packages/compiler-sfc/src/script/context.ts index af2dee16568..5fe09d28a42 100644 --- a/packages/compiler-sfc/src/script/context.ts +++ b/packages/compiler-sfc/src/script/context.ts @@ -1,4 +1,4 @@ -import { Node, ObjectPattern, Program } from '@babel/types' +import { CallExpression, Node, ObjectPattern, Program } from '@babel/types' import { SFCDescriptor } from '../parse' import { generateCodeFrame } from '@vue/shared' import { parse as babelParse, ParserPlugin } from '@babel/parser' @@ -38,7 +38,8 @@ export class ScriptCompileContext { hasDefineModelCall = false // defineProps - propsIdentifier: string | undefined + propsCall: CallExpression | undefined + propsDecl: Node | undefined propsRuntimeDecl: Node | undefined propsTypeDecl: Node | undefined propsDestructureDecl: ObjectPattern | undefined @@ -49,7 +50,7 @@ export class ScriptCompileContext { // defineEmits emitsRuntimeDecl: Node | undefined emitsTypeDecl: Node | undefined - emitIdentifier: string | undefined + emitDecl: Node | undefined // defineModel modelDecls: Record = {} diff --git a/packages/compiler-sfc/src/script/defineEmits.ts b/packages/compiler-sfc/src/script/defineEmits.ts index a50cf91fc4a..02014d1b276 100644 --- a/packages/compiler-sfc/src/script/defineEmits.ts +++ b/packages/compiler-sfc/src/script/defineEmits.ts @@ -29,10 +29,7 @@ export function processDefineEmits( ctx.emitsTypeDecl = node.typeParameters.params[0] } - if (declId) { - ctx.emitIdentifier = - declId.type === 'Identifier' ? declId.name : ctx.getString(declId) - } + ctx.emitDecl = declId return true } diff --git a/packages/compiler-sfc/src/script/defineProps.ts b/packages/compiler-sfc/src/script/defineProps.ts index 1ae5a16e3d6..5004e314da1 100644 --- a/packages/compiler-sfc/src/script/defineProps.ts +++ b/packages/compiler-sfc/src/script/defineProps.ts @@ -77,15 +77,14 @@ export function processDefineProps( ctx.propsTypeDecl = node.typeParameters.params[0] } - if (declId) { - // handle props destructure - if (declId.type === 'ObjectPattern') { - processPropsDestructure(ctx, declId) - } else { - ctx.propsIdentifier = ctx.getString(declId) - } + // handle props destructure + if (declId && declId.type === 'ObjectPattern') { + processPropsDestructure(ctx, declId) } + ctx.propsCall = node + ctx.propsDecl = declId + return true } @@ -97,31 +96,33 @@ function processWithDefaults( if (!isCallOf(node, WITH_DEFAULTS)) { return false } - if (processDefineProps(ctx, node.arguments[0], declId)) { - if (ctx.propsRuntimeDecl) { - ctx.error( - `${WITH_DEFAULTS} can only be used with type-based ` + - `${DEFINE_PROPS} declaration.`, - node - ) - } - if (ctx.propsDestructureDecl) { - ctx.error( - `${WITH_DEFAULTS}() is unnecessary when using destructure with ${DEFINE_PROPS}().\n` + - `Prefer using destructure default values, e.g. const { foo = 1 } = defineProps(...).`, - node.callee - ) - } - ctx.propsRuntimeDefaults = node.arguments[1] - if (!ctx.propsRuntimeDefaults) { - ctx.error(`The 2nd argument of ${WITH_DEFAULTS} is required.`, node) - } - } else { + if (!processDefineProps(ctx, node.arguments[0], declId)) { ctx.error( `${WITH_DEFAULTS}' first argument must be a ${DEFINE_PROPS} call.`, node.arguments[0] || node ) } + + if (ctx.propsRuntimeDecl) { + ctx.error( + `${WITH_DEFAULTS} can only be used with type-based ` + + `${DEFINE_PROPS} declaration.`, + node + ) + } + if (ctx.propsDestructureDecl) { + ctx.error( + `${WITH_DEFAULTS}() is unnecessary when using destructure with ${DEFINE_PROPS}().\n` + + `Prefer using destructure default values, e.g. const { foo = 1 } = defineProps(...).`, + node.callee + ) + } + ctx.propsRuntimeDefaults = node.arguments[1] + if (!ctx.propsRuntimeDefaults) { + ctx.error(`The 2nd argument of ${WITH_DEFAULTS} is required.`, node) + } + ctx.propsCall = node + return true } diff --git a/packages/compiler-sfc/src/script/definePropsDestructure.ts b/packages/compiler-sfc/src/script/definePropsDestructure.ts index 5965262f3c3..5aa895bc7fe 100644 --- a/packages/compiler-sfc/src/script/definePropsDestructure.ts +++ b/packages/compiler-sfc/src/script/definePropsDestructure.ts @@ -28,7 +28,6 @@ export function processPropsDestructure( declId: ObjectPattern ) { if (!ctx.options.propsDestructure && !ctx.options.reactivityTransform) { - ctx.propsIdentifier = ctx.getString(declId) return } From 70c3ac746d584d20956628bec185d24e0e90cef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Wed, 12 Jul 2023 11:05:43 +0800 Subject: [PATCH 0134/1346] dx(compiler-sfc): warn when disabled defineModel (#8534) --- packages/compiler-sfc/src/script/defineModel.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/compiler-sfc/src/script/defineModel.ts b/packages/compiler-sfc/src/script/defineModel.ts index 987e67fc147..432b8676fbd 100644 --- a/packages/compiler-sfc/src/script/defineModel.ts +++ b/packages/compiler-sfc/src/script/defineModel.ts @@ -24,7 +24,15 @@ export function processDefineModel( node: Node, declId?: LVal ): boolean { - if (!ctx.options.defineModel || !isCallOf(node, DEFINE_MODEL)) { + if (!isCallOf(node, DEFINE_MODEL)) { + return false + } + + if (!ctx.options.defineModel) { + warnOnce( + `defineModel() is an experimental feature and disabled by default.\n` + + `To enable it, follow the RFC at https://github.com/vuejs/rfcs/discussions/503.` + ) return false } From 24d98f03276de5b0fbced5a4c9d61b24e7d9d084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Wed, 12 Jul 2023 11:13:20 +0800 Subject: [PATCH 0135/1346] perf(custom-element): cancel `MutationObserver` listener when disconnected (#8666) --- packages/runtime-dom/src/apiCustomElement.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index 2add422586d..5662b0b535b 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -178,7 +178,7 @@ export class VueElement extends BaseClass { private _resolved = false private _numberProps: Record | null = null private _styles?: HTMLStyleElement[] - + private _ob?: MutationObserver | null = null constructor( private _def: InnerComponentDef, private _props: Record = {}, @@ -215,6 +215,10 @@ export class VueElement extends BaseClass { disconnectedCallback() { this._connected = false + if (this._ob) { + this._ob.disconnect() + this._ob = null + } nextTick(() => { if (!this._connected) { render(null, this.shadowRoot!) @@ -235,11 +239,13 @@ export class VueElement extends BaseClass { } // watch future attr changes - new MutationObserver(mutations => { + this._ob = new MutationObserver(mutations => { for (const m of mutations) { this._setAttr(m.attributeName!) } - }).observe(this, { attributes: true }) + }) + + this._ob.observe(this, { attributes: true }) const resolve = (def: InnerComponentDef, isAsync = false) => { const { props, styles } = def From 37a14a5dae9999bbe684c6de400afc63658ffe90 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 12 Jul 2023 11:38:59 +0800 Subject: [PATCH 0136/1346] Revert "fix(types): propagate type parameter constraints for TypeScript 4.8 (#6351)" This reverts commit 516fabb725cdf29e948b8b83dd6db9b80fbd706d. --- packages/runtime-core/src/apiCreateApp.ts | 4 ++-- packages/runtime-core/src/directives.ts | 16 ++++------------ packages/runtime-core/src/renderer.ts | 8 ++++---- packages/runtime-core/src/vnode.ts | 4 ++-- 4 files changed, 12 insertions(+), 20 deletions(-) diff --git a/packages/runtime-core/src/apiCreateApp.ts b/packages/runtime-core/src/apiCreateApp.ts index 971b406cf01..c5ac9d68a52 100644 --- a/packages/runtime-core/src/apiCreateApp.ts +++ b/packages/runtime-core/src/apiCreateApp.ts @@ -16,7 +16,7 @@ import { ComponentPublicInstance } from './componentPublicInstance' import { Directive, validateDirectiveName } from './directives' -import { RendererElement, RootRenderFunction } from './renderer' +import { RootRenderFunction } from './renderer' import { InjectionKey } from './apiInject' import { warn } from './warning' import { createVNode, cloneVNode, VNode } from './vnode' @@ -196,7 +196,7 @@ export type CreateAppFunction = ( let uid = 0 -export function createAppAPI( +export function createAppAPI( render: RootRenderFunction, hydrate?: RootHydrateFunction ): CreateAppFunction { diff --git a/packages/runtime-core/src/directives.ts b/packages/runtime-core/src/directives.ts index eb80cd495f6..18c3352b002 100644 --- a/packages/runtime-core/src/directives.ts +++ b/packages/runtime-core/src/directives.ts @@ -21,7 +21,6 @@ import { ComponentPublicInstance } from './componentPublicInstance' import { mapCompatDirectiveHook } from './compat/customDirective' import { pauseTracking, resetTracking } from '@vue/reactivity' import { traverse } from './apiWatch' -import { RendererElement } from './renderer' export interface DirectiveBinding { instance: ComponentPublicInstance | null @@ -32,11 +31,7 @@ export interface DirectiveBinding { dir: ObjectDirective } -export type DirectiveHook< - T extends RendererElement = any, - Prev = VNode | null, - V = any -> = ( +export type DirectiveHook | null, V = any> = ( el: T, binding: DirectiveBinding, vnode: VNode, @@ -48,7 +43,7 @@ export type SSRDirectiveHook = ( vnode: VNode ) => Data | undefined -export interface ObjectDirective { +export interface ObjectDirective { created?: DirectiveHook beforeMount?: DirectiveHook mounted?: DirectiveHook @@ -60,12 +55,9 @@ export interface ObjectDirective { deep?: boolean } -export type FunctionDirective< - T extends RendererElement = any, - V = any -> = DirectiveHook +export type FunctionDirective = DirectiveHook -export type Directive = +export type Directive = | ObjectDirective | FunctionDirective diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts index 3ab81cbf3ba..383e17fb0f5 100644 --- a/packages/runtime-core/src/renderer.ts +++ b/packages/runtime-core/src/renderer.ts @@ -90,7 +90,7 @@ export type RootRenderFunction = ( export interface RendererOptions< HostNode = RendererNode, - HostElement extends RendererElement = RendererElement + HostElement = RendererElement > { patchProp( el: HostElement, @@ -145,7 +145,7 @@ export interface RendererElement extends RendererNode {} // to optimize bundle size. export interface RendererInternals< HostNode = RendererNode, - HostElement extends RendererElement = RendererElement + HostElement = RendererElement > { p: PatchFn um: UnmountFn @@ -295,7 +295,7 @@ export const queuePostRenderEffect = __FEATURE_SUSPENSE__ */ export function createRenderer< HostNode = RendererNode, - HostElement extends RendererElement = RendererElement + HostElement = RendererElement >(options: RendererOptions) { return baseCreateRenderer(options) } @@ -312,7 +312,7 @@ export function createHydrationRenderer( // overload 1: no hydration function baseCreateRenderer< HostNode = RendererNode, - HostElement extends RendererElement = RendererElement + HostElement = RendererElement >(options: RendererOptions): Renderer // overload 2: with hydration diff --git a/packages/runtime-core/src/vnode.ts b/packages/runtime-core/src/vnode.ts index 89242b94247..f8cf6652d31 100644 --- a/packages/runtime-core/src/vnode.ts +++ b/packages/runtime-core/src/vnode.ts @@ -133,7 +133,7 @@ export type VNodeNormalizedChildren = export interface VNode< HostNode = RendererNode, - HostElement extends RendererElement = RendererElement, + HostElement = RendererElement, ExtraProps = { [key: string]: any } > { /** @@ -613,7 +613,7 @@ export function guardReactiveProps(props: (Data & VNodeProps) | null) { : props } -export function cloneVNode( +export function cloneVNode( vnode: VNode, extraProps?: (Data & VNodeProps) | null, mergeRef = false From a3dddd62059f4a7a762046c1e7f01485b96e737d Mon Sep 17 00:00:00 2001 From: Shyam Chen Date: Wed, 19 Jul 2023 10:06:40 +0800 Subject: [PATCH 0137/1346] docs: correct pnpm version (#8807) --- .github/contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/contributing.md b/.github/contributing.md index 43f3c532bfd..e728e4cc8eb 100644 --- a/.github/contributing.md +++ b/.github/contributing.md @@ -57,7 +57,7 @@ Hi! I'm really excited that you are interested in contributing to Vue.js. Before ## Development Setup -You will need [Node.js](https://nodejs.org) **version 16+**, and [PNPM](https://pnpm.io) **version 7+**. +You will need [Node.js](https://nodejs.org) **version 16+**, and [PNPM](https://pnpm.io) **version 8+**. We also recommend installing [ni](https://github.com/antfu/ni) to help switching between repos using different package managers. `ni` also provides the handy `nr` command which running npm scripts easier. From 3be4e3cbe34b394096210897c1be8deeb6d748d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Jul 2023 14:36:38 +0800 Subject: [PATCH 0138/1346] chore: bump word-wrap from 1.2.3 to 1.2.4 (#8821) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62d5e18f419..a4a711ef39b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4305,7 +4305,7 @@ packages: levn: 0.3.0 prelude-ls: 1.1.2 type-check: 0.3.2 - word-wrap: 1.2.3 + word-wrap: 1.2.4 dev: true /optionator@0.9.1: @@ -4317,7 +4317,7 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.3 + word-wrap: 1.2.4 dev: true /p-finally@1.0.0: @@ -6033,8 +6033,8 @@ packages: babel-walk: 3.0.0-canary-5 dev: true - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + /word-wrap@1.2.4: + resolution: {integrity: sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==} engines: {node: '>=0.10.0'} dev: true From 623ba514ec0f5adc897db90c0f986b1b6905e014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Fri, 11 Aug 2023 17:30:04 +0800 Subject: [PATCH 0139/1346] chore: format code --- package.json | 6 +++--- packages/compiler-sfc/src/script/importUsageCheck.ts | 6 +++++- packages/dts-test/setupHelpers.test-d.ts | 7 ++++--- packages/reactivity/src/ref.ts | 5 ++++- packages/runtime-core/__tests__/apiOptions.spec.ts | 2 +- .../runtime-core/__tests__/rendererTemplateRef.spec.ts | 2 +- packages/runtime-core/src/components/Teleport.ts | 2 +- pnpm-lock.yaml | 10 +++++----- 8 files changed, 24 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index f14db16ddae..d514ccd9190 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "size-baseline": "node scripts/build.js vue -f esm-bundler-runtime && node scripts/build.js runtime-dom runtime-core reactivity shared -f esm-bundler && cd packages/size-check && vite build && node brotli", "check": "tsc --incremental --noEmit", "lint": "eslint --cache --ext .ts packages/*/{src,__tests__}/**.ts", - "format": "prettier --write --cache --parser typescript \"**/*.[tj]s?(x)\"", - "format-check": "prettier --check --cache --parser typescript \"**/*.[tj]s?(x)\"", + "format": "prettier --write --cache \"**/*.[tj]s?(x)\"", + "format-check": "prettier --check --cache \"**/*.[tj]s?(x)\"", "test": "vitest", "test-unit": "vitest -c vitest.unit.config.ts", "test-e2e": "node scripts/build.js vue -f global -d && vitest -c vitest.e2e.config.ts", @@ -84,7 +84,7 @@ "marked": "^4.0.10", "minimist": "^1.2.0", "npm-run-all": "^4.1.5", - "prettier": "^2.7.1", + "prettier": "^3.0.1", "pug": "^3.0.1", "puppeteer": "~19.6.0", "rollup": "^3.26.0", diff --git a/packages/compiler-sfc/src/script/importUsageCheck.ts b/packages/compiler-sfc/src/script/importUsageCheck.ts index 7019dcf2312..f3c3932d829 100644 --- a/packages/compiler-sfc/src/script/importUsageCheck.ts +++ b/packages/compiler-sfc/src/script/importUsageCheck.ts @@ -63,7 +63,11 @@ function resolveTemplateUsageCheckString(sfc: SFCDescriptor) { )}` } } - if (prop.type === NodeTypes.ATTRIBUTE && prop.name === 'ref' && prop.value?.content) { + if ( + prop.type === NodeTypes.ATTRIBUTE && + prop.name === 'ref' && + prop.value?.content + ) { code += `,${prop.value.content}` } } diff --git a/packages/dts-test/setupHelpers.test-d.ts b/packages/dts-test/setupHelpers.test-d.ts index 934e6056d2d..feb4085dea0 100644 --- a/packages/dts-test/setupHelpers.test-d.ts +++ b/packages/dts-test/setupHelpers.test-d.ts @@ -100,7 +100,8 @@ describe('defineProps w/ union type declaration + withDefaults', () => { ) }) -describe('defineProps w/ generic type declaration + withDefaults', () => { const res = withDefaults( @@ -117,10 +118,10 @@ describe('defineProps w/ generic type declaration + withDefaults', [123, 33] as T[], - generic2: () => ({ x: 123 } as { x: T }), + generic2: () => ({ x: 123 }) as { x: T }, generic3: () => 'test' as TString, - generic4: () => ({ a: 'test' } as TA) + generic4: () => ({ a: 'test' }) as TA } ) diff --git a/packages/reactivity/src/ref.ts b/packages/reactivity/src/ref.ts index ef111fc1ff7..915f5760878 100644 --- a/packages/reactivity/src/ref.ts +++ b/packages/reactivity/src/ref.ts @@ -138,7 +138,10 @@ class RefImpl { public dep?: Dep = undefined public readonly __v_isRef = true - constructor(value: T, public readonly __v_isShallow: boolean) { + constructor( + value: T, + public readonly __v_isShallow: boolean + ) { this._rawValue = __v_isShallow ? value : toRaw(value) this._value = __v_isShallow ? value : toReactive(value) } diff --git a/packages/runtime-core/__tests__/apiOptions.spec.ts b/packages/runtime-core/__tests__/apiOptions.spec.ts index a172196d3f7..ca712e0d3ac 100644 --- a/packages/runtime-core/__tests__/apiOptions.spec.ts +++ b/packages/runtime-core/__tests__/apiOptions.spec.ts @@ -382,7 +382,7 @@ describe('api: options', () => { render() { return this[injectedKey] } - } as any) + }) as any const ChildA = defineChild(['a'], 'a') const ChildB = defineChild({ b: 'a' }) diff --git a/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts b/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts index 7d6279c5257..28d7a95eb0b 100644 --- a/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts +++ b/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts @@ -116,7 +116,7 @@ describe('api: template refs', () => { const toggle = ref(true) const Comp = defineComponent( - () => () => toggle.value ? h('div', { ref: fn }) : null + () => () => (toggle.value ? h('div', { ref: fn }) : null) ) render(h(Comp), root) expect(fn.mock.calls[0][0]).toBe(root.children[0]) diff --git a/packages/runtime-core/src/components/Teleport.ts b/packages/runtime-core/src/components/Teleport.ts index 4f7d16bc7d1..19ccbc5de27 100644 --- a/packages/runtime-core/src/components/Teleport.ts +++ b/packages/runtime-core/src/components/Teleport.ts @@ -400,7 +400,7 @@ function hydrateTeleport( // Force-casted public typing for h and TSX props inference export const Teleport = TeleportImpl as unknown as { __isTeleport: true - new(): { + new (): { $props: VNodeProps & TeleportProps $slots: { default(): VNode[] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a4a711ef39b..378cc5749d4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,8 +96,8 @@ importers: specifier: ^4.1.5 version: 4.1.5 prettier: - specifier: ^2.7.1 - version: 2.8.8 + specifier: ^3.0.1 + version: 3.0.1 pug: specifier: ^3.0.1 version: 3.0.2 @@ -4621,9 +4621,9 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} + /prettier@3.0.1: + resolution: {integrity: sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==} + engines: {node: '>=14'} hasBin: true dev: true From bd08f057fc568f15ca19bfae1a4e506f2bc48ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Mon, 14 Aug 2023 19:43:55 +0800 Subject: [PATCH 0140/1346] ci: enforce format check --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c52bbc06970..232c69b3b75 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -109,8 +109,8 @@ jobs: - name: Run eslint run: pnpm run lint - # - name: Run prettier - # run: pnpm run format-check + - name: Run prettier + run: pnpm run format-check - name: Run type declaration tests run: pnpm run test-dts From 1b564052994d6aefbb2c091d7dbff6f1e11cebbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Mon, 21 Aug 2023 11:33:51 +0800 Subject: [PATCH 0141/1346] ci: improved size report (#8992) --- .eslintrc.cjs | 7 +- .github/contributing.md | 2 - .github/workflows/ci.yml | 20 ---- .github/workflows/size-report.yml | 61 +++++++++++ package.json | 12 ++- packages/size-check/README.md | 3 - packages/size-check/brotli.js | 6 -- packages/size-check/package.json | 11 -- packages/size-check/src/index.ts | 6 -- packages/size-check/vite.config.js | 15 --- pnpm-lock.yaml | 162 ++++++++++++++++++++++++----- scripts/aliases.js | 7 +- scripts/build.js | 50 ++++++--- scripts/size-report.ts | 105 +++++++++++++++++++ scripts/usage-size.ts | 99 ++++++++++++++++++ tsconfig.build.json | 1 - 16 files changed, 443 insertions(+), 124 deletions(-) create mode 100644 .github/workflows/size-report.yml delete mode 100644 packages/size-check/README.md delete mode 100644 packages/size-check/brotli.js delete mode 100644 packages/size-check/package.json delete mode 100644 packages/size-check/src/index.ts delete mode 100644 packages/size-check/vite.config.js create mode 100644 scripts/size-report.ts create mode 100644 scripts/usage-size.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs index ec05a113113..04ecf049ca9 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -74,12 +74,7 @@ module.exports = { }, // Node scripts { - files: [ - 'scripts/**', - '*.{js,ts}', - 'packages/**/index.js', - 'packages/size-check/**' - ], + files: ['scripts/**', '*.{js,ts}', 'packages/**/index.js'], rules: { 'no-restricted-globals': 'off', 'no-restricted-syntax': 'off' diff --git a/.github/contributing.md b/.github/contributing.md index e728e4cc8eb..0c6771ca0b4 100644 --- a/.github/contributing.md +++ b/.github/contributing.md @@ -248,8 +248,6 @@ This repository employs a [monorepo](https://en.wikipedia.org/wiki/Monorepo) set - `template-explorer`: A development tool for debugging compiler output, continuously deployed at https://template-explorer.vuejs.org/. To run it locally, run [`nr dev-compiler`](#nr-dev-compiler). - - `size-check`: Used for checking built bundle sizes on CI. - ### Importing Packages The packages can import each other directly using their package names. Note that when importing a package, the name listed in its `package.json` should be used. Most of the time the `@vue/` prefix is needed: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 232c69b3b75..8c08c9a935a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -114,23 +114,3 @@ jobs: - name: Run type declaration tests run: pnpm run test-dts - - size: - runs-on: ubuntu-latest - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - env: - CI_JOB_NUMBER: 1 - steps: - - uses: actions/checkout@v3 - - - name: Install pnpm - uses: pnpm/action-setup@v2 - - - name: Set node version to 18 - uses: actions/setup-node@v3 - with: - node-version: 18 - cache: 'pnpm' - - - run: PUPPETEER_SKIP_DOWNLOAD=1 pnpm install - - run: pnpm run size diff --git a/.github/workflows/size-report.yml b/.github/workflows/size-report.yml new file mode 100644 index 00000000000..87c6865927b --- /dev/null +++ b/.github/workflows/size-report.yml @@ -0,0 +1,61 @@ +name: size report + +on: + pull_request: + branches: + - main + +permissions: + contents: read + pull-requests: write + +jobs: + size: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Install pnpm + uses: pnpm/action-setup@v2 + + - name: Set node version to LTS + uses: actions/setup-node@v3 + with: + node-version: lts/* + cache: pnpm + + - run: PUPPETEER_SKIP_DOWNLOAD=1 pnpm install + - run: pnpm run size + + - name: Download Previous Size Report + id: download-artifact + uses: dawidd6/action-download-artifact@v2 + with: + branch: main + name: size-report + path: temp/size-prev + if_no_artifact_found: warn + + - name: Upload Size Report + uses: actions/upload-artifact@v3 + with: + name: size-report + path: temp/size + + - name: Compare size + run: pnpm tsx scripts/size-report.ts > size.md + + - name: Read Size Markdown + id: size-markdown + uses: juliangruber/read-file-action@v1 + with: + path: ./size.md + + - name: Create Comment + uses: actions-cool/maintain-one-comment@v3 + with: + body: | + ${{steps.size-markdown.outputs.content}} + + body-include: '' diff --git a/package.json b/package.json index d514ccd9190..b4ee1b00082 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,10 @@ "dev": "node scripts/dev.js", "build": "node scripts/build.js", "build-dts": "tsc -p tsconfig.build.json && rollup -c rollup.dts.config.js", - "size": "run-s size-global size-baseline", - "size-global": "node scripts/build.js vue runtime-dom -f global -p", - "size-baseline": "node scripts/build.js vue -f esm-bundler-runtime && node scripts/build.js runtime-dom runtime-core reactivity shared -f esm-bundler && cd packages/size-check && vite build && node brotli", + "size": "run-s \"size-*\" && tsx scripts/usage-size.ts", + "size-global": "node scripts/build.js vue runtime-dom -f global -p --size", + "size-esm-runtime": "node scripts/build.js vue -f esm-bundler-runtime", + "size-esm": "node scripts/build.js runtime-dom runtime-core reactivity shared -f esm-bundler", "check": "tsc --incremental --noEmit", "lint": "eslint --cache --ext .ts packages/*/{src,__tests__}/**.ts", "format": "prettier --write --cache \"**/*.[tj]s?(x)\"", @@ -81,10 +82,12 @@ "lint-staged": "^10.2.10", "lodash": "^4.17.15", "magic-string": "^0.30.0", + "markdown-table": "^3.0.3", "marked": "^4.0.10", "minimist": "^1.2.0", "npm-run-all": "^4.1.5", "prettier": "^3.0.1", + "pretty-bytes": "^6.1.1", "pug": "^3.0.1", "puppeteer": "~19.6.0", "rollup": "^3.26.0", @@ -94,9 +97,10 @@ "semver": "^7.3.2", "serve": "^12.0.0", "simple-git-hooks": "^2.8.1", - "terser": "^5.15.1", + "terser": "^5.19.2", "todomvc-app-css": "^2.3.0", "tslib": "^2.5.0", + "tsx": "^3.12.7", "typescript": "^5.1.6", "vite": "^4.3.0", "vitest": "^0.30.1" diff --git a/packages/size-check/README.md b/packages/size-check/README.md deleted file mode 100644 index 23cf1899eaf..00000000000 --- a/packages/size-check/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Size Check - -This package is private and is used for checking the baseline runtime size after tree-shaking (with only the bare minimal code required to render something to the screen). diff --git a/packages/size-check/brotli.js b/packages/size-check/brotli.js deleted file mode 100644 index f9dedac0b1c..00000000000 --- a/packages/size-check/brotli.js +++ /dev/null @@ -1,6 +0,0 @@ -const { brotliCompressSync } = require('zlib') - -const file = require('fs').readFileSync('dist/index.js') -const compressed = brotliCompressSync(file) -const compressedSize = (compressed.length / 1024).toFixed(2) + 'kb' -console.log(`brotli: ${compressedSize}`) diff --git a/packages/size-check/package.json b/packages/size-check/package.json deleted file mode 100644 index 1f9fba88594..00000000000 --- a/packages/size-check/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "@vue/size-check", - "version": "3.3.4", - "private": true, - "scripts": { - "build": "vite build" - }, - "dependencies": { - "vue": "workspace:*" - } -} diff --git a/packages/size-check/src/index.ts b/packages/size-check/src/index.ts deleted file mode 100644 index ad3b68a5cc1..00000000000 --- a/packages/size-check/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { h, createApp } from 'vue' - -// The bare minimum code required for rendering something to the screen -createApp({ - render: () => h('div', 'hello world!') -}).mount('#app') diff --git a/packages/size-check/vite.config.js b/packages/size-check/vite.config.js deleted file mode 100644 index 73721f95910..00000000000 --- a/packages/size-check/vite.config.js +++ /dev/null @@ -1,15 +0,0 @@ -export default { - define: { - __VUE_PROD_DEVTOOLS__: false, - __VUE_OPTIONS_API__: true - }, - build: { - rollupOptions: { - input: ['src/index.ts'], - output: { - entryFileNames: `[name].js` - } - }, - minify: 'terser' - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 378cc5749d4..7c6e2a198c5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -86,6 +86,9 @@ importers: magic-string: specifier: ^0.30.0 version: 0.30.0 + markdown-table: + specifier: ^3.0.3 + version: 3.0.3 marked: specifier: ^4.0.10 version: 4.3.0 @@ -98,6 +101,9 @@ importers: prettier: specifier: ^3.0.1 version: 3.0.1 + pretty-bytes: + specifier: ^6.1.1 + version: 6.1.1 pug: specifier: ^3.0.1 version: 3.0.2 @@ -126,23 +132,26 @@ importers: specifier: ^2.8.1 version: 2.8.1 terser: - specifier: ^5.15.1 - version: 5.18.2 + specifier: ^5.19.2 + version: 5.19.2 todomvc-app-css: specifier: ^2.3.0 version: 2.4.2 tslib: specifier: ^2.5.0 version: 2.6.0 + tsx: + specifier: ^3.12.7 + version: 3.12.7 typescript: specifier: ^5.1.6 version: 5.1.6 vite: specifier: ^4.3.0 - version: 4.3.1(@types/node@16.18.38)(terser@5.18.2) + version: 4.3.1(@types/node@16.18.38)(terser@5.19.2) vitest: specifier: ^0.30.1 - version: 0.30.1(jsdom@21.1.0)(terser@5.18.2) + version: 0.30.1(jsdom@21.1.0)(terser@5.19.2) packages/compiler-core: dependencies: @@ -354,12 +363,6 @@ importers: packages/shared: {} - packages/size-check: - dependencies: - vue: - specifier: workspace:* - version: link:../vue - packages/template-explorer: dependencies: monaco-editor: @@ -422,11 +425,12 @@ packages: '@babel/highlight': 7.22.5 dev: true - /@babel/code-frame@7.22.5: - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + /@babel/code-frame@7.22.10: + resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.5 + '@babel/highlight': 7.22.10 + chalk: 2.4.2 dev: true /@babel/compat-data@7.21.0: @@ -567,6 +571,15 @@ packages: - supports-color dev: true + /@babel/highlight@7.22.10: + resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + /@babel/highlight@7.22.5: resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} engines: {node: '>=6.9.0'} @@ -587,7 +600,7 @@ packages: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.10 '@babel/parser': 7.21.3 '@babel/types': 7.21.3 dev: true @@ -596,7 +609,7 @@ packages: resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 '@babel/generator': 7.21.3 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.21.0 @@ -618,6 +631,27 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + /@esbuild-kit/cjs-loader@2.4.2: + resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} + dependencies: + '@esbuild-kit/core-utils': 3.1.0 + get-tsconfig: 4.7.0 + dev: true + + /@esbuild-kit/core-utils@3.1.0: + resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} + dependencies: + esbuild: 0.17.19 + source-map-support: 0.5.21 + dev: true + + /@esbuild-kit/esm-loader@2.5.5: + resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} + dependencies: + '@esbuild-kit/core-utils': 3.1.0 + get-tsconfig: 4.7.0 + dev: true + /@esbuild/android-arm64@0.17.19: resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} @@ -1078,11 +1112,25 @@ packages: '@jridgewell/trace-mapping': 0.3.17 dev: true + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.19 + dev: true + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} @@ -1091,13 +1139,17 @@ packages: /@jridgewell/source-map@0.3.5: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 dev: true /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + /@jridgewell/trace-mapping@0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: @@ -1105,6 +1157,13 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@jspm/core@2.0.1: resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} dev: true @@ -1233,7 +1292,7 @@ packages: rollup: 3.26.2 serialize-javascript: 6.0.1 smob: 0.0.6 - terser: 5.18.2 + terser: 5.19.2 dev: true /@rollup/pluginutils@5.0.2(rollup@3.26.2): @@ -1464,7 +1523,7 @@ packages: istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 test-exclude: 6.0.0 - vitest: 0.30.1(jsdom@21.1.0)(terser@5.18.2) + vitest: 0.30.1(jsdom@21.1.0)(terser@5.19.2) transitivePeerDependencies: - supports-color dev: true @@ -1568,6 +1627,12 @@ packages: hasBin: true dev: true + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} @@ -3066,6 +3131,12 @@ packages: get-intrinsic: 1.2.0 dev: true + /get-tsconfig@4.7.0: + resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /git-raw-commits@2.0.11: resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} @@ -3991,6 +4062,10 @@ packages: engines: {node: '>=8'} dev: true + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: true + /marked@4.3.0: resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} engines: {node: '>= 12'} @@ -4414,7 +4489,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -4627,6 +4702,11 @@ packages: hasBin: true dev: true + /pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + dev: true + /pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -4963,6 +5043,10 @@ packages: engines: {node: '>=4'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true @@ -5007,7 +5091,7 @@ packages: rollup: 3.26.2 typescript: 5.1.6 optionalDependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.10 dev: true /rollup-plugin-esbuild@5.0.0(esbuild@0.17.19)(rollup@3.26.2): @@ -5492,6 +5576,17 @@ packages: source-map-support: 0.5.21 dev: true + /terser@5.19.2: + resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -5609,6 +5704,17 @@ packages: typescript: 5.1.6 dev: true + /tsx@3.12.7: + resolution: {integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==} + hasBin: true + dependencies: + '@esbuild-kit/cjs-loader': 2.4.2 + '@esbuild-kit/core-utils': 3.1.0 + '@esbuild-kit/esm-loader': 2.5.5 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} @@ -5758,7 +5864,7 @@ packages: engines: {node: '>= 0.8'} dev: true - /vite-node@0.30.1(@types/node@16.18.38)(terser@5.18.2): + /vite-node@0.30.1(@types/node@16.18.38)(terser@5.19.2): resolution: {integrity: sha512-vTikpU/J7e6LU/8iM3dzBo8ZhEiKZEKRznEMm+mJh95XhWaPrJQraT/QsT2NWmuEf+zgAoMe64PKT7hfZ1Njmg==} engines: {node: '>=v14.18.0'} hasBin: true @@ -5768,7 +5874,7 @@ packages: mlly: 1.2.0 pathe: 1.1.0 picocolors: 1.0.0 - vite: 4.3.1(@types/node@16.18.38)(terser@5.18.2) + vite: 4.3.1(@types/node@16.18.38)(terser@5.19.2) transitivePeerDependencies: - '@types/node' - less @@ -5779,7 +5885,7 @@ packages: - terser dev: true - /vite@4.3.1(@types/node@16.18.38)(terser@5.18.2): + /vite@4.3.1(@types/node@16.18.38)(terser@5.19.2): resolution: {integrity: sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -5808,7 +5914,7 @@ packages: esbuild: 0.17.19 postcss: 8.4.21 rollup: 3.26.2 - terser: 5.18.2 + terser: 5.19.2 optionalDependencies: fsevents: 2.3.2 dev: true @@ -5850,7 +5956,7 @@ packages: fsevents: 2.3.2 dev: true - /vitest@0.30.1(jsdom@21.1.0)(terser@5.18.2): + /vitest@0.30.1(jsdom@21.1.0)(terser@5.19.2): resolution: {integrity: sha512-y35WTrSTlTxfMLttgQk4rHcaDkbHQwDP++SNwPb+7H8yb13Q3cu2EixrtHzF27iZ8v0XCciSsLg00RkPAzB/aA==} engines: {node: '>=v14.18.0'} hasBin: true @@ -5905,8 +6011,8 @@ packages: strip-literal: 1.0.1 tinybench: 2.4.0 tinypool: 0.4.0 - vite: 4.3.1(@types/node@16.18.38)(terser@5.18.2) - vite-node: 0.30.1(@types/node@16.18.38)(terser@5.18.2) + vite: 4.3.1(@types/node@16.18.38)(terser@5.19.2) + vite-node: 0.30.1(@types/node@16.18.38)(terser@5.19.2) why-is-node-running: 2.2.2 transitivePeerDependencies: - less diff --git a/scripts/aliases.js b/scripts/aliases.js index 95e3016322c..34a7c643557 100644 --- a/scripts/aliases.js +++ b/scripts/aliases.js @@ -19,12 +19,7 @@ const entries = { '@vue/compat': resolveEntryForPkg('vue-compat') } -const nonSrcPackages = [ - 'sfc-playground', - 'size-check', - 'template-explorer', - 'dts-test' -] +const nonSrcPackages = ['sfc-playground', 'template-explorer', 'dts-test'] for (const dir of dirs) { const key = `@vue/${dir}` diff --git a/scripts/build.js b/scripts/build.js index 75a619046be..1f8af65017d 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -27,6 +27,7 @@ import { cpus } from 'node:os' import { createRequire } from 'node:module' import { targets as allTargets, fuzzyMatchTarget } from './utils.js' import { scanEnums } from './const-enum.js' +import prettyBytes from 'pretty-bytes' const require = createRequire(import.meta.url) const args = minimist(process.argv.slice(2)) @@ -38,18 +39,22 @@ const buildTypes = args.withTypes || args.t const sourceMap = args.sourcemap || args.s const isRelease = args.release const buildAllMatching = args.all || args.a +const writeSize = args.size const commit = execa.sync('git', ['rev-parse', 'HEAD']).stdout.slice(0, 7) +const sizeDir = path.resolve('temp/size') + run() async function run() { + if (writeSize) await fs.mkdir(sizeDir, { recursive: true }) const removeCache = scanEnums() try { const resolvedTargets = targets.length ? fuzzyMatchTarget(targets, buildAllMatching) : allTargets await buildAll(resolvedTargets) - checkAllSizes(resolvedTargets) + await checkAllSizes(resolvedTargets) if (buildTypes) { await execa( 'pnpm', @@ -129,39 +134,52 @@ async function build(target) { ) } -function checkAllSizes(targets) { +async function checkAllSizes(targets) { if (devOnly || (formats && !formats.includes('global'))) { return } console.log() for (const target of targets) { - checkSize(target) + await checkSize(target) } console.log() } -function checkSize(target) { +async function checkSize(target) { const pkgDir = path.resolve(`packages/${target}`) - checkFileSize(`${pkgDir}/dist/${target}.global.prod.js`) + await checkFileSize(`${pkgDir}/dist/${target}.global.prod.js`) if (!formats || formats.includes('global-runtime')) { - checkFileSize(`${pkgDir}/dist/${target}.runtime.global.prod.js`) + await checkFileSize(`${pkgDir}/dist/${target}.runtime.global.prod.js`) } } -function checkFileSize(filePath) { +async function checkFileSize(filePath) { if (!existsSync(filePath)) { return } - const file = readFileSync(filePath) - const minSize = (file.length / 1024).toFixed(2) + 'kb' + const file = await fs.readFile(filePath) + const fileName = path.basename(filePath) + const gzipped = gzipSync(file) - const gzippedSize = (gzipped.length / 1024).toFixed(2) + 'kb' - const compressed = brotliCompressSync(file) - // @ts-ignore - const compressedSize = (compressed.length / 1024).toFixed(2) + 'kb' + const brotli = brotliCompressSync(file) + console.log( - `${chalk.gray( - chalk.bold(path.basename(filePath)) - )} min:${minSize} / gzip:${gzippedSize} / brotli:${compressedSize}` + `${chalk.gray(chalk.bold(fileName))} min:${prettyBytes( + file.length + )} / gzip:${prettyBytes(gzipped.length)} / brotli:${prettyBytes( + brotli.length + )}` ) + + if (writeSize) + await fs.writeFile( + path.resolve(sizeDir, `${fileName}.json`), + JSON.stringify({ + file: fileName, + size: file.length, + gzip: gzipped.length, + brotli: brotli.length + }), + 'utf-8' + ) } diff --git a/scripts/size-report.ts b/scripts/size-report.ts new file mode 100644 index 00000000000..56e4491a19c --- /dev/null +++ b/scripts/size-report.ts @@ -0,0 +1,105 @@ +import path from 'node:path' +import { markdownTable } from 'markdown-table' +import prettyBytes from 'pretty-bytes' +import { readdir } from 'node:fs/promises' +import { existsSync } from 'node:fs' + +interface SizeResult { + size: number + gzip: number + brotli: number +} + +interface BundleResult extends SizeResult { + file: string +} + +type UsageResult = Record + +const currDir = path.resolve('temp/size') +const prevDir = path.resolve('temp/size-prev') +let output = '## Size Report\n\n' +const sizeHeaders = ['Size', 'Gzip', 'Brotli'] + +run() + +async function run() { + await renderFiles() + await renderUsages() + + process.stdout.write(output) +} + +async function renderFiles() { + const filterFiles = (files: string[]) => + files.filter(file => !file.startsWith('_')) + + const curr = filterFiles(await readdir(currDir)) + const prev = existsSync(prevDir) ? filterFiles(await readdir(prevDir)) : [] + const fileList = new Set([...curr, ...prev]) + + const rows: string[][] = [] + for (const file of fileList) { + const currPath = path.resolve(currDir, file) + const prevPath = path.resolve(prevDir, file) + + const curr = await importJSON(currPath) + const prev = await importJSON(prevPath) + const fileName = curr?.file || prev?.file || '' + + if (!curr) { + rows.push([`~~${fileName}~~`]) + } else + rows.push([ + fileName, + `${prettyBytes(curr.size)}${getDiff(curr.size, prev?.size)}`, + `${prettyBytes(curr.gzip)}${getDiff(curr.gzip, prev?.gzip)}`, + `${prettyBytes(curr.brotli)}${getDiff(curr.brotli, prev?.brotli)}` + ]) + } + + output += '### Bundles\n\n' + output += markdownTable([['File', ...sizeHeaders], ...rows]) + output += '\n\n' +} + +async function renderUsages() { + const curr = (await importJSON( + path.resolve(currDir, '_usages.json') + ))! + const prev = await importJSON( + path.resolve(prevDir, '_usages.json') + ) + output += '\n### Usages\n\n' + + const data = Object.values(curr) + .map(usage => { + const prevUsage = prev?.[usage.name] + const diffSize = getDiff(usage.size, prevUsage?.size) + const diffGzipped = getDiff(usage.gzip, prevUsage?.gzip) + const diffBrotli = getDiff(usage.brotli, prevUsage?.brotli) + + return [ + usage.name, + `${prettyBytes(usage.size)}${diffSize}`, + `${prettyBytes(usage.gzip)}${diffGzipped}`, + `${prettyBytes(usage.brotli)}${diffBrotli}` + ] + }) + .filter((usage): usage is string[] => !!usage) + + output += `${markdownTable([['Name', ...sizeHeaders], ...data])}\n\n` +} + +async function importJSON(path: string): Promise { + if (!existsSync(path)) return undefined + return (await import(path, { assert: { type: 'json' } })).default +} + +function getDiff(curr: number, prev?: number) { + if (prev === undefined) return '' + const diff = curr - prev + if (diff === 0) return '' + const sign = diff > 0 ? '+' : '' + return ` (**${sign}${prettyBytes(diff)}**)` +} diff --git a/scripts/usage-size.ts b/scripts/usage-size.ts new file mode 100644 index 00000000000..1a1013b7847 --- /dev/null +++ b/scripts/usage-size.ts @@ -0,0 +1,99 @@ +import { mkdir, writeFile } from 'fs/promises' +import path from 'node:path' +import { rollup } from 'rollup' +import nodeResolve from '@rollup/plugin-node-resolve' +import { minify } from 'terser' +import replace from '@rollup/plugin-replace' +import { brotliCompressSync, gzipSync } from 'node:zlib' + +const sizeDir = path.resolve('temp/size') +const entry = path.resolve('./packages/vue/dist/vue.runtime.esm-bundler.js') + +interface Preset { + name: string + imports: string[] +} + +const presets: Preset[] = [ + { name: 'createApp', imports: ['createApp'] }, + { name: 'createSSRApp', imports: ['createSSRApp'] }, + { name: 'defineCustomElement', imports: ['defineCustomElement'] }, + { + name: 'overall', + imports: [ + 'createApp', + 'ref', + 'watch', + 'Transition', + 'KeepAlive', + 'Suspense' + ] + } +] + +main() + +async function main() { + const tasks: ReturnType[] = [] + for (const preset of presets) { + tasks.push(generateBundle(preset)) + } + + const results = Object.fromEntries( + (await Promise.all(tasks)).map(r => [r.name, r]) + ) + + await mkdir(sizeDir, { recursive: true }) + await writeFile( + path.resolve(sizeDir, '_usages.json'), + JSON.stringify(results), + 'utf-8' + ) +} + +async function generateBundle(preset: Preset) { + const id = 'virtual:entry' + const content = `export { ${preset.imports.join(', ')} } from '${entry}'` + const result = await rollup({ + input: id, + plugins: [ + { + name: 'usage-size-plugin', + resolveId(_id) { + if (_id === id) return id + return null + }, + load(_id) { + if (_id === id) return content + } + }, + nodeResolve(), + replace({ + 'process.env.NODE_ENV': '"production"', + __VUE_PROD_DEVTOOLS__: 'false', + __VUE_OPTIONS_API__: 'true', + preventAssignment: true + }) + ] + }) + + const generated = await result.generate({}) + const bundled = generated.output[0].code + const minified = ( + await minify(bundled, { + module: true, + toplevel: true + }) + ).code! + + const size = minified.length + const gzip = gzipSync(minified).length + const brotli = brotliCompressSync(minified).length + + return { + name: preset.name, + size, + gzip, + brotli + } +} diff --git a/tsconfig.build.json b/tsconfig.build.json index 8b7749b858b..89aaa2278f4 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -9,7 +9,6 @@ "packages/runtime-test", "packages/template-explorer", "packages/sfc-playground", - "packages/size-check", "packages/dts-test" ] } From 61c3c8e86a47c2857195cc9115bf13e070c86764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Mon, 21 Aug 2023 11:44:43 +0800 Subject: [PATCH 0142/1346] ci: fix size report permissions --- .github/workflows/size-data.yml | 49 +++++++++++++++++++++++++ .github/workflows/size-report.yml | 61 ++++++++++++++++++++----------- 2 files changed, 89 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/size-data.yml diff --git a/.github/workflows/size-data.yml b/.github/workflows/size-data.yml new file mode 100644 index 00000000000..647e029c578 --- /dev/null +++ b/.github/workflows/size-data.yml @@ -0,0 +1,49 @@ +name: size data + +on: + push: + branches: + - main + pull_request: + branches: + - main + +permissions: + contents: read + +jobs: + upload: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Install pnpm + uses: pnpm/action-setup@v2 + + - name: Set node version to LTS + uses: actions/setup-node@v3 + with: + node-version: lts/* + cache: pnpm + + - name: Install dependencies + run: PUPPETEER_SKIP_DOWNLOAD=1 pnpm install + + - run: pnpm run size + + - name: Upload Size Data + uses: actions/upload-artifact@v3 + with: + name: size-data + path: temp/size + + - name: Save PR number + if: ${{github.event_name == 'pull_request'}} + run: echo ${{ github.event.number }} > ./pr.txt + + - uses: actions/upload-artifact@v2 + if: ${{github.event_name == 'pull_request'}} + with: + name: pr-number + path: pr.txt diff --git a/.github/workflows/size-report.yml b/.github/workflows/size-report.yml index 87c6865927b..4d7e49e523b 100644 --- a/.github/workflows/size-report.yml +++ b/.github/workflows/size-report.yml @@ -1,18 +1,22 @@ name: size report on: - pull_request: - branches: - - main + workflow_run: + workflows: ['size data'] + types: + - completed permissions: contents: read pull-requests: write + issues: write jobs: - size: + size-report: runs-on: ubuntu-latest - + if: > + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' steps: - uses: actions/checkout@v3 @@ -25,37 +29,52 @@ jobs: node-version: lts/* cache: pnpm - - run: PUPPETEER_SKIP_DOWNLOAD=1 pnpm install - - run: pnpm run size + - name: Install dependencies + run: PUPPETEER_SKIP_DOWNLOAD=1 pnpm install - - name: Download Previous Size Report - id: download-artifact + - name: Download PR number uses: dawidd6/action-download-artifact@v2 with: - branch: main - name: size-report - path: temp/size-prev - if_no_artifact_found: warn + name: pr-number + run_id: ${{ github.event.workflow_run.id }} + + - name: Read PR Number + id: pr-number + uses: juliangruber/read-file-action@v1 + with: + path: ./pr.txt - - name: Upload Size Report - uses: actions/upload-artifact@v3 + - name: Download Size Data + uses: dawidd6/action-download-artifact@v2 with: - name: size-report + name: size-data + run_id: ${{ github.event.workflow_run.id }} path: temp/size + - name: Download Previous Size Data + uses: dawidd6/action-download-artifact@v2 + with: + branch: main + workflow: size-data.yml + name: size-data + path: temp/size-prev + if_no_artifact_found: warn + - name: Compare size - run: pnpm tsx scripts/size-report.ts > size.md + run: pnpm tsx scripts/size-report.ts > size-report.md - - name: Read Size Markdown - id: size-markdown + - name: Read Size Report + id: size-report uses: juliangruber/read-file-action@v1 with: - path: ./size.md + path: ./size-report.md - name: Create Comment uses: actions-cool/maintain-one-comment@v3 with: + token: ${{ secrets.GITHUB_TOKEN }} + number: ${{ steps.pr-number.outputs.content }} body: | - ${{steps.size-markdown.outputs.content}} + ${{ steps.size-report.outputs.content }} body-include: '' From e7d5a41758013966c3d9ce47c01f13da7d8c395a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Mon, 21 Aug 2023 15:43:49 +0800 Subject: [PATCH 0143/1346] ci: fix get previous size data --- .github/workflows/size-report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/size-report.yml b/.github/workflows/size-report.yml index 4d7e49e523b..75c52f717b3 100644 --- a/.github/workflows/size-report.yml +++ b/.github/workflows/size-report.yml @@ -56,6 +56,7 @@ jobs: with: branch: main workflow: size-data.yml + event: push name: size-data path: temp/size-prev if_no_artifact_found: warn From 02c6924bcd29cb0ede9c3e049543b3c85a714346 Mon Sep 17 00:00:00 2001 From: Waleed Khaled Date: Tue, 22 Aug 2023 11:50:27 +0300 Subject: [PATCH 0144/1346] refactor(reactivity): encapsulate reactive handlers in class (#8586) reactive obj create has a huge positive impact (200% - 700%) get/set reactive obj props has a small negative impact (1% - 5%) --- packages/reactivity/src/baseHandlers.ts | 113 ++++++++++++------------ 1 file changed, 55 insertions(+), 58 deletions(-) diff --git a/packages/reactivity/src/baseHandlers.ts b/packages/reactivity/src/baseHandlers.ts index 45ecfa6d38a..259b44a1edc 100644 --- a/packages/reactivity/src/baseHandlers.ts +++ b/packages/reactivity/src/baseHandlers.ts @@ -26,7 +26,6 @@ import { hasChanged, isArray, isIntegerKey, - extend, makeMap } from '@vue/shared' import { isRef } from './ref' @@ -45,11 +44,6 @@ const builtInSymbols = new Set( .filter(isSymbol) ) -const get = /*#__PURE__*/ createGetter() -const shallowGet = /*#__PURE__*/ createGetter(false, true) -const readonlyGet = /*#__PURE__*/ createGetter(true) -const shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true) - const arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations() function createArrayInstrumentations() { @@ -91,8 +85,15 @@ function hasOwnProperty(this: object, key: string) { return obj.hasOwnProperty(key) } -function createGetter(isReadonly = false, shallow = false) { - return function get(target: Target, key: string | symbol, receiver: object) { +class BaseReactiveHandler implements ProxyHandler { + constructor( + protected readonly _isReadonly = false, + protected readonly _shallow = false + ) {} + + get(target: Target, key: string | symbol, receiver: object) { + const isReadonly = this._isReadonly, + shallow = this._shallow if (key === ReactiveFlags.IS_REACTIVE) { return !isReadonly } else if (key === ReactiveFlags.IS_READONLY) { @@ -155,11 +156,12 @@ function createGetter(isReadonly = false, shallow = false) { } } -const set = /*#__PURE__*/ createSetter() -const shallowSet = /*#__PURE__*/ createSetter(true) +class MutableReactiveHandler extends BaseReactiveHandler { + constructor(shallow = false) { + super(false, shallow) + } -function createSetter(shallow = false) { - return function set( + set( target: object, key: string | symbol, value: unknown, @@ -169,7 +171,7 @@ function createSetter(shallow = false) { if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) { return false } - if (!shallow) { + if (!this._shallow) { if (!isShallow(value) && !isReadonly(value)) { oldValue = toRaw(oldValue) value = toRaw(value) @@ -197,42 +199,40 @@ function createSetter(shallow = false) { } return result } -} -function deleteProperty(target: object, key: string | symbol): boolean { - const hadKey = hasOwn(target, key) - const oldValue = (target as any)[key] - const result = Reflect.deleteProperty(target, key) - if (result && hadKey) { - trigger(target, TriggerOpTypes.DELETE, key, undefined, oldValue) + deleteProperty(target: object, key: string | symbol): boolean { + const hadKey = hasOwn(target, key) + const oldValue = (target as any)[key] + const result = Reflect.deleteProperty(target, key) + if (result && hadKey) { + trigger(target, TriggerOpTypes.DELETE, key, undefined, oldValue) + } + return result } - return result -} -function has(target: object, key: string | symbol): boolean { - const result = Reflect.has(target, key) - if (!isSymbol(key) || !builtInSymbols.has(key)) { - track(target, TrackOpTypes.HAS, key) + has(target: object, key: string | symbol): boolean { + const result = Reflect.has(target, key) + if (!isSymbol(key) || !builtInSymbols.has(key)) { + track(target, TrackOpTypes.HAS, key) + } + return result + } + ownKeys(target: object): (string | symbol)[] { + track( + target, + TrackOpTypes.ITERATE, + isArray(target) ? 'length' : ITERATE_KEY + ) + return Reflect.ownKeys(target) } - return result -} - -function ownKeys(target: object): (string | symbol)[] { - track(target, TrackOpTypes.ITERATE, isArray(target) ? 'length' : ITERATE_KEY) - return Reflect.ownKeys(target) } -export const mutableHandlers: ProxyHandler = { - get, - set, - deleteProperty, - has, - ownKeys -} +class ReadonlyReactiveHandler extends BaseReactiveHandler { + constructor(shallow = false) { + super(true, shallow) + } -export const readonlyHandlers: ProxyHandler = { - get: readonlyGet, - set(target, key) { + set(target: object, key: string | symbol) { if (__DEV__) { warn( `Set operation on key "${String(key)}" failed: target is readonly.`, @@ -240,8 +240,9 @@ export const readonlyHandlers: ProxyHandler = { ) } return true - }, - deleteProperty(target, key) { + } + + deleteProperty(target: object, key: string | symbol) { if (__DEV__) { warn( `Delete operation on key "${String(key)}" failed: target is readonly.`, @@ -252,22 +253,18 @@ export const readonlyHandlers: ProxyHandler = { } } -export const shallowReactiveHandlers = /*#__PURE__*/ extend( - {}, - mutableHandlers, - { - get: shallowGet, - set: shallowSet - } +export const mutableHandlers: ProxyHandler = + /*#__PURE__*/ new MutableReactiveHandler() + +export const readonlyHandlers: ProxyHandler = + /*#__PURE__*/ new ReadonlyReactiveHandler() + +export const shallowReactiveHandlers = /*#__PURE__*/ new MutableReactiveHandler( + true ) // Props handlers are special in the sense that it should not unwrap top-level // refs (in order to allow refs to be explicitly passed down), but should // retain the reactivity of the normal readonly object. -export const shallowReadonlyHandlers = /*#__PURE__*/ extend( - {}, - readonlyHandlers, - { - get: shallowReadonlyGet - } -) +export const shallowReadonlyHandlers = + /*#__PURE__*/ new ReadonlyReactiveHandler(true) From 2ffe3d5b3e953b63d4743b1e2bc242d50916b545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B6=E8=BF=9C=E6=96=B9?= Date: Tue, 22 Aug 2023 16:57:15 +0800 Subject: [PATCH 0145/1346] refactor: use symbol for private properties (#8681) --- .../src/components/BaseTransition.ts | 31 ++++++++++--------- .../runtime-dom/__tests__/patchClass.spec.ts | 6 ++-- .../runtime-dom/src/components/Transition.ts | 12 ++++--- .../src/components/TransitionGroup.ts | 23 ++++++++------ packages/runtime-dom/src/directives/vModel.ts | 28 +++++++++-------- packages/runtime-dom/src/directives/vShow.ts | 8 +++-- packages/runtime-dom/src/modules/class.ts | 4 +-- packages/runtime-dom/src/modules/events.ts | 6 ++-- packages/runtime-dom/src/modules/style.ts | 3 +- packages/vue/__tests__/svgNamespace.spec.ts | 3 +- 10 files changed, 70 insertions(+), 54 deletions(-) diff --git a/packages/runtime-core/src/components/BaseTransition.ts b/packages/runtime-core/src/components/BaseTransition.ts index a4e862335eb..9cb80b94ef0 100644 --- a/packages/runtime-core/src/components/BaseTransition.ts +++ b/packages/runtime-core/src/components/BaseTransition.ts @@ -22,6 +22,9 @@ import { RendererElement } from '../renderer' type Hook void> = T | T[] +const leaveCbKey = Symbol('_leaveCb') +const enterCbKey = Symbol('_enterCb') + export interface BaseTransitionProps { mode?: 'in-out' | 'out-in' | 'default' appear?: boolean @@ -89,8 +92,8 @@ export interface TransitionElement { // in persisted mode (e.g. v-show), the same element is toggled, so the // pending enter/leave callbacks may need to be cancelled if the state is toggled // before it finishes. - _enterCb?: PendingCallback - _leaveCb?: PendingCallback + [enterCbKey]?: PendingCallback + [leaveCbKey]?: PendingCallback } export function useTransitionState(): TransitionState { @@ -259,9 +262,9 @@ const BaseTransitionImpl: ComponentOptions = { ) leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild // early removal callback - el._leaveCb = () => { + el[leaveCbKey] = () => { earlyRemove() - el._leaveCb = undefined + el[leaveCbKey] = undefined delete enterHooks.delayedLeave } enterHooks.delayedLeave = delayedLeave @@ -366,18 +369,18 @@ export function resolveTransitionHooks( } } // for same element (v-show) - if (el._leaveCb) { - el._leaveCb(true /* cancelled */) + if (el[leaveCbKey]) { + el[leaveCbKey](true /* cancelled */) } // for toggled element with same key (v-if) const leavingVNode = leavingVNodesCache[key] if ( leavingVNode && isSameVNodeType(vnode, leavingVNode) && - leavingVNode.el!._leaveCb + (leavingVNode.el as TransitionElement)[leaveCbKey] ) { // force early removal (not cancelled) - leavingVNode.el!._leaveCb() + ;(leavingVNode.el as TransitionElement)[leaveCbKey]!() } callHook(hook, [el]) }, @@ -396,7 +399,7 @@ export function resolveTransitionHooks( } } let called = false - const done = (el._enterCb = (cancelled?) => { + const done = (el[enterCbKey] = (cancelled?) => { if (called) return called = true if (cancelled) { @@ -407,7 +410,7 @@ export function resolveTransitionHooks( if (hooks.delayedLeave) { hooks.delayedLeave() } - el._enterCb = undefined + el[enterCbKey] = undefined }) if (hook) { callAsyncHook(hook, [el, done]) @@ -418,15 +421,15 @@ export function resolveTransitionHooks( leave(el, remove) { const key = String(vnode.key) - if (el._enterCb) { - el._enterCb(true /* cancelled */) + if (el[enterCbKey]) { + el[enterCbKey](true /* cancelled */) } if (state.isUnmounting) { return remove() } callHook(onBeforeLeave, [el]) let called = false - const done = (el._leaveCb = (cancelled?) => { + const done = (el[leaveCbKey] = (cancelled?) => { if (called) return called = true remove() @@ -435,7 +438,7 @@ export function resolveTransitionHooks( } else { callHook(onAfterLeave, [el]) } - el._leaveCb = undefined + el[leaveCbKey] = undefined if (leavingVNodesCache[key] === vnode) { delete leavingVNodesCache[key] } diff --git a/packages/runtime-dom/__tests__/patchClass.spec.ts b/packages/runtime-dom/__tests__/patchClass.spec.ts index a784c7d543f..c8da741677a 100644 --- a/packages/runtime-dom/__tests__/patchClass.spec.ts +++ b/packages/runtime-dom/__tests__/patchClass.spec.ts @@ -1,5 +1,5 @@ import { patchProp } from '../src/patchProp' -import { ElementWithTransition } from '../src/components/Transition' +import { ElementWithTransition, vtcKey } from '../src/components/Transition' import { svgNS } from '../src/nodeOps' describe('runtime-dom: class patching', () => { @@ -13,12 +13,12 @@ describe('runtime-dom: class patching', () => { test('transition class', () => { const el = document.createElement('div') as ElementWithTransition - el._vtc = new Set(['bar', 'baz']) + el[vtcKey] = new Set(['bar', 'baz']) patchProp(el, 'class', null, 'foo') expect(el.className).toBe('foo bar baz') patchProp(el, 'class', null, null) expect(el.className).toBe('bar baz') - delete el._vtc + delete el[vtcKey] patchProp(el, 'class', null, 'foo') expect(el.className).toBe('foo') }) diff --git a/packages/runtime-dom/src/components/Transition.ts b/packages/runtime-dom/src/components/Transition.ts index eebfdccca35..b0675213298 100644 --- a/packages/runtime-dom/src/components/Transition.ts +++ b/packages/runtime-dom/src/components/Transition.ts @@ -32,12 +32,14 @@ export interface TransitionProps extends BaseTransitionProps { leaveToClass?: string } +export const vtcKey = Symbol('_vtc') + export interface ElementWithTransition extends HTMLElement { // _vtc = Vue Transition Classes. // Store the temporarily-added transition classes on the element // so that we can avoid overwriting them if the element's class is patched // during the transition. - _vtc?: Set + [vtcKey]?: Set } // DOM Transition is a higher-order-component based on the platform-agnostic @@ -295,18 +297,18 @@ function NumberOf(val: unknown): number { export function addTransitionClass(el: Element, cls: string) { cls.split(/\s+/).forEach(c => c && el.classList.add(c)) ;( - (el as ElementWithTransition)._vtc || - ((el as ElementWithTransition)._vtc = new Set()) + (el as ElementWithTransition)[vtcKey] || + ((el as ElementWithTransition)[vtcKey] = new Set()) ).add(cls) } export function removeTransitionClass(el: Element, cls: string) { cls.split(/\s+/).forEach(c => c && el.classList.remove(c)) - const { _vtc } = el as ElementWithTransition + const _vtc = (el as ElementWithTransition)[vtcKey] if (_vtc) { _vtc.delete(cls) if (!_vtc!.size) { - ;(el as ElementWithTransition)._vtc = undefined + ;(el as ElementWithTransition)[vtcKey] = undefined } } } diff --git a/packages/runtime-dom/src/components/TransitionGroup.ts b/packages/runtime-dom/src/components/TransitionGroup.ts index 5c78be26d72..fc5d260b91e 100644 --- a/packages/runtime-dom/src/components/TransitionGroup.ts +++ b/packages/runtime-dom/src/components/TransitionGroup.ts @@ -6,7 +6,8 @@ import { getTransitionInfo, resolveTransitionProps, TransitionPropsValidators, - forceReflow + forceReflow, + vtcKey } from './Transition' import { Fragment, @@ -29,7 +30,8 @@ import { extend } from '@vue/shared' const positionMap = new WeakMap() const newPositionMap = new WeakMap() - +const moveCbKey = Symbol('_moveCb') +const enterCbKey = Symbol('_enterCb') export type TransitionGroupProps = Omit & { tag?: string moveClass?: string @@ -80,13 +82,13 @@ const TransitionGroupImpl: ComponentOptions = { const style = el.style addTransitionClass(el, moveClass) style.transform = style.webkitTransform = style.transitionDuration = '' - const cb = ((el as any)._moveCb = (e: TransitionEvent) => { + const cb = ((el as any)[moveCbKey] = (e: TransitionEvent) => { if (e && e.target !== el) { return } if (!e || /transform$/.test(e.propertyName)) { el.removeEventListener('transitionend', cb) - ;(el as any)._moveCb = null + ;(el as any)[moveCbKey] = null removeTransitionClass(el, moveClass) } }) @@ -162,11 +164,11 @@ export const TransitionGroup = TransitionGroupImpl as unknown as { function callPendingCbs(c: VNode) { const el = c.el as any - if (el._moveCb) { - el._moveCb() + if (el[moveCbKey]) { + el[moveCbKey]() } - if (el._enterCb) { - el._enterCb() + if (el[enterCbKey]) { + el[enterCbKey]() } } @@ -198,8 +200,9 @@ function hasCSSTransform( // all other transition classes applied to ensure only the move class // is applied. const clone = el.cloneNode() as HTMLElement - if (el._vtc) { - el._vtc.forEach(cls => { + const _vtc = el[vtcKey] + if (_vtc) { + _vtc.forEach(cls => { cls.split(/\s+/).forEach(c => c && clone.classList.remove(c)) }) } diff --git a/packages/runtime-dom/src/directives/vModel.ts b/packages/runtime-dom/src/directives/vModel.ts index 2cf5f4cfc16..89cd5f9d49f 100644 --- a/packages/runtime-dom/src/directives/vModel.ts +++ b/packages/runtime-dom/src/directives/vModel.ts @@ -36,7 +36,9 @@ function onCompositionEnd(e: Event) { } } -type ModelDirective = ObjectDirective +const assignKey = Symbol('_assign') + +type ModelDirective = ObjectDirective // We are exporting the v-model runtime directly as vnode hooks so that it can // be tree-shaken in case v-model is never used. @@ -44,7 +46,7 @@ export const vModelText: ModelDirective< HTMLInputElement | HTMLTextAreaElement > = { created(el, { modifiers: { lazy, trim, number } }, vnode) { - el._assign = getModelAssigner(vnode) + el[assignKey] = getModelAssigner(vnode) const castToNumber = number || (vnode.props && vnode.props.type === 'number') addEventListener(el, lazy ? 'change' : 'input', e => { @@ -56,7 +58,7 @@ export const vModelText: ModelDirective< if (castToNumber) { domValue = looseToNumber(domValue) } - el._assign(domValue) + el[assignKey](domValue) }) if (trim) { addEventListener(el, 'change', () => { @@ -78,7 +80,7 @@ export const vModelText: ModelDirective< el.value = value == null ? '' : value }, beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) { - el._assign = getModelAssigner(vnode) + el[assignKey] = getModelAssigner(vnode) // avoid clearing unresolved text. #2302 if ((el as any).composing) return if (document.activeElement === el && el.type !== 'range') { @@ -106,12 +108,12 @@ export const vModelCheckbox: ModelDirective = { // #4096 array checkboxes need to be deep traversed deep: true, created(el, _, vnode) { - el._assign = getModelAssigner(vnode) + el[assignKey] = getModelAssigner(vnode) addEventListener(el, 'change', () => { const modelValue = (el as any)._modelValue const elementValue = getValue(el) const checked = el.checked - const assign = el._assign + const assign = el[assignKey] if (isArray(modelValue)) { const index = looseIndexOf(modelValue, elementValue) const found = index !== -1 @@ -138,7 +140,7 @@ export const vModelCheckbox: ModelDirective = { // set initial checked on mount to wait for true-value/false-value mounted: setChecked, beforeUpdate(el, binding, vnode) { - el._assign = getModelAssigner(vnode) + el[assignKey] = getModelAssigner(vnode) setChecked(el, binding, vnode) } } @@ -163,13 +165,13 @@ function setChecked( export const vModelRadio: ModelDirective = { created(el, { value }, vnode) { el.checked = looseEqual(value, vnode.props!.value) - el._assign = getModelAssigner(vnode) + el[assignKey] = getModelAssigner(vnode) addEventListener(el, 'change', () => { - el._assign(getValue(el)) + el[assignKey](getValue(el)) }) }, beforeUpdate(el, { value, oldValue }, vnode) { - el._assign = getModelAssigner(vnode) + el[assignKey] = getModelAssigner(vnode) if (value !== oldValue) { el.checked = looseEqual(value, vnode.props!.value) } @@ -187,7 +189,7 @@ export const vModelSelect: ModelDirective = { .map((o: HTMLOptionElement) => number ? looseToNumber(getValue(o)) : getValue(o) ) - el._assign( + el[assignKey]( el.multiple ? isSetModel ? new Set(selectedVal) @@ -195,7 +197,7 @@ export const vModelSelect: ModelDirective = { : selectedVal[0] ) }) - el._assign = getModelAssigner(vnode) + el[assignKey] = getModelAssigner(vnode) }, // set value in mounted & updated because \`) }" `) + + expect( + compileWithWrapper(``) + .code + ).toMatchInlineSnapshot(` + "const { ssrRenderSlot: _ssrRenderSlot, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"vue/server-renderer\\") + + return function ssrRender(_ctx, _push, _parent, _attrs) { + _push(\`\`) + }" + `) + + expect( + compileWithWrapper(` + `).code + ).toMatchInlineSnapshot(` + "const { ssrIncludeBooleanAttr: _ssrIncludeBooleanAttr, ssrLooseContain: _ssrLooseContain, ssrLooseEqual: _ssrLooseEqual, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"vue/server-renderer\\") + + return function ssrRender(_ctx, _push, _parent, _attrs) { + _push(\`\`) + }" + `) + + expect( + compileWithWrapper(` + `).code + ).toMatchInlineSnapshot(` + "const { ssrRenderSlot: _ssrRenderSlot, ssrRenderAttrs: _ssrRenderAttrs } = require(\\"vue/server-renderer\\") + + return function ssrRender(_ctx, _push, _parent, _attrs) { + _push(\`\`) + }" + `) }) test('', () => { diff --git a/packages/compiler-ssr/src/transforms/ssrVModel.ts b/packages/compiler-ssr/src/transforms/ssrVModel.ts index bd587edcb9c..0c4bd177875 100644 --- a/packages/compiler-ssr/src/transforms/ssrVModel.ts +++ b/packages/compiler-ssr/src/transforms/ssrVModel.ts @@ -38,6 +38,38 @@ export const ssrTransformModel: DirectiveTransform = (dir, node, context) => { } } + function processOption(plainNode: PlainElementNode) { + if (plainNode.tag === 'option') { + if (plainNode.props.findIndex(p => p.name === 'selected') === -1) { + const value = findValueBinding(plainNode) + plainNode.ssrCodegenNode!.elements.push( + createConditionalExpression( + createCallExpression(context.helper(SSR_INCLUDE_BOOLEAN_ATTR), [ + createConditionalExpression( + createCallExpression(`Array.isArray`, [model]), + createCallExpression(context.helper(SSR_LOOSE_CONTAIN), [ + model, + value + ]), + createCallExpression(context.helper(SSR_LOOSE_EQUAL), [ + model, + value + ]) + ) + ]), + createSimpleExpression(' selected', true), + createSimpleExpression('', true), + false /* no newline */ + ) + ) + } + } else if (plainNode.tag === 'optgroup') { + plainNode.children.forEach(option => + processOption(option as PlainElementNode) + ) + } + } + if (node.tagType === ElementTypes.ELEMENT) { const res: DirectiveTransformResult = { props: [] } const defaultProps = [ @@ -130,32 +162,9 @@ export const ssrTransformModel: DirectiveTransform = (dir, node, context) => { checkDuplicatedValue() node.children = [createInterpolation(model, model.loc)] } else if (node.tag === 'select') { - node.children.forEach(option => { - if (option.type === NodeTypes.ELEMENT) { - const plainNode = option as PlainElementNode - if (plainNode.props.findIndex(p => p.name === 'selected') === -1) { - const value = findValueBinding(plainNode) - plainNode.ssrCodegenNode!.elements.push( - createConditionalExpression( - createCallExpression(context.helper(SSR_INCLUDE_BOOLEAN_ATTR), [ - createConditionalExpression( - createCallExpression(`Array.isArray`, [model]), - createCallExpression(context.helper(SSR_LOOSE_CONTAIN), [ - model, - value - ]), - createCallExpression(context.helper(SSR_LOOSE_EQUAL), [ - model, - value - ]) - ) - ]), - createSimpleExpression(' selected', true), - createSimpleExpression('', true), - false /* no newline */ - ) - ) - } + node.children.forEach(child => { + if (child.type === NodeTypes.ELEMENT) { + processOption(child as PlainElementNode) } }) } else { From a09ed44446cdcc8a0a49c2dda9358a30af0b1f5f Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 20 Oct 2023 21:04:11 +0800 Subject: [PATCH 0207/1346] release: v3.3.6 --- CHANGELOG.md | 21 ++++++++ package.json | 2 +- packages/compiler-core/package.json | 4 +- packages/compiler-dom/package.json | 6 +-- packages/compiler-sfc/package.json | 12 ++--- packages/compiler-ssr/package.json | 6 +-- packages/dts-test/package.json | 2 +- packages/reactivity-transform/package.json | 6 +-- packages/reactivity/package.json | 4 +- packages/runtime-core/package.json | 6 +-- packages/runtime-dom/package.json | 6 +-- packages/runtime-test/package.json | 6 +-- packages/server-renderer/package.json | 8 ++-- packages/sfc-playground/package.json | 2 +- packages/shared/package.json | 2 +- packages/template-explorer/package.json | 2 +- packages/vue-compat/package.json | 4 +- packages/vue/package.json | 12 ++--- pnpm-lock.yaml | 56 +++++++++++----------- 19 files changed, 94 insertions(+), 73 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 545f6ceeeba..12be7dc8a3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +## [3.3.6](https://github.com/vuejs/core/compare/v3.3.5...v3.3.6) (2023-10-20) + + +### Bug Fixes + +* **compiler-sfc:** model name conflict ([#8798](https://github.com/vuejs/core/issues/8798)) ([df81da8](https://github.com/vuejs/core/commit/df81da8be97c8a1366563c7e3e01076ef02eb8f7)) +* **compiler-sfc:** support asset paths containing spaces ([#8752](https://github.com/vuejs/core/issues/8752)) ([36c99a9](https://github.com/vuejs/core/commit/36c99a9c6bb6bc306be054c3c8a85ff8ce50605a)) +* **compiler-ssr:** fix missing scopeId on server-rendered TransitionGroup ([#7557](https://github.com/vuejs/core/issues/7557)) ([61c1357](https://github.com/vuejs/core/commit/61c135742795aa5e3189a79c7dec6afa21bbc8d9)), closes [#7554](https://github.com/vuejs/core/issues/7554) +* **compiler-ssr:** fix ssr compile error for select with non-option children ([#9442](https://github.com/vuejs/core/issues/9442)) ([cdb2e72](https://github.com/vuejs/core/commit/cdb2e725e7ea297f1f4180fb04889a3b757bc84e)), closes [#9440](https://github.com/vuejs/core/issues/9440) +* **runtime-core:** delete stale slots which are present but undefined ([#6484](https://github.com/vuejs/core/issues/6484)) ([75b8722](https://github.com/vuejs/core/commit/75b872213574cb37e2c9e8a15f65613f867ca9a6)), closes [#9109](https://github.com/vuejs/core/issues/9109) +* **runtime-core:** fix error when using cssvars with disabled teleport ([#7341](https://github.com/vuejs/core/issues/7341)) ([8f0472c](https://github.com/vuejs/core/commit/8f0472c9abedb337dc256143b69d8ab8759dbf5c)), closes [#7342](https://github.com/vuejs/core/issues/7342) +* **teleport:** ensure descendent component would be unmounted correctly ([#6529](https://github.com/vuejs/core/issues/6529)) ([4162311](https://github.com/vuejs/core/commit/4162311efdb0db5ca458542e1604b19efa2fae0e)), closes [#6347](https://github.com/vuejs/core/issues/6347) +* **types:** support contenteditable="plaintext-only" ([#8796](https://github.com/vuejs/core/issues/8796)) ([26ca89e](https://github.com/vuejs/core/commit/26ca89e5cf734fbef81e182050d2a215ec8a437b)) + + +### Performance Improvements + +* replace Map/Set with WeakMap/WeakSet ([#8549](https://github.com/vuejs/core/issues/8549)) ([712f96d](https://github.com/vuejs/core/commit/712f96d6ac4d3d984732cba448cb84624daba850)) + + + ## [3.3.5](https://github.com/vuejs/core/compare/v3.3.4...v3.3.5) (2023-10-20) diff --git a/package.json b/package.json index d28f5a77c45..d903294ab1e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "3.3.5", + "version": "3.3.6", "packageManager": "pnpm@8.9.2", "type": "module", "scripts": { diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index 160b0335079..f885e2046e1 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-core", - "version": "3.3.5", + "version": "3.3.6", "description": "@vue/compiler-core", "main": "index.js", "module": "dist/compiler-core.esm-bundler.js", @@ -33,7 +33,7 @@ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-core#readme", "dependencies": { "@babel/parser": "^7.23.0", - "@vue/shared": "3.3.5", + "@vue/shared": "3.3.6", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" }, diff --git a/packages/compiler-dom/package.json b/packages/compiler-dom/package.json index db4c1f5af1d..8bde209e292 100644 --- a/packages/compiler-dom/package.json +++ b/packages/compiler-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-dom", - "version": "3.3.5", + "version": "3.3.6", "description": "@vue/compiler-dom", "main": "index.js", "module": "dist/compiler-dom.esm-bundler.js", @@ -37,7 +37,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-dom#readme", "dependencies": { - "@vue/shared": "3.3.5", - "@vue/compiler-core": "3.3.5" + "@vue/shared": "3.3.6", + "@vue/compiler-core": "3.3.6" } } diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index 4ce570e57e5..6a1fc8bba3a 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-sfc", - "version": "3.3.5", + "version": "3.3.6", "description": "@vue/compiler-sfc", "main": "dist/compiler-sfc.cjs.js", "module": "dist/compiler-sfc.esm-browser.js", @@ -33,11 +33,11 @@ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-sfc#readme", "dependencies": { "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.5", - "@vue/compiler-dom": "3.3.5", - "@vue/compiler-ssr": "3.3.5", - "@vue/reactivity-transform": "3.3.5", - "@vue/shared": "3.3.5", + "@vue/compiler-core": "3.3.6", + "@vue/compiler-dom": "3.3.6", + "@vue/compiler-ssr": "3.3.6", + "@vue/reactivity-transform": "3.3.6", + "@vue/shared": "3.3.6", "estree-walker": "^2.0.2", "magic-string": "^0.30.5", "postcss": "^8.4.31", diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json index 66d69523ed7..dc4933349f0 100644 --- a/packages/compiler-ssr/package.json +++ b/packages/compiler-ssr/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-ssr", - "version": "3.3.5", + "version": "3.3.6", "description": "@vue/compiler-ssr", "main": "dist/compiler-ssr.cjs.js", "types": "dist/compiler-ssr.d.ts", @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-ssr#readme", "dependencies": { - "@vue/shared": "3.3.5", - "@vue/compiler-dom": "3.3.5" + "@vue/shared": "3.3.6", + "@vue/compiler-dom": "3.3.6" } } diff --git a/packages/dts-test/package.json b/packages/dts-test/package.json index a6933d2dca7..da8424e254c 100644 --- a/packages/dts-test/package.json +++ b/packages/dts-test/package.json @@ -4,5 +4,5 @@ "dependencies": { "vue": "workspace:*" }, - "version": "3.3.5" + "version": "3.3.6" } diff --git a/packages/reactivity-transform/package.json b/packages/reactivity-transform/package.json index ef884997ad0..887fedabc6e 100644 --- a/packages/reactivity-transform/package.json +++ b/packages/reactivity-transform/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity-transform", - "version": "3.3.5", + "version": "3.3.6", "description": "@vue/reactivity-transform", "main": "dist/reactivity-transform.cjs.js", "files": [ @@ -29,8 +29,8 @@ "homepage": "https://github.com/vuejs/core/tree/dev/packages/reactivity-transform#readme", "dependencies": { "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.5", - "@vue/shared": "3.3.5", + "@vue/compiler-core": "3.3.6", + "@vue/shared": "3.3.6", "estree-walker": "^2.0.2", "magic-string": "^0.30.5" }, diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json index 5438a3debd8..ac49b4ec7d2 100644 --- a/packages/reactivity/package.json +++ b/packages/reactivity/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity", - "version": "3.3.5", + "version": "3.3.6", "description": "@vue/reactivity", "main": "index.js", "module": "dist/reactivity.esm-bundler.js", @@ -36,6 +36,6 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/reactivity#readme", "dependencies": { - "@vue/shared": "3.3.5" + "@vue/shared": "3.3.6" } } diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index 946420ebf5a..9d2c04d757f 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-core", - "version": "3.3.5", + "version": "3.3.6", "description": "@vue/runtime-core", "main": "index.js", "module": "dist/runtime-core.esm-bundler.js", @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-core#readme", "dependencies": { - "@vue/shared": "3.3.5", - "@vue/reactivity": "3.3.5" + "@vue/shared": "3.3.6", + "@vue/reactivity": "3.3.6" } } diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json index 3de508580aa..2de47ff45f6 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-dom", - "version": "3.3.5", + "version": "3.3.6", "description": "@vue/runtime-dom", "main": "index.js", "module": "dist/runtime-dom.esm-bundler.js", @@ -35,8 +35,8 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-dom#readme", "dependencies": { - "@vue/shared": "3.3.5", - "@vue/runtime-core": "3.3.5", + "@vue/shared": "3.3.6", + "@vue/runtime-core": "3.3.6", "csstype": "^3.1.2" } } diff --git a/packages/runtime-test/package.json b/packages/runtime-test/package.json index fec3ca51d40..80084a36342 100644 --- a/packages/runtime-test/package.json +++ b/packages/runtime-test/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-test", - "version": "3.3.5", + "version": "3.3.6", "description": "@vue/runtime-test", "private": true, "main": "index.js", @@ -25,7 +25,7 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-test#readme", "dependencies": { - "@vue/shared": "3.3.5", - "@vue/runtime-core": "3.3.5" + "@vue/shared": "3.3.6", + "@vue/runtime-core": "3.3.6" } } diff --git a/packages/server-renderer/package.json b/packages/server-renderer/package.json index ffc8a16f17c..66256838e60 100644 --- a/packages/server-renderer/package.json +++ b/packages/server-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/server-renderer", - "version": "3.3.5", + "version": "3.3.6", "description": "@vue/server-renderer", "main": "index.js", "module": "dist/server-renderer.esm-bundler.js", @@ -32,10 +32,10 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/server-renderer#readme", "peerDependencies": { - "vue": "3.3.5" + "vue": "3.3.6" }, "dependencies": { - "@vue/shared": "3.3.5", - "@vue/compiler-ssr": "3.3.5" + "@vue/shared": "3.3.6", + "@vue/compiler-ssr": "3.3.6" } } diff --git a/packages/sfc-playground/package.json b/packages/sfc-playground/package.json index 22a6ef82b54..2c538bbeaac 100644 --- a/packages/sfc-playground/package.json +++ b/packages/sfc-playground/package.json @@ -1,6 +1,6 @@ { "name": "@vue/sfc-playground", - "version": "3.3.5", + "version": "3.3.6", "type": "module", "private": true, "scripts": { diff --git a/packages/shared/package.json b/packages/shared/package.json index ba2567286b0..4b20b2c4c75 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vue/shared", - "version": "3.3.5", + "version": "3.3.6", "description": "internal utils shared across @vue packages", "main": "index.js", "module": "dist/shared.esm-bundler.js", diff --git a/packages/template-explorer/package.json b/packages/template-explorer/package.json index b2fcf90182d..870f635834e 100644 --- a/packages/template-explorer/package.json +++ b/packages/template-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/template-explorer", - "version": "3.3.5", + "version": "3.3.6", "private": true, "buildOptions": { "formats": [ diff --git a/packages/vue-compat/package.json b/packages/vue-compat/package.json index e6f9bfcfa7e..c3126afec55 100644 --- a/packages/vue-compat/package.json +++ b/packages/vue-compat/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compat", - "version": "3.3.5", + "version": "3.3.6", "description": "Vue 3 compatibility build for Vue 2", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -43,6 +43,6 @@ "source-map-js": "^1.0.2" }, "peerDependencies": { - "vue": "3.3.5" + "vue": "3.3.6" } } diff --git a/packages/vue/package.json b/packages/vue/package.json index 3edd19aadfa..627cfc73518 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "3.3.5", + "version": "3.3.6", "description": "The progressive JavaScript framework for building modern web UI.", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -96,11 +96,11 @@ }, "homepage": "https://github.com/vuejs/core/tree/main/packages/vue#readme", "dependencies": { - "@vue/shared": "3.3.5", - "@vue/compiler-dom": "3.3.5", - "@vue/runtime-dom": "3.3.5", - "@vue/compiler-sfc": "3.3.5", - "@vue/server-renderer": "3.3.5" + "@vue/shared": "3.3.6", + "@vue/compiler-dom": "3.3.6", + "@vue/runtime-dom": "3.3.6", + "@vue/compiler-sfc": "3.3.6", + "@vue/server-renderer": "3.3.6" }, "peerDependencies": { "typescript": "*" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e195e6ba83..026d799f036 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -162,7 +162,7 @@ importers: specifier: ^7.23.0 version: 7.23.0 '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared estree-walker: specifier: ^2.0.2 @@ -178,10 +178,10 @@ importers: packages/compiler-dom: dependencies: '@vue/compiler-core': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../compiler-core '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared packages/compiler-sfc: @@ -190,19 +190,19 @@ importers: specifier: ^7.23.0 version: 7.23.0 '@vue/compiler-core': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../compiler-core '@vue/compiler-dom': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../compiler-dom '@vue/compiler-ssr': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../compiler-ssr '@vue/reactivity-transform': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../reactivity-transform '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared estree-walker: specifier: ^2.0.2 @@ -251,10 +251,10 @@ importers: packages/compiler-ssr: dependencies: '@vue/compiler-dom': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../compiler-dom '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared packages/dts-test: @@ -266,7 +266,7 @@ importers: packages/reactivity: dependencies: '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared packages/reactivity-transform: @@ -275,10 +275,10 @@ importers: specifier: ^7.23.0 version: 7.23.0 '@vue/compiler-core': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../compiler-core '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared estree-walker: specifier: ^2.0.2 @@ -297,19 +297,19 @@ importers: packages/runtime-core: dependencies: '@vue/reactivity': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../reactivity '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared packages/runtime-dom: dependencies: '@vue/runtime-core': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../runtime-core '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared csstype: specifier: ^3.1.2 @@ -318,22 +318,22 @@ importers: packages/runtime-test: dependencies: '@vue/runtime-core': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../runtime-core '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared packages/server-renderer: dependencies: '@vue/compiler-ssr': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../compiler-ssr '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared vue: - specifier: 3.3.5 + specifier: 3.3.6 version: link:../vue packages/sfc-playground: @@ -372,19 +372,19 @@ importers: packages/vue: dependencies: '@vue/compiler-dom': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../compiler-dom '@vue/compiler-sfc': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../compiler-sfc '@vue/runtime-dom': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../runtime-dom '@vue/server-renderer': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../server-renderer '@vue/shared': - specifier: 3.3.5 + specifier: 3.3.6 version: link:../shared typescript: specifier: '*' @@ -402,7 +402,7 @@ importers: specifier: ^1.0.2 version: 1.0.2 vue: - specifier: 3.3.5 + specifier: 3.3.6 version: link:../vue packages: From e9e2778e9ec5cca07c1df5f0c9b7b3595a1a3244 Mon Sep 17 00:00:00 2001 From: skirtle <65301168+skirtles-code@users.noreply.github.com> Date: Sat, 21 Oct 2023 02:48:59 +0100 Subject: [PATCH 0208/1346] fix(reactivity): assigning array.length while observing a symbol property (#7568) --- packages/reactivity/__tests__/effect.spec.ts | 16 ++++++++++++++++ packages/reactivity/src/effect.ts | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/reactivity/__tests__/effect.spec.ts b/packages/reactivity/__tests__/effect.spec.ts index 635e6534abe..e34c7b31e40 100644 --- a/packages/reactivity/__tests__/effect.spec.ts +++ b/packages/reactivity/__tests__/effect.spec.ts @@ -243,6 +243,22 @@ describe('reactivity/effect', () => { expect(dummy).toBe(undefined) }) + it('should support manipulating an array while observing symbol keyed properties', () => { + const key = Symbol() + let dummy + const array: any = reactive([1, 2, 3]) + effect(() => (dummy = array[key])) + + expect(dummy).toBe(undefined) + array.pop() + array.shift() + array.splice(0, 1) + expect(dummy).toBe(undefined) + array[key] = 'value' + array.length = 0 + expect(dummy).toBe('value') + }) + it('should observe function valued properties', () => { const oldFunc = () => {} const newFunc = () => {} diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index bbac96a4b2a..c982dbd0b5a 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -1,5 +1,5 @@ import { TrackOpTypes, TriggerOpTypes } from './operations' -import { extend, isArray, isIntegerKey, isMap } from '@vue/shared' +import { extend, isArray, isIntegerKey, isMap, isSymbol } from '@vue/shared' import { EffectScope, recordEffectScope } from './effectScope' import { createDep, @@ -324,7 +324,7 @@ export function trigger( } else if (key === 'length' && isArray(target)) { const newLength = Number(newValue) depsMap.forEach((dep, key) => { - if (key === 'length' || key >= newLength) { + if (key === 'length' || (!isSymbol(key) && key >= newLength)) { deps.push(dep) } }) From 089d36d167dc7834065b03ca689f9b6a44eead8a Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Sat, 21 Oct 2023 10:35:16 +0800 Subject: [PATCH 0209/1346] fix: correctly resolve types from relative paths on Windows (#9446) close #8671 close https://github.com/vuejs/vue-loader/issues/2048 --- .../compileScript/resolveType.spec.ts | 37 +++++++++++++++++-- .../compiler-sfc/src/script/resolveType.ts | 2 +- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts index 607654a952b..fc600f1a518 100644 --- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts @@ -1,3 +1,4 @@ +import { normalize } from 'node:path' import { Identifier } from '@babel/types' import { SFCScriptCompileOptions, parse } from '../../src' import { ScriptCompileContext } from '../../src/script/context' @@ -478,6 +479,33 @@ describe('resolveType', () => { expect(deps && [...deps]).toStrictEqual(Object.keys(files)) }) + test.runIf(process.platform === 'win32')('relative ts on Windows', () => { + const files = { + 'C:\\Test\\foo.ts': 'export type P = { foo: number }', + 'C:\\Test\\bar.d.ts': + 'type X = { bar: string }; export { X as Y };' + + // verify that we can parse syntax that is only valid in d.ts + 'export const baz: boolean' + } + const { props, deps } = resolve( + ` + import { P } from './foo' + import { Y as PP } from './bar' + defineProps

() + `, + files, + {}, + 'C:\\Test\\Test.vue' + ) + expect(props).toStrictEqual({ + foo: ['Number'], + bar: ['String'] + }) + expect(deps && [...deps].map(normalize)).toStrictEqual( + Object.keys(files).map(normalize) + ) + }) + // #8244 test('utility type in external file', () => { const files = { @@ -898,19 +926,20 @@ describe('resolveType', () => { function resolve( code: string, files: Record = {}, - options?: Partial + options?: Partial, + sourceFileName: string = '/Test.vue' ) { const { descriptor } = parse(``, { - filename: '/Test.vue' + filename: sourceFileName }) const ctx = new ScriptCompileContext(descriptor, { id: 'test', fs: { fileExists(file) { - return !!files[file] + return !!(files[file] ?? files[normalize(file)]) }, readFile(file) { - return files[file] + return files[file] ?? files[normalize(file)] } }, ...options diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index 78581432366..215081dc0b7 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -778,7 +778,7 @@ function importSourceToScope( if (!resolved) { if (source.startsWith('.')) { // relative import - fast path - const filename = joinPaths(scope.filename, '..', source) + const filename = joinPaths(dirname(scope.filename), source) resolved = resolveExt(filename, fs) } else { // module or aliased import - use full TS resolution, only supported in Node From a8f663867b8cd2736b82204bc58756ef02441276 Mon Sep 17 00:00:00 2001 From: skirtle <65301168+skirtles-code@users.noreply.github.com> Date: Sat, 21 Oct 2023 03:38:54 +0100 Subject: [PATCH 0210/1346] fix(scheduler): ensure jobs are in the correct order (#7748) close #7576 --- .../runtime-core/__tests__/scheduler.spec.ts | 54 ++++++++++++++++++- packages/runtime-core/src/scheduler.ts | 9 +++- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/packages/runtime-core/__tests__/scheduler.spec.ts b/packages/runtime-core/__tests__/scheduler.spec.ts index 6246a87e8f7..119d0f7080c 100644 --- a/packages/runtime-core/__tests__/scheduler.spec.ts +++ b/packages/runtime-core/__tests__/scheduler.spec.ts @@ -143,6 +143,7 @@ describe('scheduler', () => { queueJob(job1) // cb2 should execute before the job queueJob(cb2) + queueJob(cb3) } cb1.pre = true @@ -152,9 +153,60 @@ describe('scheduler', () => { cb2.pre = true cb2.id = 1 + const cb3 = () => { + calls.push('cb3') + } + cb3.pre = true + cb3.id = 1 + queueJob(cb1) await nextTick() - expect(calls).toEqual(['cb1', 'cb2', 'job1']) + expect(calls).toEqual(['cb1', 'cb2', 'cb3', 'job1']) + }) + + it('should insert jobs after pre jobs with the same id', async () => { + const calls: string[] = [] + const job1 = () => { + calls.push('job1') + } + job1.id = 1 + job1.pre = true + const job2 = () => { + calls.push('job2') + queueJob(job5) + queueJob(job6) + } + job2.id = 2 + job2.pre = true + const job3 = () => { + calls.push('job3') + } + job3.id = 2 + job3.pre = true + const job4 = () => { + calls.push('job4') + } + job4.id = 3 + job4.pre = true + const job5 = () => { + calls.push('job5') + } + job5.id = 2 + const job6 = () => { + calls.push('job6') + } + job6.id = 2 + job6.pre = true + + // We need several jobs to test this properly, otherwise + // findInsertionIndex can yield the correct index by chance + queueJob(job4) + queueJob(job2) + queueJob(job3) + queueJob(job1) + + await nextTick() + expect(calls).toEqual(['job1', 'job2', 'job3', 'job6', 'job5', 'job4']) }) it('preFlushCb inside queueJob', async () => { diff --git a/packages/runtime-core/src/scheduler.ts b/packages/runtime-core/src/scheduler.ts index 64c70ab59ca..e4c7fbc0f4d 100644 --- a/packages/runtime-core/src/scheduler.ts +++ b/packages/runtime-core/src/scheduler.ts @@ -69,8 +69,13 @@ function findInsertionIndex(id: number) { while (start < end) { const middle = (start + end) >>> 1 - const middleJobId = getId(queue[middle]) - middleJobId < id ? (start = middle + 1) : (end = middle) + const middleJob = queue[middle] + const middleJobId = getId(middleJob) + if (middleJobId < id || (middleJobId === id && middleJob.pre)) { + start = middle + 1 + } else { + end = middle + } } return start From d8990fc6182d1c2cf0a8eab7b35a9d04df668507 Mon Sep 17 00:00:00 2001 From: Carlos Rodrigues Date: Sat, 21 Oct 2023 04:37:52 +0100 Subject: [PATCH 0211/1346] fix(ssr): fix hydration mismatch for disabled teleport at component root (#9399) close #6152 --- .../runtime-core/__tests__/hydration.spec.ts | 22 +++++++++++ packages/runtime-core/src/hydration.ts | 39 ++++++++++--------- 2 files changed, 43 insertions(+), 18 deletions(-) diff --git a/packages/runtime-core/__tests__/hydration.spec.ts b/packages/runtime-core/__tests__/hydration.spec.ts index d3cfd47c6be..f0a3a9333a7 100644 --- a/packages/runtime-core/__tests__/hydration.spec.ts +++ b/packages/runtime-core/__tests__/hydration.spec.ts @@ -393,6 +393,28 @@ describe('SSR hydration', () => { ) }) + // #6152 + test('Teleport (disabled + as component root)', () => { + const { container } = mountWithHydration( + '

Parent fragment
Teleport content
', + () => [ + h('div', 'Parent fragment'), + h(() => + h(Teleport, { to: 'body', disabled: true }, [ + h('div', 'Teleport content') + ]) + ) + ] + ) + expect(document.body.innerHTML).toBe('') + expect(container.innerHTML).toBe( + '
Parent fragment
Teleport content
' + ) + expect( + `Hydration completed but contains mismatches.` + ).not.toHaveBeenWarned() + }) + test('Teleport (as component root)', () => { const teleportContainer = document.createElement('div') teleportContainer.id = 'teleport4' diff --git a/packages/runtime-core/src/hydration.ts b/packages/runtime-core/src/hydration.ts index 89a00886332..097443dbc53 100644 --- a/packages/runtime-core/src/hydration.ts +++ b/packages/runtime-core/src/hydration.ts @@ -227,20 +227,18 @@ export function createHydrationFunctions( optimized ) - // component may be async, so in the case of fragments we cannot rely - // on component's rendered output to determine the end of the fragment - // instead, we do a lookahead to find the end anchor node. - nextNode = isFragmentStart - ? locateClosingAsyncAnchor(node) - : nextSibling(node) - - // #4293 teleport as component root - if ( - nextNode && - isComment(nextNode) && - nextNode.data === 'teleport end' - ) { - nextNode = nextSibling(nextNode) + // Locate the next node. + if (isFragmentStart) { + // If it's a fragment: since components may be async, we cannot rely + // on component's rendered output to determine the end of the + // fragment. Instead, we do a lookahead to find the end anchor node. + nextNode = locateClosingAnchor(node) + } else if (isComment(node) && node.data === 'teleport start') { + // #4293 #6152 + // If a teleport is at component root, look ahead for teleport end. + nextNode = locateClosingAnchor(node, node.data, 'teleport end') + } else { + nextNode = nextSibling(node) } // #3787 @@ -533,7 +531,7 @@ export function createHydrationFunctions( if (isFragment) { // remove excessive fragment nodes - const end = locateClosingAsyncAnchor(node) + const end = locateClosingAnchor(node) while (true) { const next = nextSibling(node) if (next && next !== end) { @@ -561,13 +559,18 @@ export function createHydrationFunctions( return next } - const locateClosingAsyncAnchor = (node: Node | null): Node | null => { + // looks ahead for a start and closing comment node + const locateClosingAnchor = ( + node: Node | null, + open = '[', + close = ']' + ): Node | null => { let match = 0 while (node) { node = nextSibling(node) if (node && isComment(node)) { - if (node.data === '[') match++ - if (node.data === ']') { + if (node.data === open) match++ + if (node.data === close) { if (match === 0) { return nextSibling(node) } else { From c568778ea3265d8e57f788b00864c9509bf88a4e Mon Sep 17 00:00:00 2001 From: edison Date: Sat, 21 Oct 2023 12:11:41 +0800 Subject: [PATCH 0212/1346] fix(compiler-sfc): avoid gen useCssVars when targeting SSR (#6979) close #6926 --- .../compiler-sfc/__tests__/cssVars.spec.ts | 68 +++++++++++++++++++ packages/compiler-sfc/src/compileScript.ts | 2 +- .../compiler-sfc/src/script/normalScript.ts | 2 +- 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/packages/compiler-sfc/__tests__/cssVars.spec.ts b/packages/compiler-sfc/__tests__/cssVars.spec.ts index 5b01d73d772..9fb72d7ad50 100644 --- a/packages/compiler-sfc/__tests__/cssVars.spec.ts +++ b/packages/compiler-sfc/__tests__/cssVars.spec.ts @@ -272,5 +272,73 @@ describe('CSS vars injection', () => { `export default {\n setup(__props, { expose: __expose }) {\n __expose();\n\n_useCssVars(_ctx => ({\n "xxxxxxxx-background": (_unref(background))\n}))` ) }) + + describe('skip codegen in SSR', () => { + test('script setup, inline', () => { + const { content } = compileSFCScript( + `\n` + + ``, + { + inlineTemplate: true, + templateOptions: { + ssr: true + } + } + ) + expect(content).not.toMatch(`_useCssVars`) + }) + + // #6926 + test('script, non-inline', () => { + const { content } = compileSFCScript( + `\n` + + ``, + { + inlineTemplate: false, + templateOptions: { + ssr: true + } + } + ) + expect(content).not.toMatch(`_useCssVars`) + }) + + test('normal script', () => { + const { content } = compileSFCScript( + `\n` + + ``, + { + templateOptions: { + ssr: true + } + } + ) + expect(content).not.toMatch(`_useCssVars`) + }) + }) }) }) diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index cfcc607c72d..2a33f69936d 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -765,7 +765,7 @@ export function compileScript( if ( sfc.cssVars.length && // no need to do this when targeting SSR - !(options.inlineTemplate && options.templateOptions?.ssr) + !options.templateOptions?.ssr ) { ctx.helperImports.add(CSS_VARS_HELPER) ctx.helperImports.add('unref') diff --git a/packages/compiler-sfc/src/script/normalScript.ts b/packages/compiler-sfc/src/script/normalScript.ts index 76b25c66350..d0f16134273 100644 --- a/packages/compiler-sfc/src/script/normalScript.ts +++ b/packages/compiler-sfc/src/script/normalScript.ts @@ -55,7 +55,7 @@ export function processNormalScript( const s = new MagicString(content) rewriteDefaultAST(scriptAst.body, s, defaultVar) content = s.toString() - if (cssVars.length) { + if (cssVars.length && !ctx.options.templateOptions?.ssr) { content += genNormalScriptCssVarsCode( cssVars, bindings, From 6021d0253e36b35d07d231b9ed36f95e286035be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Sat, 21 Oct 2023 16:59:26 +0800 Subject: [PATCH 0213/1346] chore: upgrade deps (#9443) --- .github/workflows/ci.yml | 2 +- package.json | 12 +- pnpm-lock.yaml | 1254 ++++++++++++++++---------------------- 3 files changed, 532 insertions(+), 736 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index db874b1240e..d4ec93e3e22 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,7 +80,7 @@ jobs: cache: 'pnpm' - run: pnpm install - - run: node node_modules/puppeteer/install.js + - run: node node_modules/puppeteer/install.mjs - name: Run e2e tests run: pnpm run test-e2e diff --git a/package.json b/package.json index d903294ab1e..e1256a4ef8c 100644 --- a/package.json +++ b/package.json @@ -66,9 +66,9 @@ "@rollup/plugin-replace": "^5.0.4", "@rollup/plugin-terser": "^0.4.4", "@types/hash-sum": "^1.0.1", - "@types/node": "^18.18.6", + "@types/node": "^20.8.7", "@typescript-eslint/parser": "^6.8.0", - "@vitest/coverage-istanbul": "^0.34.4", + "@vitest/coverage-istanbul": "^0.34.6", "@vue/consolidate": "0.17.3", "conventional-changelog-cli": "^4.1.0", "enquirer": "^2.4.1", @@ -90,7 +90,7 @@ "prettier": "^3.0.3", "pretty-bytes": "^6.1.1", "pug": "^3.0.2", - "puppeteer": "~21.2.1", + "puppeteer": "~21.3.8", "rimraf": "^5.0.5", "rollup": "^3.29.4", "rollup-plugin-dts": "^6.1.0", @@ -103,8 +103,8 @@ "todomvc-app-css": "^2.4.2", "tslib": "^2.6.2", "tsx": "^3.14.0", - "typescript": "^5.1.6", - "vite": "^4.3.0", - "vitest": "^0.34.4" + "typescript": "^5.2.2", + "vite": "^4.5.0", + "vitest": "^0.34.6" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 026d799f036..25a4d9d94e4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,14 +36,14 @@ importers: specifier: ^1.0.1 version: 1.0.1 '@types/node': - specifier: ^18.18.6 - version: 18.18.6 + specifier: ^20.8.7 + version: 20.8.7 '@typescript-eslint/parser': specifier: ^6.8.0 - version: 6.8.0(eslint@8.51.0)(typescript@5.1.6) + version: 6.8.0(eslint@8.51.0)(typescript@5.2.2) '@vitest/coverage-istanbul': - specifier: ^0.34.4 - version: 0.34.4(vitest@0.34.4) + specifier: ^0.34.6 + version: 0.34.6(vitest@0.34.6) '@vue/consolidate': specifier: 0.17.3 version: 0.17.3 @@ -64,7 +64,7 @@ importers: version: 8.51.0 eslint-plugin-jest: specifier: ^27.4.2 - version: 27.4.2(eslint@8.51.0)(typescript@5.1.6) + version: 27.4.2(eslint@8.51.0)(typescript@5.2.2) estree-walker: specifier: ^2.0.2 version: 2.0.2 @@ -108,8 +108,8 @@ importers: specifier: ^3.0.2 version: 3.0.2 puppeteer: - specifier: ~21.2.1 - version: 21.2.1(typescript@5.1.6) + specifier: ~21.3.8 + version: 21.3.8(typescript@5.2.2) rimraf: specifier: ^5.0.5 version: 5.0.5 @@ -118,7 +118,7 @@ importers: version: 3.29.4 rollup-plugin-dts: specifier: ^6.1.0 - version: 6.1.0(rollup@3.29.4)(typescript@5.1.6) + version: 6.1.0(rollup@3.29.4)(typescript@5.2.2) rollup-plugin-esbuild: specifier: ^6.1.0 version: 6.1.0(esbuild@0.19.5)(rollup@3.29.4) @@ -147,14 +147,14 @@ importers: specifier: ^3.14.0 version: 3.14.0 typescript: - specifier: ^5.1.6 - version: 5.1.6 + specifier: ^5.2.2 + version: 5.2.2 vite: - specifier: ^4.3.0 - version: 4.3.1(@types/node@18.18.6)(terser@5.22.0) + specifier: ^4.5.0 + version: 4.5.0(@types/node@20.8.7)(terser@5.22.0) vitest: - specifier: ^0.34.4 - version: 0.34.4(jsdom@22.1.0)(terser@5.22.0) + specifier: ^0.34.6 + version: 0.34.6(jsdom@22.1.0)(terser@5.22.0) packages/compiler-core: dependencies: @@ -356,7 +356,7 @@ importers: version: 4.4.0(vite@4.5.0)(vue@packages+vue) vite: specifier: ^4.5.0 - version: 4.5.0(@types/node@18.18.6)(terser@5.22.0) + version: 4.5.0(@types/node@20.8.7)(terser@5.22.0) packages/shared: {} @@ -388,7 +388,7 @@ importers: version: link:../shared typescript: specifier: '*' - version: 5.0.2 + version: 5.2.2 packages/vue-compat: dependencies: @@ -412,12 +412,12 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@ampproject/remapping@2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 dev: true /@babel/code-frame@7.22.13: @@ -429,8 +429,8 @@ packages: chalk: 2.4.2 dev: true - /@babel/compat-data@7.22.20: - resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} + /@babel/compat-data@7.23.2: + resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} engines: {node: '>=6.9.0'} dev: true @@ -438,7 +438,7 @@ packages: resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.0 + '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.22.13 '@babel/generator': 7.23.0 '@babel/helper-compilation-targets': 7.22.15 @@ -463,7 +463,7 @@ packages: dependencies: '@babel/types': 7.23.0 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 dev: true @@ -471,9 +471,9 @@ packages: resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.22.20 + '@babel/compat-data': 7.23.2 '@babel/helper-validator-option': 7.22.15 - browserslist: 4.21.10 + browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 dev: true @@ -610,15 +610,6 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - /@esbuild/android-arm64@0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -637,15 +628,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -664,15 +646,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.19: - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -691,15 +664,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.19: - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -718,15 +682,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.19: - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -745,15 +700,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.19: - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -772,15 +718,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.19: - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -799,15 +736,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -826,15 +754,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.17.19: - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -853,15 +772,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.19: - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -880,15 +790,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.19: - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -907,15 +808,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.19: - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -934,15 +826,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.19: - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -961,15 +844,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.19: - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -988,15 +862,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.19: - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -1015,15 +880,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.19: - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -1042,15 +898,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.19: - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -1069,15 +916,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.19: - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -1096,15 +934,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.19: - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -1123,15 +952,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.19: - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -1150,15 +970,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.19: - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -1177,15 +988,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.19: - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -1214,8 +1016,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.8.0: - resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} + /@eslint-community/regexpp@4.9.1: + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -1226,7 +1028,7 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.20.0 + globals: 13.23.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -1241,11 +1043,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + /@humanwhocodes/config-array@0.11.12: + resolution: {integrity: sha512-NlGesA1usRNn6ctHCZ21M4/dKPgW9Nn1FypRdIKKgZOKzkVV4T1FlK5mBiLhHBCDmEbdQG0idrcXlbZfksJ+RA==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.0 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1257,8 +1059,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.0: + resolution: {integrity: sha512-9S9QrXY2K0L4AGDcSgTi9vgiCcG8VcBv4Mp7/1hDPYoswIy6Z6KO5blYto82BT8M0MZNRWmCFLpCs3HlpYGGdw==} dev: true /@hutson/parse-repository-url@5.0.0: @@ -1290,21 +1092,13 @@ packages: '@sinclair/typebox': 0.27.8 dev: true - /@jridgewell/gen-mapping@0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 dev: true /@jridgewell/resolve-uri@3.1.1: @@ -1321,14 +1115,14 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 @@ -1404,7 +1198,7 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.4(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 @@ -1413,18 +1207,18 @@ packages: rollup: 3.29.4 dev: true - /@rollup/plugin-inject@5.0.3(rollup@3.29.4): - resolution: {integrity: sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA==} + /@rollup/plugin-inject@5.0.5(rollup@3.29.4): + resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.4(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) estree-walker: 2.0.2 - magic-string: 0.27.0 + magic-string: 0.30.5 rollup: 3.29.4 dev: true @@ -1437,7 +1231,7 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.4(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) rollup: 3.29.4 dev: true @@ -1450,12 +1244,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.4(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) '@types/resolve': 1.20.2 - deepmerge: 4.3.0 + deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 - resolve: 1.22.1 + resolve: 1.22.8 rollup: 3.29.4 dev: true @@ -1468,7 +1262,7 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.4(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) magic-string: 0.30.5 rollup: 3.29.4 dev: true @@ -1484,25 +1278,10 @@ packages: dependencies: rollup: 3.29.4 serialize-javascript: 6.0.1 - smob: 1.4.0 + smob: 1.4.1 terser: 5.22.0 dev: true - /@rollup/pluginutils@5.0.4(rollup@3.29.4): - resolution: {integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.0 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 3.29.4 - dev: true - /@rollup/pluginutils@5.0.5(rollup@3.29.4): resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} @@ -1512,7 +1291,7 @@ packages: rollup: optional: true dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.3 estree-walker: 2.0.2 picomatch: 2.3.1 rollup: 3.29.4 @@ -1531,57 +1310,55 @@ packages: resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} dev: true - /@types/chai-subset@1.3.3: - resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + /@types/chai-subset@1.3.4: + resolution: {integrity: sha512-CCWNXrJYSUIojZ1149ksLl3AN9cmZ5djf+yUoVVV+NuYrtydItQVlL2ZDqyC6M6O9LWRnVf8yYDxbXHO2TfQZg==} dependencies: - '@types/chai': 4.3.6 - dev: true - - /@types/chai@4.3.6: - resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==} + '@types/chai': 4.3.9 dev: true - /@types/estree@0.0.52: - resolution: {integrity: sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ==} + /@types/chai@4.3.9: + resolution: {integrity: sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==} dev: true - /@types/estree@1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + /@types/estree@1.0.3: + resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==} dev: true /@types/hash-sum@1.0.1: resolution: {integrity: sha512-5JLywbPgWZVgxhAV//qTU6LPurKfQeiyw20GKZMi9V7AjHnAP4t1eNCJ1mC2L4TAicuS71MVoFYVcEM+EiR4lg==} dev: true - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema@7.0.14: + resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} dev: true - /@types/node@18.18.6: - resolution: {integrity: sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==} + /@types/node@20.8.7: + resolution: {integrity: sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==} + dependencies: + undici-types: 5.25.3 dev: true - /@types/normalize-package-data@2.4.1: - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + /@types/normalize-package-data@2.4.3: + resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} dev: true /@types/resolve@1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: true - /@types/semver@7.3.13: - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + /@types/semver@7.5.4: + resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} dev: true - /@types/yauzl@2.10.0: - resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} + /@types/yauzl@2.10.2: + resolution: {integrity: sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==} requiresBuild: true dependencies: - '@types/node': 18.18.6 + '@types/node': 20.8.7 dev: true optional: true - /@typescript-eslint/parser@6.8.0(eslint@8.51.0)(typescript@5.1.6): + /@typescript-eslint/parser@6.8.0(eslint@8.51.0)(typescript@5.2.2): resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1593,21 +1370,21 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.8.0 '@typescript-eslint/types': 6.8.0 - '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.1.6) + '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4 eslint: 8.51.0 - typescript: 5.1.6 + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.50.0: - resolution: {integrity: sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==} + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.50.0 - '@typescript-eslint/visitor-keys': 5.50.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 dev: true /@typescript-eslint/scope-manager@6.8.0: @@ -1618,8 +1395,8 @@ packages: '@typescript-eslint/visitor-keys': 6.8.0 dev: true - /@typescript-eslint/types@5.50.0: - resolution: {integrity: sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==} + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1628,8 +1405,8 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.50.0(typescript@5.1.6): - resolution: {integrity: sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==} + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.2.2): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1637,19 +1414,19 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.50.0 - '@typescript-eslint/visitor-keys': 5.50.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.1.6) - typescript: 5.1.6 + tsutils: 3.21.0(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.8.0(typescript@5.1.6): + /@typescript-eslint/typescript-estree@6.8.0(typescript@5.2.2): resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1664,37 +1441,37 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.1.6) - typescript: 5.1.6 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.50.0(eslint@8.51.0)(typescript@5.1.6): - resolution: {integrity: sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==} + /@typescript-eslint/utils@5.62.0(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.50.0 - '@typescript-eslint/types': 5.50.0 - '@typescript-eslint/typescript-estree': 5.50.0(typescript@5.1.6) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@types/json-schema': 7.0.14 + '@types/semver': 7.5.4 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) eslint: 8.51.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.51.0) semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.50.0: - resolution: {integrity: sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==} + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.50.0 + '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1713,63 +1490,63 @@ packages: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.5.0(@types/node@18.18.6)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.7)(terser@5.22.0) vue: link:packages/vue dev: true - /@vitest/coverage-istanbul@0.34.4(vitest@0.34.4): - resolution: {integrity: sha512-jJiN+U5drYrv1fU39T8jOVWc3RklYkNeTR7UyiVD8fa+Tbav9pAxq02pti93OPZIDoXwwg+RhFAuRuAz///rkQ==} + /@vitest/coverage-istanbul@0.34.6(vitest@0.34.6): + resolution: {integrity: sha512-5KaBNZPDSk2ybavC3rZ1pWGniw7sJ5usuwVGRUYzJwiBfWvnLpuUer7bjw7qUCRGdKJXrBgb/Dsgif9rkwMX/A==} peerDependencies: vitest: '>=0.32.0 <1' dependencies: istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 6.0.0 + istanbul-lib-instrument: 6.0.1 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 + istanbul-reports: 3.1.6 picocolors: 1.0.0 test-exclude: 6.0.0 - vitest: 0.34.4(jsdom@22.1.0)(terser@5.22.0) + vitest: 0.34.6(jsdom@22.1.0)(terser@5.22.0) transitivePeerDependencies: - supports-color dev: true - /@vitest/expect@0.34.4: - resolution: {integrity: sha512-XlMKX8HyYUqB8dsY8Xxrc64J2Qs9pKMt2Z8vFTL4mBWXJsg4yoALHzJfDWi8h5nkO4Zua4zjqtapQ/IluVkSnA==} + /@vitest/expect@0.34.6: + resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} dependencies: - '@vitest/spy': 0.34.4 - '@vitest/utils': 0.34.4 - chai: 4.3.7 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + chai: 4.3.10 dev: true - /@vitest/runner@0.34.4: - resolution: {integrity: sha512-hwwdB1StERqUls8oV8YcpmTIpVeJMe4WgYuDongVzixl5hlYLT2G8afhcdADeDeqCaAmZcSgLTLtqkjPQF7x+w==} + /@vitest/runner@0.34.6: + resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} dependencies: - '@vitest/utils': 0.34.4 + '@vitest/utils': 0.34.6 p-limit: 4.0.0 pathe: 1.1.1 dev: true - /@vitest/snapshot@0.34.4: - resolution: {integrity: sha512-GCsh4coc3YUSL/o+BPUo7lHQbzpdttTxL6f4q0jRx2qVGoYz/cyTRDJHbnwks6TILi6560bVWoBpYC10PuTLHw==} + /@vitest/snapshot@0.34.6: + resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} dependencies: magic-string: 0.30.5 pathe: 1.1.1 - pretty-format: 29.6.3 + pretty-format: 29.7.0 dev: true - /@vitest/spy@0.34.4: - resolution: {integrity: sha512-PNU+fd7DUPgA3Ya924b1qKuQkonAW6hL7YUjkON3wmBwSTIlhOSpy04SJ0NrRsEbrXgMMj6Morh04BMf8k+w0g==} + /@vitest/spy@0.34.6: + resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} dependencies: - tinyspy: 2.1.1 + tinyspy: 2.2.0 dev: true - /@vitest/utils@0.34.4: - resolution: {integrity: sha512-yR2+5CHhp/K4ySY0Qtd+CAL9f5Yh1aXrKfAT42bq6CtlGPh92jIDDDSg7ydlRow1CP+dys4TrOrbELOyNInHSg==} + /@vitest/utils@0.34.6: + resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} dependencies: diff-sequences: 29.6.3 - loupe: 2.3.6 - pretty-format: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 dev: true /@vue/consolidate@0.17.3: @@ -1942,6 +1719,13 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true + /array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true @@ -1951,6 +1735,19 @@ packages: engines: {node: '>=8'} dev: true + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: true @@ -2014,7 +1811,7 @@ packages: dependencies: ansi-align: 3.0.1 camelcase: 7.0.1 - chalk: 5.3.0 + chalk: 5.0.1 cli-boxes: 3.0.0 string-width: 5.1.2 type-fest: 2.19.0 @@ -2042,15 +1839,15 @@ packages: fill-range: 7.0.1 dev: true - /browserslist@4.21.10: - resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001538 - electron-to-chromium: 1.4.525 + caniuse-lite: 1.0.30001551 + electron-to-chromium: 1.4.561 node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.10) + update-browserslist-db: 1.0.13(browserslist@4.22.1) dev: true /buffer-crc32@0.2.13: @@ -2083,11 +1880,12 @@ packages: engines: {node: '>=8'} dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.1 + set-function-length: 1.1.1 dev: true /callsites@3.1.0: @@ -2100,19 +1898,19 @@ packages: engines: {node: '>=14.16'} dev: true - /caniuse-lite@1.0.30001538: - resolution: {integrity: sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==} + /caniuse-lite@1.0.30001551: + resolution: {integrity: sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==} dev: true - /chai@4.3.7: - resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + /chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 - check-error: 1.0.2 + check-error: 1.0.3 deep-eql: 4.1.3 - get-func-name: 2.0.0 - loupe: 2.3.6 + get-func-name: 2.0.2 + loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 dev: true @@ -2157,8 +1955,10 @@ packages: is-regex: 1.1.4 dev: true - /check-error@1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 dev: true /chokidar@3.5.3: @@ -2176,13 +1976,14 @@ packages: fsevents: 2.3.3 dev: true - /chromium-bidi@0.4.26(devtools-protocol@0.0.1159816): - resolution: {integrity: sha512-lukBGfogAI4T0y3acc86RaacqgKQve47/8pV2c+Hr1PjcICj2K4OkL3qfX3qrqxxnd4ddurFC0WBA3VCQqYeUQ==} + /chromium-bidi@0.4.31(devtools-protocol@0.0.1179426): + resolution: {integrity: sha512-OtvEg2JMRQrHsmLx4FV3u1Hf9waYxB5PmL+yM0HkFpc9H2x3TMbUqS+GP2/fC4399hzOO+EQF8uVU43By9ILag==} peerDependencies: devtools-protocol: '*' dependencies: - devtools-protocol: 0.0.1159816 + devtools-protocol: 0.0.1179426 mitt: 3.0.1 + urlpattern-polyfill: 9.0.0 dev: true /cli-boxes@3.0.0: @@ -2298,7 +2099,7 @@ packages: dev: true /concat-map@0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true /constantinople@4.0.1: @@ -2402,7 +2203,7 @@ packages: hasBin: true dependencies: conventional-commits-filter: 4.0.0 - handlebars: 4.7.7 + handlebars: 4.7.8 json-stringify-safe: 5.0.1 meow: 12.1.1 semver: 7.5.4 @@ -2450,8 +2251,8 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: false - /cosmiconfig@8.3.5(typescript@5.1.6): - resolution: {integrity: sha512-A5Xry3xfS96wy2qbiLkQLAg4JUrR2wvfybxj6yqLmrUfMAvhS3MZxIP2oQn0grgYIvJqzpeTEWu4vK0t+12NNw==} + /cosmiconfig@8.3.6(typescript@5.2.2): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -2463,7 +2264,7 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.1.6 + typescript: 5.2.2 dev: true /cross-fetch@4.0.0: @@ -2480,7 +2281,7 @@ packages: dependencies: nice-try: 1.0.5 path-key: 2.0.1 - semver: 5.7.1 + semver: 5.7.2 shebang-command: 1.2.0 which: 1.3.1 dev: true @@ -2516,8 +2317,8 @@ packages: engines: {node: '>=12'} dev: true - /data-uri-to-buffer@5.0.1: - resolution: {integrity: sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==} + /data-uri-to-buffer@6.0.1: + resolution: {integrity: sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==} engines: {node: '>= 14'} dev: true @@ -2573,15 +2374,25 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge@4.3.0: - resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} dev: true - /define-properties@1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + gopd: 1.0.1 + has-property-descriptors: 1.0.0 + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: + define-data-property: 1.1.1 has-property-descriptors: 1.0.0 object-keys: 1.1.1 dev: true @@ -2600,8 +2411,8 @@ packages: engines: {node: '>=0.4.0'} dev: true - /devtools-protocol@0.0.1159816: - resolution: {integrity: sha512-2cZlHxC5IlgkIWe2pSDmCrDiTzbSJWywjbDDnupOImEBcG31CQgBLV8wWE+5t+C4rimcjHsbzy7CBzf9oFjboA==} + /devtools-protocol@0.0.1179426: + resolution: {integrity: sha512-KKC7IGwdOr7u9kTGgjUvGTov/z1s2H7oHi3zKCdR9eSDyCPia5CBi4aRhtp7d8uR7l0GS5UTDw3TjKGu5CqINg==} dev: true /diff-sequences@29.6.3: @@ -2645,8 +2456,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.525: - resolution: {integrity: sha512-GIZ620hDK4YmIqAWkscG4W6RwY6gOx1y5J6f4JUQwctiJrqH2oxZYU4mXHi35oV32tr630UcepBzSBGJ/WYcZA==} + /electron-to-chromium@1.4.561: + resolution: {integrity: sha512-eS5t4ulWOBfVHdq9SW2dxEaFarj1lPjvJ8PaYMOjY0DecBaj/t4ARziL2IPpDr4atyWwjLFGQ2vo/VCgQFezVQ==} dev: true /emoji-regex@8.0.0: @@ -2671,8 +2482,8 @@ packages: strip-ansi: 6.0.1 dev: true - /entities@4.4.0: - resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} dev: true @@ -2682,43 +2493,49 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.21.1: - resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} + /es-abstract@1.22.2: + resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} engines: {node: '>= 0.4'} dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 - function-bind: 1.1.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.2.0 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.1 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.3 + has: 1.0.4 has-property-descriptors: 1.0.0 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.4 - is-array-buffer: 3.0.1 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 is-string: 1.0.7 - is-typed-array: 1.1.10 + is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.9 + which-typed-array: 1.1.13 dev: true /es-module-lexer@1.3.1: @@ -2729,8 +2546,8 @@ packages: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 - has: 1.0.3 + get-intrinsic: 1.2.1 + has: 1.0.4 has-tostringtag: 1.0.0 dev: true @@ -2753,36 +2570,6 @@ packages: import-meta-resolve: 3.0.0 dev: true - /esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - dev: true - /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -2870,7 +2657,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-plugin-jest@27.4.2(eslint@8.51.0)(typescript@5.1.6): + /eslint-plugin-jest@27.4.2(eslint@8.51.0)(typescript@5.2.2): resolution: {integrity: sha512-3Nfvv3wbq2+PZlRTf2oaAWXWwbdBejFRBR2O8tAO67o+P8zno+QGbcDYaAXODlreXVg+9gvWhKKmG2rgfb8GEg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2883,7 +2670,7 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/utils': 5.50.0(eslint@8.51.0)(typescript@5.1.6) + '@typescript-eslint/utils': 5.62.0(eslint@8.51.0)(typescript@5.2.2) eslint: 8.51.0 transitivePeerDependencies: - supports-color @@ -2906,21 +2693,6 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@3.0.0(eslint@8.51.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.51.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2932,10 +2704,10 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@eslint-community/regexpp': 4.8.0 + '@eslint-community/regexpp': 4.9.1 '@eslint/eslintrc': 2.1.2 '@eslint/js': 8.51.0 - '@humanwhocodes/config-array': 0.11.11 + '@humanwhocodes/config-array': 0.11.12 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -2953,7 +2725,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.20.0 + globals: 13.23.0 graphemer: 1.4.0 ignore: 5.2.4 imurmurhash: 0.1.4 @@ -3062,7 +2834,7 @@ packages: get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: - '@types/yauzl': 2.10.0 + '@types/yauzl': 2.10.2 transitivePeerDependencies: - supports-color dev: true @@ -3075,8 +2847,8 @@ packages: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} dev: true - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3116,7 +2888,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.0.4 + flat-cache: 3.1.1 dev: true /file-saver@2.0.5: @@ -3146,16 +2918,17 @@ packages: path-exists: 5.0.0 dev: true - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} + engines: {node: '>=12.0.0'} dependencies: - flatted: 3.2.7 + flatted: 3.2.9 + keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /for-each@0.3.3: @@ -3185,7 +2958,7 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 dev: true @@ -3202,17 +2975,17 @@ packages: dev: true optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.2 functions-have-names: 1.2.3 dev: true @@ -3236,15 +3009,16 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-func-name@2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-intrinsic@1.2.0: - resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: - function-bind: 1.1.1 - has: 1.0.3 + function-bind: 1.1.2 + has: 1.0.4 + has-proto: 1.0.1 has-symbols: 1.0.3 dev: true @@ -3269,8 +3043,8 @@ packages: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.1 dev: true /get-tsconfig@4.7.2: @@ -3279,12 +3053,12 @@ packages: resolve-pkg-maps: 1.0.0 dev: true - /get-uri@6.0.1: - resolution: {integrity: sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==} + /get-uri@6.0.2: + resolution: {integrity: sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==} engines: {node: '>= 14'} dependencies: basic-ftp: 5.0.3 - data-uri-to-buffer: 5.0.1 + data-uri-to-buffer: 6.0.1 debug: 4.3.4 fs-extra: 8.1.0 transitivePeerDependencies: @@ -3332,7 +3106,7 @@ packages: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.3 - minipass: 7.0.3 + minipass: 7.0.4 path-scurry: 1.10.1 dev: true @@ -3363,8 +3137,8 @@ packages: engines: {node: '>=4'} dev: true - /globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -3374,7 +3148,7 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.1.4 + define-properties: 1.2.1 dev: true /globby@11.1.0: @@ -3383,7 +3157,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.1 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -3392,19 +3166,19 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /handlebars@4.7.7: - resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} hasBin: true dependencies: @@ -3433,7 +3207,7 @@ packages: /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /has-proto@1.0.1: @@ -3453,11 +3227,9 @@ packages: has-symbols: 1.0.3 dev: true - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 dev: true /hash-sum@2.0.0: @@ -3570,8 +3342,8 @@ packages: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} dev: false - /immutable@4.2.3: - resolution: {integrity: sha512-IHpmvaOIX4VLJwPOuQr1NpeBr2ZG6vpIj3blsLVxXRWJscLioaJRStqC+NcBsLeCDsnGlPpXd5/WZmnE7MbsKA==} + /immutable@4.3.4: + resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} dev: true /import-fresh@3.3.0: @@ -3605,12 +3377,12 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /internal-slot@1.0.4: - resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 - has: 1.0.3 + get-intrinsic: 1.2.1 + has: 1.0.4 side-channel: 1.0.4 dev: true @@ -3622,12 +3394,12 @@ packages: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} dev: true - /is-array-buffer@3.0.1: - resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - is-typed-array: 1.1.10 + call-bind: 1.0.5 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 dev: true /is-arrayish@0.2.1: @@ -3651,7 +3423,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true @@ -3667,10 +3439,10 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: - has: 1.0.3 + has: 1.0.4 dev: true /is-date-object@1.0.5: @@ -3762,21 +3534,21 @@ packages: /is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} dependencies: - '@types/estree': 0.0.52 + '@types/estree': 1.0.3 dev: true /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true /is-stream@2.0.1: @@ -3810,21 +3582,17 @@ packages: text-extensions: 2.4.0 dev: true - /is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 + which-typed-array: 1.1.13 dev: true /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true /is-wsl@2.2.0: @@ -3838,6 +3606,10 @@ packages: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: false + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -3847,8 +3619,8 @@ packages: engines: {node: '>=8'} dev: true - /istanbul-lib-instrument@6.0.0: - resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} + /istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} dependencies: '@babel/core': 7.23.2 @@ -3880,8 +3652,8 @@ packages: - supports-color dev: true - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 @@ -3937,13 +3709,13 @@ packages: rrweb-cssom: 0.6.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 + tough-cookie: 4.1.3 w3c-xmlserializer: 4.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 12.0.1 - ws: 8.13.0 + ws: 8.14.2 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -3957,6 +3729,10 @@ packages: hasBin: true dev: true + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + /json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: true @@ -3999,7 +3775,7 @@ packages: /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jsonparse@1.3.1: @@ -4019,10 +3795,16 @@ packages: dependencies: lie: 3.3.0 pako: 1.0.11 - readable-stream: 2.3.7 + readable-stream: 2.3.8 setimmediate: 1.0.5 dev: false + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -4086,7 +3868,7 @@ packages: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 @@ -4139,10 +3921,10 @@ packages: wrap-ansi: 8.1.0 dev: true - /loupe@2.3.6: - resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: - get-func-name: 2.0.0 + get-func-name: 2.0.2 dev: true /lru-cache@10.0.1: @@ -4168,13 +3950,6 @@ packages: engines: {node: '>=12'} dev: true - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -4289,8 +4064,8 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@7.0.3: - resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} dev: true @@ -4308,7 +4083,7 @@ packages: acorn: 8.10.0 pathe: 1.1.1 pkg-types: 1.0.3 - ufo: 1.3.0 + ufo: 1.3.1 dev: true /monaco-editor@0.44.0: @@ -4370,8 +4145,8 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.1 - semver: 5.7.1 + resolve: 1.22.8 + semver: 5.7.2 validate-npm-package-license: 3.0.4 dev: true @@ -4380,7 +4155,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: hosted-git-info: 7.0.1 - is-core-module: 2.11.0 + is-core-module: 2.13.0 semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: true @@ -4402,8 +4177,8 @@ packages: minimatch: 3.1.2 pidtree: 0.3.1 read-pkg: 3.0.0 - shell-quote: 1.8.0 - string.prototype.padend: 3.1.4 + shell-quote: 1.8.1 + string.prototype.padend: 3.1.5 dev: true /npm-run-path@4.0.1: @@ -4429,8 +4204,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true /object-keys@1.1.1: @@ -4442,8 +4217,8 @@ packages: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 + call-bind: 1.0.5 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true @@ -4520,7 +4295,7 @@ packages: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 debug: 4.3.4 - get-uri: 6.0.1 + get-uri: 6.0.2 http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 pac-resolver: 7.0.0 @@ -4581,7 +4356,7 @@ packages: /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: - entities: 4.4.0 + entities: 4.5.0 dev: true /path-exists@4.0.0: @@ -4627,7 +4402,7 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: lru-cache: 10.0.1 - minipass: 7.0.3 + minipass: 7.0.4 dev: true /path-to-regexp@2.2.1: @@ -4700,8 +4475,8 @@ packages: postcss: 8.4.31 dev: true - /postcss-modules-local-by-default@4.0.0(postcss@8.4.31): - resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} + /postcss-modules-local-by-default@4.0.3(postcss@8.4.31): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -4742,7 +4517,7 @@ packages: lodash.camelcase: 4.3.0 postcss: 8.4.31 postcss-modules-extract-imports: 3.0.0(postcss@8.4.31) - postcss-modules-local-by-default: 4.0.0(postcss@8.4.31) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.31) postcss-modules-scope: 3.0.0(postcss@8.4.31) postcss-modules-values: 4.0.0(postcss@8.4.31) string-hash: 1.1.3 @@ -4784,8 +4559,8 @@ packages: engines: {node: ^14.13.1 || >=16.0.0} dev: true - /pretty-format@29.6.3: - resolution: {integrity: sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==} + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 @@ -4864,7 +4639,7 @@ packages: jstransformer: 1.0.0 pug-error: 2.0.0 pug-walk: 2.0.0 - resolve: 1.22.1 + resolve: 1.22.8 dev: true /pug-lexer@5.0.1: @@ -4939,16 +4714,16 @@ packages: engines: {node: '>=6'} dev: true - /puppeteer-core@21.2.1: - resolution: {integrity: sha512-+I8EjpWFeeFKScpQiTEnC4jGve2Wr4eA9qUMoa8S317DJPm9h7wzrT4YednZK2TQZMyPtPQ2Disb/Tg02+4Naw==} + /puppeteer-core@21.3.8: + resolution: {integrity: sha512-yv12E/+zZ7Lei5tJB4sUkSrsuqKibuYpYxLGbmtLUjjYIqGE5HKz9OUI2I/RFHEvF+pHi2bTbv5bWydeCGJ6Mw==} engines: {node: '>=16.3.0'} dependencies: '@puppeteer/browsers': 1.7.1 - chromium-bidi: 0.4.26(devtools-protocol@0.0.1159816) + chromium-bidi: 0.4.31(devtools-protocol@0.0.1179426) cross-fetch: 4.0.0 debug: 4.3.4 - devtools-protocol: 0.0.1159816 - ws: 8.14.1 + devtools-protocol: 0.0.1179426 + ws: 8.14.2 transitivePeerDependencies: - bufferutil - encoding @@ -4956,14 +4731,14 @@ packages: - utf-8-validate dev: true - /puppeteer@21.2.1(typescript@5.1.6): - resolution: {integrity: sha512-bgY/lYBH3rR+m5EP1FxzY2MRMrau7Pyq+N5YlspA63sF+cBkUiTn5WZXwXm7mEHwkkOSVi5LiS74T5QIgrSklg==} + /puppeteer@21.3.8(typescript@5.2.2): + resolution: {integrity: sha512-4OrInVIAtDgcznENUV4Du4gYSZhRmbCkckvOoPstXrUH4JsQ3atSegY+9f/tOKCDB2qh7sXaszDcFEn+RymY0g==} engines: {node: '>=16.3.0'} requiresBuild: true dependencies: '@puppeteer/browsers': 1.7.1 - cosmiconfig: 8.3.5(typescript@5.1.6) - puppeteer-core: 21.2.1 + cosmiconfig: 8.3.6(typescript@5.2.2) + puppeteer-core: 21.3.8 transitivePeerDependencies: - bufferutil - encoding @@ -5015,7 +4790,7 @@ packages: dependencies: find-up: 6.3.0 read-pkg: 8.1.0 - type-fest: 4.3.1 + type-fest: 4.5.0 dev: true /read-pkg@3.0.0: @@ -5031,14 +4806,14 @@ packages: resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} engines: {node: '>=16'} dependencies: - '@types/normalize-package-data': 2.4.1 + '@types/normalize-package-data': 2.4.3 normalize-package-data: 6.0.0 parse-json: 7.1.0 - type-fest: 4.3.1 + type-fest: 4.5.0 dev: true - /readable-stream@2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -5056,13 +4831,13 @@ packages: picomatch: 2.3.1 dev: true - /regexp.prototype.flags@1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - functions-have-names: 1.2.3 + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 dev: true /registry-auth-token@3.3.2: @@ -5102,11 +4877,11 @@ packages: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -5143,7 +4918,7 @@ packages: glob: 10.3.10 dev: true - /rollup-plugin-dts@6.1.0(rollup@3.29.4)(typescript@5.1.6): + /rollup-plugin-dts@6.1.0(rollup@3.29.4)(typescript@5.2.2): resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==} engines: {node: '>=16'} peerDependencies: @@ -5152,7 +4927,7 @@ packages: dependencies: magic-string: 0.30.5 rollup: 3.29.4 - typescript: 5.1.6 + typescript: 5.2.2 optionalDependencies: '@babel/code-frame': 7.22.13 dev: true @@ -5179,7 +4954,7 @@ packages: peerDependencies: rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 dependencies: - '@rollup/plugin-inject': 5.0.3(rollup@3.29.4) + '@rollup/plugin-inject': 5.0.5(rollup@3.29.4) rollup: 3.29.4 dev: true @@ -5201,6 +4976,16 @@ packages: queue-microtask: 1.2.3 dev: true + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -5211,8 +4996,8 @@ packages: /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.1 is-regex: 1.1.4 dev: true @@ -5226,7 +5011,7 @@ packages: hasBin: true dependencies: chokidar: 3.5.3 - immutable: 4.2.3 + immutable: 4.3.4 source-map-js: 1.0.2 dev: true @@ -5237,8 +5022,8 @@ packages: xmlchars: 2.2.0 dev: true - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true dev: true @@ -5294,6 +5079,25 @@ packages: - supports-color dev: true + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.1 + gopd: 1.0.1 + has-property-descriptors: 1.0.0 + dev: true + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.0 + dev: true + /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: false @@ -5322,16 +5126,16 @@ packages: engines: {node: '>=8'} dev: true - /shell-quote@1.8.0: - resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==} + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - object-inspect: 1.12.3 + call-bind: 1.0.5 + get-intrinsic: 1.2.1 + object-inspect: 1.13.1 dev: true /siginfo@2.0.0: @@ -5376,8 +5180,8 @@ packages: engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} dev: true - /smob@1.4.0: - resolution: {integrity: sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==} + /smob@1.4.1: + resolution: {integrity: sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==} dev: true /socks-proxy-agent@8.0.2: @@ -5415,11 +5219,11 @@ packages: engines: {node: '>=0.10.0'} dev: true - /spdx-correct@3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.16 dev: true /spdx-exceptions@2.3.0: @@ -5430,11 +5234,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.16 dev: true - /spdx-license-ids@3.0.12: - resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true /split2@4.2.0: @@ -5484,29 +5288,38 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.padend@3.1.4: - resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==} + /string.prototype.padend@3.1.5: + resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: true + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.2 dev: true - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.2 dev: true - /string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.21.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.2 dev: true /string_decoder@1.1.1: @@ -5554,8 +5367,8 @@ packages: engines: {node: '>=8'} dev: true - /strip-literal@1.0.1: - resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: acorn: 8.10.0 dev: true @@ -5644,8 +5457,8 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /tinybench@2.5.0: - resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} + /tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} dev: true /tinypool@0.7.0: @@ -5653,8 +5466,8 @@ packages: engines: {node: '>=14.0.0'} dev: true - /tinyspy@2.1.1: - resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} + /tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} engines: {node: '>=14.0.0'} dev: true @@ -5677,8 +5490,8 @@ packages: resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} dev: true - /tough-cookie@4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -5698,13 +5511,13 @@ packages: punycode: 2.3.0 dev: true - /ts-api-utils@1.0.2(typescript@5.1.6): - resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.1.6 + typescript: 5.2.2 dev: true /tslib@1.14.1: @@ -5715,14 +5528,14 @@ packages: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true - /tsutils@3.21.0(typescript@5.1.6): + /tsutils@3.21.0(typescript@5.2.2): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.1.6 + typescript: 5.2.2 dev: true /tsx@3.14.0: @@ -5768,33 +5581,56 @@ packages: engines: {node: '>=14.16'} dev: true - /type-fest@4.3.1: - resolution: {integrity: sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw==} + /type-fest@4.5.0: + resolution: {integrity: sha512-diLQivFzddJl4ylL3jxSkEc39Tpw7o1QeEHIPxVwryDK2lpB7Nqhzhuo6v5/Ls08Z0yPSAhsyAWlv1/H0ciNmw==} engines: {node: '>=16'} dev: true + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 - is-typed-array: 1.1.10 + is-typed-array: 1.1.12 dev: true - /typescript@5.0.2: - resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} - engines: {node: '>=12.20'} - hasBin: true - dev: false - - /typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'} hasBin: true - dev: true - /ufo@1.3.0: - resolution: {integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==} + /ufo@1.3.1: + resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} dev: true /uglify-js@3.17.4: @@ -5808,7 +5644,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -5821,6 +5657,10 @@ packages: through: 2.3.8 dev: true + /undici-types@5.25.3: + resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + dev: true + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -5831,13 +5671,13 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /update-browserslist-db@1.0.11(browserslist@4.21.10): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.10 + browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 dev: true @@ -5862,13 +5702,17 @@ packages: requires-port: 1.0.0 dev: true + /urlpattern-polyfill@9.0.0: + resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} + dev: true + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: - spdx-correct: 3.1.1 + spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true @@ -5877,8 +5721,8 @@ packages: engines: {node: '>= 0.8'} dev: true - /vite-node@0.34.4(@types/node@18.18.6)(terser@5.22.0): - resolution: {integrity: sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ==} + /vite-node@0.34.6(@types/node@20.8.7)(terser@5.22.0): + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} engines: {node: '>=v14.18.0'} hasBin: true dependencies: @@ -5887,7 +5731,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.5.0(@types/node@18.18.6)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.7)(terser@5.22.0) transitivePeerDependencies: - '@types/node' - less @@ -5899,41 +5743,7 @@ packages: - terser dev: true - /vite@4.3.1(@types/node@18.18.6)(terser@5.22.0): - resolution: {integrity: sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 18.18.6 - esbuild: 0.17.19 - postcss: 8.4.31 - rollup: 3.29.4 - terser: 5.22.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vite@4.5.0(@types/node@18.18.6)(terser@5.22.0): + /vite@4.5.0(@types/node@20.8.7)(terser@5.22.0): resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -5961,7 +5771,7 @@ packages: terser: optional: true dependencies: - '@types/node': 18.18.6 + '@types/node': 20.8.7 esbuild: 0.18.20 postcss: 8.4.31 rollup: 3.29.4 @@ -5970,8 +5780,8 @@ packages: fsevents: 2.3.3 dev: true - /vitest@0.34.4(jsdom@22.1.0)(terser@5.22.0): - resolution: {integrity: sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw==} + /vitest@0.34.6(jsdom@22.1.0)(terser@5.22.0): + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: @@ -6001,18 +5811,18 @@ packages: webdriverio: optional: true dependencies: - '@types/chai': 4.3.6 - '@types/chai-subset': 1.3.3 - '@types/node': 18.18.6 - '@vitest/expect': 0.34.4 - '@vitest/runner': 0.34.4 - '@vitest/snapshot': 0.34.4 - '@vitest/spy': 0.34.4 - '@vitest/utils': 0.34.4 + '@types/chai': 4.3.9 + '@types/chai-subset': 1.3.4 + '@types/node': 20.8.7 + '@vitest/expect': 0.34.6 + '@vitest/runner': 0.34.6 + '@vitest/snapshot': 0.34.6 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 acorn: 8.10.0 acorn-walk: 8.2.0 cac: 6.7.14 - chai: 4.3.7 + chai: 4.3.10 debug: 4.3.4 jsdom: 22.1.0 local-pkg: 0.4.3 @@ -6020,11 +5830,11 @@ packages: pathe: 1.1.1 picocolors: 1.0.0 std-env: 3.4.3 - strip-literal: 1.0.1 - tinybench: 2.5.0 + strip-literal: 1.3.0 + tinybench: 2.5.1 tinypool: 0.7.0 - vite: 4.5.0(@types/node@18.18.6)(terser@5.22.0) - vite-node: 0.34.4(@types/node@18.18.6)(terser@5.22.0) + vite: 4.5.0(@types/node@20.8.7)(terser@5.22.0) + vite-node: 0.34.6(@types/node@20.8.7)(terser@5.22.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -6094,16 +5904,15 @@ packages: is-symbol: 1.0.4 dev: true - /which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - is-typed-array: 1.1.10 dev: true /which@1.3.1: @@ -6173,21 +5982,8 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /ws@8.14.1: - resolution: {integrity: sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==} + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 From 733437691f70ebca8dd6cc3bc8356f5b57d4d5d8 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sat, 21 Oct 2023 21:07:55 +0800 Subject: [PATCH 0214/1346] fix(hmr): fix hmr error for hoisted children array in v-for fix #6978 close #7114 --- .../__tests__/transforms/hoistStatic.spec.ts | 12 ++++++ packages/compiler-core/src/options.ts | 7 ++++ packages/compiler-core/src/transform.ts | 2 + .../src/transforms/hoistStatic.ts | 9 ++++- packages/compiler-sfc/src/compileTemplate.ts | 1 + packages/runtime-core/__tests__/hmr.spec.ts | 38 ++++++++++++++++++- 6 files changed, 67 insertions(+), 2 deletions(-) diff --git a/packages/compiler-core/__tests__/transforms/hoistStatic.spec.ts b/packages/compiler-core/__tests__/transforms/hoistStatic.spec.ts index eec5a76d363..49ad7ad8982 100644 --- a/packages/compiler-core/__tests__/transforms/hoistStatic.spec.ts +++ b/packages/compiler-core/__tests__/transforms/hoistStatic.spec.ts @@ -593,5 +593,17 @@ describe('compiler: hoistStatic transform', () => { expect(root.hoists.length).toBe(2) expect(generate(root).code).toMatchSnapshot() }) + + test('clone hoisted array children in HMR mode', () => { + const root = transformWithHoist(`
`, { + hmr: true + }) + expect(root.hoists.length).toBe(2) + expect(root.codegenNode).toMatchObject({ + children: { + content: '[..._hoisted_2]' + } + }) + }) }) }) diff --git a/packages/compiler-core/src/options.ts b/packages/compiler-core/src/options.ts index 65bbcb36dd6..6f1a8efcff8 100644 --- a/packages/compiler-core/src/options.ts +++ b/packages/compiler-core/src/options.ts @@ -256,6 +256,13 @@ export interface TransformOptions * needed to render inline CSS variables on component root */ ssrCssVars?: string + /** + * Whether to compile the template assuming it needs to handle HMR. + * Some edge cases may need to generate different code for HMR to work + * correctly, e.g. #6938, #7138 + * @internal + */ + hmr?: boolean } export interface CodegenOptions extends SharedTransformCodegenOptions { diff --git a/packages/compiler-core/src/transform.ts b/packages/compiler-core/src/transform.ts index d26c11bba20..04f85679cae 100644 --- a/packages/compiler-core/src/transform.ts +++ b/packages/compiler-core/src/transform.ts @@ -129,6 +129,7 @@ export function createTransformContext( filename = '', prefixIdentifiers = false, hoistStatic = false, + hmr = false, cacheHandlers = false, nodeTransforms = [], directiveTransforms = {}, @@ -155,6 +156,7 @@ export function createTransformContext( selfName: nameMatch && capitalize(camelize(nameMatch[1])), prefixIdentifiers, hoistStatic, + hmr, cacheHandlers, nodeTransforms, directiveTransforms, diff --git a/packages/compiler-core/src/transforms/hoistStatic.ts b/packages/compiler-core/src/transforms/hoistStatic.ts index 5526163c6f9..fd443496ca7 100644 --- a/packages/compiler-core/src/transforms/hoistStatic.ts +++ b/packages/compiler-core/src/transforms/hoistStatic.ts @@ -140,9 +140,16 @@ function walk( node.codegenNode.type === NodeTypes.VNODE_CALL && isArray(node.codegenNode.children) ) { - node.codegenNode.children = context.hoist( + const hoisted = context.hoist( createArrayExpression(node.codegenNode.children) ) + // #6978, #7138, #7114 + // a hoisted children array inside v-for can caused HMR errors since + // it might be mutated when mounting the v-for list + if (context.hmr) { + hoisted.content = `[...${hoisted.content}]` + } + node.codegenNode.children = hoisted } } diff --git a/packages/compiler-sfc/src/compileTemplate.ts b/packages/compiler-sfc/src/compileTemplate.ts index fbd100c9784..b036619c794 100644 --- a/packages/compiler-sfc/src/compileTemplate.ts +++ b/packages/compiler-sfc/src/compileTemplate.ts @@ -212,6 +212,7 @@ function doCompileTemplate({ slotted, sourceMap: true, ...compilerOptions, + hmr: !isProd, nodeTransforms: nodeTransforms.concat(compilerOptions.nodeTransforms || []), filename, onError: e => errors.push(e), diff --git a/packages/runtime-core/__tests__/hmr.spec.ts b/packages/runtime-core/__tests__/hmr.spec.ts index db713a3f276..2e989e368a3 100644 --- a/packages/runtime-core/__tests__/hmr.spec.ts +++ b/packages/runtime-core/__tests__/hmr.spec.ts @@ -20,7 +20,7 @@ const { createRecord, rerender, reload } = __VUE_HMR_RUNTIME__ registerRuntimeCompiler(compileToFunction) function compileToFunction(template: string) { - const { code } = baseCompile(template) + const { code } = baseCompile(template, { hoistStatic: true, hmr: true }) const render = new Function('Vue', code)( runtimeTest ) as InternalRenderFunction @@ -567,4 +567,40 @@ describe('hot module replacement', () => { rerender(parentId, compileToFunction(`2`)) expect(serializeInner(root)).toBe(`2`) }) + + // #6978, #7138, #7114 + test('hoisted children array inside v-for', () => { + const root = nodeOps.createElement('div') + const appId = 'test-app-id' + const App: ComponentOptions = { + __hmrId: appId, + render: compileToFunction( + `
+
1
+
+

2

+

3

` + ) + } + createRecord(appId, App) + + render(h(App), root) + expect(serializeInner(root)).toBe( + `
1
1

2

3

` + ) + + // move the

3

into the
1
+ rerender( + appId, + compileToFunction( + `
+
1

3

+
+

2

` + ) + ) + expect(serializeInner(root)).toBe( + `
1

3

1

3

2

` + ) + }) }) From 00de3e61ed7a55e7d6c2e1987551d66ad0f909ff Mon Sep 17 00:00:00 2001 From: Carlos Rodrigues Date: Sat, 21 Oct 2023 14:24:30 +0100 Subject: [PATCH 0215/1346] fix(Suspense): calling hooks before the transition finishes (#9388) close #5844 close #5952 --- .../runtime-core/src/components/Suspense.ts | 9 +- packages/vue/__tests__/e2e/Transition.spec.ts | 88 +++++++++++++++++++ 2 files changed, 94 insertions(+), 3 deletions(-) diff --git a/packages/runtime-core/src/components/Suspense.ts b/packages/runtime-core/src/components/Suspense.ts index 0fa07d9beec..3640733d734 100644 --- a/packages/runtime-core/src/components/Suspense.ts +++ b/packages/runtime-core/src/components/Suspense.ts @@ -491,10 +491,12 @@ function createSuspenseBoundary( container } = suspense + // if there's a transition happening we need to wait it to finish. + let delayEnter: boolean | null = false if (suspense.isHydrating) { suspense.isHydrating = false } else if (!resume) { - const delayEnter = + delayEnter = activeBranch && pendingBranch!.transition && pendingBranch!.transition.mode === 'out-in' @@ -502,6 +504,7 @@ function createSuspenseBoundary( activeBranch!.transition!.afterLeave = () => { if (pendingId === suspense.pendingId) { move(pendingBranch!, container, anchor, MoveType.ENTER) + queuePostFlushCb(effects) } } } @@ -538,8 +541,8 @@ function createSuspenseBoundary( } parent = parent.parent } - // no pending parent suspense, flush all jobs - if (!hasUnresolvedAncestor) { + // no pending parent suspense nor transition, flush all jobs + if (!hasUnresolvedAncestor && !delayEnter) { queuePostFlushCb(effects) } suspense.effects = [] diff --git a/packages/vue/__tests__/e2e/Transition.spec.ts b/packages/vue/__tests__/e2e/Transition.spec.ts index 326eaa57e3d..38fdf53cf4f 100644 --- a/packages/vue/__tests__/e2e/Transition.spec.ts +++ b/packages/vue/__tests__/e2e/Transition.spec.ts @@ -1498,6 +1498,94 @@ describe('e2e: Transition', () => { }, E2E_TIMEOUT ) + + // #5844 + test('children mount should be called after html changes', async () => { + const fooMountSpy = vi.fn() + const barMountSpy = vi.fn() + + await page().exposeFunction('fooMountSpy', fooMountSpy) + await page().exposeFunction('barMountSpy', barMountSpy) + + await page().evaluate(() => { + const { fooMountSpy, barMountSpy } = window as any + const { createApp, ref, h, onMounted } = (window as any).Vue + createApp({ + template: ` +
+ + + + + + +
+ + `, + components: { + Foo: { + setup() { + const el = ref(null) + onMounted(() => { + fooMountSpy( + !!el.value, + !!document.getElementById('foo'), + !!document.getElementById('bar') + ) + }) + + return () => h('div', { ref: el, id: 'foo' }, 'Foo') + } + }, + Bar: { + setup() { + const el = ref(null) + onMounted(() => { + barMountSpy( + !!el.value, + !!document.getElementById('foo'), + !!document.getElementById('bar') + ) + }) + + return () => h('div', { ref: el, id: 'bar' }, 'Bar') + } + } + }, + setup: () => { + const toggle = ref(true) + const click = () => (toggle.value = !toggle.value) + return { toggle, click } + } + }).mount('#app') + }) + + await nextFrame() + expect(await html('#container')).toBe('
Foo
') + await transitionFinish() + + expect(fooMountSpy).toBeCalledTimes(1) + expect(fooMountSpy).toHaveBeenNthCalledWith(1, true, true, false) + + await page().evaluate(async () => { + ;(document.querySelector('#toggleBtn') as any)!.click() + // nextTrick for patch start + await Promise.resolve() + // nextTrick for Suspense resolve + await Promise.resolve() + // nextTrick for dom transition start + await Promise.resolve() + return document.querySelector('#container div')!.className.split(/\s+/g) + }) + + await nextFrame() + await transitionFinish() + + expect(await html('#container')).toBe('
Bar
') + + expect(barMountSpy).toBeCalledTimes(1) + expect(barMountSpy).toHaveBeenNthCalledWith(1, true, false, true) + }) }) describe('transition with v-show', () => { From 28a6f05bf52f95a7cc06acca8205ec386f174601 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sun, 22 Oct 2023 09:10:43 +0800 Subject: [PATCH 0216/1346] chore: remove internal flag on hmr option --- packages/compiler-core/src/options.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/compiler-core/src/options.ts b/packages/compiler-core/src/options.ts index 6f1a8efcff8..abfba98e35c 100644 --- a/packages/compiler-core/src/options.ts +++ b/packages/compiler-core/src/options.ts @@ -260,7 +260,6 @@ export interface TransformOptions * Whether to compile the template assuming it needs to handle HMR. * Some edge cases may need to generate different code for HMR to work * correctly, e.g. #6938, #7138 - * @internal */ hmr?: boolean } From 27e505241b4258f5a5b797d7e95a8ad64ebd90c5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 15:55:23 +0800 Subject: [PATCH 0217/1346] chore(deps): update dependency todomvc-app-css to ^2.4.3 (#9458) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e1256a4ef8c..82476d6a39c 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "serve": "^14.2.1", "simple-git-hooks": "^2.9.0", "terser": "^5.22.0", - "todomvc-app-css": "^2.4.2", + "todomvc-app-css": "^2.4.3", "tslib": "^2.6.2", "tsx": "^3.14.0", "typescript": "^5.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 25a4d9d94e4..49eadf44fd0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -138,8 +138,8 @@ importers: specifier: ^5.22.0 version: 5.22.0 todomvc-app-css: - specifier: ^2.4.2 - version: 2.4.2 + specifier: ^2.4.3 + version: 2.4.3 tslib: specifier: ^2.6.2 version: 2.6.2 @@ -5482,8 +5482,9 @@ packages: is-number: 7.0.0 dev: true - /todomvc-app-css@2.4.2: - resolution: {integrity: sha512-ViAkQ7ed89rmhFIGRsT36njN+97z8+s3XsJnB8E2IKOq+/SLD/6PtSvmTtiwUcVk39qPcjAc/OyeDys4LoJUVg==} + /todomvc-app-css@2.4.3: + resolution: {integrity: sha512-mSnWZaKBWj9aQcFRsGguY/a8O8NR8GmecD48yU1rzwNemgZa/INLpIsxxMiToFGVth+uEKBrQ7IhWkaXZxwq5Q==} + engines: {node: '>=4'} dev: true /token-stream@1.0.0: From 488551539219d7219cdbe64c887d8ee270d29034 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 15:55:40 +0800 Subject: [PATCH 0218/1346] chore(deps): update dependency puppeteer to ~21.4.0 (#9459) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 42 +++++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 82476d6a39c..f131726cbfb 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "prettier": "^3.0.3", "pretty-bytes": "^6.1.1", "pug": "^3.0.2", - "puppeteer": "~21.3.8", + "puppeteer": "~21.4.0", "rimraf": "^5.0.5", "rollup": "^3.29.4", "rollup-plugin-dts": "^6.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 49eadf44fd0..5362aef51f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -108,8 +108,8 @@ importers: specifier: ^3.0.2 version: 3.0.2 puppeteer: - specifier: ~21.3.8 - version: 21.3.8(typescript@5.2.2) + specifier: ~21.4.0 + version: 21.4.0(typescript@5.2.2) rimraf: specifier: ^5.0.5 version: 5.0.5 @@ -1160,8 +1160,8 @@ packages: dev: true optional: true - /@puppeteer/browsers@1.7.1: - resolution: {integrity: sha512-nIb8SOBgDEMFY2iS2MdnUZOg2ikcYchRrBoF+wtdjieRFKR2uGRipHY/oFLo+2N6anDualyClPzGywTHRGrLfw==} + /@puppeteer/browsers@1.8.0: + resolution: {integrity: sha512-TkRHIV6k2D8OlUe8RtG+5jgOF/H98Myx0M6AOafC8DdNVOFiBSFa5cpRDtpm8LXOa9sVwe0+e6Q3FC56X/DZfg==} engines: {node: '>=16.3.0'} hasBin: true dependencies: @@ -1171,7 +1171,7 @@ packages: proxy-agent: 6.3.1 tar-fs: 3.0.4 unbzip2-stream: 1.4.3 - yargs: 17.7.1 + yargs: 17.7.2 transitivePeerDependencies: - supports-color dev: true @@ -1976,12 +1976,12 @@ packages: fsevents: 2.3.3 dev: true - /chromium-bidi@0.4.31(devtools-protocol@0.0.1179426): - resolution: {integrity: sha512-OtvEg2JMRQrHsmLx4FV3u1Hf9waYxB5PmL+yM0HkFpc9H2x3TMbUqS+GP2/fC4399hzOO+EQF8uVU43By9ILag==} + /chromium-bidi@0.4.32(devtools-protocol@0.0.1191157): + resolution: {integrity: sha512-RJnw0PW3sNdx1WclINVfVVx8JUH+tWTHZNpnEzlcM+Qgvf40dUH34U7gJq+cc/0LE+rbPxeT6ldqWrCbUf4jeg==} peerDependencies: devtools-protocol: '*' dependencies: - devtools-protocol: 0.0.1179426 + devtools-protocol: 0.0.1191157 mitt: 3.0.1 urlpattern-polyfill: 9.0.0 dev: true @@ -2411,8 +2411,8 @@ packages: engines: {node: '>=0.4.0'} dev: true - /devtools-protocol@0.0.1179426: - resolution: {integrity: sha512-KKC7IGwdOr7u9kTGgjUvGTov/z1s2H7oHi3zKCdR9eSDyCPia5CBi4aRhtp7d8uR7l0GS5UTDw3TjKGu5CqINg==} + /devtools-protocol@0.0.1191157: + resolution: {integrity: sha512-Fu2mUhX7zkzLHMJZk5wQTiHdl1eJrhK0GypUoSzogUt51MmYEv/46pCz4PtGGFlr0f2ZyYDzzx5CPtbEkuvcTA==} dev: true /diff-sequences@29.6.3: @@ -4714,15 +4714,15 @@ packages: engines: {node: '>=6'} dev: true - /puppeteer-core@21.3.8: - resolution: {integrity: sha512-yv12E/+zZ7Lei5tJB4sUkSrsuqKibuYpYxLGbmtLUjjYIqGE5HKz9OUI2I/RFHEvF+pHi2bTbv5bWydeCGJ6Mw==} + /puppeteer-core@21.4.0: + resolution: {integrity: sha512-ONYjYgHItm6i9WdJf+MnRTRPB4HegwPbPfi1jjNN0LCW3rnNich/5hXgZFcn2oWvgFc8DWLDIcwly7C8z+EvIw==} engines: {node: '>=16.3.0'} dependencies: - '@puppeteer/browsers': 1.7.1 - chromium-bidi: 0.4.31(devtools-protocol@0.0.1179426) + '@puppeteer/browsers': 1.8.0 + chromium-bidi: 0.4.32(devtools-protocol@0.0.1191157) cross-fetch: 4.0.0 debug: 4.3.4 - devtools-protocol: 0.0.1179426 + devtools-protocol: 0.0.1191157 ws: 8.14.2 transitivePeerDependencies: - bufferutil @@ -4731,14 +4731,14 @@ packages: - utf-8-validate dev: true - /puppeteer@21.3.8(typescript@5.2.2): - resolution: {integrity: sha512-4OrInVIAtDgcznENUV4Du4gYSZhRmbCkckvOoPstXrUH4JsQ3atSegY+9f/tOKCDB2qh7sXaszDcFEn+RymY0g==} + /puppeteer@21.4.0(typescript@5.2.2): + resolution: {integrity: sha512-KkiDe39NJxlw7fyiN6fieM9SVsewzt037nUZRoffNuFtYdAl5rRLVtleBuVZ5i1swK/R4CmA6Pbka/ytpFCu4Q==} engines: {node: '>=16.3.0'} requiresBuild: true dependencies: - '@puppeteer/browsers': 1.7.1 + '@puppeteer/browsers': 1.8.0 cosmiconfig: 8.3.6(typescript@5.2.2) - puppeteer-core: 21.3.8 + puppeteer-core: 21.4.0 transitivePeerDependencies: - bufferutil - encoding @@ -6028,8 +6028,8 @@ packages: engines: {node: '>=12'} dev: true - /yargs@17.7.1: - resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} dependencies: cliui: 8.0.1 From 105c5649595d97d5618c85b6aef11dc7b78cc7ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 15:55:57 +0800 Subject: [PATCH 0219/1346] chore(deps): update lint (#9461) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 ++-- pnpm-lock.yaml | 63 +++++++++++++++++++++++++++----------------------- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index f131726cbfb..a5a2c258257 100644 --- a/package.json +++ b/package.json @@ -74,8 +74,8 @@ "enquirer": "^2.4.1", "esbuild": "^0.19.5", "esbuild-plugin-polyfill-node": "^0.3.0", - "eslint": "^8.51.0", - "eslint-plugin-jest": "^27.4.2", + "eslint": "^8.52.0", + "eslint-plugin-jest": "^27.4.3", "estree-walker": "^2.0.2", "execa": "^8.0.1", "jsdom": "^22.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5362aef51f3..b3255416c1b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,7 +40,7 @@ importers: version: 20.8.7 '@typescript-eslint/parser': specifier: ^6.8.0 - version: 6.8.0(eslint@8.51.0)(typescript@5.2.2) + version: 6.8.0(eslint@8.52.0)(typescript@5.2.2) '@vitest/coverage-istanbul': specifier: ^0.34.6 version: 0.34.6(vitest@0.34.6) @@ -60,11 +60,11 @@ importers: specifier: ^0.3.0 version: 0.3.0(esbuild@0.19.5) eslint: - specifier: ^8.51.0 - version: 8.51.0 + specifier: ^8.52.0 + version: 8.52.0 eslint-plugin-jest: - specifier: ^27.4.2 - version: 27.4.2(eslint@8.51.0)(typescript@5.2.2) + specifier: ^27.4.3 + version: 27.4.3(eslint@8.52.0)(typescript@5.2.2) estree-walker: specifier: ^2.0.2 version: 2.0.2 @@ -1006,13 +1006,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.51.0 + eslint: 8.52.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1038,16 +1038,16 @@ packages: - supports-color dev: true - /@eslint/js@8.51.0: - resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + /@eslint/js@8.52.0: + resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array@0.11.12: - resolution: {integrity: sha512-NlGesA1usRNn6ctHCZ21M4/dKPgW9Nn1FypRdIKKgZOKzkVV4T1FlK5mBiLhHBCDmEbdQG0idrcXlbZfksJ+RA==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.0 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1059,8 +1059,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.0: - resolution: {integrity: sha512-9S9QrXY2K0L4AGDcSgTi9vgiCcG8VcBv4Mp7/1hDPYoswIy6Z6KO5blYto82BT8M0MZNRWmCFLpCs3HlpYGGdw==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@hutson/parse-repository-url@5.0.0: @@ -1358,7 +1358,7 @@ packages: dev: true optional: true - /@typescript-eslint/parser@6.8.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/parser@6.8.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1373,7 +1373,7 @@ packages: '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.52.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -1447,19 +1447,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/utils@5.62.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) '@types/json-schema': 7.0.14 '@types/semver': 7.5.4 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - eslint: 8.51.0 + eslint: 8.52.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -1483,6 +1483,10 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + /@vitejs/plugin-vue@4.4.0(vite@4.5.0)(vue@packages+vue): resolution: {integrity: sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1811,7 +1815,7 @@ packages: dependencies: ansi-align: 3.0.1 camelcase: 7.0.1 - chalk: 5.0.1 + chalk: 5.3.0 cli-boxes: 3.0.0 string-width: 5.1.2 type-fest: 2.19.0 @@ -2657,8 +2661,8 @@ packages: source-map: 0.6.1 dev: true - /eslint-plugin-jest@27.4.2(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-3Nfvv3wbq2+PZlRTf2oaAWXWwbdBejFRBR2O8tAO67o+P8zno+QGbcDYaAXODlreXVg+9gvWhKKmG2rgfb8GEg==} + /eslint-plugin-jest@27.4.3(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-7S6SmmsHsgIm06BAGCAxL+ABd9/IB3MWkz2pudj6Qqor2y1qQpWPfuFU4SG9pWj4xDjF0e+D7Llh5useuSzAZw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 @@ -2670,8 +2674,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.51.0)(typescript@5.2.2) - eslint: 8.51.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.52.0 transitivePeerDependencies: - supports-color - typescript @@ -2698,18 +2702,19 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.51.0: - resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} + /eslint@8.52.0: + resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) '@eslint-community/regexpp': 4.9.1 '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.51.0 - '@humanwhocodes/config-array': 0.11.12 + '@eslint/js': 8.52.0 + '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 From f36c49f31b658985542de1f5f1f269f2f8b63132 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 16:00:13 +0800 Subject: [PATCH 0220/1346] chore(deps): update dependency rollup to v4 (#9462) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 196 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 157 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index a5a2c258257..5252fab29ed 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "pug": "^3.0.2", "puppeteer": "~21.4.0", "rimraf": "^5.0.5", - "rollup": "^3.29.4", + "rollup": "^4.1.4", "rollup-plugin-dts": "^6.1.0", "rollup-plugin-esbuild": "^6.1.0", "rollup-plugin-polyfill-node": "^0.12.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3255416c1b..1fd85d6d906 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,22 +16,22 @@ importers: version: 7.23.0 '@rollup/plugin-alias': specifier: ^5.0.1 - version: 5.0.1(rollup@3.29.4) + version: 5.0.1(rollup@4.1.4) '@rollup/plugin-commonjs': specifier: ^25.0.7 - version: 25.0.7(rollup@3.29.4) + version: 25.0.7(rollup@4.1.4) '@rollup/plugin-json': specifier: ^6.0.1 - version: 6.0.1(rollup@3.29.4) + version: 6.0.1(rollup@4.1.4) '@rollup/plugin-node-resolve': specifier: ^15.2.3 - version: 15.2.3(rollup@3.29.4) + version: 15.2.3(rollup@4.1.4) '@rollup/plugin-replace': specifier: ^5.0.4 - version: 5.0.4(rollup@3.29.4) + version: 5.0.4(rollup@4.1.4) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@3.29.4) + version: 0.4.4(rollup@4.1.4) '@types/hash-sum': specifier: ^1.0.1 version: 1.0.1 @@ -114,17 +114,17 @@ importers: specifier: ^5.0.5 version: 5.0.5 rollup: - specifier: ^3.29.4 - version: 3.29.4 + specifier: ^4.1.4 + version: 4.1.4 rollup-plugin-dts: specifier: ^6.1.0 - version: 6.1.0(rollup@3.29.4)(typescript@5.2.2) + version: 6.1.0(rollup@4.1.4)(typescript@5.2.2) rollup-plugin-esbuild: specifier: ^6.1.0 - version: 6.1.0(esbuild@0.19.5)(rollup@3.29.4) + version: 6.1.0(esbuild@0.19.5)(rollup@4.1.4) rollup-plugin-polyfill-node: specifier: ^0.12.0 - version: 0.12.0(rollup@3.29.4) + version: 0.12.0(rollup@4.1.4) semver: specifier: ^7.5.4 version: 7.5.4 @@ -1176,7 +1176,7 @@ packages: - supports-color dev: true - /@rollup/plugin-alias@5.0.1(rollup@3.29.4): + /@rollup/plugin-alias@5.0.1(rollup@4.1.4): resolution: {integrity: sha512-JObvbWdOHoMy9W7SU0lvGhDtWq9PllP5mjpAy+TUslZG/WzOId9u80Hsqq1vCUn9pFJ0cxpdcnAv+QzU2zFH3Q==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1185,11 +1185,11 @@ packages: rollup: optional: true dependencies: - rollup: 3.29.4 + rollup: 4.1.4 slash: 4.0.0 dev: true - /@rollup/plugin-commonjs@25.0.7(rollup@3.29.4): + /@rollup/plugin-commonjs@25.0.7(rollup@4.1.4): resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1198,16 +1198,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.5 - rollup: 3.29.4 + rollup: 4.1.4 dev: true - /@rollup/plugin-inject@5.0.5(rollup@3.29.4): + /@rollup/plugin-inject@5.0.5(rollup@4.1.4): resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1216,13 +1216,13 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) estree-walker: 2.0.2 magic-string: 0.30.5 - rollup: 3.29.4 + rollup: 4.1.4 dev: true - /@rollup/plugin-json@6.0.1(rollup@3.29.4): + /@rollup/plugin-json@6.0.1(rollup@4.1.4): resolution: {integrity: sha512-RgVfl5hWMkxN1h/uZj8FVESvPuBJ/uf6ly6GTj0GONnkfoBN5KC0MSz+PN2OLDgYXMhtG0mWpTrkiOjoxAIevw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1231,11 +1231,11 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) - rollup: 3.29.4 + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) + rollup: 4.1.4 dev: true - /@rollup/plugin-node-resolve@15.2.3(rollup@3.29.4): + /@rollup/plugin-node-resolve@15.2.3(rollup@4.1.4): resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1244,16 +1244,16 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 3.29.4 + rollup: 4.1.4 dev: true - /@rollup/plugin-replace@5.0.4(rollup@3.29.4): + /@rollup/plugin-replace@5.0.4(rollup@4.1.4): resolution: {integrity: sha512-E2hmRnlh09K8HGT0rOnnri9OTh+BILGr7NVJGB30S4E3cLRn3J0xjdiyOZ74adPs4NiAMgrjUMGAZNJDBgsdmQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1262,12 +1262,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) magic-string: 0.30.5 - rollup: 3.29.4 + rollup: 4.1.4 dev: true - /@rollup/plugin-terser@0.4.4(rollup@3.29.4): + /@rollup/plugin-terser@0.4.4(rollup@4.1.4): resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1276,13 +1276,13 @@ packages: rollup: optional: true dependencies: - rollup: 3.29.4 + rollup: 4.1.4 serialize-javascript: 6.0.1 smob: 1.4.1 terser: 5.22.0 dev: true - /@rollup/pluginutils@5.0.5(rollup@3.29.4): + /@rollup/pluginutils@5.0.5(rollup@4.1.4): resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1294,8 +1294,104 @@ packages: '@types/estree': 1.0.3 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.29.4 + rollup: 4.1.4 + dev: true + + /@rollup/rollup-android-arm-eabi@4.1.4: + resolution: {integrity: sha512-WlzkuFvpKl6CLFdc3V6ESPt7gq5Vrimd2Yv9IzKXdOpgbH4cdDSS1JLiACX8toygihtH5OlxyQzhXOph7Ovlpw==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.1.4: + resolution: {integrity: sha512-D1e+ABe56T9Pq2fD+R3ybe1ylCDzu3tY4Qm2Mj24R9wXNCq35+JbFbOpc2yrroO2/tGhTobmEl2Bm5xfE/n8RA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.1.4: + resolution: {integrity: sha512-7vTYrgEiOrjxnjsgdPB+4i7EMxbVp7XXtS+50GJYj695xYTTEMn3HZVEvgtwjOUkAP/Q4HDejm4fIAjLeAfhtg==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.1.4: + resolution: {integrity: sha512-eGJVZScKSLZkYjhTAESCtbyTBq9SXeW9+TX36ki5gVhDqJtnQ5k0f9F44jNK5RhAMgIj0Ht9+n6HAgH0gUUyWQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.1.4: + resolution: {integrity: sha512-HnigYSEg2hOdX1meROecbk++z1nVJDpEofw9V2oWKqOWzTJlJf1UXVbDE6Hg30CapJxZu5ga4fdAQc/gODDkKg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.1.4: + resolution: {integrity: sha512-TzJ+N2EoTLWkaClV2CUhBlj6ljXofaYzF/R9HXqQ3JCMnCHQZmQnbnZllw7yTDp0OG5whP4gIPozR4QiX+00MQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.1.4: + resolution: {integrity: sha512-aVPmNMdp6Dlo2tWkAduAD/5TL/NT5uor290YvjvFvCv0Q3L7tVdlD8MOGDL+oRSw5XKXKAsDzHhUOPUNPRHVTQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.1.4: + resolution: {integrity: sha512-77Fb79ayiDad0grvVsz4/OB55wJRyw9Ao+GdOBA9XywtHpuq5iRbVyHToGxWquYWlEf6WHFQQnFEttsAzboyKg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.1.4: + resolution: {integrity: sha512-/t6C6niEQTqmQTVTD9TDwUzxG91Mlk69/v0qodIPUnjjB3wR4UA3klg+orR2SU3Ux2Cgf2pWPL9utK80/1ek8g==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.1.4: + resolution: {integrity: sha512-ZY5BHHrOPkMbCuGWFNpJH0t18D2LU6GMYKGaqaWTQ3CQOL57Fem4zE941/Ek5pIsVt70HyDXssVEFQXlITI5Gg==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.1.4: + resolution: {integrity: sha512-XG2mcRfFrJvYyYaQmvCIvgfkaGinfXrpkBuIbJrTl9SaIQ8HumheWTIwkNz2mktCKwZfXHQNpO7RgXLIGQ7HXA==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.1.4: + resolution: {integrity: sha512-ANFqWYPwkhIqPmXw8vm0GpBEHiPpqcm99jiiAp71DbCSqLDhrtr019C5vhD0Bw4My+LmMvciZq6IsWHqQpl2ZQ==} + cpu: [x64] + os: [win32] + requiresBuild: true dev: true + optional: true /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -4923,7 +5019,7 @@ packages: glob: 10.3.10 dev: true - /rollup-plugin-dts@6.1.0(rollup@3.29.4)(typescript@5.2.2): + /rollup-plugin-dts@6.1.0(rollup@4.1.4)(typescript@5.2.2): resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==} engines: {node: '>=16'} peerDependencies: @@ -4931,36 +5027,36 @@ packages: typescript: ^4.5 || ^5.0 dependencies: magic-string: 0.30.5 - rollup: 3.29.4 + rollup: 4.1.4 typescript: 5.2.2 optionalDependencies: '@babel/code-frame': 7.22.13 dev: true - /rollup-plugin-esbuild@6.1.0(esbuild@0.19.5)(rollup@3.29.4): + /rollup-plugin-esbuild@6.1.0(esbuild@0.19.5)(rollup@4.1.4): resolution: {integrity: sha512-HPpXU65V8bSpW8eSYPahtUJaJHmbxJGybuf/M8B3bz/6i11YaYHlNNJIQ38gSEV0FyohQOgVxJ2YMEEZtEmwvA==} engines: {node: '>=14.18.0'} peerDependencies: esbuild: '>=0.18.0' rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.0.5(rollup@4.1.4) debug: 4.3.4 es-module-lexer: 1.3.1 esbuild: 0.19.5 get-tsconfig: 4.7.2 - rollup: 3.29.4 + rollup: 4.1.4 transitivePeerDependencies: - supports-color dev: true - /rollup-plugin-polyfill-node@0.12.0(rollup@3.29.4): + /rollup-plugin-polyfill-node@0.12.0(rollup@4.1.4): resolution: {integrity: sha512-PWEVfDxLEKt8JX1nZ0NkUAgXpkZMTb85rO/Ru9AQ69wYW8VUCfDgP4CGRXXWYni5wDF0vIeR1UoF3Jmw/Lt3Ug==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@3.29.4) - rollup: 3.29.4 + '@rollup/plugin-inject': 5.0.5(rollup@4.1.4) + rollup: 4.1.4 dev: true /rollup@3.29.4: @@ -4971,6 +5067,26 @@ packages: fsevents: 2.3.3 dev: true + /rollup@4.1.4: + resolution: {integrity: sha512-U8Yk1lQRKqCkDBip/pMYT+IKaN7b7UesK3fLSTuHBoBJacCE+oBqo/dfG/gkUdQNNB2OBmRP98cn2C2bkYZkyw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.1.4 + '@rollup/rollup-android-arm64': 4.1.4 + '@rollup/rollup-darwin-arm64': 4.1.4 + '@rollup/rollup-darwin-x64': 4.1.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.1.4 + '@rollup/rollup-linux-arm64-gnu': 4.1.4 + '@rollup/rollup-linux-arm64-musl': 4.1.4 + '@rollup/rollup-linux-x64-gnu': 4.1.4 + '@rollup/rollup-linux-x64-musl': 4.1.4 + '@rollup/rollup-win32-arm64-msvc': 4.1.4 + '@rollup/rollup-win32-ia32-msvc': 4.1.4 + '@rollup/rollup-win32-x64-msvc': 4.1.4 + fsevents: 2.3.3 + dev: true + /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true From 16ecb44c89cd8299a3b8de33cccc2e2cc36f065b Mon Sep 17 00:00:00 2001 From: Carlos Rodrigues Date: Mon, 23 Oct 2023 16:40:06 +0100 Subject: [PATCH 0221/1346] fix(types): improve `h` overload to support union of string and component (#5432) fix #5431 --- packages/dts-test/h.test-d.ts | 16 ++++++++++++++++ packages/runtime-core/src/h.ts | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/packages/dts-test/h.test-d.ts b/packages/dts-test/h.test-d.ts index 5c700800e94..f2e984b49b8 100644 --- a/packages/dts-test/h.test-d.ts +++ b/packages/dts-test/h.test-d.ts @@ -1,6 +1,7 @@ import { h, defineComponent, + DefineComponent, ref, Fragment, Teleport, @@ -231,3 +232,18 @@ describe('resolveComponent should work', () => { message: '1' }) }) + +// #5431 +describe('h should work with multiple types', () => { + const serializers = { + Paragraph: 'p', + Component: {} as Component, + DefineComponent: {} as DefineComponent + } + + const sampleComponent = serializers['' as keyof typeof serializers] + + h(sampleComponent) + h(sampleComponent, {}) + h(sampleComponent, {}, []) +}) diff --git a/packages/runtime-core/src/h.ts b/packages/runtime-core/src/h.ts index 73b27107b8b..4ca90262f2a 100644 --- a/packages/runtime-core/src/h.ts +++ b/packages/runtime-core/src/h.ts @@ -174,6 +174,14 @@ export function h

( children?: RawChildren | RawSlots ): VNode +// catch all types +export function h(type: string | Component, children?: RawChildren): VNode +export function h

( + type: string | Component

, + props?: (RawProps & P) | ({} extends P ? null : never), + children?: RawChildren | RawSlots +): VNode + // Actual implementation export function h(type: any, propsOrChildren?: any, children?: any): VNode { const l = arguments.length From 5ea8a8a4fab4e19a71e123e4d27d051f5e927172 Mon Sep 17 00:00:00 2001 From: edison Date: Tue, 24 Oct 2023 09:36:10 +0800 Subject: [PATCH 0222/1346] fix(transition/ssr): make transition appear work with SSR (#8859) close #6951 --- .../__tests__/ssrTransition.spec.ts | 25 +++++ .../src/transforms/ssrTransformComponent.ts | 12 ++- .../src/transforms/ssrTransformTransition.ts | 36 +++++++ .../runtime-core/__tests__/hydration.spec.ts | 76 ++++++++++++- packages/runtime-core/src/hydration.ts | 101 +++++++++++++++--- packages/runtime-core/src/renderer.ts | 17 ++- 6 files changed, 241 insertions(+), 26 deletions(-) create mode 100644 packages/compiler-ssr/__tests__/ssrTransition.spec.ts create mode 100644 packages/compiler-ssr/src/transforms/ssrTransformTransition.ts diff --git a/packages/compiler-ssr/__tests__/ssrTransition.spec.ts b/packages/compiler-ssr/__tests__/ssrTransition.spec.ts new file mode 100644 index 00000000000..319b3902239 --- /dev/null +++ b/packages/compiler-ssr/__tests__/ssrTransition.spec.ts @@ -0,0 +1,25 @@ +import { compile } from '../src' + +describe('transition', () => { + test('basic', () => { + expect(compile(`

foo
`).code) + .toMatchInlineSnapshot(` + "const { ssrRenderAttrs: _ssrRenderAttrs } = require(\\"vue/server-renderer\\") + + return function ssrRender(_ctx, _push, _parent, _attrs) { + _push(\`foo\`) + }" + `) + }) + + test('with appear', () => { + expect(compile(`
foo
`).code) + .toMatchInlineSnapshot(` + "const { ssrRenderAttrs: _ssrRenderAttrs } = require(\\"vue/server-renderer\\") + + return function ssrRender(_ctx, _push, _parent, _attrs) { + _push(\`\`) + }" + `) + }) +}) diff --git a/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts b/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts index dc8c6a4ae4f..93cae7db3c2 100644 --- a/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts +++ b/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts @@ -56,6 +56,10 @@ import { } from './ssrTransformTransitionGroup' import { isSymbol, isObject, isArray } from '@vue/shared' import { buildSSRProps } from './ssrTransformElement' +import { + ssrProcessTransition, + ssrTransformTransition +} from './ssrTransformTransition' // We need to construct the slot functions in the 1st pass to ensure proper // scope tracking, but the children of each slot cannot be processed until @@ -99,9 +103,10 @@ export const ssrTransformComponent: NodeTransform = (node, context) => { if (isSymbol(component)) { if (component === SUSPENSE) { return ssrTransformSuspense(node, context) - } - if (component === TRANSITION_GROUP) { + } else if (component === TRANSITION_GROUP) { return ssrTransformTransitionGroup(node, context) + } else if (component === TRANSITION) { + return ssrTransformTransition(node, context) } return // other built-in components: fallthrough } @@ -216,9 +221,8 @@ export function ssrProcessComponent( if ((parent as WIPSlotEntry).type === WIP_SLOT) { context.pushStringPart(``) } - // #5351: filter out comment children inside transition if (component === TRANSITION) { - node.children = node.children.filter(c => c.type !== NodeTypes.COMMENT) + return ssrProcessTransition(node, context) } processChildren(node, context) } diff --git a/packages/compiler-ssr/src/transforms/ssrTransformTransition.ts b/packages/compiler-ssr/src/transforms/ssrTransformTransition.ts new file mode 100644 index 00000000000..d09a806f7b0 --- /dev/null +++ b/packages/compiler-ssr/src/transforms/ssrTransformTransition.ts @@ -0,0 +1,36 @@ +import { + ComponentNode, + findProp, + NodeTypes, + TransformContext +} from '@vue/compiler-dom' +import { processChildren, SSRTransformContext } from '../ssrCodegenTransform' + +const wipMap = new WeakMap() + +export function ssrTransformTransition( + node: ComponentNode, + context: TransformContext +) { + return () => { + const appear = findProp(node, 'appear', false, true) + wipMap.set(node, !!appear) + } +} + +export function ssrProcessTransition( + node: ComponentNode, + context: SSRTransformContext +) { + // #5351: filter out comment children inside transition + node.children = node.children.filter(c => c.type !== NodeTypes.COMMENT) + + const appear = wipMap.get(node) + if (appear) { + context.pushStringPart(``) + } else { + processChildren(node, context, false, true) + } +} diff --git a/packages/runtime-core/__tests__/hydration.spec.ts b/packages/runtime-core/__tests__/hydration.spec.ts index f0a3a9333a7..759804b97f1 100644 --- a/packages/runtime-core/__tests__/hydration.spec.ts +++ b/packages/runtime-core/__tests__/hydration.spec.ts @@ -18,10 +18,14 @@ import { createVNode, withDirectives, vModelCheckbox, - renderSlot + renderSlot, + Transition, + createCommentVNode, + vShow } from '@vue/runtime-dom' import { renderToString, SSRContext } from '@vue/server-renderer' -import { PatchFlags } from '../../shared/src' +import { PatchFlags } from '@vue/shared' +import { vShowOldKey } from '../../runtime-dom/src/directives/vShow' function mountWithHydration(html: string, render: () => any) { const container = document.createElement('div') @@ -1016,6 +1020,74 @@ describe('SSR hydration', () => { expect(`mismatch`).not.toHaveBeenWarned() }) + test('transition appear', () => { + const { vnode, container } = mountWithHydration( + ``, + () => + h( + Transition, + { appear: true }, + { + default: () => h('div', 'foo') + } + ) + ) + expect(container.firstChild).toMatchInlineSnapshot(` +
+ foo +
+ `) + expect(vnode.el).toBe(container.firstChild) + expect(`mismatch`).not.toHaveBeenWarned() + }) + + test('transition appear with v-if', () => { + const show = false + const { vnode, container } = mountWithHydration( + ``, + () => + h( + Transition, + { appear: true }, + { + default: () => (show ? h('div', 'foo') : createCommentVNode('')) + } + ) + ) + expect(container.firstChild).toMatchInlineSnapshot('') + expect(vnode.el).toBe(container.firstChild) + expect(`mismatch`).not.toHaveBeenWarned() + }) + + test('transition appear with v-show', () => { + const show = false + const { vnode, container } = mountWithHydration( + ``, + () => + h( + Transition, + { appear: true }, + { + default: () => + withDirectives(createVNode('div', null, 'foo'), [[vShow, show]]) + } + ) + ) + expect(container.firstChild).toMatchInlineSnapshot(` + + `) + expect((container.firstChild as any)[vShowOldKey]).toBe('') + expect(vnode.el).toBe(container.firstChild) + expect(`mismatch`).not.toHaveBeenWarned() + }) + describe('mismatch handling', () => { test('text node', () => { const { container } = mountWithHydration(`foo`, () => 'bar') diff --git a/packages/runtime-core/src/hydration.ts b/packages/runtime-core/src/hydration.ts index 097443dbc53..4e91cb3d1cb 100644 --- a/packages/runtime-core/src/hydration.ts +++ b/packages/runtime-core/src/hydration.ts @@ -15,7 +15,7 @@ import { ComponentInternalInstance } from './component' import { invokeDirectiveHook } from './directives' import { warn } from './warning' import { PatchFlags, ShapeFlags, isReservedProp, isOn } from '@vue/shared' -import { RendererInternals } from './renderer' +import { needTransition, RendererInternals } from './renderer' import { setRef } from './rendererTemplateRef' import { SuspenseImpl, @@ -146,7 +146,17 @@ export function createHydrationFunctions( break case Comment: if (domType !== DOMNodeTypes.COMMENT || isFragmentStart) { - nextNode = onMismatch() + if ((node as Element).tagName.toLowerCase() === 'template') { + const content = (vnode.el! as HTMLTemplateElement).content + .firstChild! + + // replace