0.1.44 • Published 7 months ago

@mtjs/utils v0.1.44

Weekly downloads
2
License
MIT
Repository
github
Last release
7 months ago

utils

参考: https://github.com/RayAiden/ts-utils

JS 常用工具类

各种常用的 JS 工具集

npm i @mtjs/utils -S

DateUtils

  • formatDate
  • formatISODate
  • formatISOTime
  • formatISODateTime
  • insureDate
  • getLastDayOfMonth
  • getBeginningOfDate
  • getEnddingOfDate

formatDate

日期格式化 formatDate(date: Date | number | string, format?: string): string

  • 参数: dateValue 时间戳 | 日期字符串
  • 参数: formatString yyyyMMdd mm:hh:ss
formatDate(new Date().getTime(), "yyyy/MM/dd hh:mm:ss"); // "2019/11/06 15:31:50"

formatISODate

获取标准日期 formatISODate(date: number | string | Date): string

date: 时间戳 | 日期字符串 | 日期对象

formatISODate(new Date()); // 2019-11-06

formatISOTime

获取标准时间 formatISOTime(date: number | string | Date): string

date: 时间戳 | 日期字符串 | 日期对象

formatISOTime(new Date()); // 07:27:33

formatISODateTime

获取标准日期和时间 formatISODateTime(date: number | string | Date): string

date: 时间戳 | 日期字符串 | 日期对象

formatISODateTime(new Date()); // 2019-11-06 07:27:33

insureDate

得到时间对象 insureDate(date: number | string | Date): Date

date: 时间戳 | 日期字符串 | 日期对象

insureDate(new Date()); // 2020-08-25T16:00:00.000Z

getLastDayOfMonth

获取当月的最后一天 getLastDayOfMonth(year = new Date().getFullYear(), month = new Date().getMonth())

year: 时间戳 month: 时间戳

getLastDayOfMonth('2020','8'); // '2020-8-31'

getBeginningOfDate

获取一天开始(00:00:00)的日期对象 getBeginningOfDate (date: number | string | Date, ISOString: Boolean): string

date: 时间戳 | 日期字符串 | 日期对象 ISOString: 是否使用 ISO 标准返回 Date 对象的字符串格式 | Boolean

getBeginningOfDate(1598343480735, true) // "2020-08-24T16:00:00.000Z"
getBeginningOfDate(1598343480735, false) // '2020-08-25 00:00:00'

getEnddingOfDate

得到时间对象 getEnddingOfDate (date: number | string | Date, ISOString: Boolean): string

date: 时间戳 | 日期字符串 | 日期对象 ISOString: 是否使用 ISO 标准返回 Date 对象的字符串格式 | Boolean

getEnddingOfDate(1598343480735, true) // "2020-08-24T16:00:00.000Z"
getEnddingOfDate(1598343480735, false) // '2020-08-25 23:59:59'

DOMUtils

  • scrollTop
  • raf
  • cancelRaf

scrollTop

滚动到顶部 scrollTop(el: HTMLElement | Window, from = 0, to: number, duration = 500, endCallback: Function)

el: 需要滚动的元素 | HTMLElement | Window, from: 滚动开始的位置 | 0, to: 滚动终止的位置, duration: 滚动持续的时间 | 500, endCallback: 滚动完成之后的回调函数

NumberUtils

  • numeral
  • randomNum
  • toFixedNum
  • toDecimalMark
  • epsEqDecimal
  • px2vw
  • vw2Px
  • kb2mb
  • formatPrice
  • unFormat
  • formatNum
  • add
  • sub
  • mul
  • div
  • byte2mb
  • toPercent
  • formatMoney
  • formatWeek

randomNum

返回指定范围内的随机整数 randomNum(min: number, max: number): number

min: 最小值 max: 最大值

randomNum(5,10) // => 5 || 6 || 7 || 8 || 9 || 10

toFixedNum

将数字四舍五入到指定的小数位数 toFixedNum(n: number, decimals = 0): number

n: 操作的数字 decimals: 精确到几位小数

round(12.555,2) // => 12.56

toDecimalMark

将数字转化为千分位格式,可以在数字前面加上符号 toDecimalMark(num: number, mark = ""): string

num: 操作数 mark: 操作符 (如:¥、$)

toDecimalMark(12345674654.123,'¥') // => "¥12,345,674,654.123"

epsEqDecimal

判断小数是否相等 epsEqDecimal(x: number, y: number): boolean

x: 操作数(小数) y: 操作数(小数)

epsEqDecimal(1.2, 1.2) // true

px2vw

单位转换 px 转 vw: px2vw(v: number, useUnit = true): string

v px数值 useUnit: 是否添加 vw 单位

px2vw(33) // 4.4vw

vw2Px

单位转换 vw 转 px:vw2Px(v: number, useUnit = true): string

v: vw数值 useUnit: 是否添加 px 单位

vw2Px(33) // 247.5px

byte2mb

文件大小单位转换 byte 转 mb:byte2mb(num: number): string

num: kb数值

kb2mb(15960000) // 15.96M

formatPrice

格式化为金额(传入单位为分的数值) formatPrice(num: number, formatStr?: string, padZero=true): string

num:金额(分) formatStr:格式化的字符(如:¥、$)

formatPrice(2300, '$') // $23

unFormat

去掉数值(一般为单位是分的金额)后面的0:unFormat(num: number)

num:操作数

unFormat(2.10) // 2.1
unFormat(2.00) // 2

formatNum

数字格式化 formatNum(v: number, formatStr: string)

v: 操作数 formatStr:?

formatNum(123.123) // '123'

add

加( 主要用于小数 ):add(x: number, y: number): number

x: 操作数(小数) y: 操作数(小数)

add(1.1, 2.2) // 3.3

sub

减( 主要用于小数 ):sub(x: number, y: number): number

x: 操作数(小数) y: 操作数(小数)

sub(2.1, 1.1) // 1

mul

乘( 主要用于小数 ):mul(x: number, y: number): number

x: 操作数(小数) y: 操作数(小数)

mul(2.2, 1.1) // 2.42

div

除( 主要用于小数 ):div(x: number, y: number): number

x: 操作数(小数) y: 操作数(小数)

div(6.6, 3.3) // 2

toPercent

小数转为百分数:toPercent( n: number, fixed: number )

n: 数值 fixed: 保留小数位数

toPercent(0.85633, 1) // '85.6%'

formatMoney

格式化金额: 显示 整数或小数 formatMoney (price: number, symbol: string, fixed: number)

price:价格 symbol:价格符号($、¥、'') fixed:保留小数位数(0、1、2)

formatMoney(5050, '$', 1) // '+$50.5'

formatWeek

获取星期 或 周 的某一天 formatWeek ( num: number, fmtStr = 'ww', startOfZero = true)

num: 第几天 fmtStr: w 周, ww 星期 startOfZero: true 下标为 0 是 '一', false 下标为 1 是 '日'

formatWeek(2, 'w', false) // '周二'
formatWeek(2, 'w', true) // '星期三'

BaseUtils

  • isAndroid
  • isIphone
  • isIpad
  • isWx
  • isAli
  • isPhone
  • isObject
  • isFunction
  • isString
  • isBoolean
  • isPlainObject
  • isUndefined
  • isArray
  • isNull
  • isNullOrUndefined
  • isEmpty
  • deepClone
  • deepMerge

isAndroid

当前环境 是否是安卓

返回值是 Boolean

isAndroid // true: 是安卓, false: 不是安卓

isIphone

当前环境 是否是 iphone 或 ipad

返回值是 Boolean

isIphone // true: 是iphone 或 ipad, false: 不是

isIpad

当前环境 是否是 ipad

返回值是 Boolean

isIpad // true: 是 ipad, false: 不是 ipad

isWx

当前环境 是否是微信环境

返回值是 Boolean

isWx // true: 是 微信环境, false: 不是 微信环境

isAli

当前环境 是否是支付宝环境

返回值是 Boolean

isAli // true: 是 支付宝环境, false: 不是 支付宝环境

isPhone

当前环境 是否是手机端 (iPhone|iPad|iPod|iOS|Android)

返回值是 Boolean

isPhone // true: 是 手机端, false: 不是 手机端

isObject

是否是对象

返回值是 Boolean

isObject({name: 'mike'}) // true: 是 对象
isObject('nihao') // false: 不是 对象

isFunction

是否是方法

返回值是 Boolean

isFunction // true: 是 方法, false: 不是 方法

isString

是否是字符串

返回值是 Boolean

isString // true: 是 字符串, false: 不是 字符串

isNumber

是否是 Number

返回值是 Boolean

isNumber // true: 是 Number, false: 不是 Number

isBoolean

是否是 Boolean

返回值是 Boolean

isObject // true: 是 Boolean, false: 不是 Boolean

isPlainObject

是否是 字面量定义的对象

返回值是 Boolean

isPlainObject // true: 是 字面量定义的对象, false: 不是 字面量定义的对象

isUndefined

是否是 undefined

返回值是 Boolean

isUndefined // true: 是 undefined, false: 不是 undefined

isArray

是否是 数组

返回值是 Boolean

isArray // true: 是 数组, false: 不是 数组

isDate

是否是 Date

返回值是 Boolean

isDate // true: 是 Date, false: 不是 Date

isNull

是否是 null

返回值是 Boolean

isUndefined // true: 是 null, false: 不是 null

isNullOrUndefined

是否是 null 或 undefined

返回值是 Boolean

isNullOrUndefined // true: 是 null 或 undefined, false: 不是 null 或 undefined

isEmptyObj

是否为空,包括空对象,空数组,空字符串,null,undefined: isEmptyObj (obj: any)

obj: 任意对象

const nu = null, undef = undefined
isEmptyObj({}) // true
isEmptyObj([]) // true
isEmptyObj('') // true
isEmptyObj(nu) // true
isEmptyObj(undef) // true
isEmptyObj('hello') // false

deepClone

深拷贝 deepClone(obj: any): any

obj: 任意对象

const a = { foo: 0 }, b = { foo: 0, bar: 1 }, arr = [a, b], noop = () => {};
deepClone(a) // { foo: 0 };
deepClone(b) // { foo: 0, bar: 1 };
deepClone(noop) // () => {};
deepClone(arr) // [ { foo: 0 }, { foo: 0, bar: 1 } ];
deepClone(undefined) // undefined;

deepMerge

深合并:将源对象复制到目标对象 deepMerge(object: any, ...sources: any[]): any

object: 合并的目标对象 sources:源对象

let object = {name: 'hello'}, sources = ['w','o']
deepMerge( object, sources ) // { "0": "w", "1": "o", "name": "hello" }

RulesUtils

  • phoneReg
  • priceReg
  • idCardReg
  • officeCertReg
  • passportReg
  • hmCardReg
  • chineseReg
  • intReg
  • gtZeroIntReg
  • emailReg
  • telReg
  • englishReg
  • numberOrLetterReg
  • urlReg
  • hasSpaceReg
  • nameReg
  • specialCharReg
  • imageReg
  • lenLess6Reg
  • lenMore20Reg
  • allNumReg
  • allLetterReg
  • allSpecialCharsReg
  • hasOtherCharReg
  • repeatedMore3Reg

phoneReg

校验 手机号 正则表达式

phoneReg.test('13155695875') // true
phoneReg.test('123456789') // fasle

phoneRule

校验 手机号 正则表达式对象

phoneRule.pattern.test('123456789') // fasle
phoneRule.message // '请输入正确的手机号码'

priceReg

校验 合法价格 正则表达式

最多保留两们小数

priceReg.test('2.33') // true
priceReg.test('2.3333') // fasle

priceRule

校验 合法价格 正则表达式对象

priceRule.pattern.test('2.3333') // fasle
priceRule.message // '请输入最多两位小数的金额'

idCardReg

校验 身份证号 正则表达式

idCardReg.test('360622198502025523') // true
idCardReg.test('123456789') // fasle

idCardRule

校验 身份证号 正则表达式对象

idCardRule.pattern.test('123456789') // fasle
idCardRule.message // '身份证格式不正确'

officeCertReg

校验 军官证 正则表达式

officeCertReg.test('政字第00111206号') // true
officeCertReg.test('123456789') // fasle

officeCertRule

校验 军官证 正则表达式对象

officeCertRule.pattern.test('123456789') // fasle
officeCertRule.message // '军官证格式不正确'

passportReg

校验 护照 正则表达式

passportReg.test('H280013(6)') // true
passportReg.test('123456789') // fasle

passportReg

校验 护照 正则表达式对象

passportReg.pattern.test('123456789') // fasle
passportReg.message // '护照格式不正确'

hmCardReg

校验 港澳通行证 正则表达式

hmCardReg.test('G07643214') // true
hmCardReg.test('123456789') // fasle

hmCardRule

校验 港澳通行证 正则表达式对象

hmCardRule.pattern.test('123456789') // fasle
hmCardRule.message // '港澳通行证格式不正确'

chineseReg

校验 中文字符 正则表达式

chineseReg.test('你好') // true
chineseReg.test('123456789') // fasle

chineseRule

校验 中文字符 正则表达式对象

chineseRule.pattern.test('123456789') // fasle
chineseRule.message // '请输入中文字符'

within0IntReg

校验 大于等于0的正整数 正则表达式

within0IntReg.test('0') // true
within0IntReg.test('-2') // fasle

within0IntRule

校验 大于等于0的正整数 正则表达式对象

within0IntRule.pattern.test('-2') // fasle
within0IntRule.message // '请输入大于等于0的正整数'

more0IntReg

校验 大于0的正整数 正则表达式

more0IntReg.test('12') // true
more0IntReg.test('0') // fasle

more0IntRule

校验 大于0的正整数 正则表达式对象

more0IntRule.pattern.test('0') // fasle
more0IntRule.message // '请输入大于0的整数'

emailReg

校验 邮箱 正则表达式

emailReg.test('156@qq.com') // true
emailReg.test('123456789') // fasle

emailRule

校验 邮箱 正则表达式对象

emailRule.pattern.test('13155695875') // false
emailRule.message // '邮箱格式不正确'

telReg

校验 座机号 正则表达式

telReg.test('015-1454514') // true
telReg.test('123456789') // fasle

telRule

校验 座机号 正则表达式对象

telRule.pattern.test('13155695875') // fasle
telRule.message // '座机号格式不正确'

englishReg

校验 字母 正则表达式

englishReg.test('abcdefg') // true
englishReg.test('123456789') // fasle

englishRule

校验 字母 正则表达式对象

englishRule.pattern.test('13155695875') // fasle
englishRule.message // '请输入英文字符'

numberOrLetterReg

校验 数字或字母 正则表达式

numberOrLetterReg.test('123abc') // true
numberOrLetterReg.test('你哈') // fasle

numberOrLetterRule

校验 数字或字母 正则表达式对象

numberOrLetterRule.pattern.test('你哈') // fasle
numberOrLetterRule.message // '请输入数字或字母'

urlReg

校验 url地址 正则表达式对象

urlReg.test('https://hello.com') // fasle
urlReg.test('你哈') // fasle

urlRule

校验 url地址 正则表达式

urlRule.pattern.test('你哈') // true
urlRule.message // '请输入以 http: 或 https: 开头的链接地址'

hasSpaceReg

校验 字符串中是否有空格 正则表达式

hasSpaceReg.test('1 2') // true
hasSpaceReg.test('你哈') // fasle

hasSpaceRule

校验 字符串中是否有空格 正则表达式对象

hasSpaceRule.pattern.test('你哈') // fasle
hasSpaceRule.message // '不能含有空格'

nameReg

校验 姓名 正则表达式

nameReg.test('李好好') // true
nameReg.test('123') // fasle

nameRule

校验 姓名 正则表达式对象

nameRule.pattern.test('123') // fasle
nameRule.message // '请输入正确姓名'

specialCharReg

校验 数字或字母 正则表达式

specialCharReg.test('!@#$%^&') // true
specialCharReg.test('你哈') // fasle

specialCharRule

校验 数字或字母 正则表达式对象

specialCharRule.pattern.test('!@#$%^&') // true
specialCharRule.message // '不能包含特殊字符'

imageReg

校验 数字或字母 正则表达式

imageReg.test('test.jpg') // true
imageReg.test('你哈') // fasle

imageRule

校验 数字或字母 正则表达式对象

imageRule.pattern.test('你哈') // fasle
imageRule.message // '不是图片文件'

lenLess6Reg

校验 长度小于6 正则表达式(关于弱密码)

lenLess6Reg.test('123') // true
lenLess6Reg.test('123456') // fasle

lenLess6Rule

校验 长度小于6 正则表达式对象(关于弱密码)

lenLess6Rule.pattern.test('123') // true
lenLess6Rule.message // '密码长度为6-20个字符'

lenMore20Reg

校验 长度大于20 正则表达式(关于弱密码)

lenMore20Reg.test('1234567890abcdefghijklmn') // true
lenMore20Reg.test('123456') // fasle

lenMore20Rule

校验 长度大于20 正则表达式对象(关于弱密码)

lenMore20Rule.pattern.test('1234567890abcdefghijklmn') // true
lenMore20Rule.message // '密码长度为6-20个字符'

allNumReg

校验 只有数字 正则表达式(关于弱密码)

allNumReg.test('123456') // true
allNumReg.test('123456aa') // fasle

allNumRule

校验 只有数字 正则表达式对象(关于弱密码)

allNumRule.pattern.test('123456') // true
allNumRule.message // '密码由数字、特殊字符(! # $ % ^ & * @)、字母中的至少两种组成'

allLetterReg

校验 只有字母 正则表达式(关于弱密码)

allLetterReg.test('abcdefg') // true
allLetterReg.test('123456aaa') // fasle

allLetterRule

校验 只有字母 正则表达式对象(关于弱密码)

allLetterRule.pattern.test('abcdefg') // true
allLetterRule.message // '密码由数字、特殊字符(! # $ % ^ & * @)、字母中的至少两种组成'

allSpecialCharsReg

校验 只有特殊字符 正则表达式(关于弱密码)

allSpecialCharsReg.test('#$%^*@') // true
allSpecialCharsReg.test('123456%%$') // fasle

allSpecialCharRule

校验 只有特殊字符 正则表达式对象(关于弱密码)

allSpecialCharRule.pattern.test('#$%^*@') // true
allSpecialCharRule.message // '密码由数字、特殊字符(! # $ % ^ & * @)、字母中的至少两种组成'

hasOtherCharReg

校验 包含规定特殊字符以外的字符 正则表达式(关于弱密码)

hasOtherCharReg.test('123++@@') // true
hasOtherCharReg.test('123456@@') // fasle

hasOtherCharRule

校验 包含规定特殊字符以外的字符 正则表达式对象(关于弱密码)

hasOtherCharRule.pattern.test('123++@@') // true
hasOtherCharRule.message // '密码由数字、特殊字符(! # $ % ^ & * @)、字母中的至少两种组成'

repeatedMore3Reg

校验 有连续3位重复的字符 正则表达式(关于弱密码)

repeatedMore3Reg.test('12311111') // true
repeatedMore3Reg.test('123456') // fasle

repeatedMore3Rule

校验 有连续3位重复的字符 正则表达式对象(关于弱密码)

repeatedMore3Rule.pattern.test('12311111') // true
repeatedMore3Rule.message // '密码不能有3位连续或重复的字符'

StringUtils

  • numberMask
  • getFileSuffix
  • delWhitespace
  • nameMask
  • randomId
  • idCardAndPhoneMask
  • getInfoByIdCard

numberMask

给指定位置添加 遮蔽 字符串: numberMask(str: string, startIndex = 0, endIndex = 0, _mask = ""): string

str:字符串 startIndex: 起始索引 endIndex: 结束索引 _mask: 遮蔽字符

utilscore.mask('12398765432',3,7) // => "123****5432"

getFileSuffix

获取文件后缀: getFileSuffix(fileName: string): string

fileName: 文件名

getFileSuffix('1.jpg') // .jpg

delWhitespace

去除字符串中的空格: delWhitespace(input: string): string

input: 字符串

deleteWhitespace('我是 测试 的 字符串  '); // '我是测试的字符串'
deleteWhitespace(''); //''

randomId

创建指定长度的ID,可添加前缀: randomId(length = 6, prefix = ""): string

length: id的长度,不包含前缀长度 | 默认是 6 prefix 前缀 | 默认为空

randomId() // 05bbfd

idCardAndPhoneMask

证件号脱敏(身份证/军官证/护照/港澳身份证/手机号)idCardAndPhoneMask(val: string): string

val: 证件号 | string ISOString: 是否使用 ISO 标准返回 Date 对象的字符串格式 | Boolean

idCardAndPhoneMask('110101199003074813') // 110********4813
idCardAndPhoneMask('南字第3044444号') // 南字第****444号
idCardAndPhoneMask('G07643214') //  G0***3214
idCardAndPhoneMask('H280013(6)') // H2****3(6)
idCardAndPhoneMask('13028829998') // 130****9998

nameMask

名字脱敏,脱敏倒数第二个字或字母: nameMask(name: string): string

name: 名称

nameMask('张三') // 张*
nameMask('张小三') // 张*三
nameMask('张标准三') // 张*三

getInfoByIdCard

根据身份证获取身份信息(年龄、性别、生日): getInfoByIdCard( idCard: String ): {age: number, gender: number, birthday: string}

idCard: 身份证号码

return: {age: number, gender: number, birthday: string}

getInfoByIdCard('360622199606296621') --> { "age": 24, "birthYear": "1996", "gender": 1 }

URLUtils

  • url
  • getUrlParam
  • resolve
  • urlToList
  • removeParam
  • addParam
  • updateParam
  • obj2pms
  • buildUrl
  • push
  • replace
  • go
  • doWxAuth

getUrlParam

获取url中查询参数的值 getUrlParam(key?: string, path?: string): string | Record<string, string>

key:获取对应key的值 | 默认获取所有 key 值 path:url地址 | 默认当前地址

getUrlParam('name', 'http://hh.com?name=aaa') // 'aaa'

resolve

url 拼接 resolve(href: string, path: string): string

href: url地址 path: 路径

 resolve('http://foo.com/a/', 'b/c') => http://foo.com/a/b/c

urlToList

url 转为 数组 urlToList(url: string): string[]

url: url地址

urlToList('http://foo.com/a/') => ["/http:", "/http:/foo.com", "/http:/foo.com/a"]

removeParam

删除 查询参数 (hash路径不适用) removeParam(keys: string[], path?: string): string

keys: 要删除的 key 的集合 path: 地址 | 默认为当前地址

removeParam(['name'],'http://foo.com/a?name=mike') // 'http://foo.com/a'

addParam

添加 查询参数(hash路径不适用): addParam(params: Record<string, any>, path?: string): string

params 要添加的键值对 path: 地址 | 默认为当前地址

addParam({name: 'mike'}, 'http://foo.com/a') // 'http://foo.com/a?name=mike'

updateParam

更新 查询参数(hash路径不适用)

params 要添加的键值对 path: 地址 | 默认为当前地址

updateParam({name: 'mike'}, 'http://foo.com/a?name=july') // 'http://foo.com/a?name=mike'

obj2pms

对象转URL参数 obj2pms(obj: any)

obj: JSON对象

obj2pms({a:1, b:2}) => 'a=1&b=2'

buildUrl

构建跳转链接 buildUrl(path: string, params: any): string

path: 路径 params: JSON对象

buildUrl('/login', {from: 'home'}) => '/login?from=home'

push

改变 location.href: push(options: RouterOption | string)

options: {path: '', query: {}} | url: string

push('/login') 或 push('/login',{name: 'a'}) // window.location.href = '/login?name=a'

replace

改变 location.replace: replace(options: RouterOption | string)

options: {path: '', query: {}} | url: string

replace('/login') 或 replace('/login',{name: 'a'})

go

浏览器地址回退 : go(num: number)

num:number

go(-1) // 浏览器地址回退 1步

doWxAuth

微信网页授权: doWxAuth(appid: string)

appId:微信appId

 if(!sessionStorage.getItem('code')) doWxAuth('xxxx')
0.1.42

7 months ago

0.1.43

7 months ago

0.1.44

7 months ago

0.1.41

1 year ago

0.1.36

3 years ago

0.1.37

2 years ago

0.1.40

2 years ago

0.1.38

2 years ago

0.1.39

2 years ago

0.1.34

3 years ago

0.1.35

3 years ago

0.1.31

3 years ago

0.1.32

3 years ago

0.1.33

3 years ago

0.1.30

3 years ago

0.1.29

3 years ago

0.1.28

3 years ago

0.1.27

3 years ago

0.1.26

3 years ago

0.1.25

3 years ago

0.1.23

3 years ago

0.1.24

3 years ago

0.1.21

3 years ago

0.1.22

3 years ago

0.1.20

3 years ago

0.1.19

3 years ago

0.1.18

3 years ago

0.1.17

3 years ago

0.1.16

4 years ago

0.1.15

4 years ago

0.1.14

4 years ago

0.1.13

4 years ago

0.1.12

4 years ago

0.1.11

4 years ago

0.1.10

4 years ago

0.1.9

4 years ago

0.1.8

4 years ago

0.1.7

4 years ago

0.1.6

4 years ago

0.1.4

4 years ago

0.1.5

4 years ago

0.1.3

4 years ago

0.1.0

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.0.2

4 years ago