Skip to content

Commit ddad7b4

Browse files
authored
Merge branch 'main' into fix/12685
2 parents 6e0b6a4 + adf3ac8 commit ddad7b4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1101
-169
lines changed

Diff for: CHANGELOG.md

+68
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,65 @@
1+
## [2.7.7](https://github.com/vuejs/vue/compare/v2.7.6...v2.7.7) (2022-07-16)
2+
3+
4+
### Bug Fixes
5+
6+
* **codegen:** script setup should not attempt to resolve native elements as component ([e8d3a7d](https://github.com/vuejs/vue/commit/e8d3a7d7a17f9e66d592fb1ddc4a603af9958d36)), closes [#12674](https://github.com/vuejs/vue/issues/12674)
7+
* **inject:** fix edge case of provided with async-mutated getters ([ea5d0f3](https://github.com/vuejs/vue/commit/ea5d0f3fbfd983cb0275457cbcef344f926381ea)), closes [#12667](https://github.com/vuejs/vue/issues/12667)
8+
* **setup:** ensure setup context slots can be accessed immediately ([67760f8](https://github.com/vuejs/vue/commit/67760f8d30778f58afeada3589d4ac4493329ad5)), closes [#12672](https://github.com/vuejs/vue/issues/12672)
9+
* **types:** vue.d.ts should use relative import to v3-component-public-instance ([#12668](https://github.com/vuejs/vue/issues/12668)) ([46ec648](https://github.com/vuejs/vue/commit/46ec64869479393f95b6abda7a4adecf19867d06)), closes [#12666](https://github.com/vuejs/vue/issues/12666)
10+
* **watch:** fix queueing multiple post watchers ([25ffdb6](https://github.com/vuejs/vue/commit/25ffdb62d22fe8688aca144d945671d5c82a8887)), closes [#12664](https://github.com/vuejs/vue/issues/12664)
11+
12+
13+
14+
## [2.7.6](https://github.com/vuejs/vue/compare/v2.7.5...v2.7.6) (2022-07-15)
15+
16+
17+
### Bug Fixes
18+
19+
* **types:** $refs can also contain ComponentPublicInstance ([#12659](https://github.com/vuejs/vue/issues/12659)) ([fffbb9e](https://github.com/vuejs/vue/commit/fffbb9e856de5e4b3053a6b4d01d1404bfb6f85e))
20+
* **types:** fix $children and $root instance types ([52a5979](https://github.com/vuejs/vue/commit/52a59790a5b6e16c9f8cc737fcd784413dda282d)), closes [#12655](https://github.com/vuejs/vue/issues/12655)
21+
* **types:** fix missing expose() type on setup context ([e0a9546](https://github.com/vuejs/vue/commit/e0a9546ef32fa4bbfc4bede3002b2d6a5be8cf72)), closes [#12660](https://github.com/vuejs/vue/issues/12660)
22+
23+
24+
25+
## [2.7.5](https://github.com/vuejs/vue/compare/v2.7.4...v2.7.5) (2022-07-13)
26+
27+
28+
### Bug Fixes
29+
30+
* add missing export from `vue.runtime.mjs` ([#12648](https://github.com/vuejs/vue/issues/12648)) ([08fb4a2](https://github.com/vuejs/vue/commit/08fb4a222c016c79af77ab96817d2ed9b7abbd80))
31+
* detect property add/deletion on reactive objects from setup when used in templates ([a6e7498](https://github.com/vuejs/vue/commit/a6e74985cf2eab6f16d03a8eda3bf3fc7950127c))
32+
* do not set currentInstance in beforeCreate ([0825d30](https://github.com/vuejs/vue/commit/0825d3087f9f39435838329c16adc2a7bfccd51d)), closes [#12636](https://github.com/vuejs/vue/issues/12636)
33+
* **reactivity:** fix watch behavior inconsistency + deep ref shallow check ([98fb01c](https://github.com/vuejs/vue/commit/98fb01c79c41c3b9f9134f0abb77d233ce4e5b44)), closes [#12643](https://github.com/vuejs/vue/issues/12643)
34+
* **sfc:** fix sfc name inference type check ([04b4703](https://github.com/vuejs/vue/commit/04b4703de72b1c1e686a3aa81d5b5b56799dabab)), closes [#12637](https://github.com/vuejs/vue/issues/12637)
35+
* **types:** support Vue interface augmentations in defineComponent ([005e52d](https://github.com/vuejs/vue/commit/005e52d0b6f1a5bf9679789c5c4b90afd442d86b)), closes [#12642](https://github.com/vuejs/vue/issues/12642)
36+
* **watch:** fix deep watch for structures containing raw refs ([1a2c3c2](https://github.com/vuejs/vue/commit/1a2c3c2d77ba96ef496f4c86329b7798026511ae)), closes [#12652](https://github.com/vuejs/vue/issues/12652)
37+
38+
39+
40+
## [2.7.4](https://github.com/vuejs/vue/compare/v2.7.3...v2.7.4) (2022-07-08)
41+
42+
43+
### Bug Fixes
44+
45+
* **build:** fix mjs dual package hazard ([012e10c](https://github.com/vuejs/vue/commit/012e10c9ca13fcbc9bf67bf2835883edcd4faace)), closes [#12626](https://github.com/vuejs/vue/issues/12626)
46+
* **compiler-sfc:** use safer deindent default for compatibility with previous behavior ([b70a258](https://github.com/vuejs/vue/commit/b70a2585fcd102def2bb5a3b2b589edf5311122d))
47+
* pass element creation helper to static render fns for functional components ([dc8a68e](https://github.com/vuejs/vue/commit/dc8a68e8c6c4e8ed4fdde094004fca272d71ef2e)), closes [#12625](https://github.com/vuejs/vue/issues/12625)
48+
* **ssr/reactivity:** fix array setting error at created in ssr [[#12632](https://github.com/vuejs/vue/issues/12632)] ([#12633](https://github.com/vuejs/vue/issues/12633)) ([ca7daef](https://github.com/vuejs/vue/commit/ca7daefaa15a192046d22d060220cd595a6a275f))
49+
* **types:** fix missing instance properties on defineComponent this ([f8de4ca](https://github.com/vuejs/vue/commit/f8de4ca9d458a03378e848b1e62d6507f7124871)), closes [#12628](https://github.com/vuejs/vue/issues/12628#issuecomment-1177258223)
50+
* **types:** fix this.$slots type for defineComponent ([d3add06](https://github.com/vuejs/vue/commit/d3add06e6e18a78a3745240632fecd076eb49d19))
51+
* **types:** fix type inference when using components option ([1d5a411](https://github.com/vuejs/vue/commit/1d5a411c1e3aa062aa5080432cf3f852f1583ed2))
52+
* **types:** global component registration type compat w/ defineComponent ([26ff4bc](https://github.com/vuejs/vue/commit/26ff4bc0ed75d8bf7921523a2e546df24ec81d8f)), closes [#12622](https://github.com/vuejs/vue/issues/12622)
53+
* **watch:** fix watchers triggered in mounted hook ([8904ca7](https://github.com/vuejs/vue/commit/8904ca77c2d675707728e6a50decd3ef3370a428)), closes [#12624](https://github.com/vuejs/vue/issues/12624)
54+
55+
56+
### Features
57+
58+
* defineAsyncComponent ([9d12106](https://github.com/vuejs/vue/commit/9d12106e211e0cbf33f9066606a8ff29f8cc8e8d)), closes [#12608](https://github.com/vuejs/vue/issues/12608)
59+
* support functional components in defineComponent ([559600f](https://github.com/vuejs/vue/commit/559600f13d312915c0a1b54ed4edd41327dbedd6)), closes [#12619](https://github.com/vuejs/vue/issues/12619)
60+
61+
62+
163
## [2.7.3](https://github.com/vuejs/vue/compare/v2.7.2...v2.7.3) (2022-07-06)
264

365

@@ -94,6 +156,12 @@ In addition, the following features are explicitly **NOT** ported:
94156
- ❌ Reactivity transform (still experimental)
95157
-`expose` option is not supported for options components (but `defineExpose()` is supported in `<script setup>`).
96158

159+
### TypeScript Changes
160+
161+
- `defineComponent` provides improved type inference similar to that of Vue 3. Note the type of `this` inside `defineComponent()` is not interoperable with `this` from `Vue.extend()`.
162+
163+
- Similar to Vue 3, TSX support is now built-in. If your project previously had manual JSX type shims, make sure to remove them.
164+
97165
## Upgrade Guide
98166

99167
### Vue CLI / webpack

Diff for: dist/vue.runtime.mjs

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import Vue from './vue.runtime.common.js'
2+
export default Vue
3+
4+
// this should be kept in sync with src/v3/index.ts
5+
export const {
6+
version,
7+
8+
// refs
9+
ref,
10+
shallowRef,
11+
isRef,
12+
toRef,
13+
toRefs,
14+
unref,
15+
proxyRefs,
16+
customRef,
17+
triggerRef,
18+
computed,
19+
20+
// reactive
21+
reactive,
22+
isReactive,
23+
isReadonly,
24+
isShallow,
25+
isProxy,
26+
shallowReactive,
27+
markRaw,
28+
toRaw,
29+
readonly,
30+
shallowReadonly,
31+
32+
// watch
33+
watch,
34+
watchEffect,
35+
watchPostEffect,
36+
watchSyncEffect,
37+
38+
// effectScope
39+
effectScope,
40+
onScopeDispose,
41+
getCurrentScope,
42+
43+
// provide / inject
44+
provide,
45+
inject,
46+
47+
// lifecycle
48+
onBeforeMount,
49+
onMounted,
50+
onBeforeUpdate,
51+
onUpdated,
52+
onBeforeUnmount,
53+
onUnmounted,
54+
onErrorCaptured,
55+
onActivated,
56+
onDeactivated,
57+
onServerPrefetch,
58+
onRenderTracked,
59+
onRenderTriggered,
60+
61+
// v2 only
62+
set,
63+
del,
64+
65+
// v3 compat
66+
h,
67+
getCurrentInstance,
68+
useSlots,
69+
useAttrs,
70+
mergeDefaults,
71+
nextTick,
72+
useCssModule,
73+
useCssVars,
74+
defineComponent,
75+
defineAsyncComponent
76+
} = Vue

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue",
3-
"version": "2.7.3",
3+
"version": "2.7.7",
44
"packageManager": "[email protected]",
55
"description": "Reactive, component-oriented view layer for modern web interfaces.",
66
"main": "dist/vue.runtime.common.js",

Diff for: packages/compiler-sfc/package.json

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vue/compiler-sfc",
3-
"version": "2.7.3",
3+
"version": "2.7.7",
44
"description": "compiler-sfc for Vue 2",
55
"main": "dist/compiler-sfc.js",
66
"types": "dist/compiler-sfc.d.ts",
@@ -29,7 +29,6 @@
2929
"postcss-selector-parser": "^6.0.10",
3030
"pug": "^3.0.2",
3131
"sass": "^1.52.3",
32-
"stylus": "^0.58.1",
33-
"vue-template-es2015-compiler": "^1.9.1"
32+
"stylus": "^0.58.1"
3433
}
3534
}

Diff for: packages/compiler-sfc/src/compileTemplate.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,7 @@ function actuallyCompile(
144144
errors
145145
}
146146
} else {
147-
// transpile code with vue-template-es2015-compiler, which is a forked
148-
// version of Buble that applies ES2015 transforms + stripping `with` usage
147+
// stripping `with` usage
149148
let code =
150149
`var __render__ = ${prefixIdentifiers(
151150
`function render(${isFunctional ? `_c,_vm` : ``}){${render}\n}`,

Diff for: packages/compiler-sfc/src/parseComponent.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ export const DEFAULT_FILENAME = 'anonymous.vue'
1010
const splitRE = /\r?\n/g
1111
const replaceRE = /./g
1212
const isSpecialTag = makeMap('script,style,template', true)
13-
const isNeedIndentLang = makeMap('pug,jade')
1413

1514
export interface SFCCustomBlock {
1615
type: string
@@ -179,9 +178,13 @@ export function parseComponent(
179178
currentBlock.end = start
180179
let text = source.slice(currentBlock.start, currentBlock.end)
181180
if (
182-
options.deindent ||
183-
// certain langs like pug are indent sensitive, preserve old behavior
184-
(currentBlock.lang && isNeedIndentLang(currentBlock.lang))
181+
options.deindent === true ||
182+
// by default, deindent unless it's script with default lang or ts
183+
(options.deindent !== false &&
184+
!(
185+
currentBlock.type === 'script' &&
186+
(!currentBlock.lang || currentBlock.lang === 'ts')
187+
))
185188
) {
186189
text = deindent(text)
187190
}

Diff for: packages/compiler-sfc/test/parseComponent.spec.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ describe('Single File Component parser', () => {
2525
<div>
2626
<style>nested should be ignored</style>
2727
</div>
28-
`,
29-
{ deindent: true }
28+
`
3029
)
3130
expect(res.template!.content.trim()).toBe('<div>hi</div>')
3231
expect(res.styles.length).toBe(4)
@@ -76,8 +75,7 @@ describe('Single File Component parser', () => {
7675
</style>
7776
`
7877
const deindentDefault = parseComponent(content.trim(), {
79-
pad: false,
80-
deindent: true
78+
pad: false
8179
})
8280
const deindentEnabled = parseComponent(content.trim(), {
8381
pad: false,
@@ -89,7 +87,9 @@ describe('Single File Component parser', () => {
8987
})
9088

9189
expect(deindentDefault.template!.content).toBe('\n<div></div>\n')
92-
expect(deindentDefault.script!.content).toBe('\nexport default {}\n')
90+
expect(deindentDefault.script!.content).toBe(
91+
'\n export default {}\n '
92+
)
9393
expect(deindentDefault.styles[0].content).toBe('\nh1 { color: red }\n')
9494
expect(deindentEnabled.template!.content).toBe('\n<div></div>\n')
9595
expect(deindentEnabled.script!.content).toBe('\nexport default {}\n')
@@ -203,8 +203,7 @@ describe('Single File Component parser', () => {
203203
}
204204
</test>
205205
<custom src="./x.json"></custom>
206-
`,
207-
{ deindent: true }
206+
`
208207
)
209208
expect(res.customBlocks.length).toBe(4)
210209

Diff for: packages/server-renderer/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-server-renderer",
3-
"version": "2.7.3",
3+
"version": "2.7.7",
44
"description": "server renderer for Vue 2.0",
55
"main": "index.js",
66
"types": "types/index.d.ts",

Diff for: packages/server-renderer/test/ssr-reactivity.spec.ts

+4
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ describe('SSR Reactive', () => {
9393

9494
set(state.value, 1, {})
9595
expect(isReactive(state.value[1])).toBe(true)
96+
97+
const rawArr = []
98+
set(rawArr, 1, {})
99+
expect(isReactive(rawArr[1])).toBe(false)
96100
})
97101

98102
// #550

Diff for: packages/template-compiler/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-template-compiler",
3-
"version": "2.7.3",
3+
"version": "2.7.7",
44
"description": "template compiler for Vue 2.0",
55
"main": "index.js",
66
"unpkg": "browser.js",

Diff for: pnpm-lock.yaml

-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: scripts/config.js

-7
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,6 @@ const builds = {
7171
format: 'es',
7272
banner
7373
},
74-
// Runtime only ES modules build (for Node)
75-
'runtime-mjs': {
76-
entry: resolve('web/entry-runtime-esm.ts'),
77-
dest: resolve('dist/vue.runtime.mjs'),
78-
format: 'es',
79-
banner
80-
},
8174
// Runtime+compiler ES modules build (for bundlers)
8275
'full-esm': {
8376
entry: resolve('web/entry-runtime-with-compiler-esm.ts'),

Diff for: src/compiler/codegen/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ export function genElement(el: ASTElement, state: CodegenState): string {
9595
code = genComponent(el.component, el, state)
9696
} else {
9797
let data
98-
if (!el.plain || (el.pre && state.maybeComponent(el))) {
98+
const maybeComponent = state.maybeComponent(el)
99+
if (!el.plain || (el.pre && maybeComponent)) {
99100
data = genData(el, state)
100101
}
101102

Diff for: src/core/components/keep-alive.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { getFirstComponentChild } from 'core/vdom/helpers/index'
33
import type VNode from 'core/vdom/vnode'
44
import type { VNodeComponentOptions } from 'types/vnode'
55
import type { Component } from 'types/component'
6+
import { getComponentName } from '../vdom/create-component'
67

78
type CacheEntry = {
89
name?: string
@@ -12,8 +13,8 @@ type CacheEntry = {
1213

1314
type CacheEntryMap = Record<string, CacheEntry | null>
1415

15-
function getComponentName(opts?: VNodeComponentOptions): string | null {
16-
return opts && (opts.Ctor.options.name || opts.tag)
16+
function _getComponentName(opts?: VNodeComponentOptions): string | null {
17+
return opts && (getComponentName(opts.Ctor.options as any) || opts.tag)
1718
}
1819

1920
function matches(
@@ -81,7 +82,7 @@ export default {
8182
if (vnodeToCache) {
8283
const { tag, componentInstance, componentOptions } = vnodeToCache
8384
cache[keyToCache] = {
84-
name: getComponentName(componentOptions),
85+
name: _getComponentName(componentOptions),
8586
tag,
8687
componentInstance
8788
}
@@ -126,7 +127,7 @@ export default {
126127
const componentOptions = vnode && vnode.componentOptions
127128
if (componentOptions) {
128129
// check pattern
129-
const name = getComponentName(componentOptions)
130+
const name = _getComponentName(componentOptions)
130131
const { include, exclude } = this
131132
if (
132133
// not included

Diff for: src/core/global-api/extend.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { Component } from 'types/component'
33
import type { GlobalAPI } from 'types/global-api'
44
import { defineComputed, proxy } from '../instance/state'
55
import { extend, mergeOptions, validateComponentName } from '../util/index'
6+
import { getComponentName } from '../vdom/create-component'
67

78
export function initExtend(Vue: GlobalAPI) {
89
/**
@@ -25,7 +26,8 @@ export function initExtend(Vue: GlobalAPI) {
2526
return cachedCtors[SuperId]
2627
}
2728

28-
const name = extendOptions.name || Super.options.name
29+
const name =
30+
getComponentName(extendOptions) || getComponentName(Super.options)
2931
if (__DEV__ && name) {
3032
validateComponentName(name)
3133
}

Diff for: src/core/instance/init.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export function initMixin(Vue: typeof Component) {
5858
initLifecycle(vm)
5959
initEvents(vm)
6060
initRender(vm)
61-
callHook(vm, 'beforeCreate')
61+
callHook(vm, 'beforeCreate', undefined, false /* setContext */)
6262
initInjections(vm) // resolve injections before data/props
6363
initState(vm)
6464
initProvide(vm) // resolve provide after data/props

0 commit comments

Comments
 (0)