@vue/runtime-core 3.2.8 → 3.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/runtime-core.cjs.js +146 -473
- package/dist/runtime-core.cjs.prod.js +44 -145
- package/dist/runtime-core.d.ts +10 -6
- package/dist/runtime-core.esm-bundler.js +149 -477
- package/package.json +3 -3
|
@@ -9,39 +9,6 @@ function setDevtoolsHook(hook) {
|
|
|
9
9
|
exports.devtools = hook;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
function warnDeprecation(key, instance, ...args) {
|
|
13
|
-
{
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
const globalCompatConfig = {
|
|
18
|
-
MODE: 2
|
|
19
|
-
};
|
|
20
|
-
function getCompatConfigForKey(key, instance) {
|
|
21
|
-
const instanceConfig = instance && instance.type.compatConfig;
|
|
22
|
-
if (instanceConfig && key in instanceConfig) {
|
|
23
|
-
return instanceConfig[key];
|
|
24
|
-
}
|
|
25
|
-
return globalCompatConfig[key];
|
|
26
|
-
}
|
|
27
|
-
function isCompatEnabled(key, instance, enableForBuiltIn = false) {
|
|
28
|
-
// skip compat for built-in components
|
|
29
|
-
if (!enableForBuiltIn && instance && instance.type.__isBuiltIn) {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
const rawMode = getCompatConfigForKey('MODE', instance) || 2;
|
|
33
|
-
const val = getCompatConfigForKey(key, instance);
|
|
34
|
-
const mode = shared.isFunction(rawMode)
|
|
35
|
-
? rawMode(instance && instance.type)
|
|
36
|
-
: rawMode;
|
|
37
|
-
if (mode === 2) {
|
|
38
|
-
return val !== false;
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
return val === true || val === 'suppress-warning';
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
12
|
function emit(instance, event, ...rawArgs) {
|
|
46
13
|
const props = instance.vnode.props || shared.EMPTY_OBJ;
|
|
47
14
|
let args = rawArgs;
|
|
@@ -218,21 +185,14 @@ function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot // false on
|
|
|
218
185
|
return renderFnWithContext;
|
|
219
186
|
}
|
|
220
187
|
|
|
221
|
-
/**
|
|
222
|
-
* dev only flag to track whether $attrs was used during render.
|
|
223
|
-
* If $attrs was used during render then the warning for failed attrs
|
|
224
|
-
* fallthrough can be suppressed.
|
|
225
|
-
*/
|
|
226
|
-
let accessedAttrs = false;
|
|
227
188
|
function markAttrsAccessed() {
|
|
228
|
-
accessedAttrs = true;
|
|
229
189
|
}
|
|
230
190
|
function renderComponentRoot(instance) {
|
|
231
191
|
const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance;
|
|
232
192
|
let result;
|
|
193
|
+
let fallthroughAttrs;
|
|
233
194
|
const prev = setCurrentRenderingInstance(instance);
|
|
234
195
|
try {
|
|
235
|
-
let fallthroughAttrs;
|
|
236
196
|
if (vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */) {
|
|
237
197
|
// withProxy is a proxy with a different `has` trap only for
|
|
238
198
|
// runtime-compiled render functions using `with` block.
|
|
@@ -261,86 +221,46 @@ function renderComponentRoot(instance) {
|
|
|
261
221
|
? attrs
|
|
262
222
|
: getFunctionalFallthrough(attrs);
|
|
263
223
|
}
|
|
264
|
-
// attr merging
|
|
265
|
-
// in dev mode, comments are preserved, and it's possible for a template
|
|
266
|
-
// to have comments along side the root element which makes it a fragment
|
|
267
|
-
let root = result;
|
|
268
|
-
let setRoot = undefined;
|
|
269
|
-
if (false &&
|
|
270
|
-
result.patchFlag > 0 &&
|
|
271
|
-
result.patchFlag & 2048 /* DEV_ROOT_FRAGMENT */) ;
|
|
272
|
-
if (fallthroughAttrs && inheritAttrs !== false) {
|
|
273
|
-
const keys = Object.keys(fallthroughAttrs);
|
|
274
|
-
const { shapeFlag } = root;
|
|
275
|
-
if (keys.length) {
|
|
276
|
-
if (shapeFlag & (1 /* ELEMENT */ | 6 /* COMPONENT */)) {
|
|
277
|
-
if (propsOptions && keys.some(shared.isModelListener)) {
|
|
278
|
-
// If a v-model listener (onUpdate:xxx) has a corresponding declared
|
|
279
|
-
// prop, it indicates this component expects to handle v-model and
|
|
280
|
-
// it should not fallthrough.
|
|
281
|
-
// related: #1543, #1643, #1989
|
|
282
|
-
fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);
|
|
283
|
-
}
|
|
284
|
-
root = cloneVNode(root, fallthroughAttrs);
|
|
285
|
-
}
|
|
286
|
-
else if (false && !accessedAttrs && root.type !== Comment) ;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
if (false &&
|
|
290
|
-
isCompatEnabled("INSTANCE_ATTRS_CLASS_STYLE" /* INSTANCE_ATTRS_CLASS_STYLE */, instance) &&
|
|
291
|
-
vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */ &&
|
|
292
|
-
root.shapeFlag & (1 /* ELEMENT */ | 6 /* COMPONENT */)) ;
|
|
293
|
-
// inherit directives
|
|
294
|
-
if (vnode.dirs) {
|
|
295
|
-
if (false && !isElementRoot(root)) ;
|
|
296
|
-
root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;
|
|
297
|
-
}
|
|
298
|
-
// inherit transition data
|
|
299
|
-
if (vnode.transition) {
|
|
300
|
-
if (false && !isElementRoot(root)) ;
|
|
301
|
-
root.transition = vnode.transition;
|
|
302
|
-
}
|
|
303
|
-
if (false && setRoot) ;
|
|
304
|
-
else {
|
|
305
|
-
result = root;
|
|
306
|
-
}
|
|
307
224
|
}
|
|
308
225
|
catch (err) {
|
|
309
226
|
blockStack.length = 0;
|
|
310
227
|
handleError(err, instance, 1 /* RENDER_FUNCTION */);
|
|
311
228
|
result = createVNode(Comment);
|
|
312
229
|
}
|
|
230
|
+
// attr merging
|
|
231
|
+
// in dev mode, comments are preserved, and it's possible for a template
|
|
232
|
+
// to have comments along side the root element which makes it a fragment
|
|
233
|
+
let root = result;
|
|
234
|
+
if (fallthroughAttrs && inheritAttrs !== false) {
|
|
235
|
+
const keys = Object.keys(fallthroughAttrs);
|
|
236
|
+
const { shapeFlag } = root;
|
|
237
|
+
if (keys.length) {
|
|
238
|
+
if (shapeFlag & (1 /* ELEMENT */ | 6 /* COMPONENT */)) {
|
|
239
|
+
if (propsOptions && keys.some(shared.isModelListener)) {
|
|
240
|
+
// If a v-model listener (onUpdate:xxx) has a corresponding declared
|
|
241
|
+
// prop, it indicates this component expects to handle v-model and
|
|
242
|
+
// it should not fallthrough.
|
|
243
|
+
// related: #1543, #1643, #1989
|
|
244
|
+
fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);
|
|
245
|
+
}
|
|
246
|
+
root = cloneVNode(root, fallthroughAttrs);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// inherit directives
|
|
251
|
+
if (vnode.dirs) {
|
|
252
|
+
root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;
|
|
253
|
+
}
|
|
254
|
+
// inherit transition data
|
|
255
|
+
if (vnode.transition) {
|
|
256
|
+
root.transition = vnode.transition;
|
|
257
|
+
}
|
|
258
|
+
{
|
|
259
|
+
result = root;
|
|
260
|
+
}
|
|
313
261
|
setCurrentRenderingInstance(prev);
|
|
314
262
|
return result;
|
|
315
263
|
}
|
|
316
|
-
/**
|
|
317
|
-
* dev only
|
|
318
|
-
* In dev mode, template root level comments are rendered, which turns the
|
|
319
|
-
* template into a fragment root, but we need to locate the single element
|
|
320
|
-
* root for attrs and scope id processing.
|
|
321
|
-
*/
|
|
322
|
-
const getChildRoot = (vnode) => {
|
|
323
|
-
const rawChildren = vnode.children;
|
|
324
|
-
const dynamicChildren = vnode.dynamicChildren;
|
|
325
|
-
const childRoot = filterSingleRoot(rawChildren);
|
|
326
|
-
if (!childRoot) {
|
|
327
|
-
return [vnode, undefined];
|
|
328
|
-
}
|
|
329
|
-
const index = rawChildren.indexOf(childRoot);
|
|
330
|
-
const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;
|
|
331
|
-
const setRoot = (updatedRoot) => {
|
|
332
|
-
rawChildren[index] = updatedRoot;
|
|
333
|
-
if (dynamicChildren) {
|
|
334
|
-
if (dynamicIndex > -1) {
|
|
335
|
-
dynamicChildren[dynamicIndex] = updatedRoot;
|
|
336
|
-
}
|
|
337
|
-
else if (updatedRoot.patchFlag > 0) {
|
|
338
|
-
vnode.dynamicChildren = [...dynamicChildren, updatedRoot];
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
};
|
|
342
|
-
return [normalizeVNode(childRoot), setRoot];
|
|
343
|
-
};
|
|
344
264
|
function filterSingleRoot(children) {
|
|
345
265
|
let singleRoot;
|
|
346
266
|
for (let i = 0; i < children.length; i++) {
|
|
@@ -381,11 +301,6 @@ const filterModelListeners = (attrs, props) => {
|
|
|
381
301
|
}
|
|
382
302
|
return res;
|
|
383
303
|
};
|
|
384
|
-
const isElementRoot = (vnode) => {
|
|
385
|
-
return (vnode.shapeFlag & (6 /* COMPONENT */ | 1 /* ELEMENT */) ||
|
|
386
|
-
vnode.type === Comment // potential v-if branch switch
|
|
387
|
-
);
|
|
388
|
-
};
|
|
389
304
|
function shouldUpdateComponent(prevVNode, nextVNode, optimized) {
|
|
390
305
|
const { props: prevProps, children: prevChildren, component } = prevVNode;
|
|
391
306
|
const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;
|
|
@@ -816,8 +731,8 @@ function normalizeSuspenseChildren(vnode) {
|
|
|
816
731
|
function normalizeSuspenseSlot(s) {
|
|
817
732
|
let block;
|
|
818
733
|
if (shared.isFunction(s)) {
|
|
819
|
-
const
|
|
820
|
-
if (
|
|
734
|
+
const trackBlock = isBlockTreeEnabled && s._c;
|
|
735
|
+
if (trackBlock) {
|
|
821
736
|
// disableTracking: false
|
|
822
737
|
// allow block tracking for compiled slots
|
|
823
738
|
// (see ./componentRenderContext.ts)
|
|
@@ -825,7 +740,7 @@ function normalizeSuspenseSlot(s) {
|
|
|
825
740
|
openBlock();
|
|
826
741
|
}
|
|
827
742
|
s = s();
|
|
828
|
-
if (
|
|
743
|
+
if (trackBlock) {
|
|
829
744
|
s._d = true;
|
|
830
745
|
block = currentBlock;
|
|
831
746
|
closeBlock();
|
|
@@ -5502,7 +5417,6 @@ let postFlushIndex = 0;
|
|
|
5502
5417
|
const resolvedPromise = Promise.resolve();
|
|
5503
5418
|
let currentFlushPromise = null;
|
|
5504
5419
|
let currentPreFlushParentJob = null;
|
|
5505
|
-
const RECURSION_LIMIT = 100;
|
|
5506
5420
|
function nextTick(fn) {
|
|
5507
5421
|
const p = currentFlushPromise || resolvedPromise;
|
|
5508
5422
|
return fn ? p.then(this ? fn.bind(this) : fn) : p;
|
|
@@ -5620,11 +5534,17 @@ function flushJobs(seen) {
|
|
|
5620
5534
|
// 2. If a component is unmounted during a parent component's update,
|
|
5621
5535
|
// its update can be skipped.
|
|
5622
5536
|
queue.sort((a, b) => getId(a) - getId(b));
|
|
5537
|
+
// conditional usage of checkRecursiveUpdate must be determined out of
|
|
5538
|
+
// try ... catch block since Rollup by default de-optimizes treeshaking
|
|
5539
|
+
// inside try-catch. This can leave all warning code unshaked. Although
|
|
5540
|
+
// they would get eventually shaken by a minifier like terser, some minifiers
|
|
5541
|
+
// would fail to do that (e.g. https://github.com/evanw/esbuild/issues/1610)
|
|
5542
|
+
const check = shared.NOOP;
|
|
5623
5543
|
try {
|
|
5624
5544
|
for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {
|
|
5625
5545
|
const job = queue[flushIndex];
|
|
5626
5546
|
if (job && job.active !== false) {
|
|
5627
|
-
if (false &&
|
|
5547
|
+
if (false && check(job)) ;
|
|
5628
5548
|
// console.log(`running:`, job.id)
|
|
5629
5549
|
callWithErrorHandling(job, null, 14 /* SCHEDULER */);
|
|
5630
5550
|
}
|
|
@@ -5644,27 +5564,6 @@ function flushJobs(seen) {
|
|
|
5644
5564
|
flushJobs(seen);
|
|
5645
5565
|
}
|
|
5646
5566
|
}
|
|
5647
|
-
}
|
|
5648
|
-
function checkRecursiveUpdates(seen, fn) {
|
|
5649
|
-
if (!seen.has(fn)) {
|
|
5650
|
-
seen.set(fn, 1);
|
|
5651
|
-
}
|
|
5652
|
-
else {
|
|
5653
|
-
const count = seen.get(fn);
|
|
5654
|
-
if (count > RECURSION_LIMIT) {
|
|
5655
|
-
const instance = fn.ownerInstance;
|
|
5656
|
-
const componentName = instance && getComponentName(instance.type);
|
|
5657
|
-
warn(`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. ` +
|
|
5658
|
-
`This means you have a reactive effect that is mutating its own ` +
|
|
5659
|
-
`dependencies and thus recursively triggering itself. Possible sources ` +
|
|
5660
|
-
`include component template, render function, updated hook or ` +
|
|
5661
|
-
`watcher source function.`);
|
|
5662
|
-
return true;
|
|
5663
|
-
}
|
|
5664
|
-
else {
|
|
5665
|
-
seen.set(fn, count + 1);
|
|
5666
|
-
}
|
|
5667
|
-
}
|
|
5668
5567
|
}
|
|
5669
5568
|
|
|
5670
5569
|
// Simple effect.
|
|
@@ -5935,7 +5834,7 @@ function defineExpose(exposed) {
|
|
|
5935
5834
|
}
|
|
5936
5835
|
/**
|
|
5937
5836
|
* Vue `<script setup>` compiler macro for providing props default values when
|
|
5938
|
-
* using type-based `defineProps`
|
|
5837
|
+
* using type-based `defineProps` declaration.
|
|
5939
5838
|
*
|
|
5940
5839
|
* Example usage:
|
|
5941
5840
|
* ```ts
|
|
@@ -6090,7 +5989,7 @@ function isMemoSame(cached, memo) {
|
|
|
6090
5989
|
}
|
|
6091
5990
|
|
|
6092
5991
|
// Core API ------------------------------------------------------------------
|
|
6093
|
-
const version = "3.2.
|
|
5992
|
+
const version = "3.2.12";
|
|
6094
5993
|
const _ssrUtils = {
|
|
6095
5994
|
createComponentInstance,
|
|
6096
5995
|
setupComponent,
|
package/dist/runtime-core.d.ts
CHANGED
|
@@ -547,7 +547,7 @@ export declare function createElementVNode(type: VNodeTypes | ClassComponent | t
|
|
|
547
547
|
|
|
548
548
|
export declare function createHydrationRenderer(options: RendererOptions<Node, Element>): HydrationRenderer;
|
|
549
549
|
|
|
550
|
-
declare function createRecord(id: string
|
|
550
|
+
declare function createRecord(id: string): boolean;
|
|
551
551
|
|
|
552
552
|
/**
|
|
553
553
|
* The createRenderer function accepts two generic arguments:
|
|
@@ -638,7 +638,7 @@ export declare function defineComponent<PropsOptions extends Readonly<ComponentP
|
|
|
638
638
|
* const emit = defineEmits(['change', 'update'])
|
|
639
639
|
* ```
|
|
640
640
|
*
|
|
641
|
-
* Example type-based
|
|
641
|
+
* Example type-based declaration:
|
|
642
642
|
* ```ts
|
|
643
643
|
* const emit = defineEmits<{
|
|
644
644
|
* (event: 'change'): void
|
|
@@ -690,7 +690,7 @@ export declare function defineExpose(exposed?: Record<string, any>): void;
|
|
|
690
690
|
* })
|
|
691
691
|
* ```
|
|
692
692
|
*
|
|
693
|
-
* Equivalent type-based
|
|
693
|
+
* Equivalent type-based declaration:
|
|
694
694
|
* ```ts
|
|
695
695
|
* // will be compiled into equivalent runtime declarations
|
|
696
696
|
* const props = defineProps<{
|
|
@@ -924,6 +924,8 @@ export declare function h<P>(type: DefineComponent<P>, props?: (RawProps & P) |
|
|
|
924
924
|
|
|
925
925
|
export declare function handleError(err: unknown, instance: ComponentInternalInstance | null, type: ErrorTypes, throwInDev?: boolean): void;
|
|
926
926
|
|
|
927
|
+
declare type HMRComponent = ComponentOptions | ClassComponent;
|
|
928
|
+
|
|
927
929
|
export declare interface HMRRuntime {
|
|
928
930
|
createRecord: typeof createRecord;
|
|
929
931
|
rerender: typeof rerender;
|
|
@@ -950,7 +952,9 @@ declare type InferPropType<T> = [T] extends [null] ? any : [T] extends [{
|
|
|
950
952
|
type: BooleanConstructor;
|
|
951
953
|
}] ? boolean : [T] extends [DateConstructor | {
|
|
952
954
|
type: DateConstructor;
|
|
953
|
-
}] ? Date : [T] extends [
|
|
955
|
+
}] ? Date : [T] extends [(infer U)[] | {
|
|
956
|
+
type: (infer U)[];
|
|
957
|
+
}] ? U extends DateConstructor ? Date | InferPropType<U> : InferPropType<U> : [T] extends [Prop<infer V, infer D>] ? unknown extends V ? D : V : T;
|
|
954
958
|
|
|
955
959
|
export declare function initCustomFormatter(): void;
|
|
956
960
|
|
|
@@ -1379,7 +1383,7 @@ export { ref }
|
|
|
1379
1383
|
*/
|
|
1380
1384
|
export declare function registerRuntimeCompiler(_compile: any): void;
|
|
1381
1385
|
|
|
1382
|
-
declare function reload(id: string, newComp:
|
|
1386
|
+
declare function reload(id: string, newComp: HMRComponent): void;
|
|
1383
1387
|
|
|
1384
1388
|
declare type RemoveFn = (vnode: VNode) => void;
|
|
1385
1389
|
|
|
@@ -1890,7 +1894,7 @@ export declare function withCtx(fn: Function, ctx?: ComponentInternalInstance |
|
|
|
1890
1894
|
|
|
1891
1895
|
/**
|
|
1892
1896
|
* Vue `<script setup>` compiler macro for providing props default values when
|
|
1893
|
-
* using type-based `defineProps`
|
|
1897
|
+
* using type-based `defineProps` declaration.
|
|
1894
1898
|
*
|
|
1895
1899
|
* Example usage:
|
|
1896
1900
|
* ```ts
|