vue 2.7.2 → 2.7.3

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vue.js v2.7.2
2
+ * Vue.js v2.7.3
3
3
  * (c) 2014-2022 Evan You
4
4
  * Released under the MIT License.
5
5
  */
@@ -324,7 +324,9 @@ var LIFECYCLE_HOOKS = [
324
324
  'activated',
325
325
  'deactivated',
326
326
  'errorCaptured',
327
- 'serverPrefetch'
327
+ 'serverPrefetch',
328
+ 'renderTracked',
329
+ 'renderTriggered'
328
330
  ];
329
331
 
330
332
  var config = {
@@ -879,7 +881,7 @@ function makeReactive(target, shallow) {
879
881
  warn("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow."));
880
882
  }
881
883
  }
882
- var ob = observe(target, shallow);
884
+ var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
883
885
  if (process.env.NODE_ENV !== 'production' && !ob) {
884
886
  if (target == null || isPrimitive(target)) {
885
887
  warn("value cannot be made reactive: ".concat(String(target)));
@@ -941,7 +943,7 @@ function createRef(rawValue, shallow) {
941
943
  var ref = {};
942
944
  def(ref, RefFlag, true);
943
945
  def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
944
- ref.dep = defineReactive(ref, 'value', rawValue, null, shallow);
946
+ def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
945
947
  return ref;
946
948
  }
947
949
  function triggerRef(ref) {
@@ -4213,7 +4215,7 @@ var onServerPrefetch = createLifeCycle('serverPrefetch');
4213
4215
  var onRenderTracked = createLifeCycle('renderTracked');
4214
4216
  var onRenderTriggered = createLifeCycle('renderTriggered');
4215
4217
 
4216
- var version = '2.7.2';
4218
+ var version = '2.7.3';
4217
4219
  /**
4218
4220
  * @internal type is manually declared in <root>/types/v3-define-component.d.ts
4219
4221
  */
@@ -4231,6 +4233,13 @@ var shouldObserve = true;
4231
4233
  function toggleObserving(value) {
4232
4234
  shouldObserve = value;
4233
4235
  }
4236
+ // ssr mock dep
4237
+ var mockDep = {
4238
+ notify: noop,
4239
+ depend: noop,
4240
+ addSub: noop,
4241
+ removeSub: noop
4242
+ };
4234
4243
  /**
4235
4244
  * Observer class that is attached to each observed
4236
4245
  * object. Once attached, the observer converts the target
@@ -4238,78 +4247,63 @@ function toggleObserving(value) {
4238
4247
  * collect dependencies and dispatch updates.
4239
4248
  */
4240
4249
  var Observer = /** @class */ (function () {
4241
- function Observer(value, shallow) {
4250
+ function Observer(value, shallow, mock) {
4242
4251
  if (shallow === void 0) { shallow = false; }
4252
+ if (mock === void 0) { mock = false; }
4243
4253
  this.value = value;
4244
4254
  this.shallow = shallow;
4255
+ this.mock = mock;
4245
4256
  // this.value = value
4246
- this.dep = new Dep();
4257
+ this.dep = mock ? mockDep : new Dep();
4247
4258
  this.vmCount = 0;
4248
4259
  def(value, '__ob__', this);
4249
4260
  if (isArray(value)) {
4250
- if (hasProto) {
4251
- protoAugment(value, arrayMethods);
4252
- }
4253
- else {
4254
- copyAugment(value, arrayMethods, arrayKeys);
4261
+ if (!mock) {
4262
+ if (hasProto) {
4263
+ value.__proto__ = arrayMethods;
4264
+ /* eslint-enable no-proto */
4265
+ }
4266
+ else {
4267
+ for (var i = 0, l = arrayKeys.length; i < l; i++) {
4268
+ var key = arrayKeys[i];
4269
+ def(value, key, arrayMethods[key]);
4270
+ }
4271
+ }
4255
4272
  }
4256
4273
  if (!shallow) {
4257
4274
  this.observeArray(value);
4258
4275
  }
4259
4276
  }
4260
4277
  else {
4261
- this.walk(value, shallow);
4278
+ /**
4279
+ * Walk through all properties and convert them into
4280
+ * getter/setters. This method should only be called when
4281
+ * value type is Object.
4282
+ */
4283
+ var keys = Object.keys(value);
4284
+ for (var i = 0; i < keys.length; i++) {
4285
+ var key = keys[i];
4286
+ defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
4287
+ }
4262
4288
  }
4263
4289
  }
4264
- /**
4265
- * Walk through all properties and convert them into
4266
- * getter/setters. This method should only be called when
4267
- * value type is Object.
4268
- */
4269
- Observer.prototype.walk = function (obj, shallow) {
4270
- var keys = Object.keys(obj);
4271
- for (var i = 0; i < keys.length; i++) {
4272
- var key = keys[i];
4273
- defineReactive(obj, key, NO_INIITIAL_VALUE, undefined, shallow);
4274
- }
4275
- };
4276
4290
  /**
4277
4291
  * Observe a list of Array items.
4278
4292
  */
4279
- Observer.prototype.observeArray = function (items) {
4280
- for (var i = 0, l = items.length; i < l; i++) {
4281
- observe(items[i]);
4293
+ Observer.prototype.observeArray = function (value) {
4294
+ for (var i = 0, l = value.length; i < l; i++) {
4295
+ observe(value[i], false, this.mock);
4282
4296
  }
4283
4297
  };
4284
4298
  return Observer;
4285
4299
  }());
4286
4300
  // helpers
4287
- /**
4288
- * Augment a target Object or Array by intercepting
4289
- * the prototype chain using __proto__
4290
- */
4291
- function protoAugment(target, src) {
4292
- /* eslint-disable no-proto */
4293
- target.__proto__ = src;
4294
- /* eslint-enable no-proto */
4295
- }
4296
- /**
4297
- * Augment a target Object or Array by defining
4298
- * hidden properties.
4299
- */
4300
- /* istanbul ignore next */
4301
- function copyAugment(target, src, keys) {
4302
- for (var i = 0, l = keys.length; i < l; i++) {
4303
- var key = keys[i];
4304
- def(target, key, src[key]);
4305
- }
4306
- }
4307
4301
  /**
4308
4302
  * Attempt to create an observer instance for a value,
4309
4303
  * returns the new observer if successfully observed,
4310
4304
  * or the existing observer if the value already has one.
4311
4305
  */
4312
- function observe(value, shallow) {
4306
+ function observe(value, shallow, ssrMockReactivity) {
4313
4307
  if (!isObject(value) || isRef(value) || value instanceof VNode) {
4314
4308
  return;
4315
4309
  }
@@ -4318,18 +4312,18 @@ function observe(value, shallow) {
4318
4312
  ob = value.__ob__;
4319
4313
  }
4320
4314
  else if (shouldObserve &&
4321
- !isServerRendering() &&
4315
+ (ssrMockReactivity || !isServerRendering()) &&
4322
4316
  (isArray(value) || isPlainObject(value)) &&
4323
4317
  Object.isExtensible(value) &&
4324
- !value.__v_skip) {
4325
- ob = new Observer(value, shallow);
4318
+ !value.__v_skip /* ReactiveFlags.SKIP */) {
4319
+ ob = new Observer(value, shallow, ssrMockReactivity);
4326
4320
  }
4327
4321
  return ob;
4328
4322
  }
4329
4323
  /**
4330
4324
  * Define a reactive property on an Object.
4331
4325
  */
4332
- function defineReactive(obj, key, val, customSetter, shallow) {
4326
+ function defineReactive(obj, key, val, customSetter, shallow, mock) {
4333
4327
  var dep = new Dep();
4334
4328
  var property = Object.getOwnPropertyDescriptor(obj, key);
4335
4329
  if (property && property.configurable === false) {
@@ -4342,7 +4336,7 @@ function defineReactive(obj, key, val, customSetter, shallow) {
4342
4336
  (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
4343
4337
  val = obj[key];
4344
4338
  }
4345
- var childOb = !shallow && observe(val);
4339
+ var childOb = !shallow && observe(val, false, mock);
4346
4340
  Object.defineProperty(obj, key, {
4347
4341
  enumerable: true,
4348
4342
  configurable: true,
@@ -4390,7 +4384,7 @@ function defineReactive(obj, key, val, customSetter, shallow) {
4390
4384
  else {
4391
4385
  val = newVal;
4392
4386
  }
4393
- childOb = !shallow && observe(newVal);
4387
+ childOb = !shallow && observe(newVal, false, mock);
4394
4388
  if (process.env.NODE_ENV !== 'production') {
4395
4389
  dep.notify({
4396
4390
  type: "set" /* TriggerOpTypes.SET */,
@@ -4415,16 +4409,20 @@ function set(target, key, val) {
4415
4409
  process.env.NODE_ENV !== 'production' && warn("Set operation on key \"".concat(key, "\" failed: target is readonly."));
4416
4410
  return;
4417
4411
  }
4412
+ var ob = target.__ob__;
4418
4413
  if (isArray(target) && isValidArrayIndex(key)) {
4419
4414
  target.length = Math.max(target.length, key);
4420
4415
  target.splice(key, 1, val);
4416
+ // when mocking for SSR, array methods are not hijacked
4417
+ if (!ob.shallow && ob.mock) {
4418
+ observe(val, false, true);
4419
+ }
4421
4420
  return val;
4422
4421
  }
4423
4422
  if (key in target && !(key in Object.prototype)) {
4424
4423
  target[key] = val;
4425
4424
  return val;
4426
4425
  }
4427
- var ob = target.__ob__;
4428
4426
  if (target._isVue || (ob && ob.vmCount)) {
4429
4427
  process.env.NODE_ENV !== 'production' &&
4430
4428
  warn('Avoid adding reactive properties to a Vue instance or its root $data ' +
@@ -4435,7 +4433,7 @@ function set(target, key, val) {
4435
4433
  target[key] = val;
4436
4434
  return val;
4437
4435
  }
4438
- defineReactive(ob.value, key, val);
4436
+ defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
4439
4437
  if (process.env.NODE_ENV !== 'production') {
4440
4438
  ob.dep.notify({
4441
4439
  type: "add" /* TriggerOpTypes.ADD */,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue",
3
- "version": "2.7.2",
3
+ "version": "2.7.3",
4
4
  "packageManager": "pnpm@7.1.0",
5
5
  "description": "Reactive, component-oriented view layer for modern web interfaces.",
6
6
  "main": "dist/vue.runtime.common.js",
@@ -60,7 +60,7 @@
60
60
  },
61
61
  "homepage": "https://github.com/vuejs/vue#readme",
62
62
  "dependencies": {
63
- "@vue/compiler-sfc": "2.7.2",
63
+ "@vue/compiler-sfc": "2.7.3",
64
64
  "csstype": "^3.1.0"
65
65
  },
66
66
  "devDependencies": {
@@ -3350,7 +3350,9 @@ const LIFECYCLE_HOOKS = [
3350
3350
  'activated',
3351
3351
  'deactivated',
3352
3352
  'errorCaptured',
3353
- 'serverPrefetch'
3353
+ 'serverPrefetch',
3354
+ 'renderTracked',
3355
+ 'renderTriggered'
3354
3356
  ];
3355
3357
 
3356
3358
  var config = {
@@ -5189,6 +5191,13 @@ let shouldObserve = true;
5189
5191
  function toggleObserving(value) {
5190
5192
  shouldObserve = value;
5191
5193
  }
5194
+ // ssr mock dep
5195
+ const mockDep = {
5196
+ notify: noop,
5197
+ depend: noop,
5198
+ addSub: noop,
5199
+ removeSub: noop
5200
+ };
5192
5201
  /**
5193
5202
  * Observer class that is attached to each observed
5194
5203
  * object. Once attached, the observer converts the target
@@ -5196,76 +5205,60 @@ function toggleObserving(value) {
5196
5205
  * collect dependencies and dispatch updates.
5197
5206
  */
5198
5207
  class Observer {
5199
- constructor(value, shallow = false) {
5208
+ constructor(value, shallow = false, mock = false) {
5200
5209
  this.value = value;
5201
5210
  this.shallow = shallow;
5211
+ this.mock = mock;
5202
5212
  // this.value = value
5203
- this.dep = new Dep();
5213
+ this.dep = mock ? mockDep : new Dep();
5204
5214
  this.vmCount = 0;
5205
5215
  def(value, '__ob__', this);
5206
5216
  if (isArray(value)) {
5207
- if (hasProto) {
5208
- protoAugment(value, arrayMethods);
5209
- }
5210
- else {
5211
- copyAugment(value, arrayMethods, arrayKeys);
5217
+ if (!mock) {
5218
+ if (hasProto) {
5219
+ value.__proto__ = arrayMethods;
5220
+ /* eslint-enable no-proto */
5221
+ }
5222
+ else {
5223
+ for (let i = 0, l = arrayKeys.length; i < l; i++) {
5224
+ const key = arrayKeys[i];
5225
+ def(value, key, arrayMethods[key]);
5226
+ }
5227
+ }
5212
5228
  }
5213
5229
  if (!shallow) {
5214
5230
  this.observeArray(value);
5215
5231
  }
5216
5232
  }
5217
5233
  else {
5218
- this.walk(value, shallow);
5219
- }
5220
- }
5221
- /**
5222
- * Walk through all properties and convert them into
5223
- * getter/setters. This method should only be called when
5224
- * value type is Object.
5225
- */
5226
- walk(obj, shallow) {
5227
- const keys = Object.keys(obj);
5228
- for (let i = 0; i < keys.length; i++) {
5229
- const key = keys[i];
5230
- defineReactive(obj, key, NO_INIITIAL_VALUE, undefined, shallow);
5234
+ /**
5235
+ * Walk through all properties and convert them into
5236
+ * getter/setters. This method should only be called when
5237
+ * value type is Object.
5238
+ */
5239
+ const keys = Object.keys(value);
5240
+ for (let i = 0; i < keys.length; i++) {
5241
+ const key = keys[i];
5242
+ defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
5243
+ }
5231
5244
  }
5232
5245
  }
5233
5246
  /**
5234
5247
  * Observe a list of Array items.
5235
5248
  */
5236
- observeArray(items) {
5237
- for (let i = 0, l = items.length; i < l; i++) {
5238
- observe(items[i]);
5249
+ observeArray(value) {
5250
+ for (let i = 0, l = value.length; i < l; i++) {
5251
+ observe(value[i], false, this.mock);
5239
5252
  }
5240
5253
  }
5241
5254
  }
5242
5255
  // helpers
5243
- /**
5244
- * Augment a target Object or Array by intercepting
5245
- * the prototype chain using __proto__
5246
- */
5247
- function protoAugment(target, src) {
5248
- /* eslint-disable no-proto */
5249
- target.__proto__ = src;
5250
- /* eslint-enable no-proto */
5251
- }
5252
- /**
5253
- * Augment a target Object or Array by defining
5254
- * hidden properties.
5255
- */
5256
- /* istanbul ignore next */
5257
- function copyAugment(target, src, keys) {
5258
- for (let i = 0, l = keys.length; i < l; i++) {
5259
- const key = keys[i];
5260
- def(target, key, src[key]);
5261
- }
5262
- }
5263
5256
  /**
5264
5257
  * Attempt to create an observer instance for a value,
5265
5258
  * returns the new observer if successfully observed,
5266
5259
  * or the existing observer if the value already has one.
5267
5260
  */
5268
- function observe(value, shallow) {
5261
+ function observe(value, shallow, ssrMockReactivity) {
5269
5262
  if (!isObject$1(value) || isRef(value) || value instanceof VNode) {
5270
5263
  return;
5271
5264
  }
@@ -5274,18 +5267,18 @@ function observe(value, shallow) {
5274
5267
  ob = value.__ob__;
5275
5268
  }
5276
5269
  else if (shouldObserve &&
5277
- !isServerRendering() &&
5270
+ (ssrMockReactivity || !isServerRendering()) &&
5278
5271
  (isArray(value) || isPlainObject(value)) &&
5279
5272
  Object.isExtensible(value) &&
5280
- !value.__v_skip) {
5281
- ob = new Observer(value, shallow);
5273
+ !value.__v_skip /* ReactiveFlags.SKIP */) {
5274
+ ob = new Observer(value, shallow, ssrMockReactivity);
5282
5275
  }
5283
5276
  return ob;
5284
5277
  }
5285
5278
  /**
5286
5279
  * Define a reactive property on an Object.
5287
5280
  */
5288
- function defineReactive(obj, key, val, customSetter, shallow) {
5281
+ function defineReactive(obj, key, val, customSetter, shallow, mock) {
5289
5282
  const dep = new Dep();
5290
5283
  const property = Object.getOwnPropertyDescriptor(obj, key);
5291
5284
  if (property && property.configurable === false) {
@@ -5298,7 +5291,7 @@ function defineReactive(obj, key, val, customSetter, shallow) {
5298
5291
  (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
5299
5292
  val = obj[key];
5300
5293
  }
5301
- let childOb = !shallow && observe(val);
5294
+ let childOb = !shallow && observe(val, false, mock);
5302
5295
  Object.defineProperty(obj, key, {
5303
5296
  enumerable: true,
5304
5297
  configurable: true,
@@ -5346,7 +5339,7 @@ function defineReactive(obj, key, val, customSetter, shallow) {
5346
5339
  else {
5347
5340
  val = newVal;
5348
5341
  }
5349
- childOb = !shallow && observe(newVal);
5342
+ childOb = !shallow && observe(newVal, false, mock);
5350
5343
  if (process.env.NODE_ENV !== 'production') {
5351
5344
  dep.notify({
5352
5345
  type: "set" /* TriggerOpTypes.SET */,
@@ -5371,16 +5364,20 @@ function set(target, key, val) {
5371
5364
  process.env.NODE_ENV !== 'production' && warn$3(`Set operation on key "${key}" failed: target is readonly.`);
5372
5365
  return;
5373
5366
  }
5367
+ const ob = target.__ob__;
5374
5368
  if (isArray(target) && isValidArrayIndex(key)) {
5375
5369
  target.length = Math.max(target.length, key);
5376
5370
  target.splice(key, 1, val);
5371
+ // when mocking for SSR, array methods are not hijacked
5372
+ if (!ob.shallow && ob.mock) {
5373
+ observe(val, false, true);
5374
+ }
5377
5375
  return val;
5378
5376
  }
5379
5377
  if (key in target && !(key in Object.prototype)) {
5380
5378
  target[key] = val;
5381
5379
  return val;
5382
5380
  }
5383
- const ob = target.__ob__;
5384
5381
  if (target._isVue || (ob && ob.vmCount)) {
5385
5382
  process.env.NODE_ENV !== 'production' &&
5386
5383
  warn$3('Avoid adding reactive properties to a Vue instance or its root $data ' +
@@ -5391,7 +5388,7 @@ function set(target, key, val) {
5391
5388
  target[key] = val;
5392
5389
  return val;
5393
5390
  }
5394
- defineReactive(ob.value, key, val);
5391
+ defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
5395
5392
  if (process.env.NODE_ENV !== 'production') {
5396
5393
  ob.dep.notify({
5397
5394
  type: "add" /* TriggerOpTypes.ADD */,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/compiler-sfc",
3
- "version": "2.7.2",
3
+ "version": "2.7.3",
4
4
  "description": "compiler-sfc for Vue 2",
5
5
  "main": "dist/compiler-sfc.js",
6
6
  "types": "dist/compiler-sfc.d.ts",
@@ -13,7 +13,8 @@ import {
13
13
  isUndef,
14
14
  isValidArrayIndex,
15
15
  isServerRendering,
16
- hasChanged
16
+ hasChanged,
17
+ noop
17
18
  } from '../util/index'
18
19
  import { isReadonly, isRef, TrackOpTypes, TriggerOpTypes } from '../../v3'
19
20
 
@@ -31,6 +32,14 @@ export function toggleObserving(value: boolean) {
31
32
  shouldObserve = value
32
33
  }
33
34
 
35
+ // ssr mock dep
36
+ const mockDep = {
37
+ notify: noop,
38
+ depend: noop,
39
+ addSub: noop,
40
+ removeSub: noop
41
+ } as Dep
42
+
34
43
  /**
35
44
  * Observer class that is attached to each observed
36
45
  * object. Once attached, the observer converts the target
@@ -41,78 +50,63 @@ export class Observer {
41
50
  dep: Dep
42
51
  vmCount: number // number of vms that have this object as root $data
43
52
 
44
- constructor(public value: any, public shallow = false) {
53
+ constructor(public value: any, public shallow = false, public mock = false) {
45
54
  // this.value = value
46
- this.dep = new Dep()
55
+ this.dep = mock ? mockDep : new Dep()
47
56
  this.vmCount = 0
48
57
  def(value, '__ob__', this)
49
58
  if (isArray(value)) {
50
- if (hasProto) {
51
- protoAugment(value, arrayMethods)
52
- } else {
53
- copyAugment(value, arrayMethods, arrayKeys)
59
+ if (!mock) {
60
+ if (hasProto) {
61
+ /* eslint-disable no-proto */
62
+ ;(value as any).__proto__ = arrayMethods
63
+ /* eslint-enable no-proto */
64
+ } else {
65
+ for (let i = 0, l = arrayKeys.length; i < l; i++) {
66
+ const key = arrayKeys[i]
67
+ def(value, key, arrayMethods[key])
68
+ }
69
+ }
54
70
  }
55
71
  if (!shallow) {
56
72
  this.observeArray(value)
57
73
  }
58
74
  } else {
59
- this.walk(value, shallow)
60
- }
61
- }
62
-
63
- /**
64
- * Walk through all properties and convert them into
65
- * getter/setters. This method should only be called when
66
- * value type is Object.
67
- */
68
- walk(obj: object, shallow: boolean) {
69
- const keys = Object.keys(obj)
70
- for (let i = 0; i < keys.length; i++) {
71
- const key = keys[i]
72
- defineReactive(obj, key, NO_INIITIAL_VALUE, undefined, shallow)
75
+ /**
76
+ * Walk through all properties and convert them into
77
+ * getter/setters. This method should only be called when
78
+ * value type is Object.
79
+ */
80
+ const keys = Object.keys(value)
81
+ for (let i = 0; i < keys.length; i++) {
82
+ const key = keys[i]
83
+ defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock)
84
+ }
73
85
  }
74
86
  }
75
87
 
76
88
  /**
77
89
  * Observe a list of Array items.
78
90
  */
79
- observeArray(items: Array<any>) {
80
- for (let i = 0, l = items.length; i < l; i++) {
81
- observe(items[i])
91
+ observeArray(value: any[]) {
92
+ for (let i = 0, l = value.length; i < l; i++) {
93
+ observe(value[i], false, this.mock)
82
94
  }
83
95
  }
84
96
  }
85
97
 
86
98
  // helpers
87
99
 
88
- /**
89
- * Augment a target Object or Array by intercepting
90
- * the prototype chain using __proto__
91
- */
92
- function protoAugment(target, src: Object) {
93
- /* eslint-disable no-proto */
94
- target.__proto__ = src
95
- /* eslint-enable no-proto */
96
- }
97
-
98
- /**
99
- * Augment a target Object or Array by defining
100
- * hidden properties.
101
- */
102
- /* istanbul ignore next */
103
- function copyAugment(target: Object, src: Object, keys: Array<string>) {
104
- for (let i = 0, l = keys.length; i < l; i++) {
105
- const key = keys[i]
106
- def(target, key, src[key])
107
- }
108
- }
109
-
110
100
  /**
111
101
  * Attempt to create an observer instance for a value,
112
102
  * returns the new observer if successfully observed,
113
103
  * or the existing observer if the value already has one.
114
104
  */
115
- export function observe(value: any, shallow?: boolean): Observer | void {
105
+ export function observe(
106
+ value: any,
107
+ shallow?: boolean,
108
+ ssrMockReactivity?: boolean
109
+ ): Observer | void {
116
110
  if (!isObject(value) || isRef(value) || value instanceof VNode) {
117
111
  return
118
112
  }
@@ -121,12 +115,12 @@ export function observe(value: any, shallow?: boolean): Observer | void {
121
115
  ob = value.__ob__
122
116
  } else if (
123
117
  shouldObserve &&
124
- !isServerRendering() &&
118
+ (ssrMockReactivity || !isServerRendering()) &&
125
119
  (isArray(value) || isPlainObject(value)) &&
126
120
  Object.isExtensible(value) &&
127
- !value.__v_skip
121
+ !value.__v_skip /* ReactiveFlags.SKIP */
128
122
  ) {
129
- ob = new Observer(value, shallow)
123
+ ob = new Observer(value, shallow, ssrMockReactivity)
130
124
  }
131
125
  return ob
132
126
  }
@@ -139,7 +133,8 @@ export function defineReactive(
139
133
  key: string,
140
134
  val?: any,
141
135
  customSetter?: Function | null,
142
- shallow?: boolean
136
+ shallow?: boolean,
137
+ mock?: boolean
143
138
  ) {
144
139
  const dep = new Dep()
145
140
 
@@ -158,7 +153,7 @@ export function defineReactive(
158
153
  val = obj[key]
159
154
  }
160
155
 
161
- let childOb = !shallow && observe(val)
156
+ let childOb = !shallow && observe(val, false, mock)
162
157
  Object.defineProperty(obj, key, {
163
158
  enumerable: true,
164
159
  configurable: true,
@@ -202,7 +197,7 @@ export function defineReactive(
202
197
  } else {
203
198
  val = newVal
204
199
  }
205
- childOb = !shallow && observe(newVal)
200
+ childOb = !shallow && observe(newVal, false, mock)
206
201
  if (__DEV__) {
207
202
  dep.notify({
208
203
  type: TriggerOpTypes.SET,
@@ -241,16 +236,20 @@ export function set(
241
236
  __DEV__ && warn(`Set operation on key "${key}" failed: target is readonly.`)
242
237
  return
243
238
  }
239
+ const ob = (target as any).__ob__
244
240
  if (isArray(target) && isValidArrayIndex(key)) {
245
241
  target.length = Math.max(target.length, key)
246
242
  target.splice(key, 1, val)
243
+ // when mocking for SSR, array methods are not hijacked
244
+ if (!ob.shallow && ob.mock) {
245
+ observe(val, false, true)
246
+ }
247
247
  return val
248
248
  }
249
249
  if (key in target && !(key in Object.prototype)) {
250
250
  target[key] = val
251
251
  return val
252
252
  }
253
- const ob = (target as any).__ob__
254
253
  if ((target as any)._isVue || (ob && ob.vmCount)) {
255
254
  __DEV__ &&
256
255
  warn(
@@ -263,7 +262,7 @@ export function set(
263
262
  target[key] = val
264
263
  return val
265
264
  }
266
- defineReactive(ob.value, key, val)
265
+ defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock)
267
266
  if (__DEV__) {
268
267
  ob.dep.notify({
269
268
  type: TriggerOpTypes.ADD,
@@ -14,5 +14,7 @@ export const LIFECYCLE_HOOKS = [
14
14
  'activated',
15
15
  'deactivated',
16
16
  'errorCaptured',
17
- 'serverPrefetch'
17
+ 'serverPrefetch',
18
+ 'renderTracked',
19
+ 'renderTriggered'
18
20
  ] as const