提交 c8ee53f7 编写于 作者: fxy060608's avatar fxy060608

build(h5): bump vue from 3.0.3 to 3.0.4

上级 5f4ebbb9
...@@ -3372,7 +3372,7 @@ const KeepAliveImpl = { ...@@ -3372,7 +3372,7 @@ const KeepAliveImpl = {
} }
function pruneCache(filter) { function pruneCache(filter) {
cache.forEach((vnode, key) => { cache.forEach((vnode, key) => {
const name = getName(vnode.type); const name = getComponentName(vnode.type);
if (name && (!filter || !filter(name))) { if (name && (!filter || !filter(name))) {
pruneCacheEntry(key); pruneCacheEntry(key);
} }
...@@ -3445,7 +3445,7 @@ const KeepAliveImpl = { ...@@ -3445,7 +3445,7 @@ const KeepAliveImpl = {
} }
let vnode = getInnerChild(rawVNode); let vnode = getInnerChild(rawVNode);
const comp = vnode.type; const comp = vnode.type;
const name = getName(comp); const name = getComponentName(comp);
const { include, exclude, max } = props; const { include, exclude, max } = props;
if ((include && (!name || !matches(include, name))) || if ((include && (!name || !matches(include, name))) ||
(exclude && name && matches(exclude, name))) { (exclude && name && matches(exclude, name))) {
...@@ -3498,9 +3498,6 @@ const KeepAliveImpl = { ...@@ -3498,9 +3498,6 @@ const KeepAliveImpl = {
// export the public type for h/tsx inference // export the public type for h/tsx inference
// also to avoid inline import() in generated d.ts files // also to avoid inline import() in generated d.ts files
const KeepAlive = KeepAliveImpl; const KeepAlive = KeepAliveImpl;
function getName(comp) {
return comp.displayName || comp.name;
}
function matches(pattern, name) { function matches(pattern, name) {
if (isArray(pattern)) { if (isArray(pattern)) {
return pattern.some((p) => matches(p, name)); return pattern.some((p) => matches(p, name));
...@@ -4909,7 +4906,10 @@ function baseCreateRenderer(options, createHydrationFns) { ...@@ -4909,7 +4906,10 @@ function baseCreateRenderer(options, createHydrationFns) {
else { else {
if (patchFlag > 0 && if (patchFlag > 0 &&
patchFlag & 64 /* STABLE_FRAGMENT */ && patchFlag & 64 /* STABLE_FRAGMENT */ &&
dynamicChildren) { dynamicChildren &&
// #2715 the previous fragment could've been a BAILed one as a result
// of renderSlot() with no valid children
n1.dynamicChildren) {
// a stable fragment (template root or <template v-for>) doesn't need to // a stable fragment (template root or <template v-for>) doesn't need to
// patch children order, but it may contain dynamicChildren. // patch children order, but it may contain dynamicChildren.
patchBlockChildren(n1.dynamicChildren, dynamicChildren, container, parentComponent, parentSuspense, isSVG); patchBlockChildren(n1.dynamicChildren, dynamicChildren, container, parentComponent, parentSuspense, isSVG);
...@@ -5070,8 +5070,9 @@ function baseCreateRenderer(options, createHydrationFns) { ...@@ -5070,8 +5070,9 @@ function baseCreateRenderer(options, createHydrationFns) {
} }
// onVnodeMounted // onVnodeMounted
if ((vnodeHook = props && props.onVnodeMounted)) { if ((vnodeHook = props && props.onVnodeMounted)) {
const scopedInitialVNode = initialVNode;
queuePostRenderEffect(() => { queuePostRenderEffect(() => {
invokeVNodeHook(vnodeHook, parent, initialVNode); invokeVNodeHook(vnodeHook, parent, scopedInitialVNode);
}, parentSuspense); }, parentSuspense);
} }
// activated hook for keep-alive roots. // activated hook for keep-alive roots.
...@@ -5083,6 +5084,8 @@ function baseCreateRenderer(options, createHydrationFns) { ...@@ -5083,6 +5084,8 @@ function baseCreateRenderer(options, createHydrationFns) {
queuePostRenderEffect(a, parentSuspense); queuePostRenderEffect(a, parentSuspense);
} }
instance.isMounted = true; instance.isMounted = true;
// #2458: deference mount-only object parameters to prevent memleaks
initialVNode = container = anchor = null;
} }
else { else {
// updateComponent // updateComponent
...@@ -5971,7 +5974,7 @@ function resolveAsset(type, name, warnMissing = true) { ...@@ -5971,7 +5974,7 @@ function resolveAsset(type, name, warnMissing = true) {
if (name === `_self`) { if (name === `_self`) {
return Component; return Component;
} }
const selfName = Component.displayName || Component.name; const selfName = getComponentName(Component);
if (selfName && if (selfName &&
(selfName === name || (selfName === name ||
selfName === camelize(name) || selfName === camelize(name) ||
...@@ -6580,6 +6583,7 @@ function applyOptions(instance, options, deferredData = [], deferredWatch = [], ...@@ -6580,6 +6583,7 @@ function applyOptions(instance, options, deferredData = [], deferredWatch = [],
deferredData.forEach(dataFn => resolveData(instance, dataFn, publicThis)); deferredData.forEach(dataFn => resolveData(instance, dataFn, publicThis));
} }
if (dataOptions) { if (dataOptions) {
// @ts-ignore dataOptions is not fully type safe
resolveData(instance, dataOptions, publicThis); resolveData(instance, dataOptions, publicThis);
} }
if ((process.env.NODE_ENV !== 'production')) { if ((process.env.NODE_ENV !== 'production')) {
...@@ -7428,11 +7432,14 @@ function recordInstanceBoundEffect(effect, instance = currentInstance) { ...@@ -7428,11 +7432,14 @@ function recordInstanceBoundEffect(effect, instance = currentInstance) {
} }
const classifyRE = /(?:^|[-_])(\w)/g; const classifyRE = /(?:^|[-_])(\w)/g;
const classify = (str) => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, ''); const classify = (str) => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');
/* istanbul ignore next */ function getComponentName(Component) {
function formatComponentName(instance, Component, isRoot = false) { return isFunction(Component)
let name = isFunction(Component)
? Component.displayName || Component.name ? Component.displayName || Component.name
: Component.name; : Component.name;
}
/* istanbul ignore next */
function formatComponentName(instance, Component, isRoot = false) {
let name = getComponentName(Component);
if (!name && Component.__file) { if (!name && Component.__file) {
const match = Component.__file.match(/([^/\\]+)\.\w+$/); const match = Component.__file.match(/([^/\\]+)\.\w+$/);
if (match) { if (match) {
...@@ -7797,7 +7804,7 @@ function createSlots(slots, dynamicSlots) { ...@@ -7797,7 +7804,7 @@ function createSlots(slots, dynamicSlots) {
} }
// Core API ------------------------------------------------------------------ // Core API ------------------------------------------------------------------
const version = "3.0.3"; const version = "3.0.4";
/** /**
* SSR utils for \@vue/server-renderer. Only exposed in cjs builds. * SSR utils for \@vue/server-renderer. Only exposed in cjs builds.
* @internal * @internal
...@@ -8319,12 +8326,7 @@ function resolveTransitionProps(rawProps) { ...@@ -8319,12 +8326,7 @@ function resolveTransitionProps(rawProps) {
removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass); removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);
addTransitionClass(el, isAppear ? appearToClass : enterToClass); addTransitionClass(el, isAppear ? appearToClass : enterToClass);
if (!(hook && hook.length > 1)) { if (!(hook && hook.length > 1)) {
if (enterDuration) { whenTransitionEnds(el, type, enterDuration, resolve);
setTimeout(resolve, enterDuration);
}
else {
whenTransitionEnds(el, type, resolve);
}
} }
}); });
}; };
...@@ -8332,30 +8334,27 @@ function resolveTransitionProps(rawProps) { ...@@ -8332,30 +8334,27 @@ function resolveTransitionProps(rawProps) {
return extend(baseProps, { return extend(baseProps, {
onBeforeEnter(el) { onBeforeEnter(el) {
onBeforeEnter && onBeforeEnter(el); onBeforeEnter && onBeforeEnter(el);
addTransitionClass(el, enterActiveClass);
addTransitionClass(el, enterFromClass); addTransitionClass(el, enterFromClass);
addTransitionClass(el, enterActiveClass);
}, },
onBeforeAppear(el) { onBeforeAppear(el) {
onBeforeAppear && onBeforeAppear(el); onBeforeAppear && onBeforeAppear(el);
addTransitionClass(el, appearActiveClass);
addTransitionClass(el, appearFromClass); addTransitionClass(el, appearFromClass);
addTransitionClass(el, appearActiveClass);
}, },
onEnter: makeEnterHook(false), onEnter: makeEnterHook(false),
onAppear: makeEnterHook(true), onAppear: makeEnterHook(true),
onLeave(el, done) { onLeave(el, done) {
const resolve = () => finishLeave(el, done); const resolve = () => finishLeave(el, done);
addTransitionClass(el, leaveActiveClass);
addTransitionClass(el, leaveFromClass); addTransitionClass(el, leaveFromClass);
// force reflow so *-leave-from classes immediately take effect (#2593)
forceReflow();
addTransitionClass(el, leaveActiveClass);
nextFrame(() => { nextFrame(() => {
removeTransitionClass(el, leaveFromClass); removeTransitionClass(el, leaveFromClass);
addTransitionClass(el, leaveToClass); addTransitionClass(el, leaveToClass);
if (!(onLeave && onLeave.length > 1)) { if (!(onLeave && onLeave.length > 1)) {
if (leaveDuration) { whenTransitionEnds(el, type, leaveDuration, resolve);
setTimeout(resolve, leaveDuration);
}
else {
whenTransitionEnds(el, type, resolve);
}
} }
}); });
onLeave && onLeave(el, resolve); onLeave && onLeave(el, resolve);
...@@ -8422,22 +8421,30 @@ function nextFrame(cb) { ...@@ -8422,22 +8421,30 @@ function nextFrame(cb) {
requestAnimationFrame(cb); requestAnimationFrame(cb);
}); });
} }
function whenTransitionEnds(el, expectedType, cb) { let endId = 0;
function whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {
const id = (el._endId = ++endId);
const resolveIfNotStale = () => {
if (id === el._endId) {
resolve();
}
};
if (explicitTimeout) {
return setTimeout(resolveIfNotStale, explicitTimeout);
}
const { type, timeout, propCount } = getTransitionInfo(el, expectedType); const { type, timeout, propCount } = getTransitionInfo(el, expectedType);
if (!type) { if (!type) {
return cb(); return resolve();
} }
const endEvent = type + 'end'; const endEvent = type + 'end';
let ended = 0; let ended = 0;
const end = () => { const end = () => {
el.removeEventListener(endEvent, onEnd); el.removeEventListener(endEvent, onEnd);
cb(); resolveIfNotStale();
}; };
const onEnd = (e) => { const onEnd = (e) => {
if (e.target === el) { if (e.target === el && ++ended >= propCount) {
if (++ended >= propCount) { end();
end();
}
} }
}; };
setTimeout(() => { setTimeout(() => {
...@@ -8510,6 +8517,10 @@ function getTimeout(delays, durations) { ...@@ -8510,6 +8517,10 @@ function getTimeout(delays, durations) {
// (i.e. acting as a floor function) causing unexpected behaviors // (i.e. acting as a floor function) causing unexpected behaviors
function toMs(s) { function toMs(s) {
return Number(s.slice(0, -1).replace(',', '.')) * 1000; return Number(s.slice(0, -1).replace(',', '.')) * 1000;
}
// synchronously force layout to put elements into a certain state
function forceReflow() {
return document.body.offsetHeight;
} }
const positionMap = new WeakMap(); const positionMap = new WeakMap();
...@@ -8610,10 +8621,6 @@ function applyTranslation(c) { ...@@ -8610,10 +8621,6 @@ function applyTranslation(c) {
return c; return c;
} }
} }
// this is put in a dedicated function to avoid the line from being treeshaken
function forceReflow() {
return document.body.offsetHeight;
}
function hasCSSTransform(el, root, moveClass) { function hasCSSTransform(el, root, moveClass) {
// Detect whether an element with the move class applied has // Detect whether an element with the move class applied has
// CSS transitions. Since the element may be inside an entering // CSS transitions. Since the element may be inside an entering
...@@ -8713,8 +8720,7 @@ const vModelText = { ...@@ -8713,8 +8720,7 @@ const vModelText = {
} }
}; };
const vModelCheckbox = { const vModelCheckbox = {
created(el, binding, vnode) { created(el, _, vnode) {
setChecked(el, binding, vnode);
el._assign = getModelAssigner(vnode); el._assign = getModelAssigner(vnode);
addEventListener(el, 'change', () => { addEventListener(el, 'change', () => {
const modelValue = el._modelValue; const modelValue = el._modelValue;
...@@ -8725,25 +8731,31 @@ const vModelCheckbox = { ...@@ -8725,25 +8731,31 @@ const vModelCheckbox = {
const index = looseIndexOf(modelValue, elementValue); const index = looseIndexOf(modelValue, elementValue);
const found = index !== -1; const found = index !== -1;
if (checked && !found) { if (checked && !found) {
modelValue.push(elementValue); assign(modelValue.concat(elementValue));
} }
else if (!checked && found) { else if (!checked && found) {
modelValue.splice(index, 1); const filtered = [...modelValue];
filtered.splice(index, 1);
assign(filtered);
} }
} }
else if (isSet(modelValue)) { else if (isSet(modelValue)) {
const cloned = new Set(modelValue);
if (checked) { if (checked) {
modelValue.add(elementValue); cloned.add(elementValue);
} }
else { else {
modelValue.delete(elementValue); cloned.delete(elementValue);
} }
assign(cloned);
} }
else { else {
assign(getCheckboxValue(el, checked)); assign(getCheckboxValue(el, checked));
} }
}); });
}, },
// set initial checked on mount to wait for true-value/false-value
mounted: setChecked,
beforeUpdate(el, binding, vnode) { beforeUpdate(el, binding, vnode) {
el._assign = getModelAssigner(vnode); el._assign = getModelAssigner(vnode);
setChecked(el, binding, vnode); setChecked(el, binding, vnode);
...@@ -8777,12 +8789,17 @@ const vModelRadio = { ...@@ -8777,12 +8789,17 @@ const vModelRadio = {
} }
}; };
const vModelSelect = { const vModelSelect = {
created(el, { modifiers: { number } }, vnode) { created(el, { value, modifiers: { number } }, vnode) {
const isSetModel = isSet(value);
addEventListener(el, 'change', () => { addEventListener(el, 'change', () => {
const selectedVal = Array.prototype.filter const selectedVal = Array.prototype.filter
.call(el.options, (o) => o.selected) .call(el.options, (o) => o.selected)
.map((o) => number ? toNumber(getValue(o)) : getValue(o)); .map((o) => number ? toNumber(getValue(o)) : getValue(o));
el._assign(el.multiple ? selectedVal : selectedVal[0]); el._assign(el.multiple
? isSetModel
? new Set(selectedVal)
: selectedVal
: selectedVal[0]);
}); });
el._assign = getModelAssigner(vnode); el._assign = getModelAssigner(vnode);
}, },
...@@ -9010,8 +9027,10 @@ const createApp = ((...args) => { ...@@ -9010,8 +9027,10 @@ const createApp = ((...args) => {
// clear content before mounting // clear content before mounting
container.innerHTML = ''; container.innerHTML = '';
const proxy = mount(container); const proxy = mount(container);
container.removeAttribute('v-cloak'); if (container instanceof Element) {
container.setAttribute('data-v-app', ''); container.removeAttribute('v-cloak');
container.setAttribute('data-v-app', '');
}
return proxy; return proxy;
}; };
return app; return app;
...@@ -9042,10 +9061,15 @@ function normalizeContainer(container) { ...@@ -9042,10 +9061,15 @@ function normalizeContainer(container) {
if (isString(container)) { if (isString(container)) {
const res = document.querySelector(container); const res = document.querySelector(container);
if ((process.env.NODE_ENV !== 'production') && !res) { if ((process.env.NODE_ENV !== 'production') && !res) {
warn(`Failed to mount app: mount target selector returned null.`); warn(`Failed to mount app: mount target selector "${container}" returned null.`);
} }
return res; return res;
} }
if ((process.env.NODE_ENV !== 'production') &&
container instanceof ShadowRoot &&
container.mode === 'closed') {
warn(`mounting on a ShadowRoot with \`{mode: "closed"}\` may lead to unpredictable bugs`);
}
return container; return container;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册