/*
 * @Author: wfl
 * @LastEditors: wfl
 * @description: 
 * @updateInfo: 
 * @Date: 2022-08-03 12:05:05
 * @LastEditTime: 2022-08-04 16:34:05
 */
type returnType = {
  leave: number // 1 - 6
  desc: string // 低 较低 一般 较高 高 强
}

type MDate = Date | number | string

type month = {
  date: string;
  datemon: string;
  dateday: string;
  week: string | number;
  week1: string | number;
  week2: string | number;
  week3: string | number;
  isnow?: boolean;
  isback?: boolean;
  isnext?: boolean;
  istoday?: boolean;
  nl?: any
  monthcn?: string;
  daycn?: string
}

declare module 'jh-iking-utils' {
  export const passwordEncry: (str: string, key?: string, _opt?: any) => {
    AES: {
      // 加密
      encrypt: () => string,
      // 解密
      decrypt: () => string
    },
    DES: {
      encrypt: () => string,
      decrypt: () => string
    },
    TripleDES: {
      encrypt: () => string,
      decrypt: () => string
    },
    RC4: {
      encrypt: () => string,
      decrypt: () => string
    }
  }

  /**
   * @description: 当密码长度小于6时，强度只会为1
   * @description: 允许的特殊字符 ~ . , ? ! @ # $ % ^ & * _ / + -
   * @return {
   *  leave: number // 1 - 6
   *  desc: string // 低 较低 一般 较高 高 强
   * }
   */
  export const passwordValid: (str: string, key: string) => returnType

  /**
   * @description: 类型校验
   * @return boolean
   */
  export const is: {
    isDef: (val: any) => boolean
    isUnDef: (val: any) => boolean
    isObject: (val: any) => boolean
    isEmpty: (val: any) => boolean
    isDate: (val: any) => boolean
    isNull: (val: any) => boolean
    isNullAndUnDef: (val: any) => boolean
    isNullOrUnDef: (val: any) => boolean
    isNumber: (val: any) => boolean
    isPromise: (val: any) => boolean
    isString: (val: any) => boolean
    isFunction: (val: any) => boolean
    isBoolean: (val: any) => boolean
    isRegExp: (val: any) => boolean
    isArray: (val: any) => boolean
    isWindow: (val: any) => boolean
    isElement: (val: any) => boolean
    isMap: (val: any) => boolean
    isServer: (val: any) => boolean
    isClient: (val: any) => boolean
    isUrl: (val: any) => boolean
  }
}