import { Directive, VNode, DirectiveBinding, warn } from '@vue/runtime-core'
import { addEventListener } from '../modules/events'
-import { looseEqual, isArray } from '@vue/shared'
+import { isArray, isObject } from '@vue/shared'
const getModelAssigner = (vnode: VNode): ((value: any) => void) =>
vnode.props!['onUpdate:modelValue']
}
}
+function looseEqual(a: any, b: any): boolean {
+ if (a === b) return true
+ const isObjectA = isObject(a)
+ const isObjectB = isObject(b)
+ if (isObjectA && isObjectB) {
+ try {
+ const isArrayA = isArray(a)
+ const isArrayB = isArray(b)
+ if (isArrayA && isArrayB) {
+ return (
+ a.length === b.length &&
+ a.every((e: any, i: any) => looseEqual(e, b[i]))
+ )
+ } else if (a instanceof Date && b instanceof Date) {
+ return a.getTime() === b.getTime()
+ } else if (!isArrayA && !isArrayB) {
+ const keysA = Object.keys(a)
+ const keysB = Object.keys(b)
+ return (
+ keysA.length === keysB.length &&
+ keysA.every(key => looseEqual(a[key], b[key]))
+ )
+ } else {
+ /* istanbul ignore next */
+ return false
+ }
+ } catch (e) {
+ /* istanbul ignore next */
+ return false
+ }
+ } else if (!isObjectA && !isObjectB) {
+ return String(a) === String(b)
+ } else {
+ return false
+ }
+}
+
function looseIndexOf(arr: any[], val: any): number {
return arr.findIndex(item => looseEqual(item, val))
}
export const capitalize = (str: string): string => {
return str.charAt(0).toUpperCase() + str.slice(1)
}
-
-/**
- * Check if two values are loosely equal - that is,
- * if they are plain objects, do they have the same shape?
- */
-export function looseEqual(a: any, b: any): boolean {
- if (a === b) return true
- const isObjectA = isObject(a)
- const isObjectB = isObject(b)
- if (isObjectA && isObjectB) {
- try {
- const isArrayA = isArray(a)
- const isArrayB = isArray(b)
- if (isArrayA && isArrayB) {
- return (
- a.length === b.length &&
- a.every((e: any, i: any) => looseEqual(e, b[i]))
- )
- } else if (a instanceof Date && b instanceof Date) {
- return a.getTime() === b.getTime()
- } else if (!isArrayA && !isArrayB) {
- const keysA = Object.keys(a)
- const keysB = Object.keys(b)
- return (
- keysA.length === keysB.length &&
- keysA.every(key => looseEqual(a[key], b[key]))
- )
- } else {
- /* istanbul ignore next */
- return false
- }
- } catch (e) {
- /* istanbul ignore next */
- return false
- }
- } else if (!isObjectA && !isObjectB) {
- return String(a) === String(b)
- } else {
- return false
- }
-}