aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vue/src/core/instance/proxy.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vue/src/core/instance/proxy.js')
-rw-r--r--node_modules/vue/src/core/instance/proxy.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/node_modules/vue/src/core/instance/proxy.js b/node_modules/vue/src/core/instance/proxy.js
new file mode 100644
index 00000000..0d6dcf80
--- /dev/null
+++ b/node_modules/vue/src/core/instance/proxy.js
@@ -0,0 +1,79 @@
+/* not type checking this file because flow doesn't play well with Proxy */
+
+import config from 'core/config'
+import { warn, makeMap, isNative } from '../util/index'
+
+let initProxy
+
+if (process.env.NODE_ENV !== 'production') {
+ const allowedGlobals = makeMap(
+ 'Infinity,undefined,NaN,isFinite,isNaN,' +
+ 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
+ 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
+ 'require' // for Webpack/Browserify
+ )
+
+ const warnNonPresent = (target, key) => {
+ warn(
+ `Property or method "${key}" is not defined on the instance but ` +
+ 'referenced during render. Make sure that this property is reactive, ' +
+ 'either in the data option, or for class-based components, by ' +
+ 'initializing the property. ' +
+ 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
+ target
+ )
+ }
+
+ const hasProxy =
+ typeof Proxy !== 'undefined' && isNative(Proxy)
+
+ if (hasProxy) {
+ const isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact')
+ config.keyCodes = new Proxy(config.keyCodes, {
+ set (target, key, value) {
+ if (isBuiltInModifier(key)) {
+ warn(`Avoid overwriting built-in modifier in config.keyCodes: .${key}`)
+ return false
+ } else {
+ target[key] = value
+ return true
+ }
+ }
+ })
+ }
+
+ const hasHandler = {
+ has (target, key) {
+ const has = key in target
+ const isAllowed = allowedGlobals(key) || key.charAt(0) === '_'
+ if (!has && !isAllowed) {
+ warnNonPresent(target, key)
+ }
+ return has || !isAllowed
+ }
+ }
+
+ const getHandler = {
+ get (target, key) {
+ if (typeof key === 'string' && !(key in target)) {
+ warnNonPresent(target, key)
+ }
+ return target[key]
+ }
+ }
+
+ initProxy = function initProxy (vm) {
+ if (hasProxy) {
+ // determine which proxy handler to use
+ const options = vm.$options
+ const handlers = options.render && options.render._withStripped
+ ? getHandler
+ : hasHandler
+ vm._renderProxy = new Proxy(vm, handlers)
+ } else {
+ vm._renderProxy = vm
+ }
+ }
+}
+
+export { initProxy }