From c4a9ae5fddc1ac5a7a93c0a1626b0872697b584b Mon Sep 17 00:00:00 2001 From: neverland Date: Thu, 7 Feb 2019 13:07:33 +0800 Subject: [PATCH] [type] raf (#2699) --- packages/utils/{color.js => color.ts} | 0 .../utils/{deep-clone.js => deep-clone.ts} | 2 +- packages/utils/event.js | 40 ------------------- packages/utils/event.ts | 39 ++++++++++++++++++ packages/utils/{index.js => index.ts} | 14 +++---- packages/utils/{raf.js => raf.ts} | 8 ++-- .../utils/validate/{email.js => email.ts} | 2 +- .../utils/validate/{mobile.js => mobile.ts} | 2 +- packages/utils/validate/number.js | 3 -- packages/utils/validate/number.ts | 3 ++ packages/utils/validate/{src.js => src.ts} | 2 +- 11 files changed, 57 insertions(+), 58 deletions(-) rename packages/utils/{color.js => color.ts} (100%) rename packages/utils/{deep-clone.js => deep-clone.ts} (78%) delete mode 100644 packages/utils/event.js create mode 100644 packages/utils/event.ts rename packages/utils/{index.js => index.ts} (64%) rename packages/utils/{raf.js => raf.ts} (75%) rename packages/utils/validate/{email.js => email.ts} (94%) rename packages/utils/validate/{mobile.js => mobile.ts} (69%) delete mode 100644 packages/utils/validate/number.js create mode 100644 packages/utils/validate/number.ts rename packages/utils/validate/{src.js => src.ts} (60%) diff --git a/packages/utils/color.js b/packages/utils/color.ts similarity index 100% rename from packages/utils/color.js rename to packages/utils/color.ts diff --git a/packages/utils/deep-clone.js b/packages/utils/deep-clone.ts similarity index 78% rename from packages/utils/deep-clone.js rename to packages/utils/deep-clone.ts index 95da48230..4d6a162e5 100644 --- a/packages/utils/deep-clone.js +++ b/packages/utils/deep-clone.ts @@ -1,6 +1,6 @@ import deepAssign from './deep-assign'; -export default function deepClone(obj) { +export default function deepClone(obj: object): object { if (Array.isArray(obj)) { return obj.map(item => deepClone(item)); } diff --git a/packages/utils/event.js b/packages/utils/event.js deleted file mode 100644 index 45106afab..000000000 --- a/packages/utils/event.js +++ /dev/null @@ -1,40 +0,0 @@ -/* eslint-disable no-empty */ -/* eslint-disable getter-return */ -/* eslint-disable import/no-mutable-exports */ -import { isServer } from '.'; - -export let supportsPassive = false; - -if (!isServer) { - try { - const opts = {}; - Object.defineProperty(opts, 'passive', { - get() { - /* istanbul ignore next */ - supportsPassive = true; - } - }); - window.addEventListener('test-passive', null, opts); - } catch (e) {} -} - -export function on(target, event, handler, passive = false) { - !isServer && - target.addEventListener( - event, - handler, - supportsPassive ? { capture: false, passive } : false - ); -} - -export function off(target, event, handler) { - !isServer && target.removeEventListener(event, handler); -} - -export function stop(event) { - event.stopPropagation(); -} - -export function prevent(event) { - event.preventDefault(); -} diff --git a/packages/utils/event.ts b/packages/utils/event.ts new file mode 100644 index 000000000..b980ffedf --- /dev/null +++ b/packages/utils/event.ts @@ -0,0 +1,39 @@ +/* eslint-disable no-empty */ +/* eslint-disable getter-return */ +/* eslint-disable import/no-mutable-exports */ +import { noop, isServer } from '.'; + +type EventHanlder = (event?: Event) => void; + +export let supportsPassive = false; + +if (!isServer) { + try { + const opts = {}; + Object.defineProperty(opts, 'passive', { + get() { + /* istanbul ignore next */ + supportsPassive = true; + } + }); + window.addEventListener('test-passive', noop, opts); + } catch (e) {} +} + +export function on(target: HTMLElement, event: string, handler: EventHanlder, passive = false) { + if (!isServer) { + target.addEventListener(event, handler, supportsPassive ? { capture: false, passive } : false); + } +} + +export function off(target: HTMLElement, event: string, handler: EventHanlder) { + !isServer && target.removeEventListener(event, handler); +} + +export function stop(event: Event) { + event.stopPropagation(); +} + +export function prevent(event: Event) { + event.preventDefault(); +} diff --git a/packages/utils/index.js b/packages/utils/index.ts similarity index 64% rename from packages/utils/index.js rename to packages/utils/index.ts index 5384bb6bd..2425ac177 100644 --- a/packages/utils/index.js +++ b/packages/utils/index.ts @@ -2,20 +2,20 @@ import Vue from 'vue'; export { use } from './use'; -export const isServer = Vue.prototype.$isServer; +export const isServer: boolean = Vue.prototype.$isServer; export function noop() {} -export function isDef(value) { +export function isDef(value: any): boolean { return value !== undefined && value !== null; } -export function isObj(x) { +export function isObj(x: any): boolean { const type = typeof x; return x !== null && (type === 'object' || type === 'function'); } -export function get(object, path) { +export function get(object: any, path: string): any { const keys = path.split('.'); let result = object; @@ -27,15 +27,15 @@ export function get(object, path) { } const camelizeRE = /-(\w)/g; -export function camelize(str) { +export function camelize(str: string): string { return str.replace(camelizeRE, (_, c) => c.toUpperCase()); } -export function isAndroid() { +export function isAndroid(): boolean { /* istanbul ignore next */ return isServer ? false : /android/.test(navigator.userAgent.toLowerCase()); } -export function range(num, min, max) { +export function range(num: number, min: number, max: number): number { return Math.min(Math.max(num, min), max); } diff --git a/packages/utils/raf.js b/packages/utils/raf.ts similarity index 75% rename from packages/utils/raf.js rename to packages/utils/raf.ts index b40d315bd..758c34440 100644 --- a/packages/utils/raf.js +++ b/packages/utils/raf.ts @@ -7,7 +7,7 @@ import { isServer } from './index'; let prev = Date.now(); /* istanbul ignore next */ -function fallback(fn) { +function fallback(fn: FrameRequestCallback): number { const curr = Date.now(); const ms = Math.max(0, 16 - (curr - prev)); const id = setTimeout(fn, ms); @@ -16,7 +16,7 @@ function fallback(fn) { } /* istanbul ignore next */ -const root = isServer ? global : window; +const root = (isServer ? global : window); /* istanbul ignore next */ const iRaf = root.requestAnimationFrame || root.webkitRequestAnimationFrame || fallback; @@ -24,10 +24,10 @@ const iRaf = root.requestAnimationFrame || root.webkitRequestAnimationFrame || f /* istanbul ignore next */ const iCancel = root.cancelAnimationFrame || root.webkitCancelAnimationFrame || root.clearTimeout; -export function raf(fn) { +export function raf(fn: FrameRequestCallback): number { return iRaf.call(root, fn); } -export function cancel(id) { +export function cancel(id: number) { iCancel.call(root, id); } diff --git a/packages/utils/validate/email.js b/packages/utils/validate/email.ts similarity index 94% rename from packages/utils/validate/email.js rename to packages/utils/validate/email.ts index 5652bd67d..d2bdbb60f 100644 --- a/packages/utils/validate/email.js +++ b/packages/utils/validate/email.ts @@ -1,5 +1,5 @@ /* eslint-disable */ -export default function email(value) { +export default function email(value: string): boolean { const reg = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i; return reg.test(value); } diff --git a/packages/utils/validate/mobile.js b/packages/utils/validate/mobile.ts similarity index 69% rename from packages/utils/validate/mobile.js rename to packages/utils/validate/mobile.ts index 166ddf355..a15e91dbc 100644 --- a/packages/utils/validate/mobile.js +++ b/packages/utils/validate/mobile.ts @@ -1,4 +1,4 @@ -export default function mobile(value) { +export default function mobile(value: string): boolean { value = value.replace(/[^-|\d]/g, ''); return /^((\+86)|(86))?(1)\d{10}$/.test(value) || /^0[0-9-]{10,13}$/.test(value); } diff --git a/packages/utils/validate/number.js b/packages/utils/validate/number.js deleted file mode 100644 index 951953e23..000000000 --- a/packages/utils/validate/number.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function number(value) { - return /^\d+$/.test(value); -} diff --git a/packages/utils/validate/number.ts b/packages/utils/validate/number.ts new file mode 100644 index 000000000..a072541be --- /dev/null +++ b/packages/utils/validate/number.ts @@ -0,0 +1,3 @@ +export default function number(value: string): boolean { + return /^\d+$/.test(value); +} diff --git a/packages/utils/validate/src.js b/packages/utils/validate/src.ts similarity index 60% rename from packages/utils/validate/src.js rename to packages/utils/validate/src.ts index 6a2f2184a..2b4adb1a0 100644 --- a/packages/utils/validate/src.js +++ b/packages/utils/validate/src.ts @@ -1,6 +1,6 @@ /** * Is image source */ -export default function src(url) { +export default function src(url: string): boolean { return /^(https?:)?\/\/|data:image/.test(url); }