]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
build: improve treeshakeability (#5682)
author宋铄运 (Alan Song) <fnlctrl@gmail.com>
Wed, 13 Apr 2022 09:39:02 +0000 (17:39 +0800)
committerGitHub <noreply@github.com>
Wed, 13 Apr 2022 09:39:02 +0000 (05:39 -0400)
packages/reactivity/src/baseHandlers.ts
packages/reactivity/src/deferredComputed.ts
packages/runtime-core/src/componentPublicInstance.ts
packages/runtime-core/src/scheduler.ts
packages/runtime-dom/src/index.ts
packages/runtime-dom/src/modules/events.ts
packages/runtime-dom/src/nodeOps.ts

index aaec961381ef0db33077bb1daf6f47238707d301..81dce9b965722be8050725b1537b80a10f43e6b2 100644 (file)
@@ -35,6 +35,7 @@ import { warn } from './warning'
 const isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`)
 
 const builtInSymbols = new Set(
+  /*#__PURE__*/
   Object.getOwnPropertyNames(Symbol)
     .map(key => (Symbol as any)[key])
     .filter(isSymbol)
index bf19fd42fdf7db4f2ce8a174212ed06286d47ff2..a23122046a4bf8010c8d56aa41aeffd85a71108a 100644 (file)
@@ -4,7 +4,7 @@ import { ComputedGetter, ComputedRef } from './computed'
 import { ReactiveFlags, toRaw } from './reactive'
 import { trackRefValue, triggerRefValue } from './ref'
 
-const tick = Promise.resolve()
+const tick = /*#__PURE__*/ Promise.resolve()
 const queue: any[] = []
 let queued = false
 
index 9bfbfc10371f3f0fde68dd65f490fdeeed958ca6..c2d36e7715100a1a44d8c5a32f5816f2298e7148 100644 (file)
@@ -223,9 +223,10 @@ const getPublicInstance = (
   return getPublicInstance(i.parent)
 }
 
-export const publicPropertiesMap: PublicPropertiesMap = /*#__PURE__*/ extend(
-  Object.create(null),
-  {
+export const publicPropertiesMap: PublicPropertiesMap =
+  // Move PURE marker to new line to workaround compiler discarding it
+  // due to type annotation
+  /*#__PURE__*/ extend(Object.create(null), {
     $: i => i,
     $el: i => i.vnode.el,
     $data: i => i.data,
@@ -240,8 +241,7 @@ export const publicPropertiesMap: PublicPropertiesMap = /*#__PURE__*/ extend(
     $forceUpdate: i => () => queueJob(i.update),
     $nextTick: i => nextTick.bind(i.proxy!),
     $watch: i => (__FEATURE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP)
-  } as PublicPropertiesMap
-)
+  } as PublicPropertiesMap)
 
 if (__COMPAT__) {
   installCompatInstanceProperties(publicPropertiesMap)
@@ -456,8 +456,8 @@ export const PublicInstanceProxyHandlers: ProxyHandler<any> = {
   ) {
     if (descriptor.get != null) {
       // invalidate key cache of a getter based property #5417
-      target.$.accessCache[key] = 0;
-    } else if (hasOwn(descriptor,'value')) {
+      target.$.accessCache[key] = 0
+    } else if (hasOwn(descriptor, 'value')) {
       this.set!(target, key, descriptor.value, null)
     }
     return Reflect.defineProperty(target, key, descriptor)
index ccf7ac70b417537bef075bcd84ac8e0eb3adf013..fbf18deb1e5b7e2bc66c42dc952ea9a22f888ba0 100644 (file)
@@ -47,7 +47,7 @@ const pendingPostFlushCbs: SchedulerJob[] = []
 let activePostFlushCbs: SchedulerJob[] | null = null
 let postFlushIndex = 0
 
-const resolvedPromise: Promise<any> = Promise.resolve()
+const resolvedPromise = /*#__PURE__*/ Promise.resolve() as Promise<any>
 let currentFlushPromise: Promise<void> | null = null
 
 let currentPreFlushParentJob: SchedulerJob | null = null
index 8ed984d2b3167e8ff9e0a109e8af59fbc81a6adf..405acc089445427c6b6ca0739b359886b794ee63 100644 (file)
@@ -31,7 +31,7 @@ declare module '@vue/reactivity' {
   }
 }
 
-const rendererOptions = extend({ patchProp }, nodeOps)
+const rendererOptions = /*#__PURE__*/ extend({ patchProp }, nodeOps)
 
 // lazy create the renderer - this makes core renderer logic tree-shakable
 // in case the user only imports reactivity utilities from Vue.
index ecb6f113bde4f26b3978f4c308646d2961e0b852..a4cb61e88fe9cc049b07dcc7ef7905b72a7c34c6 100644 (file)
@@ -13,31 +13,32 @@ interface Invoker extends EventListener {
 type EventValue = Function | Function[]
 
 // Async edge case fix requires storing an event listener's attach timestamp.
-let _getNow: () => number = Date.now
-
-let skipTimestampCheck = false
-
-if (typeof window !== 'undefined') {
-  // Determine what event timestamp the browser is using. Annoyingly, the
-  // timestamp can either be hi-res (relative to page load) or low-res
-  // (relative to UNIX epoch), so in order to compare time we have to use the
-  // same timestamp type when saving the flush timestamp.
-  if (_getNow() > document.createEvent('Event').timeStamp) {
-    // if the low-res timestamp which is bigger than the event timestamp
-    // (which is evaluated AFTER) it means the event is using a hi-res timestamp,
-    // and we need to use the hi-res version for event listeners as well.
-    _getNow = () => performance.now()
+const [_getNow, skipTimestampCheck] = /*#__PURE__*/ (() => {
+  let _getNow = Date.now
+  let skipTimestampCheck = false
+  if (typeof window !== 'undefined') {
+    // Determine what event timestamp the browser is using. Annoyingly, the
+    // timestamp can either be hi-res (relative to page load) or low-res
+    // (relative to UNIX epoch), so in order to compare time we have to use the
+    // same timestamp type when saving the flush timestamp.
+    if (Date.now() > document.createEvent('Event').timeStamp) {
+      // if the low-res timestamp which is bigger than the event timestamp
+      // (which is evaluated AFTER) it means the event is using a hi-res timestamp,
+      // and we need to use the hi-res version for event listeners as well.
+      _getNow = () => performance.now()
+    }
+    // #3485: Firefox <= 53 has incorrect Event.timeStamp implementation
+    // and does not fire microtasks in between event propagation, so safe to exclude.
+    const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i)
+    skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53)
   }
-  // #3485: Firefox <= 53 has incorrect Event.timeStamp implementation
-  // and does not fire microtasks in between event propagation, so safe to exclude.
-  const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i)
-  skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53)
-}
+  return [_getNow, skipTimestampCheck]
+})()
 
 // To avoid the overhead of repeatedly calling performance.now(), we cache
 // and use the same timestamp for all event listeners attached in the same tick.
 let cachedNow: number = 0
-const p = Promise.resolve()
+const p = /*#__PURE__*/ Promise.resolve()
 const reset = () => {
   cachedNow = 0
 }
index 16762580e98231717e298ca998e5aca3b3611e77..c03bda4e31ac3f505d3761a4f97ebf1741f4ec9f 100644 (file)
@@ -4,7 +4,7 @@ export const svgNS = 'http://www.w3.org/2000/svg'
 
 const doc = (typeof document !== 'undefined' ? document : null) as Document
 
-const templateContainer = doc && doc.createElement('template')
+const templateContainer = doc && /*#__PURE__*/ doc.createElement('template')
 
 export const nodeOps: Omit<RendererOptions<Node, Element>, 'patchProp'> = {
   insert: (child, parent, anchor) => {