├── .gitignore ├── .npmignore ├── README.md ├── build └── webpack.config.js ├── lib ├── clipboard.js ├── cooick.js ├── date.js ├── decopy.js ├── index.d.ts ├── index.js ├── localStorage.js ├── packages │ ├── clipboard.d.ts │ ├── cooick.d.ts │ ├── date.d.ts │ ├── decopy.d.ts │ ├── localStorage.d.ts │ ├── regExp.d.ts │ ├── typeOf.d.ts │ └── utils.d.ts ├── regExp.js ├── typeOf.js ├── utils.js └── utils │ ├── Error.d.ts │ ├── converter.d.ts │ └── dataUtils.d.ts ├── package-lock.json ├── package.json ├── src ├── index.ts ├── packages │ ├── clipboard.ts │ ├── cookie.ts │ ├── date.ts │ ├── decopy.ts │ ├── localStorage.ts │ ├── regExp.ts │ ├── typeOf.ts │ └── utils.ts ├── template │ └── index.html └── utils │ ├── Error.ts │ ├── converter.ts │ └── dataUtils.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | lib 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | .vscode 11 | *.suo 12 | *.ntvs* 13 | *.njsproj 14 | *.sln 15 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | .gitignore 3 | .idea 4 | .package-lock.json 5 | .tsconfig.json 6 | /src/ 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # js-hodgepodge 一个全面的JS工具库 2 | 3 | # 安装 4 | 5 | **使用npm命令安装** 6 | 7 | `npm i js-hodgepodge -S` 8 | 9 | **全局引入** 10 | `import * as hodgepodge from 'js-hodgepodge'` 11 | 12 | **按需引入** 13 | 14 | `import {...方法名} from 'js-hodgepodge'` 15 | 16 | # 常用的工具函数模块 17 | 18 | 这是一个开发常用的工具函数库 19 | 20 | ### API介绍 21 | 22 | ### strJson() 23 | 24 | 指定字符串对象、数组转为标准Json 25 | 26 | | param | required | type | describe | 27 | | ----- | -------- | ------ | :----------: | 28 | | str | true | String | 需要转换字符 | 29 | 30 | **示例:** 31 | 32 | ``` 33 | const str = "{ name: '张三' }" 34 | 35 | strJson(str) // { name: '张三' } typeof === 'object' 36 | ``` 37 | 38 | ### createEventHandler() 39 | 40 | 基于Window环境下的事件分发 41 | 42 | | param | required | type | describe | 43 | | ----- | -------- | ------ | -------- | 44 | | name | true | String | 事件名称 | 45 | 46 | **示例:** 47 | 48 | ``` 49 | addEventListener( 50 | window, 51 | event => { 52 | console.log( 53 | event.detail // 13 54 | ) 55 | } 56 | ) 57 | 58 | setTimeout(() => { 59 | 60 | dispatch( // 派发事件触发事件监听 61 | window, 62 | 13 63 | ) 64 | }) 65 | 66 | ``` 67 | 68 | ### defer() 69 | 70 | 统一Promise状态 71 | 72 | **示例:** 73 | 74 | ``` 75 | const dfd = defer() 76 | 77 | dfd.promise.then(res => { // 状态一直是等待 78 | console.log(res); 79 | 80 | }) 81 | setTimeout(() => { 82 | console.log(dfd); 83 | 84 | dfd.resolve('1111') 85 | }) 86 | 87 | 88 | 89 | ``` 90 | 91 | ### recomArrs() 92 | 93 | 一维数组转二维多位数组 94 | 95 | | param | required | type | describe | 96 | | ----- | -------- | ------ | --------------------- | 97 | | data | true | Array | 执行后的回调 | 98 | | dim | false | number | 子数组长度,不传默认2 | 99 | 100 | **示例:** 101 | 102 | ``` 103 | recomArrs([1, 2, 3]) // 打印 [[1, 2], [3]] 104 | 105 | recomArrs([1, 2, 3, 4, 5, 6, 7, 8, 9], 3) // 打印 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 106 | ``` 107 | 108 | ### throttle() 109 | 110 | 一个节流函数 111 | 112 | | param | required | type | describe | 113 | | ----- | -------- | -------- | ----------------------- | 114 | | func | true | function | 执行后的回调 | 115 | | awai | false | number | 间距时间ms,不传默认200 | 116 | 117 | **示例:** 118 | 119 | ``` 120 | /* 向下滚动时,每隔350ms打印出 count count + 1 参数a 2 参数b 3 */ 121 | let count = 0 122 | window.addEventListener('scroll', throttle((a = 2, b = 3) => { 123 | console.log('count' + count, ' 参数a '+ 2 , ' 参数b '+ 3) 124 | count += 1 125 | }, 350)) 126 | ``` 127 | 128 | ### debounce() 129 | 130 | 一个防抖函数 131 | 132 | | param | required | type | describe | 133 | | ----- | -------- | -------- | ----------------------- | 134 | | func | true | function | 执行后的回调 | 135 | | awai | false | number | 间距时间ms,不传默认200 | 136 | 137 | **示例:** 138 | 139 | ``` 140 | /* 无间断点击时,会在350MS执行后执行最后一次点击 */ 141 | document.querySelector('.btn').addEventListener('click', debounce(() => { 142 | console.log('调用API') 143 | }, 350)) 144 | 145 | ``` 146 | 147 | ### clipboard() 148 | 149 | 点击复制内容 150 | 151 | | param | required | type | describe | 152 | | ------ | -------- | -------------- | ----------------------------------- | 153 | | text | false | string、number | 文本内容 | 154 | | target | false | Element | 复制目标元素(复制他里的innerText) | 155 | 156 | **示例:** 157 | 158 | ``` 159 | // 方式一 160 | clipboard({ text: '啦啦啦 }) 161 | 162 | // 方式二(复制dom的文本内容) 163 | function elementP() { 164 | const el = document.createElement('p') 165 | el.innerText = '啦啦啦' 166 | return p 167 | } 168 | 169 | document.querySelector('body').appendChild(elementP()) 170 | 171 | clipboard({ 172 | target: 'elementP()' 173 | }) 174 | 175 | ``` 176 | 177 | ### decopy() 178 | 179 | 从根源上的深拷贝 180 | 181 | | param | required | type | describe | 182 | | ----- | -------- | ---- | ---------- | 183 | | data | true | any | 拷贝的内容 | 184 | 185 | **示例:** 186 | 187 | ``` 188 | decopy({}) 189 | ``` 190 | 191 | ### typeOf() 192 | 193 | 获取类型 194 | 195 | | param | required | type | describe | 196 | | ------ | -------- | ---- | ---------- | 197 | | target | true | any | 查询的目标 | 198 | 199 | **示例:** 200 | 201 | ``` 202 | typeOf({}) // object 203 | ``` 204 | 205 | ### getQueryByKey() 206 | 207 | 获取当前路由参数上的地址 208 | 209 | | param | required | type | describe | 210 | | ----- | -------- | ------ | -------------- | 211 | | name | true | string | 地址上的参数值 | 212 | 213 | **示例:** 214 | 215 | ``` 216 | /* 假设当前网址为 'http://127.0.0.1:8080/public/myBlog/bolgInfo?code=1321321321' */ 217 | 218 | create() { 219 | const code = getQueryByKey('code') // 1321321321 220 | } 221 | ``` 222 | 223 | ### isObjectLike() 224 | 225 | 断数据是不是Object类型的数据 226 | 227 | | param | required | type | describe | 228 | | ----- | -------- | ---- | -------- | 229 | | val | true | any | 目标参数 | 230 | 231 | **示例:** 232 | 233 | ``` 234 | let obj = {} 235 | console.log(isObjectLike(obj)) // true 236 | let obj = '' 237 | console.log(isObjectLike(obj)) // false 238 | ``` 239 | 240 | ### cached() 241 | 242 | 记忆函数:缓存函数的运算结果 243 | 244 | | param | required | type | describe | 245 | | ----- | -------- | -------- | -------- | 246 | | fn | true | function | 回调函数 | 247 | 248 | **示例:** 249 | 250 | ``` 251 | let count = 5 252 | document.querySelector('.btn').addEventListener('click', function () { 253 | cached(res => { 254 | count += 5 255 | console.log('res' + res) // 旧值 5 256 | console.log('count' + count) // 新值 10 257 | })(count) 258 | }) 259 | ``` 260 | 261 | ### capitalize() 262 | 263 | 把字符串首位转为大写 264 | 265 | | param | required | type | describe | 266 | | ----- | -------- | ------ | -------- | 267 | | val | true | string | 目标参数 | 268 | 269 | **示例:** 270 | 271 | ``` 272 | console.log(capitalize('abcd')) // Abcd 273 | ``` 274 | 275 | # 缓存模块 276 | 277 | 分为cooick操作以及localStorage操作 278 | 279 | ### API介绍 280 | 281 | ### setLocalStorage() 282 | 283 | 存入storage缓存,让storage有时间概念 284 | 285 | | param | required | type | describe | 286 | | -------- | -------- | ------ | ---------------- | 287 | | key | true | number | 键值 | 288 | | value | true | any | 值 | 289 | | distance | true | number | 时间间距,存多久 | 290 | 291 | ``` 292 | setLocalStorage('down', 60, 24*60*60*1000) 293 | ``` 294 | 295 | ### getLocalStorage() 296 | 297 | 取出缓存 298 | 299 | | param | required | type | describe | 300 | | ----- | -------- | ------ | -------- | 301 | | key | true | number | 键值 | 302 | 303 | ``` 304 | getLocalStorage('down') 305 | ``` 306 | 307 | ### removeLocalStorage() 308 | 309 | 删除storage缓存 310 | 311 | | param | required | type | describe | 312 | | ----- | -------- | ------ | -------- | 313 | | key | true | number | 键值 | 314 | 315 | ``` 316 | removeLocalStorage('down') 317 | ``` 318 | 319 | ### setCookie() 320 | 321 | 设置cooick 322 | 323 | | param | required | type | describe | 324 | | ---------- | -------- | ------ | ------------------------ | 325 | | key | true | number | 键值 | 326 | | val | true | any | 值 | 327 | | attributes | false | any | 其他属性,如:加域名范围 | 328 | 329 | ``` 330 | setCookie('down') 331 | ``` 332 | 333 | ### getCookie() 334 | 335 | 获取cooick 336 | 337 | | param | required | type | describe | 338 | | ----- | -------- | ------ | -------- | 339 | | key | true | number | 键值 | 340 | 341 | ``` 342 | getCookie('down') 343 | ``` 344 | 345 | ### removeCookie() 346 | 347 | 删除cooick 348 | 349 | | param | required | type | describe | 350 | | ---------- | -------- | ------ | ------------------------ | 351 | | key | true | number | 键值 | 352 | | attributes | false | any | 其他属性,如:加域名范围 | 353 | 354 | ``` 355 | removeCookie('down') 356 | ``` 357 | 358 | # Date模块 359 | 360 | 这是一个包含大部分开发需要用到的时间模块,包括时间格式,引入如下: 361 | 362 | ### API介绍 363 | 364 | ### getHoroscope() 365 | 366 | 计算星座,传入时间戳返回对应的星座 367 | 368 | | param | required | type | describe | 369 | | ----- | -------- | ------ | -------- | 370 | | date | true | Number | 时间戳 | 371 | 372 | **示例:** 373 | 374 | ``` 375 | let textData: number = new Date().getTime() 376 | console.log(getHoroscope(textData)) // 双子座 377 | ``` 378 | 379 | ### timeDifference() 380 | 381 | 计算时间差,传入时间配置对象 382 | 383 | | param | required | type | describe | 384 | | ----------- | -------- | --------------- | -------------------------------------------------------------------------------------------------------- | 385 | | isTimestamp | true | boolean | 是否传时间戳(true/false) | 386 | | startTime | true | number / string | 时间戳或者是时间格式 | 387 | | type | false | string | 返回类型(day、hours、minutes、seconds、HoursMinutes、HoursMinutesSeconds、timeHours、timeHoursMinutes) | 388 | | endTime | false | number / string | 不传的话默认当前时间 | 389 | 390 | **示例:** 391 | 392 | ``` 393 | console.log('时间差' + timeDifference({ 394 | isTimestamp: false, 395 | type: 'day', 396 | startTime: '2020/6/25 13:26:40', 397 | endTime: '2020/5/25 13:26:40' 398 | })) // 时间差31天 399 | ``` 400 | 401 | ### getChatTime() 402 | 403 | 计算相差X秒内的信息会不会显示时间,用于显示聊天消息时间居多,传入时间配置对象 404 | 405 | | param | required | type | describe | 406 | | ------ | -------- | ------ | ---------------------- | 407 | | oTime | true | number | 起始时间,传时间戳 | 408 | | nTime | true | number | 结束时间,时间戳 | 409 | | differ | true | number | 开始,结束时间相差间隔 | 410 | 411 | **示例:** 412 | 413 | ``` 414 | console.log(getChatTime({ 415 | oTime: 1587360400, 416 | nTime: 1589963293, 417 | differ: 300 418 | })) // 2020-05-20 下午 4:28 419 | ``` 420 | 421 | ### getTime() 422 | 423 | 传入一个时间,与当前时间进行比较,比如当天下午6点40分,则显示下午6:40,用于显示显示发布时间、聊天时间居多,传入时间戳 424 | 425 | | param | required | type | describe | 426 | | --------- | -------- | ------- | --------------------------------- | 427 | | data | true | number | 传入时间戳 | 428 | | isDisplay | false | boolean | 是否显示完整时间,不传默认为false | 429 | 430 | **示例:** 431 | 432 | ``` 433 | console.log(getTime(1587360400)) // 2020-04-20 下午 1:26 434 | console.log(getTime(new Date().getTime())) // 下午 6:40 435 | console.log(getTime(new Date().getTime(), true)) // 2020-06-03 上午 10:41 436 | ``` 437 | 438 | ### dateFormat() 439 | 440 | 格式化时间,可自定义格式,传入一个配置对象 441 | 442 | | param | required | type | describe | 443 | | --------- | -------- | ------ | -------------------------------------------------------------- | 444 | | time | true | number | 需要转换格式的时间戳 | 445 | | formatStr | false | string | 自定义时间格式,不传则显示默认格式:{Y}-{MM}-{DD} {A} {t}:{ii} | 446 | 447 | **转换格式表** 448 | 449 | | param | describe | 450 | | ----- | ------------ | 451 | | Y | 年 | 452 | | M | 不补0的月 | 453 | | MM | 补0的月 | 454 | | Mon | 大写月 | 455 | | D | 不补0的日 | 456 | | DD | 补0的日 | 457 | | h | 不补0的小时 | 458 | | hh | 补0的小时 | 459 | | A | 显示上午下午 | 460 | | i | 补0的分钟 | 461 | | ii | 不补0的分钟 | 462 | | s | 补0的秒钟 | 463 | | ss | 不补0的秒钟 | 464 | 465 | **示例:** 466 | 可以自定义格式: 如 {t}:{ii} 467 | 468 | ``` 469 | console.log('当前时间格式化' + dateFormat({ 470 | time: new Date().getTime(), 471 | formatStr: '{t}:{ii}' 472 | })) // 当前时间格式化9:45 473 | // 不传 474 | console.log('当前时间格式化' + dateFormat({ 475 | time: new Date().getTime() 476 | })) // 当前时间格式化2020-06-03 上午 9:46 477 | ``` 478 | 479 | ### getLastDayOfMonth() 480 | 481 | 获取本月的最后一天 482 | 483 | **示例:** 484 | 可以自定义格式: 如 {t}:{ii} 485 | 486 | ``` 487 | console.log('month' + getLastDayOfMonth()) // month30 488 | ``` 489 | 490 | ### getFirstDayOfSeason() 491 | 492 | 获取这个季度的第一天 493 | 494 | **示例:** 495 | 496 | `console.log('季度第一天' + getFirstDayOfSeason()) // 季度第一天2020-04-01` 497 | 498 | ### getWeek() 499 | 500 | 获取当天是周几 501 | 502 | **示例:** 503 | 504 | `console.log('周' + getWeek()) // 周三` 505 | 506 | ### getYearDay() 507 | 508 | 获取今天是当年的第几天 509 | 510 | **示例:** 511 | 512 | `console.log('今天是今年的第' + getYearDay() + '天') // 今天是今年的第155天` 513 | 514 | ### getYearWeek() 515 | 516 | 获取今天是当年的第几周 517 | 518 | **示例:** 519 | 520 | `console.log('今天是今年的第' + getYearWeek() + '周') // 今天是今年的第23周` 521 | 522 | ### lastDay() 523 | 524 | 获取今年还剩下多少时间 525 | 526 | **示例:** 527 | 528 | `console.log('今年还剩下'+ lastDay() +'天' ) // 今年还剩下211天` 529 | 530 | ### getDate() 531 | 532 | 获取N天后的日期 533 | 534 | | param | required | type | describe | 535 | | ----- | -------- | ------------- | ---------------------------------------------- | 536 | | time | true | number / Date | 起始时间,可以为时间戳,可以为new出来的时间格式 | 537 | | count | true | number | 几天后的区间,可为负数 | 538 | 539 | **示例:** 540 | 541 | ``` 542 | console.log('获取N天后的日期' + getDate(new Date(), 7)) // 获取N天后的日期2020-06-10 10:16:51 543 | console.log('获取N天后的日期' + getDate(new Date().getTime(), 7)) // 获取N天后的日期2020-06-10 10:16:51 544 | ``` 545 | 546 | ### getWeekCycle() 547 | 548 | 计算当周开始和结束时间 549 | 550 | | param | required | type | describe | 551 | | --------- | -------- | ------ | ------------------------- | 552 | | formatStr | false | string | 不传默认格式{Y}-{MM}-{DD} | 553 | 554 | **示例:** 555 | 556 | ``` 557 | console.log(getWeekCycle('{Y}-{MM}-{DD} {A} {t}:{ii}:{ss}')) // {firstDay: "2020-05-31 上午 10:19:35", lastDay: "2020-06-06 上午 10:19:35"} 558 | // 不传 559 | console.log(getWeekCycle()) // {firstDay: "2020-05-31", lastDay: "2020-06-06"} 560 | ``` 561 | 562 | ### isExist() 563 | 564 | 判断某段时间是否存在 565 | 566 | **注:只能统一同一种类型,如number类型所有参数必须是number类型,结束时间必须比其实时间晚** 567 | 568 | | param | required | type | describe | 569 | | --------- | -------- | --------------- | ------------------------------------------------------------- | 570 | | beginTime | true | number / string | 起始时间,可以为时间戳,时间字符格式,可传可不传,不传默认当天 | 571 | | lastTime | true | number / string | 结束时间 | 572 | | time | true | number / string | 需要判断的时间点 | 573 | 574 | **示例:** 575 | 576 | ``` 577 | // string类型 578 | console.log('是否是'+ getTime(new Date().getTime(), true) +'区间' + time.isExist({ 579 | lastTime: '2020-07-01 15:36:47', 580 | time: '2020-06-01 15:36:47' 581 | })) // 是否是2020-06-03 上午 10:38区间false 582 | 583 | // number类型 584 | console.log('是否是'+ new Date().getDay +'区间' + isExist({ 585 | lastTime: 1587360400, 586 | time: 1589963293 587 | })) // 是否是2020-06-03 上午 10:56区间true 588 | ``` 589 | 590 | ### getExplorerInfo() 591 | 592 | 获取浏览器信息 593 | 594 | **示例:** 595 | 596 | ``` 597 | console.log(getExplorerInfo()) // {type: "Chrome", version: 78} 598 | ``` 599 | 600 | ### getRawType() 601 | 602 | 获取数据类型 603 | 604 | | param | required | type | describe | 605 | | ----- | -------- | ------ | -------- | 606 | | val | true | string | 目标参数 | 607 | 608 | **示例:** 609 | 610 | ``` 611 | console.log(getRawType(123)) // Number 612 | ``` 613 | 614 | ### isStatic() 615 | 616 | 获取数据类型 617 | 618 | | param | required | type | describe | 619 | | ----- | -------- | ------ | -------- | 620 | | val | true | string | 目标参数 | 621 | 622 | **示例:** 623 | 624 | ``` 625 | console.log(isStatic(123)) // true 626 | ``` 627 | 628 | ### unique() 629 | 630 | 获取数据类型 631 | 632 | | param | required | type | describe | 633 | | ----- | -------- | ----- | -------- | 634 | | arr | true | Array | 目标参数 | 635 | 636 | **示例:** 637 | 638 | ``` 639 | const a = [1, 1, 2] 640 | console.log(unique(a)) // [1, 2] 641 | ``` 642 | 643 | # 正则校验模块 644 | 645 | 这是一个包含大部分常用的正则表达式库 646 | 647 | ### API介绍 648 | 649 | ### interCheck() 650 | 651 | 检测电话号码是否正确 652 | 653 | **示例** 654 | 655 | ``` 656 | console.log(checkPhone(13428052268)) // true 657 | console.log(checkPhone(11111111111)) // false 658 | ``` 659 | 660 | ### checkEmail() 661 | 662 | **示例** 663 | 664 | ``` 665 | console.log(checkEmail('272781702@qq.com')) // true 666 | console.log(checkEmail(1111)) // false 667 | ``` 668 | 669 | ### checkUrl() 670 | 671 | 检测url是否合法 672 | 673 | **示例** 674 | 675 | ``` 676 | console.log(checkUrl('http://www.baodu.com')) // true 677 | console.log(checkUrl('http:www.baodu.com')) // false 678 | ``` 679 | 680 | ### checkDomesticTelephone() 681 | 682 | 国内座机号码 683 | 684 | **示例** 685 | 686 | ``` 687 | console.log(checkDomesticTelephone('0752-89915876')) // true 688 | console.log(checkDomesticTelephone('111111')) // false 689 | ``` 690 | 691 | ### checkNotSpecial() 692 | 693 | 必须包含大小写字母和数字的组合,不能使用特殊字符,长度在start-end之间 694 | 695 | | param | required | type | describe | 696 | | ----- | -------- | ------ | -------------- | 697 | | start | true | number | 起始长度 | 698 | | end | true | number | 结束长度 | 699 | | val | true | any | 需要判断的参数 | 700 | 701 | **示例** 702 | 703 | ``` 704 | console.log(checkNotSpecial({ 705 | start: 8, 706 | end: 10, 707 | val: 'Ab12345678' 708 | })) // true 709 | console.log(checkNotSpecial({ 710 | start: 8, 711 | end: 10, 712 | val: 'A12345' 713 | })) // false 714 | ``` 715 | 716 | ### checkPasswordSpecification() 717 | 718 | 以字母开头,长度在start~end之间,只能包含字母、数字和下划线 719 | 720 | | param | required | type | describe | 721 | | ----- | -------- | ------ | -------------- | 722 | | start | true | number | 起始长度 | 723 | | end | true | number | 结束长度 | 724 | | val | true | any | 需要判断的参数 | 725 | 726 | **示例** 727 | 728 | ``` 729 | console.log(checkPasswordSpecification({ 730 | start: 8, 731 | end: 10, 732 | val: 'Ab12345678' 733 | })) // true 734 | console.log(checkPasswordSpecification({ 735 | start: 8, 736 | end: 10, 737 | val: '12345A' 738 | })) // false 739 | ``` 740 | 741 | ### checkNumberUnderscoreletter() 742 | 743 | 由数字、26个英文字母或者下划线组成的字符串 744 | 745 | **示例** 746 | 747 | ``` 748 | console.log(checkNumberUnderscoreletter('123A')) // true 749 | console.log(checkNumberUnderscoreletter('12~~')) // false 750 | ``` 751 | 752 | ### checkChineseNumberEnglishUnderline() 753 | 754 | 中文、英文、数字包括下划线 755 | 756 | **示例** 757 | 758 | ``` 759 | console.log(checkChineseNumberEnglishUnderline('我是_SHAN')) // true 760 | console.log(checkChineseNumberEnglishUnderline('我是~~~')) // false 761 | ``` 762 | 763 | ### checkSpecialCharacters() 764 | 765 | 中文、英文、数字但不包括下划线等符号 766 | 767 | **示例** 768 | 769 | ``` 770 | console.log(checkSpecialCharacters('我是Shan')) // true 771 | console.log(checkSpecialCharacters('我是_SHAN')) // false 772 | ``` 773 | 774 | ### checkHtml() 775 | 776 | 判断是否是html标签 777 | 778 | **示例** 779 | 780 | ``` 781 | console.log(checkHtml('')) // true 782 | console.log(checkHtml('body />')) // false 783 | ``` 784 | 785 | ### checkDChineseCharacterDetection() 786 | 787 | 判断是否是汉字 788 | 789 | **示例** 790 | 791 | ``` 792 | console.log(checkDChineseCharacterDetection('我是')) // true 793 | console.log(checkDChineseCharacterDetection('Shan')) // false 794 | ``` 795 | 796 | ### checkQQ() 797 | 798 | 判断是否是腾讯QQ号 799 | 800 | **示例** 801 | 802 | ``` 803 | console.log(checkQQ(100000)) // true 804 | console.log(checkQQ(10000000000000000000000)) // false 805 | ``` 806 | 807 | ### checkPostOffice() 808 | 809 | 判断是否是中国邮政编码 810 | 811 | **示例** 812 | 813 | ``` 814 | console.log(checkPostOffice(516300)) // true 815 | console.log(checkPostOffice(10000000000000000000000)) // false 816 | ``` 817 | 818 | ### checkDateFormat() 819 | 820 | 判断是否是日期格式 821 | 822 | **示例** 823 | 824 | ``` 825 | console.log(checkDateFormat('2020-6-03')) // true 826 | console.log(checkDateFormat('http:www.baodu.com')) // false 827 | ``` 828 | 829 | ### checkLowerCase() 830 | 831 | 判断是否是小写字母 832 | 833 | **示例** 834 | 835 | ``` 836 | console.log(checkLowerCase('abc')) // true 837 | console.log(checkLowerCase('ABC')) // false 838 | ``` 839 | 840 | ### checkUpperCase() 841 | 842 | 判断是否是小写字母 843 | 844 | **示例** 845 | 846 | ``` 847 | console.log(checkUpperCase('ABC')) // true 848 | console.log(checkUpperCase('abc')) //false 849 | ``` 850 | 851 | ### checkAlphabets() 852 | 853 | 判断是否是字母 854 | 855 | **示例** 856 | 857 | ``` 858 | console.log(checkAlphabets('ABCa')) // true 859 | console.log(checkAlphabets('abcA121')) //false 860 | ``` 861 | 862 | ### checkCID() 863 | 864 | 判断是否是字母 865 | 866 | **示例** 867 | 868 | ``` 869 | console.log(checkCID(110101199003077475)) // true 870 | console.log(checkCID(1101111111111111111111)) // false 871 | ``` 872 | 873 | ### checkStrComposedOfNumber() 874 | 875 | 验证字符串是否是数字 876 | 877 | **示例** 878 | 879 | ``` 880 | console.log(checkStrComposedOfNumber('11111')) // true 881 | console.log(checkStrComposedOfNumber('abc')) // false 882 | ``` 883 | 884 | ### checkNumberLength() 885 | 886 | 验证字符串是否是数字 887 | 888 | | param | required | type | describe | 889 | | ------ | -------- | ------ | -------------- | 890 | | length | true | number | 目标长度 | 891 | | val | true | any | 需要判断的参数 | 892 | 893 | **示例** 894 | 895 | ``` 896 | console.log(checkNumberLength({ 897 | length: 6, 898 | val: '123456' 899 | })) // true 900 | console.log(checkNumberLength({ 901 | length: 5, 902 | val: '12354666' 903 | })) // false 904 | ``` 905 | 906 | ### checkAppointLen() 907 | 908 | 检测m-n位的数字 909 | 910 | | param | required | type | describe | 911 | | ----- | -------- | ------ | ---------------- | 912 | | start | true | number | 目标长度起始长度 | 913 | | end | true | number | 目标长度结束长度 | 914 | | val | true | any | 需要判断的参数 | 915 | 916 | **示例** 917 | 918 | ``` 919 | console.log(checkAppointLen({ 920 | start: 6, 921 | end: 8, 922 | val: '123456' 923 | })) // true 924 | console.log(checkAppointLen({start: 6, 925 | end: 8, 926 | val: '1235466634214' 927 | })) // false 928 | ``` 929 | 930 | ### checkZeroAndNonZero() 931 | 932 | 检测非零开头的数字 933 | 934 | **示例** 935 | 936 | ``` 937 | console.log(checkZeroAndNonZero('123245')) // true 938 | console.log(checkZeroAndNonZero('012345')) // false 939 | ``` 940 | 941 | ### checkTwoDecimalplaces() 942 | 943 | 非零开头的最多带两位小数的数字 944 | 945 | **示例** 946 | 947 | ``` 948 | console.log(checkTwoDecimalplaces(123245.00)) // true 949 | console.log(checkTwoDecimalplaces('012345')) // false 950 | ``` 951 | 952 | ### checkDecimalplaces() 953 | 954 | 带1-2位小数的正数或负数 955 | 956 | **示例** 957 | 958 | ``` 959 | console.log(checkDecimalplaces(123245.12)) // true 960 | console.log(checkDecimalplaces(12323.123)) // false 961 | ``` 962 | 963 | ### checkPND() 964 | 965 | 判断正数、负数、和小数 966 | 967 | **示例** 968 | 969 | ``` 970 | console.log(checkPND(123245)) // true 971 | console.log(checkPND(';asda')) // false 972 | ``` 973 | 974 | ### checkPositiveTDP() 975 | 976 | 有两位小数的正实数 977 | 978 | **示例** 979 | 980 | ``` 981 | console.log(checkPositiveTDP(123245.12)) // true 982 | console.log(checkPositiveTDP(-123.12)) // false 983 | ``` 984 | 985 | ### checkOandTPositive() 986 | 987 | 有1~3位小数的正实数 988 | 989 | **示例** 990 | 991 | ``` 992 | console.log(checkOandTPositive(123245.12)) // true 993 | console.log(checkOandTPositive(-123.12)) // false 994 | ``` 995 | 996 | ### checkNonzeroPositive() 997 | 998 | 非零的正整数 999 | 1000 | **示例** 1001 | 1002 | ``` 1003 | console.log(checkNonzeroPositive(123245)) // true 1004 | console.log(checkNonzeroPositive(-123.12)) // false 1005 | ``` 1006 | 1007 | ### checkNotPositive() 1008 | 1009 | 非正整数 1010 | 1011 | ### checkNotPositiveFloat() 1012 | 1013 | 非正浮点数 1014 | 1015 | ### checkPositiveFloat() 1016 | 1017 | 正浮点数 1018 | 1019 | ### checkNonzeroPositive() 1020 | 1021 | 非零的负整数 1022 | 1023 | **示例** 1024 | 1025 | ``` 1026 | console.log(checkNonzeroNegative(-123245)) // true 1027 | console.log(checkNonzeroNegative(123)) // false 1028 | ``` 1029 | 1030 | ### checkNotNegative() 1031 | 1032 | 非负整数 1033 | 1034 | ### checkNotNegativeFloat() 1035 | 1036 | 非负浮点数 1037 | 1038 | ### checkNegativeFloat() 1039 | 1040 | 负浮点数 1041 | 1042 | ### checkFloat() 1043 | 1044 | 负浮点数 1045 | -------------------------------------------------------------------------------- /build/webpack.config.js: -------------------------------------------------------------------------------- 1 | const cleanWebpackPlugin = require('clean-webpack-plugin') 2 | const HtmlWebpackPlugin = require('html-webpack-plugin') 3 | const { resolve } = require('path'); 4 | 5 | const path = url => resolve(__dirname, '..', url) 6 | 7 | module.exports = { 8 | entry: { 9 | index: './src/index.ts', 10 | clipboard: path('src/packages/clipboard'), 11 | cookie: path('src/packages/cookie'), 12 | date: path('src/packages/date'), 13 | decopy: path('src/packages/decopy'), 14 | localStorage: path('src/packages/localStorage'), 15 | regExp: path('src/packages/regExp'), 16 | typeOf: path('src/packages/typeOf'), 17 | utils: path('src/packages/utils') 18 | }, 19 | mode: process.env.NODE_ENV, 20 | output: { 21 | filename: "[name].js", 22 | path: path('lib'), 23 | libraryTarget: 'umd' 24 | }, 25 | resolve: { 26 | extensions: ['.js', '.ts', '.tsx'], 27 | alias: { 28 | 'js-hodgepodge': path('src/packages') 29 | } 30 | }, 31 | module: { 32 | rules: [ 33 | { 34 | test: /\.tsx?$/, 35 | use: 'ts-loader', 36 | exclude: /node_modules/ 37 | } 38 | ] 39 | }, 40 | plugins: process.env.NODE_ENV === 'development' ? [ 41 | new cleanWebpackPlugin({ 42 | cleanOnceBeforeBuildPatterns: ['./lib'] 43 | }), 44 | new HtmlWebpackPlugin({ 45 | template: './src/template/index.html' 46 | }) 47 | ] : [], 48 | 49 | devtool: process.env.NODE_ENV === 'production' ? false : 'inline-source-map', 50 | 51 | devServer: { 52 | contentBase: path('dist'), 53 | stats: 'errors-only', 54 | compress: true, 55 | host: 'localhost', 56 | port: 8081, 57 | open: true 58 | }, 59 | } 60 | -------------------------------------------------------------------------------- /lib/clipboard.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var o=t();for(var r in o)("object"==typeof exports?exports:e)[r]=o[r]}}(window,(function(){return function(e){var t={};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}return o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=7)}([function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logError=t.ErrorMsg=void 0,t.ErrorMsg=function(e){if(e)throw new Error(e)},t.logError=function(e){e&&console.error(e)}},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeOf=void 0;const r=o(0);t.typeOf=e=>{const t={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object","[object Promise]":"promise"},o=Object.prototype.toString.call(e);return t.hasOwnProperty(o)?t[o]:((0,r.logError)("unable to recognise type: "+o),null)},t.default=t.typeOf},,,,,,function(e,t,o){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.clipboard=void 0;const n=o(0),u=r(o(1));t.clipboard=({text:e,target:t})=>{if(!e&&!t)return;if(e&&!["number","string"].includes((0,u.default)(e)))return(0,n.logError)("You cannot pass in anything other than number and string! var text type is "+(0,u.default)(e));const o=document.createElement("input");o.setAttribute("style","\n position: absolute;\n top: -99999em\n "),document.body.appendChild(o),o.value=e||t.innerText,o.select(),document.execCommand("copy"),document.body.removeChild(o)},t.default=t.clipboard}])})); -------------------------------------------------------------------------------- /lib/cooick.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var o=t();for(var n in o)("object"==typeof exports?exports:e)[n]=o[n]}}(window,(function(){return function(e){var t={};function o(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,o),r.l=!0,r.exports}return o.m=e,o.c=t,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=4)}([function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logError=t.ErrorMsg=void 0,t.ErrorMsg=function(e){if(e)throw new Error(e)},t.logError=function(e){e&&console.error(e)}},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeOf=void 0;const n=o(0);t.typeOf=e=>{const t={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object","[object Promise]":"promise"},o=Object.prototype.toString.call(e);return t.hasOwnProperty(o)?t[o]:((0,n.logError)("unable to recognise type: "+o),null)},t.default=t.typeOf},,,function(e,t,o){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.removeCooick=t.getCooick=t.setCooick=void 0;const r=n(o(5)),i=n(o(1));function c(e,t,o){var n;if("undefined"===(0,i.default)(document))return;o=Object.assign({},{path:"/"},o),"number"===(0,i.default)(o.expires)&&(o.expires=new Date(Date.now()+864e5*o.expires)),o.expires=null===(n=o.expires)||void 0===n?void 0:n.toUTCString(),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);let c="";for(const e in o)o[e]&&(c+="; "+e,!0!==o[e]&&(c+="="+o[e].split(";")[0]));return document.cookie=e+"="+r.default.write(t)+c}t.setCooick=c,t.getCooick=function(e){const t=document.cookie?document.cookie.split("; "):[];let o={};for(let n=0;n('"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)),write:e=>encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}}])})); -------------------------------------------------------------------------------- /lib/date.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=9)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logError=t.ErrorMsg=void 0,t.ErrorMsg=function(e){if(e)throw new Error(e)},t.logError=function(e){e&&console.error(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeOf=void 0;const n=r(0);t.typeOf=e=>{const t={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object","[object Promise]":"promise"},r=Object.prototype.toString.call(e);return t.hasOwnProperty(r)?t[r]:((0,n.logError)("unable to recognise type: "+r),null)},t.default=t.typeOf},function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.decopy=void 0;const o=n(r(1));function a(e){let t=e;switch((0,o.default)(t)){case"array":return t.map(e=>a(e));case"object":return Object.keys(t).reduce((e,r)=>(e[r]=a(t[r]),e),{});case"date":const e=new Date;return e.setTime(t.getTime()),e;case"regExp":let r=t.valueOf(),n="";return n+=r.global?"g":"",n+=r.ignoreCase?"i":"",n+=r.multiline?"m":"",new RegExp(r.source,n);default:return t}}t.decopy=a,t.default=a},,,,,,,function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getAfterCountDays=t.remainderTime=t.getYearWeek=t.getYearDay=t.getWeek=t.getFirstDayOfSeason=t.getLastDayOfMonth=t.getTime=t.dateFormat=t.dateDifference=t.getHoroscope=void 0;const o=r(10),a=r(0),u=n(r(1)),i=n(r(2));t.getHoroscope=e=>{if(!e)return(0,a.logError)("Date cannot be empty"),null;if(!(e=(0,o.dateUniFormat)(e)))return null;const t=new Date(e),r=t.getMonth()+1;return["摩羯","水瓶","双鱼","白羊","金牛","双子","巨蟹","狮子","处女","天秤","天蝎","射手","摩羯"][r-{true:1,false:0}[t.getDate()-14<"865778999988".charAt(r)]]+"座"};function s(e,t="{Y}-{MM}-{DD} {A} {t}:{ii}"){if(!e)return(0,a.logError)("date cannot be empty!"),null;if(!(e=(0,o.dateUniFormat)(e)))return null;const r=(e=new Date(e)).getHours(),n=r>12?r-12:r,u={Y:e.getFullYear(),M:e.getMonth()+1,MM:(0,o.parseNumber)(e.getMonth()+1),Mon:["一","二","三","四","五","六","七","八","九","十","十一","十二"][e.getMonth()],D:e.getDate(),DD:(0,o.parseNumber)(e.getDate()),h:r,hh:(0,o.parseNumber)(r),t:n,tt:(0,o.parseNumber)(n),A:r>12?"下午":"上午",i:e.getMinutes(),ii:(0,o.parseNumber)(e.getMinutes()),s:e.getSeconds(),ss:(0,o.parseNumber)(e.getSeconds())};for(;/\{([^}]+)\}/.test(t);)t=t.replace(/\{([^}]+)\}/,u[RegExp.$1]);return t}function c(e="{Y}-{MM}-{DD} {A} {t}:{ii}"){return s(new Date,e)}function l(e="date",t="{Y}-{MM}-{DD} {A} {t}:{ii}"){if("date"===e&&!t)return(0,a.logError)("formatStr is no value!!"),null;const r=new Date;return r.setMonth(r.getMonth()+1),r.setDate(0),"formatDate"===e?s(new Date(r),t):"date"===e?new Date(r):"day"===e?r.getDate():null}function f(e="date",t="{Y}-{MM}-{DD} {A} {t}:{ii}"){if("date"===e&&!t)return(0,a.logError)("formatStr is no value!!"),null;const r=new Date,n=r.getMonth();return n<3?r.setMonth(0):2{let{startTime:t,type:r,endTime:n}=(0,i.default)(e);if(!t)return(0,a.logError)("startTime cannot be empty!"),null;if(!(t=(0,o.dateUniFormat)(t)))return null;"string"===(0,u.default)(t)&&(0,o.convertTimestamps)(t)&&(t=(0,o.convertTimestamps)(t)),n&&"string"===(0,u.default)(n)&&(0,o.convertTimestamps)(n)&&(n=(0,o.convertTimestamps)(n));const s=t,c=n||(new Date).getTime(),l=Math.abs(c-s),f=Math.floor(l/864e5),d=l%864e5,g=Math.floor(d/36e5),m=d%36e5,p=Math.floor(m/6e4),D=m%6e4,b=Math.round(D/1e3);switch(r){case"day":return f+"天";case"hours":return g+"小时";case"minutes":return p+"分";case"seconds":return b+"秒";case"HoursMinutes":return g+"小时 "+p+"分";case"HoursMinutesSeconds":return g+"小时 "+p+"分 "+b+"秒 ";case"timeHours":return f+"天 "+g+"小时";case"timeHoursMinutes":return f+"天 "+g+"小时 "+p+"分";default:return f+"天 "+g+"小时 "+p+"分 "+b+"秒 "}},t.dateFormat=s,t.getTime=c,t.getLastDayOfMonth=l,t.getFirstDayOfSeason=f;t.getWeek=()=>"日一二三四五六".charAt((new Date).getDay());t.getYearDay=()=>(0,o.timeSpanPositioning)(1);t.getYearWeek=()=>(0,o.timeSpanPositioning)(7),t.remainderTime=function(){const e=new Date,t=(e.getFullYear()+1).toString(),r=new Date(new Date(t)-1).getTime()-e;return Math.floor(r/864e5)},t.getAfterCountDays=function(e,t){return t?0==e?new Date:(t=(0,o.dateUniFormat)(t))?((t=new Date(t)).setDate(t.getDate()+e),new Date(+t+288e5).toJSON().substr(0,19).replace("T"," ").replace(/-/g,"-")):null:((0,a.logError)("date is no value !!"),null)},t.default={getHoroscope:t.getHoroscope,dateDifference:t.dateDifference,dateFormat:s,getTime:c,getLastDayOfMonth:l,getFirstDayOfSeason:f,getWeek:t.getWeek,getYearDay:t.getYearDay,getYearWeek:t.getYearWeek}},function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.dateUniFormat=t.convertTimestamps=t.timeSpanPositioning=t.timeFormat=t.parseNumber=void 0;const o=r(0),a=n(r(1));function u(e){return e.toString().length<13?1e3*e:e}t.parseNumber=function(e){return e<10?0+e:e},t.timeFormat=u;t.timeSpanPositioning=(e=1)=>Math.ceil((new Date-new Date((new Date).getFullYear().toString()))/864e5/e),t.convertTimestamps=function(e){return/-/g.test(e)?new Date(e.replace(/-/g,"/")).getTime():((0,o.logError)("The date format is incorrect. The recommended format is standard timestamp, or date, or XXXX-XX-XX HH: mm: SS"),null)},t.dateUniFormat=function(e){return-1===["string","date","number"].indexOf((0,a.default)(e))?((0,o.logError)(`Expected string、number、date type, but got ${(0,a.default)(e)} type`),null):("number"===(0,a.default)(e)&&(e=u(e)),e)}}])})); -------------------------------------------------------------------------------- /lib/decopy.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var o in r)("object"==typeof exports?exports:e)[o]=r[o]}}(window,(function(){return function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=2)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logError=t.ErrorMsg=void 0,t.ErrorMsg=function(e){if(e)throw new Error(e)},t.logError=function(e){e&&console.error(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeOf=void 0;const o=r(0);t.typeOf=e=>{const t={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object","[object Promise]":"promise"},r=Object.prototype.toString.call(e);return t.hasOwnProperty(r)?t[r]:((0,o.logError)("unable to recognise type: "+r),null)},t.default=t.typeOf},function(e,t,r){"use strict";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.decopy=void 0;const n=o(r(1));function u(e){let t=e;switch((0,n.default)(t)){case"array":return t.map(e=>u(e));case"object":return Object.keys(t).reduce((e,r)=>(e[r]=u(t[r]),e),{});case"date":const e=new Date;return e.setTime(t.getTime()),e;case"regExp":let r=t.valueOf(),o="";return o+=r.global?"g":"",o+=r.ignoreCase?"i":"",o+=r.multiline?"m":"",new RegExp(r.source,o);default:return t}}t.decopy=u,t.default=u}])})); -------------------------------------------------------------------------------- /lib/index.d.ts: -------------------------------------------------------------------------------- 1 | import { throttle, debounce, delay, getQueryByKey, getRawType, cached, capitalize, isStatic, unique, tasInterface, recomArrs, strJson, createEventHandler, defer } from './packages/utils'; 2 | import { getCookie, setCookie, removeCookie } from './packages/cookie'; 3 | import { setLocalStorage, getLocalStorage, removeLocalStorage } from './packages/localStorage'; 4 | import { typeOf } from './packages/typeOf'; 5 | import { clipboard } from './packages/clipboard'; 6 | import { decopy } from './packages/decopy'; 7 | import { checkAlphabets, checkAppointLen, checkCID, checkChineseNumberEnglishUnderline, checkDChineseCharacterDetection, checkDateFormat, checkDecimalplaces, checkDomesticTelephone, checkEmail, checkFloat, checkHtml, checkIP, checkLowerCase, checkNegativeFloat, checkNonzeroNegative, checkNonzeroPositive, checkNotNegative, checkNotNegativeFloat, checkNotPositive, checkNotPositiveFloat, checkNotSpecial, checkNumberLength, checkNumberUnderscoreletter, checkOandTPositive, checkPND, checkPasswordSpecification, checkPhone, checkPositiveFloat, checkPositiveTDP, checkPostOffice, checkQQ, checkSpecialCharacters, checkStrComposedOfNumber, checkTwoDecimalplaces, checkUpperCase, checkUrl, checkZeroAndNonZero, interCheck, superInterCheck, appointLenInterCheck, appointLen, optionsInter } from './packages/regExp'; 8 | import { getAfterCountDays, getFirstDayOfSeason, getHoroscope, getTime, getLastDayOfMonth, getWeek, getYearDay, getYearWeek, dateDifference, dateFormat, remainderTime, TimeOptionsFunc, dateType, TimeFormal } from './packages/date'; 9 | export { decopy, defer, strJson, throttle, debounce, delay, getQueryByKey, getRawType, cached, capitalize, isStatic, unique, recomArrs, createEventHandler, tasInterface, getCookie, setCookie, removeCookie, setLocalStorage, getLocalStorage, removeLocalStorage, typeOf, clipboard, checkAlphabets, checkAppointLen, checkCID, checkChineseNumberEnglishUnderline, checkDChineseCharacterDetection, checkDateFormat, checkDecimalplaces, checkDomesticTelephone, checkEmail, checkFloat, checkHtml, checkIP, checkLowerCase, checkNegativeFloat, checkNonzeroNegative, checkNonzeroPositive, checkNotNegative, checkNotNegativeFloat, checkNotPositive, checkNotPositiveFloat, checkNotSpecial, checkNumberLength, checkNumberUnderscoreletter, checkOandTPositive, checkPND, checkPasswordSpecification, checkPhone, checkPositiveFloat, checkPositiveTDP, checkPostOffice, checkQQ, checkSpecialCharacters, checkStrComposedOfNumber, checkTwoDecimalplaces, checkUpperCase, checkUrl, checkZeroAndNonZero, getAfterCountDays, getFirstDayOfSeason, getHoroscope, getTime, getLastDayOfMonth, getWeek, getYearDay, getYearWeek, dateDifference, dateFormat, remainderTime, TimeOptionsFunc, dateType, TimeFormal, interCheck, superInterCheck, appointLenInterCheck, appointLen, optionsInter }; 10 | declare const _default: { 11 | decopy: typeof decopy; 12 | defer: import("./packages/utils").Defer; 13 | strJson: (str: string) => T; 14 | throttle: tasInterface; 15 | debounce: tasInterface; 16 | delay: (dur?: number) => Promise; 17 | getQueryByKey: (name: T_2) => string | null | undefined; 18 | getRawType: (val: T_3) => string; 19 | cached: (fn: T_4) => Function; 20 | capitalize: (val: T_5) => string; 21 | isStatic: (val: T_6) => boolean; 22 | unique: (arr: T_7) => any[]; 23 | recomArrs: (data: any[] | T_8[], dim?: number | undefined) => T_8[]; 24 | createEventHandler: typeof createEventHandler; 25 | getCookie: typeof getCookie; 26 | setCookie: typeof setCookie; 27 | removeCookie: typeof removeCookie; 28 | setLocalStorage: typeof setLocalStorage; 29 | getLocalStorage: typeof getLocalStorage; 30 | removeLocalStorage: typeof removeLocalStorage; 31 | typeOf: (target: any) => "string" | "number" | "boolean" | "undefined" | "object" | "function" | "array" | "date" | "regExp" | "null" | "promise" | "regexp" | null; 32 | clipboard: ({ text, target }: { 33 | text?: string | number | undefined; 34 | target?: HTMLElement | undefined; 35 | }) => void; 36 | checkAlphabets: interCheck; 37 | checkAppointLen: appointLenInterCheck; 38 | checkCID: interCheck; 39 | checkChineseNumberEnglishUnderline: interCheck; 40 | checkDChineseCharacterDetection: interCheck; 41 | checkDateFormat: interCheck; 42 | checkDecimalplaces: interCheck; 43 | checkDomesticTelephone: interCheck; 44 | checkEmail: interCheck; 45 | checkFloat: interCheck; 46 | checkHtml: interCheck; 47 | checkIP: interCheck; 48 | checkLowerCase: interCheck; 49 | checkNegativeFloat: interCheck; 50 | checkNonzeroNegative: interCheck; 51 | checkNonzeroPositive: interCheck; 52 | checkNotNegative: interCheck; 53 | checkNotNegativeFloat: interCheck; 54 | checkNotPositive: interCheck; 55 | checkNotPositiveFloat: interCheck; 56 | checkNotSpecial: appointLenInterCheck; 57 | checkNumberLength: superInterCheck; 58 | checkNumberUnderscoreletter: interCheck; 59 | checkOandTPositive: interCheck; 60 | checkPND: interCheck; 61 | checkPasswordSpecification: appointLenInterCheck; 62 | checkPhone: interCheck; 63 | checkPositiveFloat: interCheck; 64 | checkPositiveTDP: interCheck; 65 | checkPostOffice: interCheck; 66 | checkQQ: interCheck; 67 | checkSpecialCharacters: interCheck; 68 | checkStrComposedOfNumber: interCheck; 69 | checkTwoDecimalplaces: interCheck; 70 | checkUpperCase: interCheck; 71 | checkUrl: interCheck; 72 | checkZeroAndNonZero: interCheck; 73 | getAfterCountDays: typeof getAfterCountDays; 74 | getFirstDayOfSeason: typeof getFirstDayOfSeason; 75 | getHoroscope: dateType; 76 | getTime: typeof getTime; 77 | getLastDayOfMonth: typeof getLastDayOfMonth; 78 | getWeek: () => string; 79 | getYearDay: () => number; 80 | getYearWeek: () => number; 81 | dateDifference: TimeOptionsFunc; 82 | dateFormat: typeof dateFormat; 83 | remainderTime: typeof remainderTime; 84 | }; 85 | export default _default; 86 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var c=t();for(var r in c)("object"==typeof exports?exports:e)[r]=c[r]}}(window,(function(){return function(e){var t={};function c(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,c),o.l=!0,o.exports}return c.m=e,c.c=t,c.d=function(e,t,r){c.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},c.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.t=function(e,t){if(1&t&&(e=c(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(c.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)c.d(r,o,function(t){return e[t]}.bind(null,o));return r},c.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(t,"a",t),t},c.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},c.p="",c(c.s=11)}([function(e,t,c){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logError=t.ErrorMsg=void 0,t.ErrorMsg=function(e){if(e)throw new Error(e)},t.logError=function(e){e&&console.error(e)}},function(e,t,c){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeOf=void 0;const r=c(0);t.typeOf=e=>{const t={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object","[object Promise]":"promise"},c=Object.prototype.toString.call(e);return t.hasOwnProperty(c)?t[c]:((0,r.logError)("unable to recognise type: "+c),null)},t.default=t.typeOf},function(e,t,c){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.decopy=void 0;const o=r(c(1));function n(e){let t=e;switch((0,o.default)(t)){case"array":return t.map(e=>n(e));case"object":return Object.keys(t).reduce((e,c)=>(e[c]=n(t[c]),e),{});case"date":const e=new Date;return e.setTime(t.getTime()),e;case"regExp":let c=t.valueOf(),r="";return r+=c.global?"g":"",r+=c.ignoreCase?"i":"",r+=c.multiline?"m":"",new RegExp(c.source,r);default:return t}}t.decopy=n,t.default=n},function(e,t,c){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.defer=t.createEventHandler=t.strJson=t.recomArrs=t.unique=t.getRawType=t.isStatic=t.capitalize=t.cached=t.getQueryByKey=t.delay=t.debounce=t.throttle=void 0;const o=r(c(1));t.throttle=(e,t=200)=>{let c=0;return(...r)=>{let o=(new Date).getTime();o-c>t&&(e.apply(this,r),c=o)}};t.debounce=(e,t=200)=>{let c=null;return(...r)=>{c&&clearTimeout(c),c=setTimeout(()=>{e.apply(this,r)},t)}};t.delay=(e=0)=>new Promise(t=>{setTimeout(t,e)});t.getQueryByKey=e=>decodeURIComponent((new RegExp("[?|&]"+e+"=([^&;]+?)(&|#|;|$)").exec(location.href)||[,""])[1].replace(/\+/g,"%20"))||null;t.cached=e=>{let t=Object.create(null);return function(c){return t[c]||(t[c]=e(c))}};t.capitalize=e=>e.charAt(0).toUpperCase()+e.slice(1);t.isStatic=e=>"string"==typeof e||"number"==typeof e||"boolean"==typeof e||null==e;t.getRawType=e=>Object.prototype.toString.call(e).slice(8,-1);t.unique=e=>{if(!Array.isArray(e))return e;let c=[],r=[],o=Object.create(null);return e.forEach(e=>{if((0,t.isStatic)(e)){let r=e+"_"+(0,t.getRawType)(e);o[r]||(o[r]=!0,c.push(e))}else r.includes(e)||(r.push(e),c.push(e))}),c};t.recomArrs=(e,t)=>{t||(t=2);const c=new Array(Math.ceil(e.length/t)).fill([]);let r=0;return e.forEach((e,o)=>{c[r]=[...c[r],e],(o+1)%t==0&&(r+=1)}),c};t.strJson=e=>{if("string"!==(0,o.default)(e))return e;try{return JSON.parse(e)}catch(t){return new Function("return "+e)()}},t.createEventHandler=function(e){return{addEventListener:(t,c)=>{t.addEventListener(e,c);return()=>t.removeEventListener(e,c)},dispatch:(t,c)=>{t.dispatchEvent(new CustomEvent(e,{detail:c}))}}};t.defer=()=>{const e={};return e.promise=new Promise((t,c)=>{e.resolve=t,e.reject=c}),e}},function(e,t,c){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.removeCookie=t.getCookie=t.setCookie=void 0;const o=r(c(5)),n=r(c(1));function a(e,t,c){var r;if("undefined"===(0,n.default)(document))return;c=Object.assign({},{path:"/"},c),"number"===(0,n.default)(c.expires)&&(c.expires=new Date(Date.now()+864e5*c.expires)),c.expires=null===(r=c.expires)||void 0===r?void 0:r.toUTCString(),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);let a="";for(const e in c)c[e]&&(a+="; "+e,!0!==c[e]&&(a+="="+c[e].split(";")[0]));return document.cookie=e+"="+o.default.write(t)+a}t.setCookie=a,t.getCookie=function(e){const t=document.cookie?document.cookie.split("; "):[];let c={};for(let r=0;r('"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)),write:e=>encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},function(e,t,c){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeLocalStorage=t.getLocalStorage=t.setLocalStorage=void 0;const r=c(0);function o(e){localStorage.removeItem(e)}t.setLocalStorage=function({value:e,key:t,distance:c}){t&&e||(0,r.logError)("Please pass in the corresponding key or value!"),localStorage.setItem(t,c?JSON.stringify({distance:c,value:e,date:(new Date).getTime()}):e)},t.getLocalStorage=function(e){const t=JSON.parse(localStorage.getItem(e));if("string"==typeof t||!t)return(0,r.logError)("The cache value has expired or the key is wrong!"),t;const{date:c,distance:n}=t;return Date.now()-c>n?(o(e),!1):t.value},t.removeLocalStorage=o},function(e,t,c){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.clipboard=void 0;const o=c(0),n=r(c(1));t.clipboard=({text:e,target:t})=>{if(!e&&!t)return;if(e&&!["number","string"].includes((0,n.default)(e)))return(0,o.logError)("You cannot pass in anything other than number and string! var text type is "+(0,n.default)(e));const c=document.createElement("input");c.setAttribute("style","\n position: absolute;\n top: -99999em\n "),document.body.appendChild(c),c.value=e||t.innerText,c.select(),document.execCommand("copy"),document.body.removeChild(c)},t.default=t.clipboard},function(e,t,c){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.checkFloat=t.checkNegativeFloat=t.checkPositiveFloat=t.checkNotPositiveFloat=t.checkNotNegativeFloat=t.checkNotPositive=t.checkNotNegative=t.checkNonzeroNegative=t.checkNonzeroPositive=t.checkOandTPositive=t.checkPositiveTDP=t.checkPND=t.checkDecimalplaces=t.checkTwoDecimalplaces=t.checkZeroAndNonZero=t.checkAppointLen=t.checkNumberLength=t.checkStrComposedOfNumber=t.checkSpecialCharacters=t.checkChineseNumberEnglishUnderline=t.checkNumberUnderscoreletter=t.checkDChineseCharacterDetection=t.checkPasswordSpecification=t.checkCID=t.checkAlphabets=t.checkUpperCase=t.checkLowerCase=t.checkDateFormat=t.checkIP=t.checkPostOffice=t.checkQQ=t.checkHtml=t.checkNotSpecial=t.checkDomesticTelephone=t.checkUrl=t.checkEmail=t.checkPhone=void 0;t.checkPhone=e=>/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/.test(e);t.checkEmail=e=>/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(e);t.checkUrl=e=>/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/.test(e);t.checkDomesticTelephone=e=>/\d{3}-\d{8}|\d{4}-\d{7}/.test(e);t.checkNotSpecial=e=>new RegExp("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{"+e.start+","+e.end+"}$").test(e.val);t.checkHtml=e=>new RegExp("<(\\S*?)[^>]*>.*?|<.*? />").test(e);t.checkQQ=e=>/[1-9][0-9]{4,}/.test(e);t.checkPostOffice=e=>/[1-9]\d{5}(?!\d)/.test(e);t.checkIP=e=>/^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$/.test(e);t.checkDateFormat=e=>/^\d{4}-\d{1,2}-\d{1,2}/.test(e);t.checkLowerCase=e=>/^[a-z]+$/.test(e);t.checkUpperCase=e=>/^[A-Z]+$/.test(e);t.checkAlphabets=e=>/^[A-Za-z]+$/.test(e);t.checkCID=e=>/^\d{15}|\d{18}$/.test(e);t.checkPasswordSpecification=e=>new RegExp("^[a-zA-Z]\\w{"+e.start+","+e.end+"}$").test(e.val);t.checkDChineseCharacterDetection=e=>/^[\u4e00-\u9fa5]*$/.test(e);t.checkNumberUnderscoreletter=e=>/^\w+$/.test(e);t.checkChineseNumberEnglishUnderline=e=>/^[\u4E00-\u9FA5A-Za-z0-9_]+$/.test(e);t.checkSpecialCharacters=e=>/^[\u4E00-\u9FA5A-Za-z0-9]+$/.test(e);t.checkStrComposedOfNumber=e=>/^[0-9]+.?[0-9]*$/.test(e);t.checkNumberLength=e=>new RegExp("^\\d{"+e.length+"}$").test(e.val);t.checkAppointLen=e=>new RegExp("^\\d{"+e.start+","+e.end+"}$").test(e.val);t.checkZeroAndNonZero=e=>/^(0|[1-9][0-9]*)$/.test(e);t.checkTwoDecimalplaces=e=>/^([1-9][0-9]*)+(.[0-9]{1,2})?$/.test(e);t.checkDecimalplaces=e=>/^(\-)?\d+(\.\d{1,2})?$/.test(e);t.checkPND=e=>/^(\-|\+)?\d+(\.\d+)?$/.test(e);t.checkPositiveTDP=e=>/^[0-9]+(.[0-9]{2})?$/.test(e);t.checkOandTPositive=e=>/^[0-9]+(.[0-9]{1,3})?$/.test(e);t.checkNonzeroPositive=e=>/^[1-9]\d*/.test(e);t.checkNonzeroNegative=e=>/^-[1-9]\d*$/.test(e);t.checkNotNegative=e=>/^\d+$/.test(e);t.checkNotPositive=e=>/^-[1-9]\d*|0$/.test(e);t.checkNotNegativeFloat=e=>/^\d+(\.\d+)?$/.test(e);t.checkNotPositiveFloat=e=>/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/.test(e);t.checkPositiveFloat=e=>/^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/.test(e);t.checkNegativeFloat=e=>/^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/.test(e);t.checkFloat=e=>/^(-?\d+)(\.\d+)?$/.test(e),t.default={checkPhone:t.checkPhone,checkEmail:t.checkEmail,checkUrl:t.checkUrl,checkDomesticTelephone:t.checkDomesticTelephone,checkNotSpecial:t.checkNotSpecial,checkHtml:t.checkHtml,checkQQ:t.checkQQ,checkPostOffice:t.checkPostOffice,checkDateFormat:t.checkDateFormat,checkLowerCase:t.checkLowerCase,checkUpperCase:t.checkUpperCase,checkAlphabets:t.checkAlphabets,checkCID:t.checkCID,checkIP:t.checkIP,checkPasswordSpecification:t.checkPasswordSpecification,checkDChineseCharacterDetection:t.checkDChineseCharacterDetection,checkNumberUnderscoreletter:t.checkNumberUnderscoreletter,checkChineseNumberEnglishUnderline:t.checkChineseNumberEnglishUnderline,checkSpecialCharacters:t.checkSpecialCharacters,checkStrComposedOfNumber:t.checkStrComposedOfNumber,checkNumberLength:t.checkNumberLength,checkAppointLen:t.checkAppointLen,checkZeroAndNonZero:t.checkZeroAndNonZero,checkTwoDecimalplaces:t.checkTwoDecimalplaces,checkDecimalplaces:t.checkDecimalplaces,checkPND:t.checkPND,checkPositiveTDP:t.checkPositiveTDP,checkOandTPositive:t.checkOandTPositive,checkNonzeroPositive:t.checkNonzeroPositive,checkNonzeroNegative:t.checkNonzeroNegative,checkNotNegative:t.checkNotNegative,checkNotPositive:t.checkNotPositive,checkNotNegativeFloat:t.checkNotNegativeFloat,checkNotPositiveFloat:t.checkNotPositiveFloat,checkPositiveFloat:t.checkPositiveFloat,checkNegativeFloat:t.checkNegativeFloat,checkFloat:t.checkFloat}},function(e,t,c){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getAfterCountDays=t.remainderTime=t.getYearWeek=t.getYearDay=t.getWeek=t.getFirstDayOfSeason=t.getLastDayOfMonth=t.getTime=t.dateFormat=t.dateDifference=t.getHoroscope=void 0;const o=c(10),n=c(0),a=r(c(1)),i=r(c(2));t.getHoroscope=e=>{if(!e)return(0,n.logError)("Date cannot be empty"),null;if(!(e=(0,o.dateUniFormat)(e)))return null;const t=new Date(e),c=t.getMonth()+1;return["摩羯","水瓶","双鱼","白羊","金牛","双子","巨蟹","狮子","处女","天秤","天蝎","射手","摩羯"][c-{true:1,false:0}[t.getDate()-14<"865778999988".charAt(c)]]+"座"};function u(e,t="{Y}-{MM}-{DD} {A} {t}:{ii}"){if(!e)return(0,n.logError)("date cannot be empty!"),null;if(!(e=(0,o.dateUniFormat)(e)))return null;const c=(e=new Date(e)).getHours(),r=c>12?c-12:c,a={Y:e.getFullYear(),M:e.getMonth()+1,MM:(0,o.parseNumber)(e.getMonth()+1),Mon:["一","二","三","四","五","六","七","八","九","十","十一","十二"][e.getMonth()],D:e.getDate(),DD:(0,o.parseNumber)(e.getDate()),h:c,hh:(0,o.parseNumber)(c),t:r,tt:(0,o.parseNumber)(r),A:c>12?"下午":"上午",i:e.getMinutes(),ii:(0,o.parseNumber)(e.getMinutes()),s:e.getSeconds(),ss:(0,o.parseNumber)(e.getSeconds())};for(;/\{([^}]+)\}/.test(t);)t=t.replace(/\{([^}]+)\}/,a[RegExp.$1]);return t}function s(e="{Y}-{MM}-{DD} {A} {t}:{ii}"){return u(new Date,e)}function l(e="date",t="{Y}-{MM}-{DD} {A} {t}:{ii}"){if("date"===e&&!t)return(0,n.logError)("formatStr is no value!!"),null;const c=new Date;return c.setMonth(c.getMonth()+1),c.setDate(0),"formatDate"===e?u(new Date(c),t):"date"===e?new Date(c):"day"===e?c.getDate():null}function h(e="date",t="{Y}-{MM}-{DD} {A} {t}:{ii}"){if("date"===e&&!t)return(0,n.logError)("formatStr is no value!!"),null;const c=new Date,r=c.getMonth();return r<3?c.setMonth(0):2{let{startTime:t,type:c,endTime:r}=(0,i.default)(e);if(!t)return(0,n.logError)("startTime cannot be empty!"),null;if(!(t=(0,o.dateUniFormat)(t)))return null;"string"===(0,a.default)(t)&&(0,o.convertTimestamps)(t)&&(t=(0,o.convertTimestamps)(t)),r&&"string"===(0,a.default)(r)&&(0,o.convertTimestamps)(r)&&(r=(0,o.convertTimestamps)(r));const u=t,s=r||(new Date).getTime(),l=Math.abs(s-u),h=Math.floor(l/864e5),d=l%864e5,f=Math.floor(d/36e5),k=d%36e5,p=Math.floor(k/6e4),g=k%6e4,m=Math.round(g/1e3);switch(c){case"day":return h+"天";case"hours":return f+"小时";case"minutes":return p+"分";case"seconds":return m+"秒";case"HoursMinutes":return f+"小时 "+p+"分";case"HoursMinutesSeconds":return f+"小时 "+p+"分 "+m+"秒 ";case"timeHours":return h+"天 "+f+"小时";case"timeHoursMinutes":return h+"天 "+f+"小时 "+p+"分";default:return h+"天 "+f+"小时 "+p+"分 "+m+"秒 "}},t.dateFormat=u,t.getTime=s,t.getLastDayOfMonth=l,t.getFirstDayOfSeason=h;t.getWeek=()=>"日一二三四五六".charAt((new Date).getDay());t.getYearDay=()=>(0,o.timeSpanPositioning)(1);t.getYearWeek=()=>(0,o.timeSpanPositioning)(7),t.remainderTime=function(){const e=new Date,t=(e.getFullYear()+1).toString(),c=new Date(new Date(t)-1).getTime()-e;return Math.floor(c/864e5)},t.getAfterCountDays=function(e,t){return t?0==e?new Date:(t=(0,o.dateUniFormat)(t))?((t=new Date(t)).setDate(t.getDate()+e),new Date(+t+288e5).toJSON().substr(0,19).replace("T"," ").replace(/-/g,"-")):null:((0,n.logError)("date is no value !!"),null)},t.default={getHoroscope:t.getHoroscope,dateDifference:t.dateDifference,dateFormat:u,getTime:s,getLastDayOfMonth:l,getFirstDayOfSeason:h,getWeek:t.getWeek,getYearDay:t.getYearDay,getYearWeek:t.getYearWeek}},function(e,t,c){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.dateUniFormat=t.convertTimestamps=t.timeSpanPositioning=t.timeFormat=t.parseNumber=void 0;const o=c(0),n=r(c(1));function a(e){return e.toString().length<13?1e3*e:e}t.parseNumber=function(e){return e<10?0+e:e},t.timeFormat=a;t.timeSpanPositioning=(e=1)=>Math.ceil((new Date-new Date((new Date).getFullYear().toString()))/864e5/e),t.convertTimestamps=function(e){return/-/g.test(e)?new Date(e.replace(/-/g,"/")).getTime():((0,o.logError)("The date format is incorrect. The recommended format is standard timestamp, or date, or XXXX-XX-XX HH: mm: SS"),null)},t.dateUniFormat=function(e){return-1===["string","date","number"].indexOf((0,n.default)(e))?((0,o.logError)(`Expected string、number、date type, but got ${(0,n.default)(e)} type`),null):("number"===(0,n.default)(e)&&(e=a(e)),e)}},function(e,t,c){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.checkPositiveFloat=t.checkPhone=t.checkPasswordSpecification=t.checkPND=t.checkOandTPositive=t.checkNumberUnderscoreletter=t.checkNumberLength=t.checkNotSpecial=t.checkNotPositiveFloat=t.checkNotPositive=t.checkNotNegativeFloat=t.checkNotNegative=t.checkNonzeroPositive=t.checkNonzeroNegative=t.checkNegativeFloat=t.checkLowerCase=t.checkIP=t.checkHtml=t.checkFloat=t.checkEmail=t.checkDomesticTelephone=t.checkDecimalplaces=t.checkDateFormat=t.checkDChineseCharacterDetection=t.checkChineseNumberEnglishUnderline=t.checkCID=t.checkAppointLen=t.checkAlphabets=t.clipboard=t.typeOf=t.removeLocalStorage=t.getLocalStorage=t.setLocalStorage=t.removeCookie=t.setCookie=t.getCookie=t.createEventHandler=t.recomArrs=t.unique=t.isStatic=t.capitalize=t.cached=t.getRawType=t.getQueryByKey=t.delay=t.debounce=t.throttle=t.strJson=t.defer=t.decopy=void 0,t.remainderTime=t.dateFormat=t.dateDifference=t.getYearWeek=t.getYearDay=t.getWeek=t.getLastDayOfMonth=t.getTime=t.getHoroscope=t.getFirstDayOfSeason=t.getAfterCountDays=t.checkZeroAndNonZero=t.checkUrl=t.checkUpperCase=t.checkTwoDecimalplaces=t.checkStrComposedOfNumber=t.checkSpecialCharacters=t.checkQQ=t.checkPostOffice=t.checkPositiveTDP=void 0;const r=c(3);Object.defineProperty(t,"throttle",{enumerable:!0,get:function(){return r.throttle}}),Object.defineProperty(t,"debounce",{enumerable:!0,get:function(){return r.debounce}}),Object.defineProperty(t,"delay",{enumerable:!0,get:function(){return r.delay}}),Object.defineProperty(t,"getQueryByKey",{enumerable:!0,get:function(){return r.getQueryByKey}}),Object.defineProperty(t,"getRawType",{enumerable:!0,get:function(){return r.getRawType}}),Object.defineProperty(t,"cached",{enumerable:!0,get:function(){return r.cached}}),Object.defineProperty(t,"capitalize",{enumerable:!0,get:function(){return r.capitalize}}),Object.defineProperty(t,"isStatic",{enumerable:!0,get:function(){return r.isStatic}}),Object.defineProperty(t,"unique",{enumerable:!0,get:function(){return r.unique}}),Object.defineProperty(t,"recomArrs",{enumerable:!0,get:function(){return r.recomArrs}}),Object.defineProperty(t,"strJson",{enumerable:!0,get:function(){return r.strJson}}),Object.defineProperty(t,"createEventHandler",{enumerable:!0,get:function(){return r.createEventHandler}}),Object.defineProperty(t,"defer",{enumerable:!0,get:function(){return r.defer}});const o=c(4);Object.defineProperty(t,"getCookie",{enumerable:!0,get:function(){return o.getCookie}}),Object.defineProperty(t,"setCookie",{enumerable:!0,get:function(){return o.setCookie}}),Object.defineProperty(t,"removeCookie",{enumerable:!0,get:function(){return o.removeCookie}});const n=c(6);Object.defineProperty(t,"setLocalStorage",{enumerable:!0,get:function(){return n.setLocalStorage}}),Object.defineProperty(t,"getLocalStorage",{enumerable:!0,get:function(){return n.getLocalStorage}}),Object.defineProperty(t,"removeLocalStorage",{enumerable:!0,get:function(){return n.removeLocalStorage}});const a=c(1);Object.defineProperty(t,"typeOf",{enumerable:!0,get:function(){return a.typeOf}});const i=c(7);Object.defineProperty(t,"clipboard",{enumerable:!0,get:function(){return i.clipboard}});const u=c(2);Object.defineProperty(t,"decopy",{enumerable:!0,get:function(){return u.decopy}});const s=c(8);Object.defineProperty(t,"checkAlphabets",{enumerable:!0,get:function(){return s.checkAlphabets}}),Object.defineProperty(t,"checkAppointLen",{enumerable:!0,get:function(){return s.checkAppointLen}}),Object.defineProperty(t,"checkCID",{enumerable:!0,get:function(){return s.checkCID}}),Object.defineProperty(t,"checkChineseNumberEnglishUnderline",{enumerable:!0,get:function(){return s.checkChineseNumberEnglishUnderline}}),Object.defineProperty(t,"checkDChineseCharacterDetection",{enumerable:!0,get:function(){return s.checkDChineseCharacterDetection}}),Object.defineProperty(t,"checkDateFormat",{enumerable:!0,get:function(){return s.checkDateFormat}}),Object.defineProperty(t,"checkDecimalplaces",{enumerable:!0,get:function(){return s.checkDecimalplaces}}),Object.defineProperty(t,"checkDomesticTelephone",{enumerable:!0,get:function(){return s.checkDomesticTelephone}}),Object.defineProperty(t,"checkEmail",{enumerable:!0,get:function(){return s.checkEmail}}),Object.defineProperty(t,"checkFloat",{enumerable:!0,get:function(){return s.checkFloat}}),Object.defineProperty(t,"checkHtml",{enumerable:!0,get:function(){return s.checkHtml}}),Object.defineProperty(t,"checkIP",{enumerable:!0,get:function(){return s.checkIP}}),Object.defineProperty(t,"checkLowerCase",{enumerable:!0,get:function(){return s.checkLowerCase}}),Object.defineProperty(t,"checkNegativeFloat",{enumerable:!0,get:function(){return s.checkNegativeFloat}}),Object.defineProperty(t,"checkNonzeroNegative",{enumerable:!0,get:function(){return s.checkNonzeroNegative}}),Object.defineProperty(t,"checkNonzeroPositive",{enumerable:!0,get:function(){return s.checkNonzeroPositive}}),Object.defineProperty(t,"checkNotNegative",{enumerable:!0,get:function(){return s.checkNotNegative}}),Object.defineProperty(t,"checkNotNegativeFloat",{enumerable:!0,get:function(){return s.checkNotNegativeFloat}}),Object.defineProperty(t,"checkNotPositive",{enumerable:!0,get:function(){return s.checkNotPositive}}),Object.defineProperty(t,"checkNotPositiveFloat",{enumerable:!0,get:function(){return s.checkNotPositiveFloat}}),Object.defineProperty(t,"checkNotSpecial",{enumerable:!0,get:function(){return s.checkNotSpecial}}),Object.defineProperty(t,"checkNumberLength",{enumerable:!0,get:function(){return s.checkNumberLength}}),Object.defineProperty(t,"checkNumberUnderscoreletter",{enumerable:!0,get:function(){return s.checkNumberUnderscoreletter}}),Object.defineProperty(t,"checkOandTPositive",{enumerable:!0,get:function(){return s.checkOandTPositive}}),Object.defineProperty(t,"checkPND",{enumerable:!0,get:function(){return s.checkPND}}),Object.defineProperty(t,"checkPasswordSpecification",{enumerable:!0,get:function(){return s.checkPasswordSpecification}}),Object.defineProperty(t,"checkPhone",{enumerable:!0,get:function(){return s.checkPhone}}),Object.defineProperty(t,"checkPositiveFloat",{enumerable:!0,get:function(){return s.checkPositiveFloat}}),Object.defineProperty(t,"checkPositiveTDP",{enumerable:!0,get:function(){return s.checkPositiveTDP}}),Object.defineProperty(t,"checkPostOffice",{enumerable:!0,get:function(){return s.checkPostOffice}}),Object.defineProperty(t,"checkQQ",{enumerable:!0,get:function(){return s.checkQQ}}),Object.defineProperty(t,"checkSpecialCharacters",{enumerable:!0,get:function(){return s.checkSpecialCharacters}}),Object.defineProperty(t,"checkStrComposedOfNumber",{enumerable:!0,get:function(){return s.checkStrComposedOfNumber}}),Object.defineProperty(t,"checkTwoDecimalplaces",{enumerable:!0,get:function(){return s.checkTwoDecimalplaces}}),Object.defineProperty(t,"checkUpperCase",{enumerable:!0,get:function(){return s.checkUpperCase}}),Object.defineProperty(t,"checkUrl",{enumerable:!0,get:function(){return s.checkUrl}}),Object.defineProperty(t,"checkZeroAndNonZero",{enumerable:!0,get:function(){return s.checkZeroAndNonZero}});const l=c(9);Object.defineProperty(t,"getAfterCountDays",{enumerable:!0,get:function(){return l.getAfterCountDays}}),Object.defineProperty(t,"getFirstDayOfSeason",{enumerable:!0,get:function(){return l.getFirstDayOfSeason}}),Object.defineProperty(t,"getHoroscope",{enumerable:!0,get:function(){return l.getHoroscope}}),Object.defineProperty(t,"getTime",{enumerable:!0,get:function(){return l.getTime}}),Object.defineProperty(t,"getLastDayOfMonth",{enumerable:!0,get:function(){return l.getLastDayOfMonth}}),Object.defineProperty(t,"getWeek",{enumerable:!0,get:function(){return l.getWeek}}),Object.defineProperty(t,"getYearDay",{enumerable:!0,get:function(){return l.getYearDay}}),Object.defineProperty(t,"getYearWeek",{enumerable:!0,get:function(){return l.getYearWeek}}),Object.defineProperty(t,"dateDifference",{enumerable:!0,get:function(){return l.dateDifference}}),Object.defineProperty(t,"dateFormat",{enumerable:!0,get:function(){return l.dateFormat}}),Object.defineProperty(t,"remainderTime",{enumerable:!0,get:function(){return l.remainderTime}}),t.default={decopy:u.decopy,defer:r.defer,strJson:r.strJson,throttle:r.throttle,debounce:r.debounce,delay:r.delay,getQueryByKey:r.getQueryByKey,getRawType:r.getRawType,cached:r.cached,capitalize:r.capitalize,isStatic:r.isStatic,unique:r.unique,recomArrs:r.recomArrs,createEventHandler:r.createEventHandler,getCookie:o.getCookie,setCookie:o.setCookie,removeCookie:o.removeCookie,setLocalStorage:n.setLocalStorage,getLocalStorage:n.getLocalStorage,removeLocalStorage:n.removeLocalStorage,typeOf:a.typeOf,clipboard:i.clipboard,checkAlphabets:s.checkAlphabets,checkAppointLen:s.checkAppointLen,checkCID:s.checkCID,checkChineseNumberEnglishUnderline:s.checkChineseNumberEnglishUnderline,checkDChineseCharacterDetection:s.checkDChineseCharacterDetection,checkDateFormat:s.checkDateFormat,checkDecimalplaces:s.checkDecimalplaces,checkDomesticTelephone:s.checkDomesticTelephone,checkEmail:s.checkEmail,checkFloat:s.checkFloat,checkHtml:s.checkHtml,checkIP:s.checkIP,checkLowerCase:s.checkLowerCase,checkNegativeFloat:s.checkNegativeFloat,checkNonzeroNegative:s.checkNonzeroNegative,checkNonzeroPositive:s.checkNonzeroPositive,checkNotNegative:s.checkNotNegative,checkNotNegativeFloat:s.checkNotNegativeFloat,checkNotPositive:s.checkNotPositive,checkNotPositiveFloat:s.checkNotPositiveFloat,checkNotSpecial:s.checkNotSpecial,checkNumberLength:s.checkNumberLength,checkNumberUnderscoreletter:s.checkNumberUnderscoreletter,checkOandTPositive:s.checkOandTPositive,checkPND:s.checkPND,checkPasswordSpecification:s.checkPasswordSpecification,checkPhone:s.checkPhone,checkPositiveFloat:s.checkPositiveFloat,checkPositiveTDP:s.checkPositiveTDP,checkPostOffice:s.checkPostOffice,checkQQ:s.checkQQ,checkSpecialCharacters:s.checkSpecialCharacters,checkStrComposedOfNumber:s.checkStrComposedOfNumber,checkTwoDecimalplaces:s.checkTwoDecimalplaces,checkUpperCase:s.checkUpperCase,checkUrl:s.checkUrl,checkZeroAndNonZero:s.checkZeroAndNonZero,getAfterCountDays:l.getAfterCountDays,getFirstDayOfSeason:l.getFirstDayOfSeason,getHoroscope:l.getHoroscope,getTime:l.getTime,getLastDayOfMonth:l.getLastDayOfMonth,getWeek:l.getWeek,getYearDay:l.getYearDay,getYearWeek:l.getYearWeek,dateDifference:l.dateDifference,dateFormat:l.dateFormat,remainderTime:l.remainderTime}}])})); -------------------------------------------------------------------------------- /lib/localStorage.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var o in r)("object"==typeof exports?exports:e)[o]=r[o]}}(window,(function(){return function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=6)}({0:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logError=t.ErrorMsg=void 0,t.ErrorMsg=function(e){if(e)throw new Error(e)},t.logError=function(e){e&&console.error(e)}},6:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeLocalStorage=t.getLocalStorage=t.setLocalStorage=void 0;const o=r(0);function n(e){localStorage.removeItem(e)}t.setLocalStorage=function({value:e,key:t,distance:r}){t&&e||(0,o.logError)("Please pass in the corresponding key or value!"),localStorage.setItem(t,r?JSON.stringify({distance:r,value:e,date:(new Date).getTime()}):e)},t.getLocalStorage=function(e){const t=JSON.parse(localStorage.getItem(e));if("string"==typeof t||!t)return(0,o.logError)("The cache value has expired or the key is wrong!"),t;const{date:r,distance:i}=t;return Date.now()-r>i?(n(e),!1):t.value},t.removeLocalStorage=n}})})); -------------------------------------------------------------------------------- /lib/packages/clipboard.d.ts: -------------------------------------------------------------------------------- 1 | export declare const clipboard: ({ text, target }: { 2 | text?: string | number | undefined; 3 | target?: HTMLElement | undefined; 4 | }) => void; 5 | export default clipboard; 6 | -------------------------------------------------------------------------------- /lib/packages/cooick.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 注入cooick到浏览器 3 | * @param key 值的key 4 | * @param val 设置的值 5 | * @param attributes 扩展属性,如设置有效期{ expires: Date.now() + 30 * 24 * 60 * 60 * 1000 } --- 有效期一个月 6 | * @returns 7 | */ 8 | export declare function setCooick(key: string, val: any, attributes?: { 9 | path?: string; 10 | expires?: any; 11 | [key: string]: any; 12 | }): void | string; 13 | /** 14 | * 15 | * @param key 需要获取cooick的key 16 | * @returns 获取的val值 17 | */ 18 | export declare function getCooick(key: string): any; 19 | /** 20 | * 21 | * @param key 需要删除cooick的key 22 | * @param attributes 扩展属性 23 | */ 24 | export declare function removeCooick(key: string, attributes?: { 25 | path?: string; 26 | expires?: any; 27 | [key: string]: any; 28 | }): void; 29 | -------------------------------------------------------------------------------- /lib/packages/date.d.ts: -------------------------------------------------------------------------------- 1 | export interface TimeFormal { 2 | startTime: number | string | Date; 3 | endTime?: number | string | Date; 4 | type?: 'day' | 'hours' | 'minutes' | 'seconds' | 'HoursMinutes' | 'HoursMinutesSeconds' | 'timeHours' | 'timeHoursMinutes'; 5 | } 6 | export declare type TimeOptionsFunc = (options: TimeFormal) => string | null; 7 | export declare type dateType = (date: number | string | null) => string | null; 8 | /** 9 | * 计算星座 10 | * @param date number | string(2021-11-30 10:20:30) | date 11 | * @returns ['摩羯', '水瓶', '双鱼', '白羊', '金牛', '双子', '巨蟹', '狮子', '处女', '天秤', '天蝎', '射手', '摩羯'] 其中一个 12 | */ 13 | export declare const getHoroscope: dateType; 14 | /** 15 | * 时间差 16 | * @param options { startTime: string | number | null, endTime?: string | number | null, type?: ~~ } 17 | * @returns stirng | null 18 | */ 19 | export declare const dateDifference: TimeOptionsFunc; 20 | /** 21 | * 时间格式化 22 | * @param date number | string | date 需要格式化的时间 23 | * @param formatStr: 格式化规则 如:{Y}-{MM}-{DD} {A} {t}:{ii} 24 | * @returns string 25 | * 26 | * * { 27 | * Y:年, 28 | * M: 不补0的月, 29 | * MM:补0的月 30 | * Mon:大写月 31 | * D: 日 如上 32 | * DD:日 如上 33 | * h:小时 如上 34 | * hh:小时如上 35 | * A:显示上午下午 36 | * i:分钟 37 | * ii: 分钟 38 | * s:秒钟 39 | * ss: 秒钟 40 | * } 41 | */ 42 | export declare function dateFormat(date: number | string | Date, formatStr?: string): string | null; 43 | /** 44 | * 获取当前时间并格式化 45 | * @param formatStr string 格式化规则 如上 46 | * @returns string 格式化后的时间 47 | */ 48 | export declare function getTime(formatStr?: string): string; 49 | /** 50 | * 获取本月的最后一天 51 | * @param type string 返回类型 date -- 标准日期格式 day -- 当月最后一天 formatDate -- 格式化后的时间 52 | * @param formatStr string 格式化规则 53 | * @returns 返回的时间格式 54 | */ 55 | export declare function getLastDayOfMonth(type?: 'date' | 'day' | 'formatDate', formatStr?: string): number | string | Date | null; 56 | /** 57 | * 当月季度的第一天 58 | * @param type 59 | * @param formatStr 60 | * @returns 61 | */ 62 | export declare function getFirstDayOfSeason(type?: 'date' | 'formatDate', formatStr?: string): string | Date | null; 63 | export declare const getWeek: () => string; 64 | export declare const getYearDay: () => number; 65 | export declare const getYearWeek: () => number; 66 | export declare function remainderTime(): number; 67 | /** 68 | * 获取N天后的日期 69 | * @param count 70 | * @param date 71 | * @returns 72 | */ 73 | export declare function getAfterCountDays(count: string | number, date: number | Date | string): string | Date | null; 74 | declare const _default: { 75 | getHoroscope: dateType; 76 | dateDifference: TimeOptionsFunc; 77 | dateFormat: typeof dateFormat; 78 | getTime: typeof getTime; 79 | getLastDayOfMonth: typeof getLastDayOfMonth; 80 | getFirstDayOfSeason: typeof getFirstDayOfSeason; 81 | getWeek: () => string; 82 | getYearDay: () => number; 83 | getYearWeek: () => number; 84 | }; 85 | export default _default; 86 | -------------------------------------------------------------------------------- /lib/packages/decopy.d.ts: -------------------------------------------------------------------------------- 1 | export declare function decopy(data: T): T; 2 | export default decopy; 3 | -------------------------------------------------------------------------------- /lib/packages/localStorage.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 存入storage缓存 3 | * @param key number | string 键值 4 | * @param value any 值 5 | * @param distance number 缓存有效期 6 | * 7 | * */ 8 | export declare function setLocalStorage({ value, key, distance }: T): void; 13 | /** 14 | * 取出storage缓存 15 | * @param key number | string 键值 16 | * */ 17 | export declare function getLocalStorage(key: string): T | boolean; 18 | /** 19 | * 删除storage缓存 20 | * @param key number | string 键值 21 | * */ 22 | export declare function removeLocalStorage(key: string): void; 23 | -------------------------------------------------------------------------------- /lib/packages/regExp.d.ts: -------------------------------------------------------------------------------- 1 | export interface optionsInter { 2 | val: any; 3 | length: number; 4 | } 5 | export interface appointLen { 6 | start: number; 7 | end: number; 8 | val: any; 9 | } 10 | export declare type interCheck = (val: any) => boolean; 11 | export declare type superInterCheck = (options: optionsInter) => boolean; 12 | export declare type appointLenInterCheck = (options: appointLen) => boolean; 13 | export declare const checkPhone: interCheck; 14 | export declare const checkEmail: interCheck; 15 | export declare const checkUrl: interCheck; 16 | export declare const checkDomesticTelephone: interCheck; 17 | export declare const checkNotSpecial: appointLenInterCheck; 18 | export declare const checkHtml: interCheck; 19 | export declare const checkQQ: interCheck; 20 | export declare const checkPostOffice: interCheck; 21 | export declare const checkIP: interCheck; 22 | export declare const checkDateFormat: interCheck; 23 | export declare const checkLowerCase: interCheck; 24 | export declare const checkUpperCase: interCheck; 25 | export declare const checkAlphabets: interCheck; 26 | export declare const checkCID: interCheck; 27 | export declare const checkPasswordSpecification: appointLenInterCheck; 28 | export declare const checkDChineseCharacterDetection: interCheck; 29 | export declare const checkNumberUnderscoreletter: interCheck; 30 | export declare const checkChineseNumberEnglishUnderline: interCheck; 31 | export declare const checkSpecialCharacters: interCheck; 32 | export declare const checkStrComposedOfNumber: interCheck; 33 | export declare const checkNumberLength: superInterCheck; 34 | export declare const checkAppointLen: appointLenInterCheck; 35 | export declare const checkZeroAndNonZero: interCheck; 36 | export declare const checkTwoDecimalplaces: interCheck; 37 | export declare const checkDecimalplaces: interCheck; 38 | export declare const checkPND: interCheck; 39 | export declare const checkPositiveTDP: interCheck; 40 | export declare const checkOandTPositive: interCheck; 41 | export declare const checkNonzeroPositive: interCheck; 42 | export declare const checkNonzeroNegative: interCheck; 43 | export declare const checkNotNegative: interCheck; 44 | export declare const checkNotPositive: interCheck; 45 | export declare const checkNotNegativeFloat: interCheck; 46 | export declare const checkNotPositiveFloat: interCheck; 47 | export declare const checkPositiveFloat: interCheck; 48 | export declare const checkNegativeFloat: interCheck; 49 | export declare const checkFloat: interCheck; 50 | declare const _default: { 51 | checkPhone: interCheck; 52 | checkEmail: interCheck; 53 | checkUrl: interCheck; 54 | checkDomesticTelephone: interCheck; 55 | checkNotSpecial: appointLenInterCheck; 56 | checkHtml: interCheck; 57 | checkQQ: interCheck; 58 | checkPostOffice: interCheck; 59 | checkDateFormat: interCheck; 60 | checkLowerCase: interCheck; 61 | checkUpperCase: interCheck; 62 | checkAlphabets: interCheck; 63 | checkCID: interCheck; 64 | checkIP: interCheck; 65 | checkPasswordSpecification: appointLenInterCheck; 66 | checkDChineseCharacterDetection: interCheck; 67 | checkNumberUnderscoreletter: interCheck; 68 | checkChineseNumberEnglishUnderline: interCheck; 69 | checkSpecialCharacters: interCheck; 70 | checkStrComposedOfNumber: interCheck; 71 | checkNumberLength: superInterCheck; 72 | checkAppointLen: appointLenInterCheck; 73 | checkZeroAndNonZero: interCheck; 74 | checkTwoDecimalplaces: interCheck; 75 | checkDecimalplaces: interCheck; 76 | checkPND: interCheck; 77 | checkPositiveTDP: interCheck; 78 | checkOandTPositive: interCheck; 79 | checkNonzeroPositive: interCheck; 80 | checkNonzeroNegative: interCheck; 81 | checkNotNegative: interCheck; 82 | checkNotPositive: interCheck; 83 | checkNotNegativeFloat: interCheck; 84 | checkNotPositiveFloat: interCheck; 85 | checkPositiveFloat: interCheck; 86 | checkNegativeFloat: interCheck; 87 | checkFloat: interCheck; 88 | }; 89 | export default _default; 90 | -------------------------------------------------------------------------------- /lib/packages/typeOf.d.ts: -------------------------------------------------------------------------------- 1 | export declare const typeOf: (target: any) => 'boolean' | 'number' | 'string' | 'function' | 'array' | 'date' | 'regExp' | 'undefined' | 'null' | 'object' | 'promise' | 'regexp' | null; 2 | export default typeOf; 3 | -------------------------------------------------------------------------------- /lib/packages/utils.d.ts: -------------------------------------------------------------------------------- 1 | export declare type tasInterface = (func: any, aw?: number) => Function; 2 | export declare const throttle: tasInterface; 3 | export declare const debounce: tasInterface; 4 | export declare const delay: (dur?: number) => Promise; 5 | export declare const getQueryByKey: (name: T) => string | null | undefined; 6 | export declare const cached: (fn: T) => Function; 7 | export declare const capitalize: (val: T) => string; 8 | export declare const isStatic: (val: T) => boolean; 9 | export declare const getRawType: (val: T) => string; 10 | export declare const unique: (arr: T) => any[]; 11 | export declare const recomArrs: (data: any[] | T[], dim?: number | undefined) => T[]; 12 | export declare const strJson: (str: string) => T; 13 | export declare function createEventHandler(name: string): { 14 | addEventListener: (Win: Window, fn: (e: { 15 | detail: DataType; 16 | }) => void) => () => void; 17 | dispatch: (Win: Window, data: DataType) => void; 18 | }; 19 | export interface Defer { 20 | (): { 21 | resolve: () => void; 22 | reject: (...args: any[]) => void; 23 | promise: Promise; 24 | }; 25 | (): { 26 | resolve: (val: T) => void; 27 | reject: (...args: any[]) => void; 28 | promise: Promise; 29 | }; 30 | } 31 | export declare const defer: Defer; 32 | -------------------------------------------------------------------------------- /lib/regExp.js: -------------------------------------------------------------------------------- 1 | !function(e,c){if("object"==typeof exports&&"object"==typeof module)module.exports=c();else if("function"==typeof define&&define.amd)define([],c);else{var t=c();for(var o in t)("object"==typeof exports?exports:e)[o]=t[o]}}(window,(function(){return function(e){var c={};function t(o){if(c[o])return c[o].exports;var h=c[o]={i:o,l:!1,exports:{}};return e[o].call(h.exports,h,h.exports,t),h.l=!0,h.exports}return t.m=e,t.c=c,t.d=function(e,c,o){t.o(e,c)||Object.defineProperty(e,c,{enumerable:!0,get:o})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,c){if(1&c&&(e=t(e)),8&c)return e;if(4&c&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(t.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&c&&"string"!=typeof e)for(var h in e)t.d(o,h,function(c){return e[c]}.bind(null,h));return o},t.n=function(e){var c=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(c,"a",c),c},t.o=function(e,c){return Object.prototype.hasOwnProperty.call(e,c)},t.p="",t(t.s=8)}({8:function(e,c,t){"use strict";Object.defineProperty(c,"__esModule",{value:!0}),c.checkFloat=c.checkNegativeFloat=c.checkPositiveFloat=c.checkNotPositiveFloat=c.checkNotNegativeFloat=c.checkNotPositive=c.checkNotNegative=c.checkNonzeroNegative=c.checkNonzeroPositive=c.checkOandTPositive=c.checkPositiveTDP=c.checkPND=c.checkDecimalplaces=c.checkTwoDecimalplaces=c.checkZeroAndNonZero=c.checkAppointLen=c.checkNumberLength=c.checkStrComposedOfNumber=c.checkSpecialCharacters=c.checkChineseNumberEnglishUnderline=c.checkNumberUnderscoreletter=c.checkDChineseCharacterDetection=c.checkPasswordSpecification=c.checkCID=c.checkAlphabets=c.checkUpperCase=c.checkLowerCase=c.checkDateFormat=c.checkIP=c.checkPostOffice=c.checkQQ=c.checkHtml=c.checkNotSpecial=c.checkDomesticTelephone=c.checkUrl=c.checkEmail=c.checkPhone=void 0;c.checkPhone=e=>/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/.test(e);c.checkEmail=e=>/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(e);c.checkUrl=e=>/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/.test(e);c.checkDomesticTelephone=e=>/\d{3}-\d{8}|\d{4}-\d{7}/.test(e);c.checkNotSpecial=e=>new RegExp("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{"+e.start+","+e.end+"}$").test(e.val);c.checkHtml=e=>new RegExp("<(\\S*?)[^>]*>.*?|<.*? />").test(e);c.checkQQ=e=>/[1-9][0-9]{4,}/.test(e);c.checkPostOffice=e=>/[1-9]\d{5}(?!\d)/.test(e);c.checkIP=e=>/^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$/.test(e);c.checkDateFormat=e=>/^\d{4}-\d{1,2}-\d{1,2}/.test(e);c.checkLowerCase=e=>/^[a-z]+$/.test(e);c.checkUpperCase=e=>/^[A-Z]+$/.test(e);c.checkAlphabets=e=>/^[A-Za-z]+$/.test(e);c.checkCID=e=>/^\d{15}|\d{18}$/.test(e);c.checkPasswordSpecification=e=>new RegExp("^[a-zA-Z]\\w{"+e.start+","+e.end+"}$").test(e.val);c.checkDChineseCharacterDetection=e=>/^[\u4e00-\u9fa5]*$/.test(e);c.checkNumberUnderscoreletter=e=>/^\w+$/.test(e);c.checkChineseNumberEnglishUnderline=e=>/^[\u4E00-\u9FA5A-Za-z0-9_]+$/.test(e);c.checkSpecialCharacters=e=>/^[\u4E00-\u9FA5A-Za-z0-9]+$/.test(e);c.checkStrComposedOfNumber=e=>/^[0-9]+.?[0-9]*$/.test(e);c.checkNumberLength=e=>new RegExp("^\\d{"+e.length+"}$").test(e.val);c.checkAppointLen=e=>new RegExp("^\\d{"+e.start+","+e.end+"}$").test(e.val);c.checkZeroAndNonZero=e=>/^(0|[1-9][0-9]*)$/.test(e);c.checkTwoDecimalplaces=e=>/^([1-9][0-9]*)+(.[0-9]{1,2})?$/.test(e);c.checkDecimalplaces=e=>/^(\-)?\d+(\.\d{1,2})?$/.test(e);c.checkPND=e=>/^(\-|\+)?\d+(\.\d+)?$/.test(e);c.checkPositiveTDP=e=>/^[0-9]+(.[0-9]{2})?$/.test(e);c.checkOandTPositive=e=>/^[0-9]+(.[0-9]{1,3})?$/.test(e);c.checkNonzeroPositive=e=>/^[1-9]\d*/.test(e);c.checkNonzeroNegative=e=>/^-[1-9]\d*$/.test(e);c.checkNotNegative=e=>/^\d+$/.test(e);c.checkNotPositive=e=>/^-[1-9]\d*|0$/.test(e);c.checkNotNegativeFloat=e=>/^\d+(\.\d+)?$/.test(e);c.checkNotPositiveFloat=e=>/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/.test(e);c.checkPositiveFloat=e=>/^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/.test(e);c.checkNegativeFloat=e=>/^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/.test(e);c.checkFloat=e=>/^(-?\d+)(\.\d+)?$/.test(e),c.default={checkPhone:c.checkPhone,checkEmail:c.checkEmail,checkUrl:c.checkUrl,checkDomesticTelephone:c.checkDomesticTelephone,checkNotSpecial:c.checkNotSpecial,checkHtml:c.checkHtml,checkQQ:c.checkQQ,checkPostOffice:c.checkPostOffice,checkDateFormat:c.checkDateFormat,checkLowerCase:c.checkLowerCase,checkUpperCase:c.checkUpperCase,checkAlphabets:c.checkAlphabets,checkCID:c.checkCID,checkIP:c.checkIP,checkPasswordSpecification:c.checkPasswordSpecification,checkDChineseCharacterDetection:c.checkDChineseCharacterDetection,checkNumberUnderscoreletter:c.checkNumberUnderscoreletter,checkChineseNumberEnglishUnderline:c.checkChineseNumberEnglishUnderline,checkSpecialCharacters:c.checkSpecialCharacters,checkStrComposedOfNumber:c.checkStrComposedOfNumber,checkNumberLength:c.checkNumberLength,checkAppointLen:c.checkAppointLen,checkZeroAndNonZero:c.checkZeroAndNonZero,checkTwoDecimalplaces:c.checkTwoDecimalplaces,checkDecimalplaces:c.checkDecimalplaces,checkPND:c.checkPND,checkPositiveTDP:c.checkPositiveTDP,checkOandTPositive:c.checkOandTPositive,checkNonzeroPositive:c.checkNonzeroPositive,checkNonzeroNegative:c.checkNonzeroNegative,checkNotNegative:c.checkNotNegative,checkNotPositive:c.checkNotPositive,checkNotNegativeFloat:c.checkNotNegativeFloat,checkNotPositiveFloat:c.checkNotPositiveFloat,checkPositiveFloat:c.checkPositiveFloat,checkNegativeFloat:c.checkNegativeFloat,checkFloat:c.checkFloat}}})})); -------------------------------------------------------------------------------- /lib/typeOf.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var o=t();for(var r in o)("object"==typeof exports?exports:e)[r]=o[r]}}(window,(function(){return function(e){var t={};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}return o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=1)}([function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logError=t.ErrorMsg=void 0,t.ErrorMsg=function(e){if(e)throw new Error(e)},t.logError=function(e){e&&console.error(e)}},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeOf=void 0;const r=o(0);t.typeOf=e=>{const t={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object","[object Promise]":"promise"},o=Object.prototype.toString.call(e);return t.hasOwnProperty(o)?t[o]:((0,r.logError)("unable to recognise type: "+o),null)},t.default=t.typeOf}])})); -------------------------------------------------------------------------------- /lib/utils.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=3)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.logError=t.ErrorMsg=void 0,t.ErrorMsg=function(e){if(e)throw new Error(e)},t.logError=function(e){e&&console.error(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.typeOf=void 0;const n=r(0);t.typeOf=e=>{const t={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regExp","[object Undefined]":"undefined","[object Null]":"null","[object Object]":"object","[object Promise]":"promise"},r=Object.prototype.toString.call(e);return t.hasOwnProperty(r)?t[r]:((0,n.logError)("unable to recognise type: "+r),null)},t.default=t.typeOf},,function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.defer=t.createEventHandler=t.strJson=t.recomArrs=t.unique=t.getRawType=t.isStatic=t.capitalize=t.cached=t.getQueryByKey=t.delay=t.debounce=t.throttle=void 0;const o=n(r(1));t.throttle=(e,t=200)=>{let r=0;return(...n)=>{let o=(new Date).getTime();o-r>t&&(e.apply(this,n),r=o)}};t.debounce=(e,t=200)=>{let r=null;return(...n)=>{r&&clearTimeout(r),r=setTimeout(()=>{e.apply(this,n)},t)}};t.delay=(e=0)=>new Promise(t=>{setTimeout(t,e)});t.getQueryByKey=e=>decodeURIComponent((new RegExp("[?|&]"+e+"=([^&;]+?)(&|#|;|$)").exec(location.href)||[,""])[1].replace(/\+/g,"%20"))||null;t.cached=e=>{let t=Object.create(null);return function(r){return t[r]||(t[r]=e(r))}};t.capitalize=e=>e.charAt(0).toUpperCase()+e.slice(1);t.isStatic=e=>"string"==typeof e||"number"==typeof e||"boolean"==typeof e||null==e;t.getRawType=e=>Object.prototype.toString.call(e).slice(8,-1);t.unique=e=>{if(!Array.isArray(e))return e;let r=[],n=[],o=Object.create(null);return e.forEach(e=>{if((0,t.isStatic)(e)){let n=e+"_"+(0,t.getRawType)(e);o[n]||(o[n]=!0,r.push(e))}else n.includes(e)||(n.push(e),r.push(e))}),r};t.recomArrs=(e,t)=>{t||(t=2);const r=new Array(Math.ceil(e.length/t)).fill([]);let n=0;return e.forEach((e,o)=>{r[n]=[...r[n],e],(o+1)%t==0&&(n+=1)}),r};t.strJson=e=>{if("string"!==(0,o.default)(e))return e;try{return JSON.parse(e)}catch(t){return new Function("return "+e)()}},t.createEventHandler=function(e){return{addEventListener:(t,r)=>{t.addEventListener(e,r);return()=>t.removeEventListener(e,r)},dispatch:(t,r)=>{t.dispatchEvent(new CustomEvent(e,{detail:r}))}}};t.defer=()=>{const e={};return e.promise=new Promise((t,r)=>{e.resolve=t,e.reject=r}),e}}])})); -------------------------------------------------------------------------------- /lib/utils/Error.d.ts: -------------------------------------------------------------------------------- 1 | export declare function ErrorMsg(msg: string): void; 2 | export declare function logError(msg: string): void; 3 | -------------------------------------------------------------------------------- /lib/utils/converter.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: { 2 | read: (val: string) => string; 3 | write: (val: string) => string; 4 | }; 5 | export default _default; 6 | -------------------------------------------------------------------------------- /lib/utils/dataUtils.d.ts: -------------------------------------------------------------------------------- 1 | declare function parseNumber(num: number): number; 2 | declare function timeFormat(data: T): number | T; 3 | declare type timeSpanInter = (timeSpan?: number) => number; 4 | declare const timeSpanPositioning: timeSpanInter; 5 | declare function convertTimestamps(time: string): number | null; 6 | declare function dateUniFormat(date: T): T | null; 7 | export { parseNumber, timeFormat, timeSpanPositioning, convertTimestamps, dateUniFormat }; 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-hodgepodge", 3 | "version": "1.3.3", 4 | "description": "新增util模块defer,发布1.3.3版本", 5 | "main": "./lib/index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "dev": "cross-env NODE_ENV=development webpack-dev-server --config ./build/webpack.config.js", 9 | "build": "cross-env NODE_ENV=production webpack --config ./build/webpack.config.js" 10 | }, 11 | "author": "shan <272781702@qq.com>", 12 | "license": "MIT", 13 | "devDependencies": { 14 | "clean-webpack-plugin": "^2.0.0", 15 | "cross-env": "^7.0.2", 16 | "html-webpack-plugin": "^4.3.0", 17 | "ts-loader": "^5.3.3", 18 | "webpack": "^4.43.0", 19 | "webpack-cli": "^3.3.11", 20 | "webpack-dev-server": "^3.11.0" 21 | }, 22 | "dependencies": { 23 | "typescript": "^4.5.2" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | 2 | /* -------------------------- UTILS ---------------------------- */ 3 | import { 4 | throttle, 5 | debounce, 6 | delay, 7 | getQueryByKey, 8 | getRawType, 9 | cached, 10 | capitalize, 11 | isStatic, 12 | unique, 13 | 14 | tasInterface, 15 | recomArrs, 16 | strJson, 17 | createEventHandler, 18 | defer 19 | } from './packages/utils' 20 | 21 | 22 | /* --------------------------- cooick ----------------------------- */ 23 | 24 | import { 25 | getCookie, 26 | setCookie, 27 | removeCookie, 28 | } from './packages/cookie' 29 | 30 | 31 | /* --------------------------- localStorage ----------------------------- */ 32 | 33 | import { 34 | setLocalStorage, 35 | getLocalStorage, 36 | removeLocalStorage, 37 | } from './packages/localStorage' 38 | 39 | 40 | /* --------------------------- typeOf ----------------------------- */ 41 | import { typeOf } from './packages/typeOf' 42 | 43 | 44 | /* --------------------------- clipboard ----------------------------- */ 45 | import { clipboard } from './packages/clipboard' 46 | 47 | 48 | /* --------------------------- decopy ----------------------------- */ 49 | import { decopy } from './packages/decopy' 50 | 51 | 52 | /* --------------------------- regExp ----------------------------- */ 53 | import { 54 | checkAlphabets, 55 | checkAppointLen, 56 | checkCID, 57 | checkChineseNumberEnglishUnderline, 58 | checkDChineseCharacterDetection, 59 | checkDateFormat, 60 | checkDecimalplaces, 61 | checkDomesticTelephone, 62 | checkEmail, 63 | checkFloat, 64 | checkHtml, 65 | checkIP, 66 | checkLowerCase, 67 | checkNegativeFloat, 68 | checkNonzeroNegative, 69 | checkNonzeroPositive, 70 | checkNotNegative, 71 | checkNotNegativeFloat, 72 | checkNotPositive, 73 | checkNotPositiveFloat, 74 | checkNotSpecial, 75 | checkNumberLength, 76 | checkNumberUnderscoreletter, 77 | checkOandTPositive, 78 | checkPND, 79 | checkPasswordSpecification, 80 | checkPhone, 81 | checkPositiveFloat, 82 | checkPositiveTDP, 83 | checkPostOffice, 84 | checkQQ, 85 | checkSpecialCharacters, 86 | checkStrComposedOfNumber, 87 | checkTwoDecimalplaces, 88 | checkUpperCase, 89 | checkUrl, 90 | checkZeroAndNonZero, 91 | 92 | interCheck, 93 | superInterCheck, 94 | appointLenInterCheck, 95 | appointLen, 96 | optionsInter 97 | } from './packages/regExp' 98 | 99 | 100 | /* --------------------------- dete ----------------------------- */ 101 | import { 102 | getAfterCountDays, 103 | getFirstDayOfSeason, 104 | getHoroscope, 105 | getTime, 106 | getLastDayOfMonth, 107 | getWeek, 108 | getYearDay, 109 | getYearWeek, 110 | dateDifference, 111 | dateFormat, 112 | remainderTime, 113 | 114 | 115 | TimeOptionsFunc, 116 | dateType, 117 | TimeFormal 118 | 119 | } from './packages/date' 120 | 121 | 122 | export { 123 | decopy, 124 | defer, 125 | strJson, 126 | 127 | throttle, 128 | debounce, 129 | delay, 130 | getQueryByKey, 131 | getRawType, 132 | cached, 133 | capitalize, 134 | isStatic, 135 | unique, 136 | recomArrs, 137 | createEventHandler, 138 | 139 | tasInterface, 140 | 141 | getCookie, 142 | setCookie, 143 | removeCookie, 144 | 145 | setLocalStorage, 146 | getLocalStorage, 147 | removeLocalStorage, 148 | 149 | typeOf, 150 | clipboard, 151 | 152 | checkAlphabets, 153 | checkAppointLen, 154 | checkCID, 155 | checkChineseNumberEnglishUnderline, 156 | checkDChineseCharacterDetection, 157 | checkDateFormat, 158 | checkDecimalplaces, 159 | checkDomesticTelephone, 160 | checkEmail, 161 | checkFloat, 162 | checkHtml, 163 | checkIP, 164 | checkLowerCase, 165 | checkNegativeFloat, 166 | checkNonzeroNegative, 167 | checkNonzeroPositive, 168 | checkNotNegative, 169 | checkNotNegativeFloat, 170 | checkNotPositive, 171 | checkNotPositiveFloat, 172 | checkNotSpecial, 173 | checkNumberLength, 174 | checkNumberUnderscoreletter, 175 | checkOandTPositive, 176 | checkPND, 177 | checkPasswordSpecification, 178 | checkPhone, 179 | checkPositiveFloat, 180 | checkPositiveTDP, 181 | checkPostOffice, 182 | checkQQ, 183 | checkSpecialCharacters, 184 | checkStrComposedOfNumber, 185 | checkTwoDecimalplaces, 186 | checkUpperCase, 187 | checkUrl, 188 | checkZeroAndNonZero, 189 | 190 | getAfterCountDays, 191 | getFirstDayOfSeason, 192 | getHoroscope, 193 | getTime, 194 | getLastDayOfMonth, 195 | getWeek, 196 | getYearDay, 197 | getYearWeek, 198 | dateDifference, 199 | dateFormat, 200 | remainderTime, 201 | 202 | TimeOptionsFunc, 203 | dateType, 204 | TimeFormal, 205 | interCheck, 206 | superInterCheck, 207 | appointLenInterCheck, 208 | appointLen, 209 | optionsInter 210 | } 211 | 212 | export default { 213 | decopy, 214 | defer, 215 | strJson, 216 | 217 | throttle, 218 | debounce, 219 | delay, 220 | getQueryByKey, 221 | getRawType, 222 | cached, 223 | capitalize, 224 | isStatic, 225 | unique, 226 | recomArrs, 227 | createEventHandler, 228 | 229 | getCookie, 230 | setCookie, 231 | removeCookie, 232 | 233 | setLocalStorage, 234 | getLocalStorage, 235 | removeLocalStorage, 236 | 237 | typeOf, 238 | clipboard, 239 | 240 | checkAlphabets, 241 | checkAppointLen, 242 | checkCID, 243 | checkChineseNumberEnglishUnderline, 244 | checkDChineseCharacterDetection, 245 | checkDateFormat, 246 | checkDecimalplaces, 247 | checkDomesticTelephone, 248 | checkEmail, 249 | checkFloat, 250 | checkHtml, 251 | checkIP, 252 | checkLowerCase, 253 | checkNegativeFloat, 254 | checkNonzeroNegative, 255 | checkNonzeroPositive, 256 | checkNotNegative, 257 | checkNotNegativeFloat, 258 | checkNotPositive, 259 | checkNotPositiveFloat, 260 | checkNotSpecial, 261 | checkNumberLength, 262 | checkNumberUnderscoreletter, 263 | checkOandTPositive, 264 | checkPND, 265 | checkPasswordSpecification, 266 | checkPhone, 267 | checkPositiveFloat, 268 | checkPositiveTDP, 269 | checkPostOffice, 270 | checkQQ, 271 | checkSpecialCharacters, 272 | checkStrComposedOfNumber, 273 | checkTwoDecimalplaces, 274 | checkUpperCase, 275 | checkUrl, 276 | checkZeroAndNonZero, 277 | 278 | getAfterCountDays, 279 | getFirstDayOfSeason, 280 | getHoroscope, 281 | getTime, 282 | getLastDayOfMonth, 283 | getWeek, 284 | getYearDay, 285 | getYearWeek, 286 | dateDifference, 287 | dateFormat, 288 | remainderTime 289 | } -------------------------------------------------------------------------------- /src/packages/clipboard.ts: -------------------------------------------------------------------------------- 1 | import { logError } from "../utils/Error"; 2 | import typeOf from "./typeOf"; 3 | 4 | export const clipboard = ({ 5 | text, 6 | target 7 | }: { 8 | text?: string | number, 9 | target?: HTMLElement 10 | }) => { 11 | 12 | if (!text && !target) { 13 | return; 14 | } 15 | 16 | if(!!text && !['number', 'string'].includes(typeOf(text)!)) { 17 | return logError(`You cannot pass in anything other than number and string! var text type is ${ typeOf(text) }`) 18 | } 19 | 20 | const input = document.createElement("input"); 21 | 22 | input.setAttribute( 23 | "style", 24 | ` 25 | position: absolute; 26 | top: -99999em 27 | ` 28 | ); 29 | 30 | document.body.appendChild(input); 31 | 32 | input.value = (!!text ? text : target!.innerText) as string; 33 | input.select(); 34 | document.execCommand("copy"); 35 | 36 | document.body.removeChild(input); 37 | }; 38 | 39 | export default clipboard -------------------------------------------------------------------------------- /src/packages/cookie.ts: -------------------------------------------------------------------------------- 1 | import converter from "../utils/converter" 2 | import typeOf from "./typeOf" 3 | 4 | /** 5 | * 注入cooick到浏览器 6 | * @param key 值的key 7 | * @param val 设置的值 8 | * @param attributes 扩展属性,如设置有效期{ expires: Date.now() + 30 * 24 * 60 * 60 * 1000 } --- 有效期一个月 9 | * @returns 10 | */ 11 | export function setCookie( 12 | key: string, 13 | val: any, 14 | attributes?: { path?: string, expires?: any, [key: string]: any } 15 | ): void | string { 16 | 17 | if (typeOf(document) === 'undefined') { 18 | return 19 | } 20 | 21 | attributes = Object.assign({}, { path: '/' }, attributes) 22 | 23 | if (typeOf(attributes.expires) === 'number') { 24 | attributes.expires = new Date(Date.now() + attributes.expires * 864e5) 25 | } 26 | 27 | attributes.expires = attributes.expires?.toUTCString() 28 | 29 | key = encodeURIComponent(key) 30 | .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent) 31 | .replace(/[()]/g, escape) 32 | 33 | let stringifiedAttributes = '' 34 | for (const attributeName in attributes) { 35 | if (!attributes[attributeName]) { 36 | continue 37 | } 38 | 39 | stringifiedAttributes += '; ' + attributeName 40 | 41 | if (attributes[attributeName] === true) { 42 | continue 43 | } 44 | 45 | 46 | stringifiedAttributes += '=' + attributes[attributeName].split(';')[0] 47 | } 48 | 49 | return (document.cookie = 50 | key + '=' + converter.write(val) + stringifiedAttributes) 51 | 52 | } 53 | 54 | /** 55 | * 56 | * @param key 需要获取cooick的key 57 | * @returns 获取的val值 58 | */ 59 | export function getCookie(key: string): any { 60 | const cookies = document.cookie ? document.cookie.split('; ') : [] 61 | 62 | let jar: Record = {} 63 | 64 | for (let i = 0; i < cookies.length; i++) { 65 | const parts = cookies[i].split('=') 66 | const value = parts.slice(1).join('=') 67 | 68 | try { 69 | const found = decodeURIComponent(parts[0]) 70 | jar[found] = converter.read(value) 71 | 72 | if (key === found) { 73 | break 74 | } 75 | } catch (e) { } 76 | } 77 | 78 | return key ? jar[key] : jar 79 | } 80 | 81 | 82 | /** 83 | * 84 | * @param key 需要删除cooick的key 85 | * @param attributes 扩展属性 86 | */ 87 | export function removeCookie( 88 | key: string, 89 | attributes?: { path?: string, expires?: any, [key: string]: any } 90 | ) { 91 | setCookie(key, '', { ...attributes, expires: -1 }) 92 | } -------------------------------------------------------------------------------- /src/packages/date.ts: -------------------------------------------------------------------------------- 1 | import { convertTimestamps, dateUniFormat, parseNumber, timeSpanPositioning } from '../utils/dataUtils'; 2 | import { logError } from '../utils/Error'; 3 | import typeOf from './typeOf'; 4 | import decopy from './decopy'; 5 | 6 | export interface TimeFormal { 7 | startTime: number | string | Date 8 | endTime?: number | string | Date 9 | type?: 10 | | 'day' 11 | | 'hours' 12 | | 'minutes' 13 | | 'seconds' 14 | | 'HoursMinutes' 15 | | 'HoursMinutesSeconds' 16 | | 'timeHours' 17 | | 'timeHoursMinutes' 18 | } 19 | export type TimeOptionsFunc = (options: TimeFormal) => string | null 20 | 21 | export type dateType = (date: number | string | null) => string | null 22 | 23 | /** 24 | * 计算星座 25 | * @param date number | string(2021-11-30 10:20:30) | date 26 | * @returns ['摩羯', '水瓶', '双鱼', '白羊', '金牛', '双子', '巨蟹', '狮子', '处女', '天秤', '天蝎', '射手', '摩羯'] 其中一个 27 | */ 28 | export const getHoroscope: dateType = (date) => { 29 | if (!date) { 30 | logError('Date cannot be empty'); 31 | return null; 32 | } 33 | 34 | if (!(date = dateUniFormat(date as number)!)) { 35 | return null 36 | } 37 | 38 | const constellation: string[] = [ 39 | '摩羯', 40 | '水瓶', 41 | '双鱼', 42 | '白羊', 43 | '金牛', 44 | '双子', 45 | '巨蟹', 46 | '狮子', 47 | '处女', 48 | '天秤', 49 | '天蝎', 50 | '射手', 51 | '摩羯', 52 | ]; 53 | const timeTransformation: Date = new Date(date); 54 | const month = timeTransformation.getMonth() + 1; 55 | const day = timeTransformation.getDate(); 56 | const range = { true: 1, false: 0 }[ 57 | (day - 14 < 58 | ('865778999988'.charAt(month) as any as number)) as any as string 59 | ]; 60 | return constellation[month - range!] + '座'; 61 | } 62 | 63 | // 用户会传三种类型过来,必须规范输出类型 string 类型只支持 - 中位杠号分割日期 64 | 65 | /** 66 | * 时间差 67 | * @param options { startTime: string | number | null, endTime?: string | number | null, type?: ~~ } 68 | * @returns stirng | null 69 | */ 70 | export const dateDifference: TimeOptionsFunc = (options) => { 71 | let { startTime, type, endTime } = decopy(options) 72 | 73 | if (!startTime) { 74 | logError('startTime cannot be empty!') 75 | return null 76 | } 77 | 78 | if (!(startTime = dateUniFormat(startTime)!)) { 79 | return null 80 | } 81 | 82 | if (typeOf(startTime) === 'string') { 83 | if (!!convertTimestamps(startTime as string)) { 84 | startTime = convertTimestamps(startTime as string) as number 85 | } 86 | } 87 | 88 | if (!!endTime && typeOf(endTime) === 'string') { 89 | if (!!convertTimestamps(endTime as string)) { 90 | endTime = convertTimestamps(endTime as string) as number 91 | } 92 | } 93 | 94 | const dateBegin: any = startTime 95 | const dateEnd: any = endTime || new Date().getTime() 96 | 97 | const dateDiff: number = Math.abs(dateEnd - dateBegin) 98 | const dayDiff: number = Math.floor(dateDiff / (24 * 3600 * 1000)) 99 | const leave1: number = dateDiff % (24 * 3600 * 1000) 100 | const hours: number = Math.floor(leave1 / (3600 * 1000)) 101 | const leave2: number = leave1 % (3600 * 1000) 102 | const minutes: number = Math.floor(leave2 / (60 * 1000)) 103 | const leave3: number = leave2 % (60 * 1000) 104 | const seconds: number = Math.round(leave3 / 1000) 105 | 106 | switch (type) { 107 | case 'day': 108 | return dayDiff + '天'; 109 | case 'hours': 110 | return hours + '小时'; 111 | case 'minutes': 112 | return minutes + '分'; 113 | case 'seconds': 114 | return seconds + '秒'; 115 | case 'HoursMinutes': 116 | return hours + '小时 ' + minutes + '分'; 117 | case 'HoursMinutesSeconds': 118 | return hours + '小时 ' + minutes + '分 ' + seconds + '秒 '; 119 | case 'timeHours': 120 | return dayDiff + '天 ' + hours + '小时'; 121 | case 'timeHoursMinutes': 122 | return dayDiff + '天 ' + hours + '小时 ' + minutes + '分'; 123 | default: 124 | return ( 125 | dayDiff + '天 ' + hours + '小时 ' + minutes + '分 ' + seconds + '秒 ' 126 | ); 127 | } 128 | } 129 | 130 | /** 131 | * 时间格式化 132 | * @param date number | string | date 需要格式化的时间 133 | * @param formatStr: 格式化规则 如:{Y}-{MM}-{DD} {A} {t}:{ii} 134 | * @returns string 135 | * 136 | * * { 137 | * Y:年, 138 | * M: 不补0的月, 139 | * MM:补0的月 140 | * Mon:大写月 141 | * D: 日 如上 142 | * DD:日 如上 143 | * h:小时 如上 144 | * hh:小时如上 145 | * A:显示上午下午 146 | * i:分钟 147 | * ii: 分钟 148 | * s:秒钟 149 | * ss: 秒钟 150 | * } 151 | */ 152 | export function dateFormat( 153 | date: number | string | Date, 154 | formatStr: string = '{Y}-{MM}-{DD} {A} {t}:{ii}' 155 | ): string | null { 156 | if (!date) { 157 | logError('date cannot be empty!') 158 | return null 159 | } 160 | 161 | if (!(date = dateUniFormat(date as number)!)) { 162 | return null 163 | } 164 | 165 | date = new Date(date) 166 | const mon = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'] 167 | const hours = date.getHours() 168 | const t = hours > 12 ? hours - 12 : hours 169 | const dateObj = { 170 | 'Y': date.getFullYear(), 171 | 'M': date.getMonth() + 1, 172 | 'MM': parseNumber(date.getMonth() + 1), 173 | 'Mon': mon[date.getMonth()], 174 | 'D': date.getDate(), 175 | 'DD': parseNumber(date.getDate()), 176 | 'h': hours, 177 | 'hh': parseNumber(hours), 178 | 't': t, 179 | 'tt': parseNumber(t), 180 | 'A': hours > 12 ? '下午' : '上午', 181 | 'i': date.getMinutes(), 182 | 'ii': parseNumber(date.getMinutes()), 183 | 's': date.getSeconds(), 184 | 'ss': parseNumber(date.getSeconds()) 185 | } as Record 186 | 187 | while (/\{([^}]+)\}/.test(formatStr)) { 188 | formatStr = formatStr.replace(/\{([^}]+)\}/, dateObj[RegExp.$1]); 189 | } 190 | 191 | return formatStr 192 | } 193 | 194 | /** 195 | * 获取当前时间并格式化 196 | * @param formatStr string 格式化规则 如上 197 | * @returns string 格式化后的时间 198 | */ 199 | export function getTime(formatStr = '{Y}-{MM}-{DD} {A} {t}:{ii}'): string { 200 | return dateFormat(new Date, formatStr)! 201 | } 202 | 203 | /** 204 | * 获取本月的最后一天 205 | * @param type string 返回类型 date -- 标准日期格式 day -- 当月最后一天 formatDate -- 格式化后的时间 206 | * @param formatStr string 格式化规则 207 | * @returns 返回的时间格式 208 | */ 209 | export function getLastDayOfMonth( 210 | type: 'date' | 'day' | 'formatDate' = 'date', 211 | formatStr = '{Y}-{MM}-{DD} {A} {t}:{ii}' 212 | ): number | string | Date | null { 213 | 214 | if ( 215 | type === 'date' && 216 | !formatStr 217 | ) { 218 | logError('formatStr is no value!!') 219 | return null 220 | } 221 | 222 | const date = new Date 223 | date.setMonth(date.getMonth() + 1) 224 | date.setDate(0) 225 | 226 | 227 | if (type === 'formatDate') { 228 | return dateFormat(new Date(date), formatStr)! 229 | } else if (type === 'date') { 230 | return new Date(date) 231 | } else if (type === 'day') { 232 | return date.getDate() 233 | } 234 | return null 235 | } 236 | 237 | /** 238 | * 当月季度的第一天 239 | * @param type 240 | * @param formatStr 241 | * @returns 242 | */ 243 | export function getFirstDayOfSeason( 244 | type: 'date' | 'formatDate' = 'date', 245 | formatStr = '{Y}-{MM}-{DD} {A} {t}:{ii}' 246 | ) { 247 | if ( 248 | type === 'date' && 249 | !formatStr 250 | ) { 251 | logError('formatStr is no value!!') 252 | return null 253 | } 254 | 255 | const date = new Date() 256 | const month = date.getMonth() 257 | if (month < 3) { 258 | date.setMonth(0) 259 | } else if (2 < month && month < 6) { 260 | date.setMonth(3) 261 | } else if (5 < month && month < 9) { 262 | date.setMonth(6) 263 | } else if (8 < month && month < 11) { 264 | date.setMonth(9) 265 | } 266 | date.setDate(1) 267 | 268 | if (type === 'formatDate') { 269 | return dateFormat(new Date(date), formatStr)! 270 | } else if (type === 'date') { 271 | return new Date(date) 272 | } 273 | 274 | return null 275 | } 276 | 277 | export const getWeek = () => '日一二三四五六'.charAt(new Date().getDay()) 278 | 279 | /* 获取今天是当年的第几天 */ 280 | export const getYearDay = () => timeSpanPositioning(1) 281 | 282 | /* 获取今天是当年的第几周 */ 283 | export const getYearWeek = () => timeSpanPositioning(7) 284 | 285 | /* 获取今年还剩下多少时间 */ 286 | export function remainderTime() { 287 | const data = new Date() 288 | const nextYear = (data.getFullYear() + 1).toString() 289 | let lastDay = new Date((new Date(nextYear) as any as number) - 1).getTime() // 获取本年的最后一毫秒; 290 | const diff = lastDay - (data as any as number) // 毫秒数 291 | return Math.floor(diff / (1000 * 60 * 60 * 24)) 292 | } 293 | 294 | /** 295 | * 获取N天后的日期 296 | * @param count 297 | * @param date 298 | * @returns 299 | */ 300 | export function getAfterCountDays ( 301 | count: string | number, 302 | date: number | Date | string 303 | ) { 304 | 305 | if(!date) { 306 | logError('date is no value !!') 307 | return null 308 | } 309 | 310 | if(count == 0) { 311 | return new Date() 312 | } 313 | 314 | if (!(date = dateUniFormat(date as number)!)) { 315 | return null 316 | } 317 | 318 | date = new Date(date) 319 | 320 | date.setDate(date.getDate() + (count)) //获取N天后的日期 321 | 322 | return new Date(+date + 8 * 3600 * 1000).toJSON().substr(0, 19).replace('T', ' ').replace(/-/g, '-'); 323 | } 324 | 325 | export default { 326 | getHoroscope, 327 | dateDifference, 328 | dateFormat, 329 | getTime, 330 | getLastDayOfMonth, 331 | getFirstDayOfSeason, 332 | getWeek, 333 | getYearDay, 334 | getYearWeek 335 | } 336 | -------------------------------------------------------------------------------- /src/packages/decopy.ts: -------------------------------------------------------------------------------- 1 | import typeOf from "./typeOf" 2 | 3 | // 深拷贝 4 | export function decopy(data: T): T { 5 | let val = data as any 6 | 7 | switch (typeOf(val)) { 8 | case 'array': 9 | return val.map((c: any) => decopy(c)) 10 | case 'object': 11 | return Object.keys(val).reduce((ret: any, key: string) => { 12 | ret[key] = decopy(val[key]) 13 | return ret 14 | }, {}) 15 | case 'date': 16 | const newDate = new Date() 17 | newDate.setTime(val.getTime()) 18 | return newDate as any 19 | 20 | case 'regExp': 21 | let pattern = val.valueOf() 22 | let flags = '' 23 | flags += pattern.global ? 'g' : ''; 24 | flags += pattern.ignoreCase ? 'i' : ''; 25 | flags += pattern.multiline ? 'm' : ''; 26 | 27 | return new RegExp(pattern.source, flags) as any 28 | 29 | default: 30 | return val 31 | } 32 | } 33 | 34 | export default decopy 35 | -------------------------------------------------------------------------------- /src/packages/localStorage.ts: -------------------------------------------------------------------------------- 1 | import { logError } from "../utils/Error" 2 | 3 | /** 4 | * 存入storage缓存 5 | * @param key number | string 键值 6 | * @param value any 值 7 | * @param distance number 缓存有效期 8 | * 9 | * */ 10 | export function setLocalStorage({ 11 | value, 12 | key, 13 | distance 14 | }: T): void { 15 | 16 | if (!key || !value) { 17 | logError('Please pass in the corresponding key or value!') 18 | } 19 | 20 | localStorage.setItem(key, distance ? JSON.stringify({ 21 | distance, 22 | value, 23 | date: new Date().getTime() 24 | }) : value) 25 | 26 | } 27 | 28 | 29 | /** 30 | * 取出storage缓存 31 | * @param key number | string 键值 32 | * */ 33 | export function getLocalStorage(key: string): T | boolean { 34 | 35 | const data = JSON.parse(localStorage.getItem(key)) 36 | 37 | if (typeof data === 'string' || !data) { 38 | logError('The cache value has expired or the key is wrong!') 39 | return data 40 | } 41 | 42 | const { 43 | date, 44 | distance 45 | } = data as { value: string, distance: number | string, date: number } 46 | 47 | //@ts-ignore 48 | if (Date.now() - date > distance) { // 删除缓存,并且报错通知 49 | removeLocalStorage(key) 50 | 51 | return false 52 | } 53 | 54 | 55 | return data.value 56 | } 57 | 58 | /** 59 | * 删除storage缓存 60 | * @param key number | string 键值 61 | * */ 62 | 63 | export function removeLocalStorage(key: string) { 64 | localStorage.removeItem(key) 65 | } -------------------------------------------------------------------------------- /src/packages/regExp.ts: -------------------------------------------------------------------------------- 1 | export interface optionsInter { 2 | val: any, 3 | length: number 4 | } 5 | 6 | export interface appointLen { 7 | start: number, 8 | end: number, 9 | val: any 10 | } 11 | 12 | export type interCheck = (val: any) => boolean 13 | 14 | export type superInterCheck = (options: optionsInter) => boolean 15 | 16 | export type appointLenInterCheck = (options: appointLen) => boolean 17 | 18 | /*---------------------------------------------其他校验-------------------------------------------------------*/ 19 | 20 | /* 检测电话号码是否正确 */ 21 | export const checkPhone: interCheck = (val) => /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/.test(val) 22 | 23 | /* 检测是否是邮箱 */ 24 | export const checkEmail: interCheck = (val) => /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(val) 25 | 26 | /* 检测url是否合法 */ 27 | export const checkUrl: interCheck = (val) => /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/.test(val) 28 | 29 | /* 国内座机号码 */ 30 | export const checkDomesticTelephone: interCheck = (val) => /\d{3}-\d{8}|\d{4}-\d{7}/.test(val) 31 | 32 | /* 必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间 */ 33 | export const checkNotSpecial: appointLenInterCheck = (options) => new RegExp('^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{' + options.start + ',' + options.end + '}$').test(options.val) 34 | 35 | /* HTML标记 */ 36 | export const checkHtml: interCheck = (val) => new RegExp('<(\\S*?)[^>]*>.*?|<.*? />').test(val) 37 | 38 | /* 腾讯QQ号 */ 39 | export const checkQQ: interCheck = (val) => /[1-9][0-9]{4,}/.test(val) 40 | 41 | /* 中国邮政编码 */ 42 | export const checkPostOffice: interCheck = (val) => /[1-9]\d{5}(?!\d)/.test(val) 43 | 44 | /* IP地址 */ 45 | export const checkIP: interCheck = (val) => /^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$/.test(val) 46 | 47 | /*----------------------------------------字符串校验-----------------------------------------------------------*/ 48 | 49 | /* 日期格式 */ 50 | export const checkDateFormat: interCheck = (val) => /^\d{4}-\d{1,2}-\d{1,2}/.test(val) 51 | 52 | /* 小写字母*/ 53 | export const checkLowerCase: interCheck = (val) => /^[a-z]+$/.test(val) 54 | 55 | /* 大写字母*/ 56 | export const checkUpperCase: interCheck = (val) => /^[A-Z]+$/.test(val) 57 | 58 | /* 大小写字母*/ 59 | export const checkAlphabets: interCheck = (val) => /^[A-Za-z]+$/.test(val) 60 | 61 | /* 检验身份证 */ 62 | export const checkCID: interCheck = (val) => /^\d{15}|\d{18}$/.test(val) 63 | 64 | /* 以字母开头,长度在6~18之间,只能包含字母、数字和下划线 */ 65 | export const checkPasswordSpecification: appointLenInterCheck = (options) => new RegExp('^[a-zA-Z]\\w{' + options.start + ',' + options.end + '}$').test(options.val) 66 | 67 | /* 汉字 */ 68 | export const checkDChineseCharacterDetection: interCheck = (val) => /^[\u4e00-\u9fa5]*$/.test(val) 69 | 70 | /* 由数字、26个英文字母或者下划线组成的字符串 */ 71 | export const checkNumberUnderscoreletter: interCheck = (val) => /^\w+$/.test(val) 72 | 73 | /* 中文、英文、数字包括下划线 */ 74 | export const checkChineseNumberEnglishUnderline: interCheck = (val) => /^[\u4E00-\u9FA5A-Za-z0-9_]+$/.test(val) 75 | 76 | /* 中文、英文、数字但不包括下划线等符号 */ 77 | export const checkSpecialCharacters: interCheck = (val) => /^[\u4E00-\u9FA5A-Za-z0-9]+$/.test(val) 78 | 79 | /*---------------------------------------------数字校验-------------------------------------------------------*/ 80 | 81 | /* 验证字符串是否是数字*/ 82 | export const checkStrComposedOfNumber: interCheck = (val) => /^[0-9]+.?[0-9]*$/.test(val) 83 | 84 | /* 检测N位数 */ 85 | export const checkNumberLength: superInterCheck = (options) => new RegExp("^\\d{" + options.length + "}$").test(options.val) 86 | 87 | /* 检测m-n位的数字 */ 88 | export const checkAppointLen: appointLenInterCheck = (options) => new RegExp("^\\d{" + options.start + ',' + options.end + "}$").test(options.val) 89 | 90 | /* 零和非零开头的数字 */ 91 | export const checkZeroAndNonZero: interCheck = (val) => /^(0|[1-9][0-9]*)$/.test(val) 92 | 93 | /* 非零开头的最多带两位小数的数字 */ 94 | export const checkTwoDecimalplaces: interCheck = (val) => /^([1-9][0-9]*)+(.[0-9]{1,2})?$/.test(val) 95 | 96 | /* 带1-2位小数的正数或负数 */ 97 | export const checkDecimalplaces: interCheck = (val) => /^(\-)?\d+(\.\d{1,2})?$/.test(val) 98 | 99 | /* 正数、负数、和小数 */ 100 | export const checkPND: interCheck = (val) => /^(\-|\+)?\d+(\.\d+)?$/.test(val) 101 | 102 | /* 有两位小数的正实数 */ 103 | export const checkPositiveTDP: interCheck = (val) => /^[0-9]+(.[0-9]{2})?$/.test(val) 104 | 105 | /* 有1~3位小数的正实数 */ 106 | export const checkOandTPositive: interCheck = (val) => /^[0-9]+(.[0-9]{1,3})?$/.test(val) 107 | 108 | /* 非零的正整数 */ 109 | export const checkNonzeroPositive: interCheck = (val) => /^[1-9]\d*/.test(val) 110 | 111 | /* 非零的负整数 */ 112 | export const checkNonzeroNegative: interCheck = (val) => /^-[1-9]\d*$/.test(val) 113 | 114 | /* 非负整数 */ 115 | export const checkNotNegative: interCheck = (val) => /^\d+$/.test(val) 116 | 117 | /* 非正整数 */ 118 | export const checkNotPositive: interCheck = (val) => /^-[1-9]\d*|0$/.test(val) 119 | 120 | /* 非负浮点数 */ 121 | export const checkNotNegativeFloat: interCheck = (val) => /^\d+(\.\d+)?$/.test(val) 122 | 123 | /* 非正浮点数 */ 124 | export const checkNotPositiveFloat: interCheck = (val) => /^((-\d+(\.\d+)?)|(0+(\.0+)?))$/.test(val) 125 | 126 | /* 正浮点数 */ 127 | export const checkPositiveFloat: interCheck = (val) => /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/.test(val) 128 | 129 | /* 负浮点数 */ 130 | export const checkNegativeFloat: interCheck = (val) => /^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/.test(val) 131 | 132 | /* 浮点数 */ 133 | export const checkFloat: interCheck = (val) => /^(-?\d+)(\.\d+)?$/.test(val) 134 | 135 | 136 | export default { 137 | checkPhone, 138 | checkEmail, 139 | checkUrl, 140 | checkDomesticTelephone, 141 | checkNotSpecial, 142 | checkHtml, 143 | checkQQ, 144 | checkPostOffice, 145 | checkDateFormat, 146 | checkLowerCase, 147 | checkUpperCase, 148 | checkAlphabets, 149 | checkCID, 150 | checkIP, 151 | checkPasswordSpecification, 152 | checkDChineseCharacterDetection, 153 | checkNumberUnderscoreletter, 154 | checkChineseNumberEnglishUnderline, 155 | checkSpecialCharacters, 156 | checkStrComposedOfNumber, 157 | checkNumberLength, 158 | checkAppointLen, 159 | checkZeroAndNonZero, 160 | checkTwoDecimalplaces, 161 | checkDecimalplaces, 162 | checkPND, 163 | checkPositiveTDP, 164 | checkOandTPositive, 165 | checkNonzeroPositive, 166 | checkNonzeroNegative, 167 | checkNotNegative, 168 | checkNotPositive, 169 | checkNotNegativeFloat, 170 | checkNotPositiveFloat, 171 | checkPositiveFloat, 172 | checkNegativeFloat, 173 | checkFloat 174 | } -------------------------------------------------------------------------------- /src/packages/typeOf.ts: -------------------------------------------------------------------------------- 1 | import { logError } from "../utils/Error" 2 | 3 | export const typeOf = (target: any): 'boolean' | 'number' | 'string' | 'function' | 'array' | 'date' | 'regExp' | 'undefined' | 'null' | 'object' | 'promise' | 'regexp' | null => { 4 | const toString = Object.prototype.toString 5 | 6 | const map = { 7 | '[object Boolean]': 'boolean', 8 | '[object Number]': 'number', 9 | '[object String]': 'string', 10 | '[object Function]': 'function', 11 | '[object Array]': 'array', 12 | '[object Date]': 'date', 13 | '[object RegExp]': 'regExp', 14 | '[object Undefined]': 'undefined', 15 | '[object Null]': 'null', 16 | '[object Object]': 'object', 17 | '[object Promise]': 'promise' 18 | } 19 | 20 | const desc = toString.call(target) 21 | 22 | if(map.hasOwnProperty(desc)) { 23 | // @ts-ignore 24 | return map[desc] 25 | } else { 26 | logError(`unable to recognise type: ${ desc }`) 27 | 28 | return null 29 | } 30 | } 31 | 32 | export default typeOf -------------------------------------------------------------------------------- /src/packages/utils.ts: -------------------------------------------------------------------------------- 1 | import typeOf from "./typeOf" 2 | 3 | export type tasInterface = (func: any, aw?: number) => Function 4 | 5 | // 节流 6 | export const throttle: tasInterface = ( 7 | func, 8 | aw = 200 9 | ) => { 10 | let lastTime: number = 0 11 | return (...args: IArguments[]) => { 12 | let now = new Date().getTime() 13 | if (now - lastTime > aw) { 14 | func.apply(this, args) 15 | lastTime = now 16 | } 17 | } 18 | } 19 | 20 | // 防抖 21 | export const debounce: tasInterface = (func, awai = 200) => { 22 | let timer: any = null 23 | return (...args: any[]) => { 24 | if (timer) clearTimeout(timer) 25 | timer = setTimeout(() => { 26 | func.apply(this, args) 27 | }, awai) 28 | } 29 | } 30 | 31 | // 延迟执行 32 | export const delay = (dur: number = 0) => { 33 | return new Promise((resolve) => { 34 | setTimeout(resolve, dur) 35 | }) 36 | } 37 | 38 | // 获取标准URL上的参数 39 | export const getQueryByKey = 40 | (name: T): string | null | undefined => 41 | decodeURIComponent( 42 | ( 43 | (new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ""])[1] as any) 44 | .replace(/\+/g, '%20') 45 | ) || null 46 | 47 | // 缓存函数 48 | export const cached = (fn: T): Function => { 49 | let cache = Object.create(null); 50 | return function cachedFn(str: any) { 51 | let hit = cache[str]; 52 | return hit || (cache[str] = fn(str)) 53 | } 54 | } 55 | 56 | // 首字母大写 57 | export const capitalize = (val: T): string => val.charAt(0).toUpperCase() + val.slice(1) 58 | 59 | // 数据类型检测 60 | export const isStatic = (val: T): boolean => { 61 | return ( 62 | typeof val === 'string' || 63 | typeof val === 'number' || 64 | typeof val === 'boolean' || 65 | typeof val === 'undefined' || 66 | val === null 67 | ) 68 | } 69 | 70 | // 获取数据类型 71 | export const getRawType = (val: T): string => Object.prototype.toString.call(val).slice(8, -1) 72 | 73 | // 数组去重 74 | export const unique = (arr: T) => { 75 | if (!Array.isArray(arr)) { // 不是类数组对象 76 | return arr 77 | } 78 | let resultArr: any[] = [] 79 | let oar: any[] = [] 80 | let obj = Object.create(null) 81 | arr.forEach(item => { 82 | if (isStatic(item)) { // 是除了symbol外的原始数据 83 | let key = item + '_' + getRawType(item); 84 | if (!obj[key]) { 85 | obj[key] = true 86 | resultArr.push(item) 87 | } 88 | } else { // 引用类型及symbol 89 | if (!oar.includes(item)) { 90 | oar.push(item) 91 | resultArr.push(item) 92 | } 93 | } 94 | }) 95 | return resultArr 96 | } 97 | 98 | 99 | // 一维数组转为二维指定长度的数组 100 | export const recomArrs = ( 101 | data: any[] | T[], 102 | dim?: number 103 | ): Array => { 104 | 105 | if(!dim) { 106 | dim = 2 107 | } 108 | 109 | const arr = new Array(Math.ceil(data.length / dim)).fill([]) 110 | 111 | let index = 0 112 | data.forEach((c, i) => { 113 | arr[index] = [ 114 | ...arr[index], 115 | c 116 | ] 117 | if ((i + 1) % dim! === 0) { 118 | index += 1 119 | } 120 | }) 121 | 122 | return arr 123 | } 124 | 125 | // 指定字符串对象、数组转为标准Json 126 | export const strJson = ( 127 | str: string 128 | ): T => { 129 | 130 | if(typeOf(str) !== 'string') { 131 | return str as any 132 | } 133 | 134 | try { 135 | return JSON.parse(str) 136 | } catch { 137 | return (new Function(`return ${str}`)()) 138 | } 139 | } 140 | 141 | // 基于Window环境下的事件分发 142 | export function createEventHandler(name: string) { 143 | 144 | const addEventListener = ( 145 | Win: Window, 146 | fn: (e: { detail: DataType }) => void 147 | ) => { 148 | // @ts-ignore 149 | Win.addEventListener(name, fn) 150 | 151 | // @ts-ignore 152 | const eject = () => Win.removeEventListener(name, fn) 153 | 154 | return eject 155 | } 156 | 157 | const dispatch = ( 158 | Win: Window, 159 | data: DataType 160 | ) => { 161 | Win.dispatchEvent( 162 | new CustomEvent(name, { detail: data }) 163 | ) 164 | } 165 | 166 | return { 167 | addEventListener, 168 | dispatch 169 | } 170 | 171 | } 172 | 173 | export interface Defer { 174 | (): { 175 | resolve: () => void, 176 | reject: (...args: any[]) => void, 177 | promise: Promise 178 | }, 179 | 180 | (): { 181 | resolve: (val: T) => void, 182 | reject: (...args: any[]) => void, 183 | promise: Promise 184 | }, 185 | } 186 | 187 | // 统一Promise状态 188 | export const defer: Defer = () => { 189 | const dfd = {} as any 190 | 191 | dfd.promise = new Promise(( 192 | resolve, 193 | reject 194 | ) => { 195 | dfd.resolve = resolve as any 196 | dfd.reject = reject 197 | }) 198 | 199 | return dfd 200 | } 201 | 202 | -------------------------------------------------------------------------------- /src/template/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 1 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/utils/Error.ts: -------------------------------------------------------------------------------- 1 | 2 | export function ErrorMsg(msg: string): void { 3 | if (!msg) { 4 | return 5 | } 6 | throw new Error(msg) 7 | } 8 | 9 | export function logError(msg: string) { 10 | 11 | if (!msg) { 12 | return 13 | } 14 | 15 | console.error(msg) 16 | } -------------------------------------------------------------------------------- /src/utils/converter.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | read: (val: string) => { 3 | if(val[0] === '"') { 4 | val = val.slice(1, -1) 5 | } 6 | 7 | return val.replace(/(%[\dA-F]{2})+/gi, decodeURIComponent) 8 | }, 9 | 10 | write: (val: string) => { 11 | return encodeURIComponent(val).replace( 12 | /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g, 13 | decodeURIComponent 14 | ) 15 | } 16 | } -------------------------------------------------------------------------------- /src/utils/dataUtils.ts: -------------------------------------------------------------------------------- 1 | import { logError } from "./Error"; 2 | import typeOf from "../packages/typeOf"; 3 | 4 | /* 5 | * 给双位数补0 6 | * @params num: 转换的值 7 | * */ 8 | function parseNumber(num: number): number { 9 | return num < 10 ? 0 + num : num; 10 | } 11 | 12 | /* 13 | * 统一时间戳长度 14 | * @params data: 时间戳 15 | * */ 16 | function timeFormat(data: T): number | T { 17 | // @ts-ignore 18 | return data.toString().length < 13 ? data * 1000 : data 19 | } 20 | 21 | /* 22 | * 时间跨度定位 23 | * @params timeSpan number 年转换 24 | * 25 | * */ 26 | type timeSpanInter = (timeSpan?: number) => number 27 | const timeSpanPositioning: timeSpanInter = (timeSpan = 1) => { 28 | // @ts-ignore 29 | return Math.ceil((new Date() - new Date(new Date().getFullYear().toString())) / (24 * 60 * 60 * 1000) / timeSpan) 30 | } 31 | 32 | function convertTimestamps(time: string): number | null { 33 | if (/-/g.test(time)) { 34 | return new Date(time.replace(/-/g, "/")).getTime() 35 | } else { 36 | logError('The date format is incorrect. The recommended format is standard timestamp, or date, or XXXX-XX-XX HH: mm: SS') 37 | return null 38 | } 39 | 40 | } 41 | function dateUniFormat(date: T): T | null { 42 | if( 43 | ['string', 'date', 'number'].indexOf(typeOf(date)) === -1 44 | ) { 45 | logError(`Expected string、number、date type, but got ${typeOf(date)} type`) 46 | return null 47 | } 48 | 49 | if(typeOf(date) === 'number') { 50 | date = timeFormat(date) as T 51 | } 52 | 53 | return date 54 | } 55 | 56 | 57 | export { 58 | parseNumber, 59 | timeFormat, 60 | timeSpanPositioning, 61 | convertTimestamps, 62 | dateUniFormat 63 | } 64 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Basic Options */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | "target": "es2016", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ 8 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ 9 | // "lib": [], /* Specify library files to be included in the compilation. */ 10 | // "allowJs": true, /* Allow javascript files to be compiled. */ 11 | // "checkJs": true, /* Report errors in .js files. */ 12 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 13 | "declaration": true, /* Generates corresponding '.d.ts' file. */ 14 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 15 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 16 | // "outFile": "./", /* Concatenate and emit output to single file. */ 17 | "outDir": "./lib", /* Redirect output structure to the directory. */ 18 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 19 | // "composite": true, /* Enable project compilation */ 20 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 21 | // "removeComments": true, /* Do not emit comments to output. */ 22 | // "noEmit": true, /* Do not emit outputs. */ 23 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 24 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 25 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 26 | 27 | /* Strict Type-Checking Options */ 28 | "strict": true, /* Enable all strict type-checking options. */ 29 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 30 | // "strictNullChecks": true, /* Enable strict null checks. */ 31 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 32 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 33 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 34 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 35 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 36 | 37 | /* Additional Checks */ 38 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 39 | // "noUnusedParameters": true, /* Report errors on unused parameters. * 40 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 41 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 42 | 43 | /* Module Resolution Options */ 44 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 45 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 46 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 47 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 48 | // "typeRoots": [], /* List of folders to include type definitions from. */ 49 | // "types": [], /* Type declaration files to be included in compilation. */ 50 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 51 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 52 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 53 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 54 | 55 | /* Source Map Options */ 56 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 58 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 59 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 60 | 61 | /* Experimental Options */ 62 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 63 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 64 | 65 | /* Advanced Options */ 66 | "skipLibCheck": true, /* Skip type checking of declaration files. */ 67 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 68 | }, 69 | "exclude": [ 70 | "./lib" 71 | ] 72 | } 73 | --------------------------------------------------------------------------------