'onVnodeBeforeUnmount,onVnodeUnmounted'
)
-const camelizeRE = /-(\w)/g
-export const camelize = (str: string): string => {
- return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''))
+function cacheStringFunction<T extends (str: string) => string>(fn: T): T {
+ const cache: Record<string, string> = Object.create(null)
+ return ((str: string) => {
+ const hit = cache[str]
+ return hit || (cache[str] = fn(str))
+ }) as any
}
+const camelizeRE = /-(\w)/g
+export const camelize = cacheStringFunction(
+ (str: string): string => {
+ return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''))
+ }
+)
+
const hyphenateRE = /\B([A-Z])/g
-export const hyphenate = (str: string): string => {
- return str.replace(hyphenateRE, '-$1').toLowerCase()
-}
+export const hyphenate = cacheStringFunction(
+ (str: string): string => {
+ return str.replace(hyphenateRE, '-$1').toLowerCase()
+ }
+)
-export const capitalize = (str: string): string => {
- return str.charAt(0).toUpperCase() + str.slice(1)
-}
+export const capitalize = cacheStringFunction(
+ (str: string): string => {
+ return str.charAt(0).toUpperCase() + str.slice(1)
+ }
+)
// compare whether a value has changed, accounting for NaN.
export const hasChanged = (value: any, oldValue: any): boolean =>