import {
  base64,
  car_num,
  chinese,
  english,
  hex_color,
  money_all,
  time12,
  time24
} from "@/pattern/patterns";

type AnyObject = Record<string | number | symbol, any>
// 所有的基本类型
export declare type Primitive = string | boolean | number | bigint | symbol | null | undefined
export declare type iosPermissionID = 'push' | 'location' | 'record' | 'camera' | 'album' | 'contact' | 'calendar' | 'memo'
export declare type androidPermissionID = 'android.permission.ACCESS_FINE_LOCATION' | 'android.permission.ACCESS_COARSE_LOCATION' | 'android.permission.CAMERA' | 'android.permission.READ_EXTERNAL_STORAGE' | 'android.permission.WRITE_EXTERNAL_STORAGE' | 'android.permission.RECORD_AUDIO' | 'android.permission.READ_CONTACTS' | 'android.permission.WRITE_CONTACTS' | 'android.permission.READ_CALENDAR' | 'android.permission.WRITE_CALENDAR' | 'android.permission.READ_SMS' | 'android.permission.SEND_SMS' | 'android.permission.RECEIVE_SMS' | 'android.permission.READ_PHONE_STATE' | 'android.permission.CALL_PHONE' | 'android.permission.READ_CALL_LOG'
export declare type androidPermissionPromiseRt = {
  code: number
  message: string
} | number
export declare type findArrayIdxResult = boolean | number | { val: any; idx: number }
export interface clearParamsUnalbeAttrOpts {
  obj: object
  strice?: boolean
  tip?: boolean
  clearValues?: any[]
}
export interface countDownTimeOpts {
  start_timeStamp: number
  end_timeStamp: number
  current?: number
  addZero?: boolean
  getDay?: boolean
}
export interface countDownTimeRets {
  d: string | number
  h: string | number
  m: string | number
  s: string | number
  is_start: boolean
  is_end: boolean
}
export interface linkToOpts {
  link: string
  linkType: string
  ext?: {
    url?: string,
    appid?: string,
    origin_id?: string
  }
}
// 非基本类型
declare declare type NonPrimitive = object
// ------ajax-----------------
export declare interface VoCenRequest {
  device: string // PC & UNI
  requestInstance: VoCenHttpInstance // 宿主业务端实例化对象
}

export declare interface httpRequest {
  url?: string
  data?: any
  options?: any
  method?:
    | 'GET'
    | 'POST'
    | 'PUT'
    | 'DELETE'
    | 'CONNECT'
    | 'HEAD'
    | 'OPTIONS'
    | 'TRACE'
    | 'UPLOAD'
    | 'DOWNLOAD'
  header?: AnyObject
  version?: string
}

export declare interface httpResponse<T = any> {
  code?: number | string | undefined
  success?: boolean
  message?: string
  data?: any
  time?: string
}

export declare interface VoCenHttpInstance {
  apiGet<T = any>(requestParams?: any): Promise<httpResponse>

  apiPost<T = any>(requestParams?: any): Promise<httpResponse>

  apiPut<T = any>(requestParams?: any): Promise<httpResponse>

  apiPatch<T = any>(requestParams?: any): Promise<httpResponse>

  apiRequest<T = any>(requestParams?: any): Promise<httpResponse>

  apiDelete<T = any>(requestParams?: any): Promise<httpResponse>
}

export declare interface Fn<T = any, R = T> {
  (...arg: T[]): R
}
// --------encrypt-------
export declare interface encryptConfig {
  publicKey?: string
  privateKey?: string
}
// 加密解密类
export declare class EncryptProt {
  constructor(config: encryptConfig)
  // protected readonly $publicKey?: string
  // protected readonly $privateKey?: string
  // protected $encrypt: any
  // 实例化 jsencrypt
  // protected instanceEncrypt():void
  // 加密方法
  public encrypt(val: any):any|string
  // 解密
  public decrypt(val):any|string

}


// -----pattern ----------
// 手机号正则
declare const phone:RegExp
// 数字验证码6位正则
declare const smsCode:RegExp

// 邮箱正则
declare const email = RegExp

// 浮点数字正则
declare const float_number = RegExp

// 正数
declare const positive_number = RegExp

// 0 - 1 正则
declare const zero_dot = RegExp

// 整型正则
declare const int_number = RegExp

// 正数、负数、和小数正则
declare const number = RegExp

// 汉字 数字 字母 不支持特殊符号
declare const standard_name = RegExp

// 密码由英文字母和数字组成的6-16位字符
declare const standard_password = RegExp

// 身份证号
declare const id_card = RegExp

// 身份证号 一代
declare const id_card_one = RegExp

// 身份证号 二代
declare const id_card_two = RegExp

// 密码(以字母开头，长度在6~18之间，只能包含字母、数字和下划线)：^[a-zA-Z]\w{5,17}$
declare const password = RegExp

//强密码(必须包含大小写字母和数字的组合，不能使用特殊字符，长度在8-10之间)：
declare const strong_password = RegExp

// 日期格式 yyyy-MM-dd
declare const date_day = RegExp

// 可以被moment转化成功的时间 YYYY-MM-DD HH:mm:ss
declare const date = RegExp

// 腾讯qq号
declare const qq = RegExp

// 邮编地址
declare const zipcode = RegExp

//验证银行卡 16位或19位
declare const bank_card = RegExp

// ipv4地址
declare const ipv4 = RegExp

// 微信号
declare const weichat_account = RegExp

// 护照
declare const passport = RegExp

// 新能源车牌号
declare const new_energy = RegExp

// 非新能源
declare const energy = RegExp

// 域名
declare const host = RegExp

// 空白行
declare const white = RegExp

// 匹配正数、负数、和小数
declare const num = RegExp

// url 地址
declare const url = RegExp

// 国电话号码（包括移动和固定电话)
declare const mobile = RegExp

// 数字/货币金额 (只支持正数、不支持校验千分位分隔符)
declare const money = RegExp

// 图片(image)链接地址（图片格式可按需增删）
declare const imgUrl = RegExp

// 视频video 连接地址（视频格式可按需增删）
declare const video_url = RegExp

// 音频格式
declare const audio_url = RegExp

// 版本号(version)格式必须为X.Y.Z
declare const version = RegExp

// guid 和 uuid 正则
declare const GUID_UUID = RegExp

// md5格式
declare const md5 = RegExp

// 统一社会信用代码(宽松匹配)(15位/18位/20位数字/字母)
declare const credit_code = RegExp

// 火车车次
declare const train_number = RegExp

// 校验手机号是否正确
declare function isPhone(str: string): boolean

// 是否是是正数
declare function isPositiveNumber(str: string)

// 校验邮箱是否正确
declare function isEmail(str: string): boolean

// 校验验证码是否是六位数组
declare function isSmsCode(str: string | number): boolean

// 校验是否是浮点数字
declare function isFloatName(str: number | string): boolean

// 校验数字是否是 0 - 1
declare function isZeroDot(str: number | string): boolean

// 校验是否是整型
declare function isIntNumber(str: number | string)

// 校验是否是身份证号
declare function isIdCard(str: string): boolean

// 校验是否是身份证号 一代
declare function isIdCardOne(str: string): boolean

// 校验是否是身份证号 二代
declare function isIdCardTwo(str: string): boolean


// 校验密码 密码(以字母开头，长度在6~18之间，只能包含字母、数字和下划线)：^[a-zA-Z]\w{5,17}$
declare function isPassword(str: string): boolean

//强密码(必须包含大小写字母和数字的组合，不能使用特殊字符，长度在8-10之间)：
declare function isStrongPassword(str: string): boolean

// 校验年月日格式
declare function isDateDay(str: string): boolean

// 校验日期 年-月-日 时:分:秒
declare function isDate(str: string): boolean

// 校验是否是qq
declare function isQQ(str: string): boolean

// 校验是否是邮编
declare function isZipCode(str: string): boolean

// 校验是否是银行卡号
declare function isBankCard(str: string): boolean

// 校验是否是ipv4地址
declare function isIpv4(str: string): boolean

// 校验是否是微信账号
declare function isWechatAccount(str: string): boolean

// 校验是否是护照
declare function isPassport(str: string): boolean

// 校验是否是新能源车牌
declare function isNewEnergy(str: string): boolean

// 校验是否是汽车车牌 非新能源
declare function isEnergy(str: string): boolean

// 校验host地址
declare function isHost(str: string): boolean

// 校验是否是空白

// 校验是否是数字
declare function isNum(str: string): boolean

// 校验是否是url地址
declare function isUrl(str: string): boolean

// 校验是否是电话号码
declare function isMobile(str: string): boolean

// 校验是否是金额
declare function isMoney(str: string): boolean

// 校验是否是汽车车牌号
declare function isCarNum(str: string): boolean

// 校验是否是16进制颜色值
declare function isHexColor(str: string): boolean

// 校验是否是中文
declare function isChinese(str: string): boolean

// 校验是否是英文
declare function isEnglish(str: string): boolean

// 校验是否是24小时制时间
declare function isTime24(str: string): boolean

// 校验是否是12进制时间
declare function isTime12(str: string): boolean

// 校验是否是base64字符串
declare function isBase64(str: string): boolean

// 校验是否是金额 支持千分位
declare function isMoneyAll(str: string): boolean

// 校验是否是图片地址
declare function isImgUrl(str: string): boolean

// 校验是否是视频地址
declare function isVideoUrl(str: string): boolean

// 校验是否是音频地址
declare function isAudioUrl(str: string): boolean

// 校验是否是版本号 x.x.x 格式
declare function isVersion(str: string): boolean

// 校验是否是guid 或者 uuid
declare function isGuidOrUuid(str: string): boolean

// 校验是否是md5加密的字符串
declare function isMd5(str: string): boolean

// 校验是否是信用代码
declare function isCreditCode(str: string): boolean

// 校验是否是火车车次号
declare function isTrainNum(str: string): boolean

// 检验是否是标准的名称 只包含 中文 英文 数字 组合
declare function isStandardName(str: string): boolean

// 检测是否是标准的 6- 16 位 数字和字母组合的密码
declare function isStandardPassword(str: string): boolean


// arrays
// 数组去重
declare function dedupe(array:array):array

/**
 * 删除数组元素中的一个值 并返回删除的元素 仅支持一维数组
 * @param arr
 * @param item
 */
declare function remove(arr: Array<any>, item: any): Array<any> | void

/**
 * 检测是否是有效的数组索引
 */
declare function isValidArrayIndex(val: any): boolean

/**
 * 数组转换，保证转后的值，必须是一个数组
 * @param arr
 */
declare function ensureArray (arr: any): any[]

/**
 * 判断一个对象是否是数组
 * @param arr
 */
declare function isArray(arr: any): boolean

// 一维数组降序排序
declare function orderByDesc(arr: Array<any>): Array<any>

// 数组升序降序排序
declare function compare(property: string, order = 'desc'):any

/**
 * 快速复制指定模板数组
 * @param len
 * @param item
 */
declare function createEmptyArray(len: number, item: any): any[]

/**
 * js提取对象数组中的某一个属性组成新数组
 * @param arr 数组
 * @param key 键名
 * @returns 新数组
 */
declare function getArrayColumn(arr: any, key: string): any[]

/**
 * 指定key，铺平二维数组
 * @param arr
 * @param key
 * @param newArr
 */
declare function plainArray(arr: [], key: string, newArr: []): void

/**
 * 查看对象1中的所有属性在obj2中都有
 * @param obj1 模板对象
 * @param obj2 被筛查对象
 * @returns 查询结果
 */
declare function compareObj(obj1: object, obj2: object): Boolean

/**
 * 从指定的数组(对象组成的数组)，根据键值和值找到下标
 * @param arr 筛选的目标数组
 * @param keyValArr 通过键值对筛选
 * @param full 是否返回下标和符合条件的值，默认只返回下标
 */
declare function findArrayIdx(arr: any, keyValArr: any, full: boolean): findArrayIdxResult

/**
 * 快速复制指定模板数组
 * @param len
 * @param tmpl
 */
declare function createArrayByTmpl(len: number, tmpl: any): any[]


/**
 * 对象一维数组 降序排列
 * @param arr
 * @param property
 */
declare function orderPropertyByDesc(arr: Array<object>, property: string): Array<object>
/**
 * 对象一维数组 升序排列
 * @param arr
 * @param property
 */
declare function orderPropertyByAsc(arr: Array<object>, property: string): Array<object>

/**
 * @description: Extract tree specified structure
 */
declare function treeMap<T = any>(treeData: T[], opt: { children?: string; conversion: Fn }): T[]
/**
 * @description: Extract tree specified structure
 */
declare function treeMapEach(
  data: any,
  { children = 'children', conversion }: { children?: string; conversion: Fn }
):Array<object>


/**
 * 获取倒计时
 * @param opts
 */
declare function getCountdownFunc(opts: countDownTimeOpts): countDownTimeRets

/**
 * 自动给数组补0,适用于时间等场合
 * @param n
 * @param addZero
 */
declare function formatNumber(n: number | string, addZero: boolean = true): string | number

/**
 * @description 格式化时间
 * @param {String|Number} dateTime 需要格式化的时间戳
 * @param formatStr
 * @returns {string} 返回格式化后的字符串
 */
declare function timeFormat(dateTime: any, formatStr = 'yyyy-mm-dd'): string

/**
 * @description 时间戳转为多久之前
 * @param {String|Number} timestamp 时间戳
 * @param {String|Boolean} format
 * 时间处理函数
 * 五分钟以内显示刚刚；
 * 一小时以内显示几分钟前；
 * 24小时内显示几小时前；
 * 超过24小时三天内（含三天）显示几天前；
 * 3天以上显示具体日期，到天即可。
 * 超过一年显示年份，年内不显示年份
 * @returns {string} 转化后的内容
 */
declare function timeTransfer(timestamp: any, format: any = 'yyyy-mm-dd'): string

/**
 * @description 时间戳转为多久之前
 * @param {String|Number} timestamp 时间戳
 * @param {String|Boolean} format
 *最后一条消息日期＝当日  消息发送时间≤1分钟，显示文案“刚刚”；
 消息发送时间＞1分钟，显示文案“hh:mm”，小时为24小时制
 最后一条消息日期 = 当前日期前一天
 显示文案：昨天
 最后一条消息日期 = 本周内
 显示文案：周X
 最后一条消息日期 =  本年内
 显示文案：XX月XX日
 最后一条消息日期不在本年内
 显示文案：XXXX年XX月XX日
 * @returns {string} 转化后的内容
 */
declare function IMTimeTransfer(
  timestamp: any,
  format: any = 'yyyy-mm-dd',
  beforeTime: null
): string

/**
 *
 * * @description 时间戳转为多久之前
 * @param {String|Number} timestamp 时间戳
 * @param {String|Boolean} format
 * 当日消息  第一次发布消息的时候，即显示当前时间点，时间格式为“几点 : 几分”，例：“6:20”。
   两次聊天记录时间超过10分钟，再次发布聊天消息时，显示当前时间点时间格式为“几点 : 几分”，例：“6:20”。
   一周之前且在当前自然年内的历史消息（自然周）
 • 昨天的：昨天 时间范围 几点几分，例：“昨天 18:20”。
 • 昨天之前的：周几 几点几分，例：“周一 6:20”。

 • 非当前自然周的时间点，显示时间格式为“某月-某日 几点：几分”，例：4月11日 18:23
 在当前自然年之前的历史消息
 • 非当前自然年的时间点，显示时间格式为“某年-某月-某日 几点：几分”，例：2022年4月11日 18:23
 *
 */
declare function chartTimeTransfer(
  timestamp: any,
  format: any = 'yyyy-mm-dd',
  beforeTime: null
): string
// 是否是本周内
declare function isSameWeek(inDate):boolean

// 获取是周几
declare function getWeek(today):string
// 判断是否是昨天
declare function isYestday(theDate):boolean

// 判断时间是今天之内的
declare function isToday(date):boolean

declare function getNowFormatDate():string

//----- functions ----------
/**
 * 返回一个变量是否为空
 * @param param
 */
declare function checkIsEmpty(param: any): boolean
/**
 * 将对象快速值拷贝
 * @param obj 需要拷贝的对象
 */
declare function objTranslate(obj: object): object

/**
 * 将输入值转换为数字，如果转换失败，则返回原字符串
 * @param val
 */
declare function toNumber(val: string): number | string

/**
 * 判断当前实例是否是 Promise对象
 * @param val
 */
declare function isPromise(val: any): boolean

/**
 * 获取值得原始类型字符串
 * @param value
 */
declare function toRawType(value: any): string

/**
 * 判断当前对象是否是正则实例化对象
 * @param v
 */
declare function isRegExp(v: any): boolean

/**
 * 判断变量是否 非undefined
 * @param v
 */
declare function isUndef(v: any): boolean

/**
 * 判断变量是否 是undefined
 * @param v
 */
declare function isDef(v: any): boolean

/**
 * 判断变量是否是 真值
 * @param v
 */
declare function isTrue(v: any): boolean

/**
 * 判断变量是否是 假值
 * @param v
 */
declare function isFalse(v: any): boolean

/**
 * 校验是否为object
 * @param x 校验值
 * @returns
 */
declare function isObj(x: any): boolean

/**
 * 校验是否为数字
 * @param value 校验值
 * @returns bo
 */
declare function isNumber(value: any): boolean

/**
 * 近似计算两点的距离
 * @param lat1
 * @param lng1
 * @param lat2
 * @param lng2
 */
declare function getDistanceFunc(lat1: number, lng1: number, lat2: number, lng2: number): number

/**
 * 获取随机css颜色
 */
declare function getRandomColor(): string

/**
 * 获取静态资源 url地址，如果是全路径则原样返回
 * @param url
 */
declare function transformUrl(url: string): string

// time为某一天的时间戳
declare function startTime(time):string

// 结束时间的时间戳
declare function endTime(time):string

/**
 *
 * @param num  月份或者年
 * @param type ['month', 'year']
 * 例如 transformDateByType(1, 'month')  // 获取近一个月的开始时间和结束时间
 * 结果：['2022-07-04 14:15:33', '2022-08-04 14:15:33']
 *
 * 例如 transformDateByType(2022, 'year')  // 获取2022年的开始时间和结束时间
 * 结果：['2022-01-01 00:00:00', '2023-01-01 00:00:00']
 * @remarks
 * 时间字符串返回
 */
declare function transformDateByType(num: number, type: string): string[]



// --------objects -----------


/**
 * 判断当前对象是否含有某个属性
 * @param obj
 * @param key
 */
declare function hasOwn(obj: Object | any[], key: string): boolean

/**
 * 判断当前对象是否是对象类型
 * @param obj
 */
declare function isObject(obj: Object): boolean

/**
 * 严格的对象类型检查。只返回true
 * 对于普通的JavaScript对象。
 */
declare function isPlainObject(obj: any): boolean

declare const emptyObject
/**
 * 两个对象的骚操作，并返回一个新对象。这个操作应该避免影响原来的对象,提示:这个方法只适用于简单值组成的对象
 * @param source
 * @param target
 * @param cover
 * @param insert
 */
declare function mergeObject (source:object, target:object, cover:boolean = false, insert:boolean = false):object

/**
 * 混合默认样式与配置属性，后者覆盖前者
 * @param defaultStyle 默认属性
 * @param style 配置属性
 * @returns
 */
declare function mixinStyle (defaultStyle:object, style:object):object


/**
 * 对比目标对象和模板对象，并将模版对象有而目标对象没有的属性值copy给目标对象
 * @param targetObject 目标对象
 * @param sourceObject 模板对象
 * @returns
 */
declare function copyObjectAttrStrict (targetObject:object, sourceObject:object):object

/**
 * 获取对象的属性个数
 * @param obj 需要统计的对象
 * @param stict 严格模式下，只返回自己的，忽略原型链继承的
 * @returns
 */
declare function getObjectAttrNum(obj:object, stict:boolean = true):number

//  ----------string---------
/**
 * 把输入的值转换为字符串.
 * @param val
 */
declare  function toString(val: any): string

/**
 * 加密手机号
 * 输入 155 6560 1175
 * 输出 155 **** 1175
 * @param phone
 * @returns {string}
 */
declare function encryptPhone(phone: string): string
// --------form--------------
/**
 * 清理对象中多余的属性
 * @param opts
 * @returns 清理后属性的对象
 */
declare function clearParamsUnalbeAttr(opts: clearParamsUnalbeAttrOpts): object

/**
 * 将对象转成字符串，一般用于拼接get请求param的时候
 * @param data 对象
 * @returns
 */
declare function buildParamsString(data:object):string
// -------uni---------
/**
 * 便捷modal方法
 * @param config 参见uni.showModal配置
 */
declare function modal(config: ShowModalOptions):void
/**
 * 打开指定位置
 * @param latitude 维度
 * @param longitude 经度
 * @param name 名称
 * @param address 地址
 */
declare function openLocation  (latitude: number, longitude: number, name?: string, address?: string): void
/**
 * 通用跳转方法，支持小程序/内页/webview外页等多种方式
 * @param linkObj 配置对象
 */
declare function linkTo  (linkObj: linkToOpts): void


// -----------web-------------
// 获取STORAGE
declare function getDevice()
// storage 类型
declare const deviceType
// storage类适用于PC UNI环境
export declare  class WebVoStorage {
  constructor(props:Object)
  has(key):boolean
  get(key, defaultVal = ''): object | string | number
  set(key: string, val: string):void
  remove(key):void
  clear():void
}
// 定义生成26个英文字母
declare function indexList():Array<object>

// ---------VALIDATOR------------
export declare interface ValidatorConfig {
  source: object
  rule: object
  mul?: boolean
}
export declare class Validator {
  constructor(config: ValidatorConfig)
  /**
   * ghgh
   * @param callback
   */
  public validate(callback: any):any

}
// <!-----------platform------>
export interface uniUploadOpts {
  filePath: string
  idx: number
  name: string
  param?: object
  progressList: OnProgressUpdateResult[]
  url?: string
  formData?: object
}
export interface easyUploadImageOpts {
  imgs: string[]
  name?: string
  data: object
  progressList?: OnProgressUpdateResult[]
}

export interface requestPlayload {
  code: number
  msg: string
  data: any
}
export interface chooseImageByPromiseOpts {
  count: number
  sourceType: string[]
  sizeType: string[]
}

/**
 * 获取当前运行的环境
 */
declare function getPlatForm(): string

/**
 * 是否为微信浏览器环境
 */
declare function isWeiXinBrower(): boolean

/**
 * promise执行所有uni方法
 * @param functionName 方法名称
 * @param params 配置参数
 * promise
 */
declare function Promisify(functionName: string, params: object): Promise<any>

/**
 * 快捷修改页面标题
 * @param title
 */
declare function setNavigationBarTitle(title: string): void

/**
 * 下载文件
 * @param url
 */
declare function downLoadFile(url: string): Promise<string | boolean>

/**
 * 异步获取图片
 * @param opts
 */
declare function chooseImageByPromise(opts: chooseImageByPromiseOpts): Promise<any>

/**
 * 保存图片到本地
 * @param fileUrl
 * @param type
 */
declare function saveImageToDisk(fileUrl: string, type:string): Promise<any>

/**
 * 上传
 * @param opts
 */
declare function upload(opts: uniUploadOpts): Promise<any>

/**
 * 批量上传照片
 * @param opts
 */
declare function uploadImages(opts: easyUploadImageOpts): Promise<any>


/**
 * 获取当前页面路由
 * @returns
 */
declare function getCurrentPageRoute(): string




declare const ajax:{
  VoCenRequest,
  httpRequest,
  httpResponse,
  VoCenHttpInstance,
  Fn
}
declare const encrypt: {
  encryptConfig,
  EncryptProt
}
declare const patterns:{
 phone,
 smsCode,
 email,
 float_number,
 positive_number,
 zero_dot,
 int_number,
 number,
 standard_name,
 standard_password,
 id_card,
 id_card_one,
 id_card_two,
 password,
 strong_password,
 date_day,
 date,
 qq,
 zipcode,
 bank_card,
 ipv4,
 weichat_account,
 passport,
 new_energy,
 energy,
 host,
 white,
 num,
 url,
 mobile,
 money,
 imgUrl,
 video_url,
 audio_url,
 version,
 GUID_UUID,
 md5,
 credit_code,
 train_number,
 isPhone,
 isPositiveNumber,
 isEmail,
 isSmsCode,
 isFloatName,
 isZeroDot,
 isIntNumber,
 isIdCard,
 isIdCardOne,
 isIdCardTwo,
 isPassword,
 isStrongPassword,
 isDateDay,
 isDate,
 isQQ,
 isZipCode,
 isBankCard,
 isIpv4,
 isWechatAccount,
 isPassport,
 isNewEnergy,
 isEnergy,
 isHost,
 isNum,
 isUrl,
 isMobile,
 isMoney,
 isCarNum,
 isHexColor,
 isChinese,
 isEnglish,
 isTime24,
 isTime12,
 isBase64,
 isMoneyAll,
 isImgUrl,
 isVideoUrl,
 isAudioUrl,
 isVersion,
 isGuidOrUuid,
 isMd5,
 isCreditCode,
 isTrainNum,
 isStandardName,
 isStandardPassword
}

// ------------utils---------------------
declare const utils:{
  dedupe,
  remove,
  isValidArrayIndex,
  ensureArray,
  isArray,
  orderByDesc,
  compare,
  orderPropertyByDesc,
  orderPropertyByAsc,
  treeMap,
  treeMapEach,
  timeFormat,
  timeTransfer,
  IMTimeTransfer,
  chartTimeTransfer,
  isSameWeek,
  getWeek,
  isYestday,
  isToday,
  getNowFormatDate,
  checkIsEmpty,
  toNumber,
  isPromise,
  toRawType,
  isRegExp,
  isUndef,
  isDef,
  isTrue,
  isFalse,
  getRandomColor,
  transformUrl,
  startTime,
  endTime,
  transformDateByType,
  hasOwn,
  isObject,
  isPlainObject,
  emptyObject,
  toString,
  encryptPhone,
}

declare const web:{
  getDevice,
  deviceType,
  WebVoStorage,
  indexList,
}
declare const validator :{
  ValidatorConfig,
  Validator

}
declare const platform : {
  getPlatForm,
  isWeiXinBrower,
  Promisify,
  setNavigationBarTitle,
  downLoadFile,
  chooseImageByPromise,
  saveImageToDisk,
  upload,
  uploadImages,
  getCurrentPageRoute,
  appPlusPermission
}
export {
  VoCenRequest,
  httpRequest,
  httpResponse,
  VoCenHttpInstance,
  Fn,
  encryptConfig,
  EncryptProt,
  phone,
  smsCode,
  email,
  float_number,
  positive_number,
  zero_dot,
  int_number,
  number,
  standard_name,
  standard_password,
  id_card,
  id_card_one,
  id_card_two,
  password,
  strong_password,
  date_day,
  date,
  qq,
  zipcode,
  bank_card,
  ipv4,
  weichat_account,
  passport,
  new_energy,
  energy,
  host,
  white,
  num,
  url,
  mobile,
  money,
  imgUrl,
  video_url,
  audio_url,
  version,
  GUID_UUID,
  md5,
  credit_code,
  train_number,
  isPhone,
  isPositiveNumber,
  isEmail,
  isSmsCode,
  isFloatName,
  isZeroDot,
  isIntNumber,
  isIdCard,
  isIdCardOne,
  isIdCardTwo,
  isPassword,
  isStrongPassword,
  isDateDay,
  isDate,
  isQQ,
  isZipCode,
  isBankCard,
  isIpv4,
  isWechatAccount,
  isPassport,
  isNewEnergy,
  isEnergy,
  isHost,
  isNum,
  isUrl,
  isMobile,
  isMoney,
  isCarNum,
  isHexColor,
  isChinese,
  isEnglish,
  isTime24,
  isTime12,
  isBase64,
  isMoneyAll,
  isImgUrl,
  isVideoUrl,
  isAudioUrl,
  isVersion,
  isGuidOrUuid,
  isMd5,
  isCreditCode,
  isTrainNum,
  isStandardName,
  isStandardPassword,
  dedupe,
  remove,
  isValidArrayIndex,
  ensureArray,
  isArray,
  orderByDesc,
  compare,
  orderPropertyByDesc,
  orderPropertyByAsc,
  treeMap,
  treeMapEach,
  timeFormat,
  timeTransfer,
  IMTimeTransfer,
  chartTimeTransfer,
  isSameWeek,
  getWeek,
  isYestday,
  isToday,
  getNowFormatDate,
  checkIsEmpty,
  toNumber,
  isPromise,
  toRawType,
  isRegExp,
  isUndef,
  isDef,
  isTrue,
  isFalse,
  getRandomColor,
  transformUrl,
  startTime,
  endTime,
  transformDateByType,
  hasOwn,
  isObject,
  isPlainObject,
  emptyObject,
  toString,
  encryptPhone,
  getDevice,
  deviceType,
  WebVoStorage,
  indexList,
  ValidatorConfig,
  Validator,
  // platform
  getPlatForm,
  isWeiXinBrower,
  Promisify,
  setNavigationBarTitle,
  downLoadFile,
  chooseImageByPromise,
  saveImageToDisk,
  upload,
  uploadImages,
  getCurrentPageRoute,
  appPlusPermission
}

export {
  ajax,
  encrypt,
  patterns,
  utils,
  web,
  validator,
  platform

}
declare const shared : {
  ajax,
  encrypt,
  patterns,
  utils,
  web,
  validator,
  platform
}
export default shared

declare const GongchuangjiLibary : {
  ajax,
  encrypt,
  patterns,
  utils,
  web,
  validator,
  platform
}

//全局变量，考虑umd.getQueryFormString
export as namespace GongchuangjiLibary

