├── .eslintrc.js ├── .gitignore ├── .prettierrc.js ├── LICENSE ├── README.md ├── _src ├── ajax │ ├── browser.ts │ ├── h5.ts │ ├── imgs │ │ ├── liu.png │ │ ├── san2.png │ │ ├── shi.png │ │ └── te.png │ ├── index.ts │ ├── lib.ts │ ├── node-http.ts │ └── readme.md ├── assign │ ├── index.ts │ └── readme.md ├── cache │ ├── index.ts │ └── readme.md ├── cookie │ ├── index.ts │ └── readme.md ├── date │ ├── index.ts │ └── readme.md ├── debug │ ├── index.ts │ └── readme.md ├── each │ ├── index.ts │ └── readme.md ├── event │ ├── index.ts │ └── readme.md ├── lake │ └── index.ts ├── md5 │ ├── index.ts │ └── readme.md ├── qs │ ├── index.ts │ └── readme.md ├── readme.md ├── slip │ ├── index.ts │ └── readme.md ├── sole │ ├── index.ts │ └── readme.md ├── storage │ ├── index.ts │ └── readme.md ├── timeDown │ └── index.ts ├── util │ ├── getFullUrl.ts │ └── loadJS.ts ├── validata │ ├── index.ts │ └── readme.md ├── vueFn │ ├── index.ts │ └── readme.md ├── vueLake │ ├── index.ts │ └── readme.md ├── vueLife │ ├── imgs │ │ └── tu.png │ ├── index.ts │ └── readme.md └── vueUnicom │ ├── index.ts │ └── readme.md ├── ajax ├── browser.d.ts ├── browser.js ├── browser.js.map ├── h5.d.ts ├── h5.js ├── h5.js.map ├── index.d.ts ├── index.js ├── index.js.map ├── lib.d.ts ├── lib.js ├── lib.js.map ├── node-http.d.ts ├── node-http.js └── node-http.js.map ├── assign ├── index.d.ts ├── index.js └── index.js.map ├── cache ├── index.d.ts ├── index.js └── index.js.map ├── clean.js ├── cookie ├── index.d.ts ├── index.js └── index.js.map ├── date ├── index.d.ts ├── index.js └── index.js.map ├── debug ├── index.d.ts ├── index.js └── index.js.map ├── each ├── index.d.ts ├── index.js └── index.js.map ├── event ├── index.d.ts ├── index.js └── index.js.map ├── lake ├── index.d.ts ├── index.js └── index.js.map ├── md5 ├── index.d.ts ├── index.js └── index.js.map ├── package.json ├── qs ├── index.d.ts ├── index.js └── index.js.map ├── slip ├── index.d.ts ├── index.js └── index.js.map ├── sole ├── index.d.ts ├── index.js └── index.js.map ├── storage ├── index.d.ts ├── index.js └── index.js.map ├── timeDown ├── index.d.ts ├── index.js └── index.js.map ├── tsconfig.json ├── util ├── getFullUrl.d.ts ├── getFullUrl.js ├── getFullUrl.js.map ├── loadJS.d.ts ├── loadJS.js └── loadJS.js.map ├── validata ├── index.d.ts ├── index.js └── index.js.map ├── vueFn ├── index.d.ts ├── index.js └── index.js.map ├── vueLake ├── index.d.ts ├── index.js └── index.js.map ├── vueLife ├── index.d.ts ├── index.js └── index.js.map ├── vueUnicom ├── index.d.ts ├── index.js └── index.js.map └── yarn.lock /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parser: "@typescript-eslint/parser", 6 | plugins: ["@typescript-eslint"], 7 | extends: ["plugin:react/recommended", "plugin:@typescript-eslint/recommended", "prettier", "prettier/@typescript-eslint"], 8 | // add your custom rules here 9 | rules: { 10 | // allow async-await 11 | "generator-star-spacing": "off", 12 | // 引号类型 `` "" '' 不限制 13 | quotes: [0, "single"], 14 | // 缩进风格4空格, switch 不验证 15 | indent: [ 16 | "error", 17 | 4, 18 | { 19 | SwitchCase: 1 20 | } 21 | ], 22 | // 空行最多不能超过 5 行 23 | "no-multiple-empty-lines": [ 24 | 1, 25 | { 26 | max: 5 27 | } 28 | ], 29 | // 一行结束后面不要有空格 这个限制不开启,压缩代码会自动去掉 30 | "no-trailing-spaces": 0, 31 | // 注释风格要不要有空格什么的 32 | "spaced-comment": 0, 33 | // 语句强制分号结尾 34 | semi: [0, "always"], 35 | // 必须使用全等 36 | eqeqeq: 0, 37 | // 文件以单一的换行符结束 38 | "eol-last": 0, 39 | // 函数定义时括号前面要不要有空格 不检测 40 | "space-before-function-paren": [0, "always"], 41 | // reutrn 后面可以为空 42 | "no-useless-return": 0, 43 | // 不能有声明后未被使用的变量或参数 提示 44 | "no-unused-vars": [ 45 | 1, 46 | { 47 | vars: "all", 48 | args: "after-used" 49 | } 50 | ], 51 | // 连续声明 允许 52 | "one-var": 0, 53 | // 小括号里面要不要有空格 不检查 54 | "space-in-parens": [0, "never"], 55 | // new 不做检测 56 | "no-new": 0, 57 | // 函数名首行大写必须使用new方式调用,首行小写必须用不带new方式调用 58 | "new-cap": 1, 59 | // 禁止重复声明变量 60 | "no-redeclare": 2, 61 | // 允许 尤达条件 62 | yoda: [0, "never"], 63 | // 强制驼峰法命名 提示 64 | camelcase: 1, 65 | // 使用tabs 提示 66 | "no-tabs": 1, 67 | // 计算属性内,不应该对 属性赋值, 提示 68 | "vue/no-side-effects-in-computed-properties": 1, 69 | // callback 正常回调 70 | "standard/no-callback-literal": 0, 71 | // 不能有不规则的空格 提示 72 | "no-irregular-whitespace": 1, 73 | // 块语句内行首行尾是否要空行 74 | "padded-blocks": 0, 75 | // 换行风格 不验证 76 | "linebreak-style": [0, "windows"], 77 | // && || 不验证意图 78 | "no-mixed-operators": 0, 79 | // 逗号前后的空格 80 | "comma-spacing": 0, 81 | // 头部import 不验证 82 | "import/first": 0, 83 | // 必须使用合法的typeof的值 84 | "valid-typeof": 0, 85 | // allow debugger during development 86 | "no-debugger": 2, 87 | "no-empty": [ 88 | 2, 89 | { 90 | // 允许 try catch中空白花括号对 91 | allowEmptyCatch: true 92 | } 93 | ], 94 | "no-console": [ 95 | 1, 96 | { 97 | allow: ["warn", "error"] 98 | } 99 | ] 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Build and Release Folders 2 | bin-debug/ 3 | bin-release/ 4 | [Oo]bj/ 5 | [Bb]in/ 6 | 7 | # Other files and folders 8 | .settings/ 9 | 10 | # Executables 11 | *.swf 12 | *.air 13 | *.ipa 14 | *.apk 15 | 16 | # Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` 17 | # should NOT be excluded as they contain compiler settings and other important 18 | # information for Eclipse / Flash Builder. 19 | 20 | node_modules 21 | .DS_Store 22 | package-lock.json 23 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | //.prettierrc.js 2 | module.exports = { 3 | ignored: false, 4 | tabWidth: 4, //一个tab代表几个空格数,默认为80 5 | useTabs: false, //是否使用tab进行缩进,默认为false,表示用空格进行缩减 6 | singleQuote: false, // //字符串是否使用单引号,默认为false,使用双引号 7 | printWidth: 12000, // 换行字符串阈值 8 | semi: false, // 句末加分号,默认为true 9 | trailingComma: "none", //是否使用尾逗号,有三个可选值"" 10 | bracketSpacing: true, //对象大括号直接是否有空格,默认为true,效果:{ foo: bar } 11 | jsxBracketSameLine: false, // jsx > 是否另起一行 12 | arrowParens: "avoid", // (x) => {} 是否要有小括号 13 | requirePragma: false, // 是否要注释来决定是否格式化代码 14 | proseWrap: "preserve" // 是否要换行 15 | } 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 张钰峰 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | npm 4 | 5 | 6 | npm 7 | 8 |

9 | # 使用TS写的一些浏览器js的周边 10 | 11 | ## npm 12 | 13 | [https://www.npmjs.com/package/rimjs](https://www.npmjs.com/package/rimjs) 14 | 15 | ## 更新日志 16 | [2021-2-7] ajax支持nodejs(FormData没测试),使用方式不变 17 | [2021-04-30] vueLake、vueUnicom 支持通过参数 useProps:false 设置禁用全局的 name 和 id功能 18 | [2021-12-31] ajax中 orgin 改为 origin,ajax已经重构为原生支持nodejs,也能支持FormData 使用内部定义的 NodeFormData来传递参数 19 | 20 | ## 功能 21 | | 名称 | 说明 | 22 | | --------------------------------------- | ------------------------------------------- | 23 | | [Ajax](https://github.com/szpoppy/rimjs/blob/master/_src/ajax/readme.md) | 封装了一套ajax处理,支持jsonp和短路径 | 24 | | [assign](https://github.com/szpoppy/rimjs/blob/master/_src/assign/readme.md) | 深度拷贝<assing>以及合并<merge> | 25 | | [cache](https://github.com/szpoppy/rimjs/blob/master/_src/cache/readme.md) | 缓存机制,第一次加载请求,然后缓存 | 26 | | [cookie](https://github.com/szpoppy/rimjs/blob/master/_src/cookie/readme.md) | cookie封装 | 27 | | [date](https://github.com/szpoppy/rimjs/blob/master/_src/date/readme.md) | date处理函数封装 | 28 | | [debug](https://github.com/szpoppy/rimjs/blob/master/_src/debug/readme.md) | 调试功能封装 | 29 | | [each](https://github.com/szpoppy/rimjs/blob/master/_src/each/readme.md) | 类似原生的forEach,对象的循环 | 30 | | [event](https://github.com/szpoppy/rimjs/blob/master/_src/event/readme.md) | 通用事件封装,ajax就是基于这个实现 | 31 | | [md5](https://github.com/szpoppy/rimjs/blob/master/_src/md5/readme.md) | md5封装,来自网络第三方 | 32 | | [qs](https://github.com/szpoppy/rimjs/blob/master/_src/qs/readme.md) | querystring的实现 | 33 | | [slip](https://github.com/szpoppy/rimjs/blob/master/_src/slip/readme.md) | 点击后移动的封装 | 34 | | [sole](https://github.com/szpoppy/rimjs/blob/master/_src/sole/readme.md) | 返回页面唯一的id字符串 | 35 | | [storage](https://github.com/szpoppy/rimjs/blob/master/_src/storage/readme.md) | 对原生的本地存储强化封装 | 36 | | [validata](https://github.com/szpoppy/rimjs/blob/master/_src/validate/readme.md) | 一些验证函数集合 | 37 | | [vueFn](https://github.com/szpoppy/rimjs/blob/master/_src/vueFn/readme.md) | vue的一套函数式编程 | 38 | | [vueLife](https://github.com/szpoppy/rimjs/blob/master/_src/vueLife/readme.md) | vue自定义生命周期 | 39 | | [vueUnicom](https://github.com/szpoppy/rimjs/blob/master/_src/vueUnicom/readme.md) | vue的组件通讯 | 40 | | [vueLake](https://github.com/szpoppy/rimjs/blob/master/_src/vueLake/readme.md) | vue的组件通讯,vueUnicom升级,支持异步模式 | 41 | -------------------------------------------------------------------------------- /_src/ajax/h5.ts: -------------------------------------------------------------------------------- 1 | import { AjaxGroup, ajaxGlobal, fixedURL, getParamString } from "./lib" 2 | import "./browser" 3 | export * from "./lib" 4 | 5 | export let ajaxUtil = { 6 | fixedURL, 7 | toParam: getParamString 8 | } 9 | 10 | export let ajax = Object.assign(new AjaxGroup(), { global: ajaxGlobal, Group: AjaxGroup, util: ajaxUtil }) 11 | export default ajax 12 | -------------------------------------------------------------------------------- /_src/ajax/imgs/liu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szpoppy/rimjs/2ec8e2635bae9a05b674db17e5703bc9c4b8338c/_src/ajax/imgs/liu.png -------------------------------------------------------------------------------- /_src/ajax/imgs/san2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szpoppy/rimjs/2ec8e2635bae9a05b674db17e5703bc9c4b8338c/_src/ajax/imgs/san2.png -------------------------------------------------------------------------------- /_src/ajax/imgs/shi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szpoppy/rimjs/2ec8e2635bae9a05b674db17e5703bc9c4b8338c/_src/ajax/imgs/shi.png -------------------------------------------------------------------------------- /_src/ajax/imgs/te.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szpoppy/rimjs/2ec8e2635bae9a05b674db17e5703bc9c4b8338c/_src/ajax/imgs/te.png -------------------------------------------------------------------------------- /_src/ajax/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | function getDefaultAdapter() { 3 | var adapter; 4 | if (typeof XMLHttpRequest !== 'undefined') { 5 | // For browsers use XHR adapter 6 | adapter = require('./adapters/xhr'); 7 | } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { 8 | // For node use HTTP adapter 9 | adapter = require('./adapters/http'); 10 | } 11 | return adapter; 12 | } 13 | */ 14 | import { AjaxGroup, ajaxGlobal, fixedURL, getParamString } from "./lib" 15 | export * from "./lib" 16 | 17 | export let ajaxUtil = { 18 | fixedURL, 19 | toParam: getParamString 20 | } 21 | require(typeof process !== "undefined" && Object.prototype.toString.call(process) === "[object process]" 22 | ? // node 23 | "./node-http" 24 | : // 浏览器 25 | "./browser") 26 | 27 | export let ajax = Object.assign(new AjaxGroup(), { global: ajaxGlobal, Group: AjaxGroup, util: ajaxUtil }) 28 | export default ajax 29 | -------------------------------------------------------------------------------- /_src/assign/index.ts: -------------------------------------------------------------------------------- 1 | import forEach from "../each" 2 | 3 | // 用于类型判断 4 | const _toString: Function = Object.prototype.toString 5 | 6 | function __assign(target: any, source: object, flag = false): any { 7 | forEach(source, function(item, n): void { 8 | if (item) { 9 | let type = _toString.call(item).toLowerCase() 10 | let isTArr = type == "[object array]" 11 | let isTObj = type == "[object object]" 12 | if (type == "[object date]") { 13 | target[n] = new Date(item.getTime()) 14 | return 15 | } 16 | 17 | let targetType = _toString.call(target[n]).toLowerCase() 18 | if (isTArr || isTObj) { 19 | // 数组 或者 对象 20 | if (target[n] == null || (!flag && targetType != type)) { 21 | target[n] = isTArr ? [] : {} 22 | } 23 | __assign(target[n], item, flag) 24 | return 25 | } 26 | } 27 | target[n] = item 28 | }) 29 | return target 30 | } 31 | 32 | function _assign(target: any, objs: Array, flag = false): any { 33 | forEach(objs, function(source: object) { 34 | __assign(target, source, flag) 35 | }) 36 | return target 37 | } 38 | 39 | /** 40 | * 深度混合 对象 41 | * @param target 42 | * @param objs 每个单元应该同target 的数据类型一致 43 | */ 44 | export function merge(target: T, source: U): T & U 45 | export function merge(target: T, source1: U, source2: V): T & U & V 46 | export function merge(target: T, source1: U, source2: V, source3: W): T & U & V & W 47 | export function merge(target: object, ...sources: any[]): any { 48 | return _assign(target, sources, true) 49 | } 50 | 51 | /** 52 | * 深度克隆 对象 53 | * @param target 54 | * @param objs 每个单元应该同target 的数据类型一致 55 | */ 56 | export function assign(target: T, source: U): T & U 57 | export function assign(target: T, source1: U, source2: V): T & U & V 58 | export function assign(target: T, source1: U, source2: V, source3: W): T & U & V & W 59 | export function assign(target: object, ...sources: any[]): any { 60 | return _assign(target, sources, false) 61 | } 62 | 63 | export default { 64 | merge, 65 | assign 66 | } 67 | -------------------------------------------------------------------------------- /_src/assign/readme.md: -------------------------------------------------------------------------------- 1 | ```js 2 | import { assign, merge } from "rimjs/assign" 3 | // or am.assign am.merge 4 | import am from "rimjs/assign" 5 | 6 | // assign 同 Object.assign,不同之处是 这个为深度克隆 7 | 8 | // merge 是将连个对象合并(深度) 9 | // merge 对于数组,不会重置,只会合并 10 | ``` 11 | -------------------------------------------------------------------------------- /_src/cache/index.ts: -------------------------------------------------------------------------------- 1 | type initedNum = 0 | 2 2 | type setDataFn = (data: any, initNum?: initedNum) => void 3 | type getDataFn = (setData: setDataFn, para: any) => void 4 | 5 | type backFn = (value: T) => void 6 | 7 | class Cache { 8 | backs: backFn[] = [] 9 | inited: initedNum | 1 = 0 10 | date: number = new Date().getTime() 11 | data!: T 12 | 13 | setData(data: T, inited: initedNum | Boolean = true) { 14 | if (inited == 2 || inited === true) { 15 | // 为0,异常,不更新 16 | this.data = data 17 | } 18 | 19 | this.inited = inited ? 2 : 0 20 | 21 | while (this.backs.length) { 22 | let fn = this.backs.shift() as backFn 23 | fn(data) 24 | } 25 | } 26 | } 27 | 28 | function getKeyDef(para: any): string { 29 | if (typeof para == "string") { 30 | return para 31 | } 32 | if (para && para.toString) { 33 | return para.toString() 34 | } 35 | return ":default" 36 | } 37 | 38 | export interface IPromiseCacheBackFn { 39 | (para?: any) : Promise 40 | caches: Record> 41 | } 42 | 43 | export function promiseCache(getFn: getDataFn, eTime: number = 0, getKey: (key: any) => string = getKeyDef): IPromiseCacheBackFn { 44 | let caches: Record> = {} 45 | let cacheFn = function(para = null) { 46 | let key = getKey(para) 47 | let cache = caches[key] 48 | if (cache && cache.inited == 2 && eTime > 0 && cache.date + eTime < new Date().getTime()) { 49 | // 已经过期了 50 | cache.inited = 0 51 | } 52 | if (!cache) { 53 | // 不存在或者过期了 54 | cache = caches[key] = new Cache() 55 | } 56 | 57 | // 直接返回已经存在 58 | return new Promise(function(resolve) { 59 | if (cache.inited > 1) { 60 | resolve(cache.data) 61 | return 62 | } 63 | cache.backs.push(resolve) 64 | 65 | if (cache.inited < 1) { 66 | cache.inited = 1 67 | getFn(function(data, inited) { 68 | cache.setData(data, inited) 69 | }, para) 70 | } 71 | }) 72 | } as IPromiseCacheBackFn 73 | cacheFn.caches = caches 74 | return cacheFn 75 | } 76 | 77 | export default { 78 | promise: promiseCache 79 | } 80 | -------------------------------------------------------------------------------- /_src/cache/readme.md: -------------------------------------------------------------------------------- 1 | # cache 异步缓存化 2 | 3 | ## 使用 4 | 5 | `import { promiseCache } from "rimjs/cache"` 6 | 7 | ```ts 8 | // 按照字母查询 9 | let getCityByLetter = promiseCache(function(set, key) { 10 | // 第一次请求会 调用此函数获取数据 11 | request.load( 12 | "webapi:getcitylistbyletter.html", 13 | function({ res }) { 14 | let locs = res.getData("TrainStation.StationList") || [] 15 | let citys: City[] = [] 16 | locs.forEach((loc: any) => { 17 | citys.push(new City({ id: loc.ID, name: loc.Name, city: loc.CityName })) 18 | }) 19 | // 获取到数据后,设置数据 20 | set(citys) 21 | }, 22 | { Letter: key, AllCity: 0 } 23 | ) 24 | }) 25 | 26 | // 直接调用,按照letter 分类缓存数据 27 | // 缓存数据无有效期,并且只在内存中 28 | let citys = await getCityByLetter(letter) 29 | ``` -------------------------------------------------------------------------------- /_src/cookie/index.ts: -------------------------------------------------------------------------------- 1 | type TExpiration = number | string | Date 2 | function getExpiration(expiration: TExpiration): Date { 3 | if (typeof expiration === "number") { 4 | if (expiration == -1) { 5 | // 永久 6 | return new Date("3000/01/01") 7 | } 8 | // 数字,为 天数 9 | return new Date(new Date().getTime() + expiration * 24 * 60 * 60 * 1000) 10 | } 11 | if (typeof expiration === "string") { 12 | let match = expiration.match(/^\s*(\d)+\s*([dhm])\s*$/) 13 | if (match) { 14 | let date = new Date() 15 | switch (match[2]) { 16 | case "d": 17 | date.setDate(date.getDate() + parseInt(match[1])) 18 | break 19 | case "m": 20 | date.setMinutes(date.getMinutes() + parseInt(match[1])) 21 | break 22 | case "h": 23 | date.setHours(date.getHours() + parseInt(match[1])) 24 | break 25 | } 26 | return date 27 | } 28 | return new Date( 29 | expiration 30 | .replace(/-/g, "/") 31 | .replace(/T/, " ") 32 | .replace(/\.\d*$/, "") 33 | ) 34 | } 35 | return expiration 36 | } 37 | 38 | /** 39 | * 获取cookie 40 | * @param {String} key 41 | */ 42 | export function getCookie(key: string): string { 43 | return new RegExp("; ?" + key + "=([^;]*);?").test("; " + document.cookie) ? decodeURIComponent(RegExp.$1) : "" 44 | } 45 | 46 | /** 47 | * 设置cookie 48 | * @param {String} key 49 | * @param {String} value 50 | * @param {Number|String|Date} expiration 0:进程,-1:永久,数字:天数,字符串,日期 51 | * @param {Number|String|Date} expiration 1d 1天 1h 1小时 1m 1分钟 52 | * @param {String} path 文档路径 53 | * @param {String} domain 域名,可以设置主域名 54 | */ 55 | export function setCookie(key: string, value: string, expiration: TExpiration = 0, path?: string, domain?: string): void { 56 | let str = key + "=" + encodeURIComponent(value) 57 | if (expiration) { 58 | str += "; expires=" + getExpiration(expiration).toString() 59 | } 60 | if (path) { 61 | str += "; path=" + path 62 | } 63 | if (domain) { 64 | str += "; domain=" + domain 65 | } 66 | 67 | document.cookie = str 68 | } 69 | 70 | /** 71 | * 移除cookie 72 | * @param {*} key 73 | * @param {*} path 文档路径 74 | * @param {*} domain 域名,可以设置主域名 75 | */ 76 | export function removeCookie(key: string, path?: string, domain?: string): void { 77 | let str = key + "=; expires=" + new Date(0).toString() 78 | if (path) { 79 | str += "; path=" + path 80 | } 81 | if (domain) { 82 | str += "; domain=" + domain 83 | } 84 | document.cookie = str 85 | } 86 | 87 | // 预先设置好 过期时间 路径 域名 88 | export default class Cookie { 89 | expiration?: Date 90 | path?: string 91 | domain?: string 92 | 93 | constructor({ expiration, path, domain }: { expiration: TExpiration; path?: string; domain?: string } = { expiration: 0 }) { 94 | this.expiration = getExpiration(expiration) 95 | if (path) { 96 | this.path = path 97 | } 98 | if (domain) { 99 | this.domain = domain 100 | } 101 | } 102 | 103 | // 获取 104 | static getItem = getCookie 105 | getItem(key: string): string { 106 | return getCookie(key) 107 | } 108 | 109 | // 设置 110 | static setItem = setCookie 111 | setItem(key: string, value: string): void { 112 | return setCookie(key, value, this.expiration, this.path, this.domain) 113 | } 114 | 115 | // 移除 116 | static removeItem = removeCookie 117 | removeItem(key: string): void { 118 | removeCookie(key, this.path, this.domain) 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /_src/cookie/readme.md: -------------------------------------------------------------------------------- 1 | ## cookie 2 | 3 | ```ts 4 | import Cookie from "rimjs/cookie" 5 | 6 | // new一个 指定固定的 domain path 以及过期时间 7 | let mc = new Cookie({ expiration: "1d", path: "/", domain: "x.com" }) 8 | 9 | mc.getItem("cookie-key") 10 | mc.setItem("cookie-key", "cookie-value") 11 | mc.removeItem("cookie-key") 12 | 13 | Cookie.getItem("cookie-key") 14 | Cookie.setItem("cookie-key", "cookie-value", "1d", "/", "y.com") 15 | Cookie.removeItem("cookie-key", "/", "y.com") 16 | ``` 17 | -------------------------------------------------------------------------------- /_src/date/readme.md: -------------------------------------------------------------------------------- 1 | # date-h5 2 | 3 | 时间格式化 4 | 5 | ## 使用 6 | 7 | > import dateFn from "rimjs/date" 8 | 9 | ## api 10 | 11 | ### 转换为时间对象 12 | 13 | > dateFn.parse(date:String;Number;Date, isWipe:Boolean = false):Date 14 | 15 | - date 日期格式的字符串 毫秒数数字 或者日期 16 | - isWipe 是否只保留年月日 17 | - date 字符串后面根 GMT 表示格式化为指定时区的日期 18 | 19 | > dateFn.parse(isWipe:Boolean = false):Date 20 | 21 | - 获取当前时间 22 | - isWipe 是否只保留年月日 23 | 24 | ```javascript 25 | // 获取客户端时间 26 | dateFn.parse() 27 | 28 | // 获取客户端时间,并只保留 年月日 29 | dateFn.parse(true) 30 | 31 | // 将字符串格式化为时间 32 | dateFn.parse("2019-09-27 10:10:10") 33 | // 这个时间为东8区的时间转化为本地时间 34 | dateFn.parse("2019-09-27 10:10:10 GMT+0800") 35 | 36 | // 将字符串格式化为时间,并只保留年月日 37 | dateFn.parse("2019-09-27 10:10:10", true) 38 | 39 | // 将数字转换为时间 40 | dateFn.parse(1569549173461) 41 | // GMT前面的也会自动转换为数字 42 | dateFn.parse("1569549173461 GMT") 43 | ``` 44 | 45 | ### 获取时间详情 46 | 47 | > dateFn.get(date?:String;Number;Date, formatStr:String = ""):Object;String 48 | 49 | - date 日期格式的字符串 毫秒数数字 或者日期 50 | - formatStr 将日期详情格式化为字符串形式 51 | - return Object 52 | - date 当前日期 53 | - YYYY 四位年份 54 | - YY 两位年份 55 | - MM 两位月份 56 | - M 月份 57 | - DD 两位日 58 | - D 日 59 | - hh 两位小时 60 | - h 小时 61 | - mm 两位分钟 62 | - m 分钟 63 | - ss 两位秒 64 | - s 秒 65 | - w 数字周几 66 | - W 汉字周几 67 | - EW 英文简写周 68 | - FW 中文 星期几 69 | - X 汉字 今天 明天或者周几 70 | 71 | ```javascript 72 | // 获取客户端时间详情 73 | dateFn.get() 74 | 75 | // 获取客户端时间格式化为 2019-09-27 76 | dateFn.get(new Date(), "YYYY-MM-DD") 77 | 78 | // 获取客户端时间格式化为 09-27 周五(今天 明天) 79 | dateFn.get(new Date(), "MM-DD X") 80 | 81 | // 将时间转化为东八区时间后,再格式化 82 | dateFn.get(new Date(), "+8h:MM-DD X") // 返回字符串 83 | dateFn.get(new Date(), "+8h:") // 返回对象 84 | ``` 85 | 86 | ### 计算两时间的时差 87 | 88 | > dateFn.diff(date1:String;Number;Date, date2:String;Number;Date[, formatStr:String]):Object;String 89 | > dateFn.diff(num:Number[, formatStr:String]):Object;String 90 | 91 | - date1 date2 日期格式的字符串 毫秒数数字 或者日期 92 | - num 两日期的时差(毫秒数) 93 | - formatStr 需要格式化为的字符串(不传,会返回一个对象) 94 | - return Object 95 | - ms 毫秒 96 | - s 秒 97 | - m 分钟 98 | - h 小时 99 | - d 日 100 | 101 | ```javascript 102 | // => {ms:0, s: 2, m: 2, h: 0, d: 0} 103 | dateFn.diff(122000); 104 | 105 | // => 0时2分2秒 106 | dateFn.diff("2019-09-27 10:10:10", "2019-09-27 10:12:12", "h时m分s秒"); 107 | dateFn.diff(122000, "h时m分s秒"); 108 | 109 | // => 2分2秒 110 | dateFn.diff("2019-09-27 10:10:10", "2019-09-27 10:12:12", "s秒"); 111 | dateFn.diff(122000, "m分s秒"); 112 | 113 | // 获取客户端时间格式化为 2019-09-27 114 | dateFn.get(new Date(), "YYYY-MM-DD"); 115 | 116 | // 获取客户端时间格式化为 09-27 周五(今天 明天) 117 | dateFn.get(new Date(), "MM-DD X"); 118 | ``` 119 | 120 | ### 在一个时间上增加或者减少时间 121 | 122 | > dateFn.append(n:String;Number[, date:String;Number;Date, formatStr:Strings|boolean]):Date;String 123 | 124 | - n:String 125 | - 1d 增加 1 天 126 | - -1h 减少 1 小时 127 | - 1m 增加一分钟 128 | - -1s 减少 1 秒钟 129 | - n:Number 130 | - 增加的毫秒数 131 | - date 日期格式的字符串 毫秒数字 或者日期 132 | - formatStr 将日期详情格式化为字符串形式(如果为空,返回为 Date) 133 | - formatStr true 去除时分秒的时间 134 | 135 | ```javascript 136 | // => 明天现在 137 | dateFn.append("1d"); 138 | 139 | // => 昨天现在 140 | dateFn.append("-1d"); 141 | 142 | // => 2019-09-26的时间对象 143 | dateFn.append("-1d", "2019-09-27"); 144 | 145 | // => 2019-09-26 146 | dateFn.append("-1d", "2019-09-27", "YYYY-MM-DD"); 147 | ``` -------------------------------------------------------------------------------- /_src/debug/index.ts: -------------------------------------------------------------------------------- 1 | let traceDom: HTMLElement, 2 | tarceI: number, 3 | tc = ["#F00", "#0F0", "#00F", "#FF0", "#F0F", "#0FF"], 4 | cc = ["#FFF", "#000", "#FFF", "#000", "#FFF", "#000"] 5 | 6 | export default function debug(...args: any[]) { 7 | if (!traceDom) { 8 | tarceI = 0 9 | traceDom = document.createElement("div") 10 | traceDom.style.cssText = "position:absolute; top:0; left:0; right:0; z-index:999999999;" 11 | traceDom.onclick = function(ev) { 12 | traceDom.innerHTML = "" 13 | ev.stopPropagation() 14 | } 15 | if (document.body) { 16 | if (document.body.firstChild) { 17 | document.body.insertBefore(traceDom, document.body.firstChild) 18 | } else { 19 | document.body.appendChild(traceDom) 20 | } 21 | } else { 22 | document.documentElement.appendChild(traceDom) 23 | } 24 | } 25 | let strs = [] 26 | for (let i = 0; i < args.length; i += 1) { 27 | strs.push(JSON.stringify(args[i])) 28 | } 29 | let div = document.createElement("div") 30 | div.style.cssText = "padding: 5px; color:" + cc[tarceI] + "; word-wrap: break-word; background-color:" + tc[tarceI++] 31 | div.innerHTML = strs.join(" , ") 32 | traceDom.appendChild(div) 33 | tarceI = tarceI % tc.length 34 | } 35 | 36 | window.onerror = function($1, $2, $3) { 37 | debug(String($1) + ":::" + String($2) + ":::" + String($3)) 38 | } 39 | -------------------------------------------------------------------------------- /_src/debug/readme.md: -------------------------------------------------------------------------------- 1 | # debug 调试 2 | 3 | 页面调试工具 4 | 5 | ## 使用 6 | 7 | `import debug from "rimjs/debug"` 8 | 9 | ```js 10 | debug({x:1}) 11 | ``` 12 | 13 | -------------------------------------------------------------------------------- /_src/each/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 数据循环 3 | */ 4 | 5 | // 用于类型判断 6 | const _toString: Function = Object.prototype.toString 7 | 8 | // 数组push 9 | function forPush(arr: any[], v: any): void { 10 | arr.push(v) 11 | } 12 | 13 | // 对象增加k-v 14 | function forAppend(obj: any, v: any, k: string): void { 15 | obj[k] = v 16 | } 17 | 18 | // 普通 19 | function forBack(): void {} 20 | 21 | // 支持for循环的 数据 22 | const forTypes = "-[object array]-[object nodelist]-[object htmlcollection]-[object arguments]-" 23 | 24 | /** 25 | * 数据循环 26 | * @param arr arr或者obj 27 | * @param fn 运行函数 28 | * @param exe 返回的值 29 | */ 30 | export function each(arr: any, fn: (item: any, index: number | string, stop: () => void) => any): void 31 | export function each(arr: any, fn: (item: any, index: number | string, stop: () => void) => any, exe: T): T 32 | export function each(arr: any, fn: (item: any, index: number | string, stop: () => void) => any, exe?: T): T | undefined { 33 | // 终止循环 34 | let isStop: boolean = false 35 | function stop(): void { 36 | isStop = true 37 | } 38 | if (arr) { 39 | let doExe: Function = forBack 40 | if (exe) { 41 | doExe = exe instanceof Array ? forPush : forAppend 42 | } 43 | 44 | let len: number = arr.length 45 | if (forTypes.indexOf("-" + _toString.call(arr).toLowerCase() + "-") > -1) { 46 | for (let i = 0; i < len; i += 1) { 47 | let item = fn(arr[i], i, stop) 48 | if (isStop) { 49 | break 50 | } 51 | doExe(exe, item, i) 52 | } 53 | } else { 54 | for (let n in arr) { 55 | // eslint-disable-next-line 56 | if (!arr.hasOwnProperty || arr.hasOwnProperty(n)) { 57 | let item = fn(arr[n], n, stop) 58 | if (isStop) { 59 | break 60 | } 61 | doExe(exe, item, n) 62 | } 63 | } 64 | } 65 | } 66 | 67 | return exe 68 | } 69 | 70 | export default each 71 | -------------------------------------------------------------------------------- /_src/each/readme.md: -------------------------------------------------------------------------------- 1 | # each 循环 2 | 3 | > `stopFn` 为中止循环 4 | 5 | ```js 6 | // 数组循环遍历 7 | each(["1"], function(item, index, stopFn){ 8 | ... 9 | }) 10 | // 返回 ["x", "1:"] 11 | each(["1"], function(item, index, stopFn){ 12 | return item + ":" 13 | }, ["x"]) 14 | 15 | // 对象循环 16 | each({x:1, y: 2}, function(item, key, stopFn){ 17 | ... 18 | }) 19 | 20 | // 返回 ["x", "1:x"] 21 | each({x:1, y: 2}, function(item, key, stopFn){ 22 | stopFn() 23 | return item + ":" + key 24 | }, ["x"]) 25 | 26 | // 返回 {z:1, x: 1} 27 | each({x:1, y: 2}, function(item, key, stopFn){ 28 | stopFn() 29 | return item 30 | }, {z:1}) 31 | ``` -------------------------------------------------------------------------------- /_src/event/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 事件类 3 | */ 4 | 5 | export interface IEventFn { 6 | (this: T, arg: any): void 7 | } 8 | 9 | interface IFEventObj { 10 | [propName: string]: IEventFn[] 11 | } 12 | export default class Event { 13 | private _events: IFEventObj = {} 14 | private _parent: any = null 15 | constructor(parent?: any) { 16 | this._events = {} 17 | if (parent) { 18 | this._parent = parent 19 | } 20 | } 21 | 22 | once(type: string, fn: IEventFn, isPre: boolean = false): void { 23 | function back() { 24 | fn.apply(this, arguments) 25 | this.off(type, back) 26 | } 27 | back.__isOnce = true 28 | this[":on"](type, back, isPre) 29 | } 30 | 31 | on(type: string, fn: IEventFn, isPre: boolean = false): void { 32 | this[":on"](type, fn, isPre) 33 | } 34 | 35 | /** 36 | * 绑定事件 37 | * @param type 事件名称 38 | * @param fn 事件函数 39 | * @param isPre 是否前面插入 40 | */ 41 | ":on"(type: string, fn: IEventFn, isPre: boolean = false): void { 42 | let evs = this._events[type] 43 | if (!evs) { 44 | evs = this._events[type] = [] 45 | } 46 | evs[isPre ? "unshift" : "push"](fn) 47 | } 48 | 49 | /** 50 | * 移除事件 可以移除全部事件 51 | * @param type 52 | * @param fn 53 | */ 54 | off(type?: string, fn?: IEventFn): void { 55 | if (!type) { 56 | this._events = {} 57 | return 58 | } 59 | if (!fn) { 60 | delete this._events[type] 61 | return 62 | } 63 | let evs = this._events[type] 64 | if (!evs) { 65 | return 66 | } 67 | let index = evs.indexOf(fn) 68 | if (index >= 0) { 69 | evs.splice(index, 1) 70 | } 71 | } 72 | 73 | /** 74 | * 内部调用 事件触发函数 75 | * @param target 76 | * @param type 77 | * @param args 78 | */ 79 | private ":emit"(target: T, type: string, arg: R): R { 80 | if (this._parent && this._parent[":emit"]) { 81 | this._parent[":emit"](target, type, arg) 82 | } 83 | 84 | let evs = this._events[type] || [] 85 | for (let i = 0; i < evs.length;) { 86 | let fn = evs[i] as any 87 | fn.call(target, arg) 88 | if (!fn.__isOnce) { 89 | i += 1 90 | } 91 | } 92 | 93 | return arg 94 | } 95 | 96 | // 事件触发 97 | emit(type: string, arg: R): R { 98 | return this[":emit"](this, type, arg) 99 | } 100 | 101 | /** 102 | * 判断事件是否存在 103 | * @param type 104 | */ 105 | hasEvent(type: string): boolean { 106 | let target: Event = this 107 | do { 108 | let evs = target._events[type] || [] 109 | if (evs.length > 0) { 110 | return true 111 | } 112 | } while ((target = target._parent)) 113 | return false 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /_src/event/readme.md: -------------------------------------------------------------------------------- 1 | # event 2 | 3 | 统一的事件处理 4 | 5 | ## 使用 6 | 7 | > import Event from "rimjs/event" 8 | 9 | ### 使用 10 | 11 | ```ts 12 | let event = new Event() 13 | 14 | // 添加事件 15 | event.on("event_one", funciton(data){}) 16 | event.emit("event_one", {}) 17 | ``` 18 | ### 继承 19 | ```ts 20 | class Ajax extends Event { 21 | constructor() { 22 | super() 23 | } 24 | 25 | // 设置多个事件复写,主要时为了可以智能提示传入的参数 26 | // 发送前调用,这样ts可以智能提示 arg的参数类型为 AjaxReq 27 | on(type: "beforeSend", fn: (arg: AjaxReq) => void, isPre: boolean = false): void 28 | // 回调,这样ts可以智能提示 arg的参数类型为 AjaxRes 29 | on(type: "callback", fn: (arg: AjaxRes) => void, isPre: boolean = false): void 30 | on(type: "beforeSend" | "callback", fn: (arg: AjaxRes | AjaxReq) => void, isPre: boolean = false): void { 31 | // 调用内部的实现函数 32 | this[":on"](type, fn, isPre) 33 | } 34 | 35 | ... 36 | } 37 | ``` -------------------------------------------------------------------------------- /_src/md5/readme.md: -------------------------------------------------------------------------------- 1 | # md5 2 | 3 | > 算法来自网络 4 | 5 | ## 使用 6 | 7 | `import md5 from "rimjs/md5"` 8 | 9 | ```js 10 | md5("xxxxxx") 11 | ``` -------------------------------------------------------------------------------- /_src/qs/index.ts: -------------------------------------------------------------------------------- 1 | interface initOpt { 2 | // a=b&c=1 中的 & 3 | sep?: string 4 | // a=b&c=1 中的 = 5 | eq?: string 6 | // 对数据格式化 7 | unescape?: Function 8 | // 数据序列化 9 | escape?: Function 10 | } 11 | 12 | export interface IFQueryHash { 13 | [prot: string]: string | null | number | (string | null | number)[] 14 | } 15 | 16 | export class QueryString { 17 | sep: string = "&" 18 | eq: string = "=" 19 | unescape = decodeURIComponent 20 | escape = encodeURIComponent 21 | constructor(opt?: initOpt) { 22 | if (opt) { 23 | Object.assign(this, opt) 24 | } 25 | } 26 | 27 | /** 28 | * 解析为 对象输出 29 | * @param str 30 | */ 31 | parse(str: string): IFQueryHash { 32 | let sep = this.sep 33 | let eq = this.eq 34 | let unescape = this.unescape 35 | 36 | let data: any = {} 37 | // 去除部分没有的字符 38 | str.replace(/^[\s#?]+/, "") 39 | .split(sep) 40 | .forEach(function(item) { 41 | if (!item) { 42 | return 43 | } 44 | let arr = item.split(eq) 45 | let key = arr[0] 46 | if (key) { 47 | let val = unescape(arr[1] || "") 48 | if (data[key] === undefined) { 49 | // 赋值 50 | data[key] = val 51 | } else if (data[key].push) { 52 | // 多个相同字符 53 | data[key].push(val) 54 | } else { 55 | // 值转化为数组 56 | data[key] = [data[key], val] 57 | } 58 | } 59 | }) 60 | return data 61 | } 62 | 63 | /** 64 | * 序列化为字符串 65 | * @param opt 66 | */ 67 | stringify(opt: IFQueryHash): string { 68 | let sep = this.sep 69 | let eq = this.eq 70 | let escape = this.escape 71 | 72 | let arr: Array = [] 73 | for (let n in opt) { 74 | let item: any = opt[n] 75 | if (item == null) { 76 | item = "" 77 | } 78 | let key: string = escape(n) 79 | if (item && item.constructor == Array) { 80 | // 数组要转化为多个相同kv 81 | item.forEach(function(one: string) { 82 | arr.push(key + eq + escape(one)) 83 | }) 84 | } else { 85 | arr.push(key + eq + escape(item)) 86 | } 87 | } 88 | return arr.join(sep) 89 | } 90 | } 91 | 92 | let qs = Object.assign(new QueryString(), { QueryString }) 93 | 94 | export function parseQS(str: string) { 95 | return qs.parse(str) 96 | } 97 | export function stringifyQS(opt: IFQueryHash) { 98 | return qs.stringify(opt) 99 | } 100 | 101 | export default qs 102 | -------------------------------------------------------------------------------- /_src/qs/readme.md: -------------------------------------------------------------------------------- 1 | ```js 2 | // 引入 3 | import qs from "rimjs/qs" 4 | import {parseQS, stringifyQS, QueryString} from "rimjs/qs" 5 | 6 | // 将对象转换字符串 同 qs.stringify 7 | stringifyQS({a: 1, b: [1,2]}) // a=1&b=1&b=2 8 | 9 | // qs 字符串转换为对象 同 qs.parse 10 | parseQS("a=1&b=1&b=2") // {a: 1, b: [1,2]} 11 | 12 | // 生成新的对象 同 qs.QueryString 13 | let qss = new QueryString({ 14 | // a=1&b=1&b=2 中的 &连接符 15 | sep: "&", 16 | // a=1&b=1&b=2 中的 =连接符 17 | eq: "=", 18 | // 对字符串格式化 parse 19 | unescape: decodeURIComponent 20 | // 序列化字符串时的格式化字符串函数 stringify 21 | escape: encodeURIComponent 22 | }) 23 | ``` 24 | -------------------------------------------------------------------------------- /_src/readme.md: -------------------------------------------------------------------------------- 1 | # 使用TS写的一些浏览器js的周边控件 2 | 3 | ## npm 4 | 5 | [https://www.npmjs.com/package/rimjs](https://www.npmjs.com/package/rimjs) 6 | 7 | ## 更新日志 8 | 2021-04-28: vueLife、vueUnicom、vueLake 对vue3的支持 9 | 10 | ## 功能 11 | | 名称 | 说明 | 12 | | ---------------------------------- | ------------------------------------------- | 13 | | [Ajax](./ajax/readme.md) | 封装了一套ajax处理,支持jsonp和短路径 | 14 | | [assign](./assign/readme.md) | 深度拷贝<assing>以及合并<merge> | 15 | | [cache](./cache/readme.md) | 缓存机制,第一次加载请求,然后缓存 | 16 | | [cookie](./cookie/readme.md) | cookie封装 | 17 | | [date](./date/readme.md) | date处理函数封装 | 18 | | [debug](./debug/readme.md) | 调试功能封装 | 19 | | [each](./each/readme.md) | 类似原生的forEach,对象的循环 | 20 | | [event](./event/readme.md) | 通用事件封装,ajax就是基于这个实现 | 21 | | [md5](./md5/readme.md) | md5封装,来自网络第三方 | 22 | | [qs](./qs/readme.md) | querystring的实现 | 23 | | [slip](./slip/readme.md) | 点击后移动的封装 | 24 | | [sole](./sole/readme.md) | 返回页面唯一的id字符串 | 25 | | [storage](./storage/readme.md) | 对原生的本地存储强化封装 | 26 | | [validata](./validate/readme.md) | 一些验证函数集合 | 27 | | [vueFn](./vueFn/readme.md) | vue的一套函数式编程 | 28 | | [vueLife](./vueLife/readme.md) | vue自定义生命周期 | 29 | | [vueUnicom](./vueUnicom/readme.md) | vue的组件通讯 | 30 | | [vueLake](./vueLake/readme.md) | vue的组件通讯,vueUnicom升级,支持异步模式 | -------------------------------------------------------------------------------- /_src/slip/index.ts: -------------------------------------------------------------------------------- 1 | import EventEmitter from "../event" 2 | 3 | let doc = window.document 4 | 5 | let isTouch = "ontouchstart" in doc 6 | 7 | let moveData: Slip | null = null 8 | 9 | function getEventXY(ev: any) { 10 | //移动是多点触控,默认使用第一个作为clientX和clientY 11 | if (ev.clientX == null) { 12 | let touches = ev.targetTouches && ev.targetTouches[0] ? ev.targetTouches : ev.changedTouches 13 | if (touches && touches[0]) { 14 | ev.clientX = touches[0].clientX 15 | ev.clientY = touches[0].clientY 16 | return [touches[0].clientX, touches[0].clientY] 17 | } 18 | } 19 | return [ev.clientX, ev.clientY] 20 | } 21 | 22 | let events = { 23 | move: isTouch ? "touchmove" : "mousemove", 24 | down: isTouch ? "touchstart" : "mousedown", 25 | up: isTouch ? "touchend" : "mouseup" 26 | } 27 | function appendEvent(dom: HTMLElement | Document, type: "move" | "down" | "up", fn: EventListener, cap: boolean = false) { 28 | dom.addEventListener(events[type], fn, !!cap) 29 | } 30 | function removeEvent(dom: HTMLElement | Document, type: "move" | "down" | "up", fn: EventListener, cap: boolean = false) { 31 | dom.removeEventListener(events[type], fn, !!cap) 32 | } 33 | 34 | function getMax(m: number, c: number) { 35 | if (m == 0) { 36 | return c 37 | } 38 | if (m < 0) { 39 | return c < m ? m : c > 0 ? 0 : c 40 | } 41 | return c > m ? m : c < 0 ? 0 : c 42 | } 43 | 44 | //鼠标移动开始 45 | function slipDown(this: Slip, ev: Event) { 46 | if (moveData) { 47 | return 48 | } 49 | moveData = this 50 | appendEvent(doc, "move", slipMove, true) 51 | appendEvent(doc, "up", slipUp, true) 52 | let [x, y] = getEventXY(ev) 53 | this.bx = this.ax - x 54 | this.by = this.ay - y 55 | this.emit("start", ev) 56 | } 57 | 58 | function getSlipData(ev: Event) { 59 | let [x, y] = getEventXY(ev) 60 | let md = moveData as Slip 61 | return { 62 | x: getMax(md.mx, x + md.bx), 63 | y: getMax(md.my, y + md.by), 64 | event: ev 65 | } 66 | } 67 | 68 | //鼠标移动中 69 | function slipMove(evt: Event) { 70 | if (moveData) { 71 | let x = window.getSelection && window.getSelection() 72 | if (x) { 73 | x.removeAllRanges() 74 | } 75 | moveData.emit("move", getSlipData(evt)) 76 | } 77 | } 78 | 79 | //鼠标抬起 80 | function slipUp(evt: Event) { 81 | if (moveData) { 82 | removeEvent(doc, "up", slipUp, true) 83 | removeEvent(doc, "move", slipMove, true) 84 | let d = getSlipData(evt) 85 | let { x, y } = d 86 | moveData.ax = x 87 | moveData.ay = y 88 | moveData.emit("end", d) 89 | moveData = null 90 | } 91 | } 92 | 93 | export default class Slip extends EventEmitter { 94 | dom: HTMLElement 95 | ax: number = 0 96 | ay: number = 0 97 | mx: number = 0 98 | my: number = 0 99 | bx: number = 0 100 | by: number = 0 101 | 102 | // 所有事件 103 | on(type: "start", fn: (this: T, arg: Event) => void, isPre?: boolean): void 104 | on(type: "move" | "end", fn: (this: T, arg: { x: number; y: number; event: Event }) => void, isPre?: boolean): void 105 | on(type: string, fn: (this: T, arg: any) => void, isPre: boolean = false): void { 106 | this[":on"](type, fn, isPre) 107 | } 108 | 109 | // 初始化 110 | constructor(id: string | HTMLElement, mx?: number, my?: number) { 111 | super() 112 | if (typeof id == "string") { 113 | let x = doc.getElementById(id) 114 | if (x) { 115 | id = x 116 | } 117 | } 118 | if (!id) { 119 | // eslint-disable-next-line 120 | throw "no id element" 121 | } 122 | this.dom = id as HTMLElement 123 | 124 | if (mx) { 125 | this.mx = mx 126 | } 127 | if (my) { 128 | this.my = my 129 | } 130 | 131 | appendEvent(this.dom, "down", slipDown.bind(this), false) 132 | } 133 | 134 | // 清理 135 | setSkewing(x: number, y: number): [number, number] { 136 | this.ax = getMax(this.mx, x || 0) 137 | this.ay = getMax(this.my, y || 0) 138 | return [this.ax, this.ay] 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /_src/slip/readme.md: -------------------------------------------------------------------------------- 1 | ## 滑块基础控件 2 | 3 | ```ts 4 | import Slip from "rimjs/slip" 5 | 6 | // 注册一个slip ,绑定 id为 id的dom 7 | // 这个dom触按住后,移动,会触发 move事件 8 | // 100 表示 初始状态下,x的移动范围智能在100以内 9 | let slip = new Slip("id", 100) 10 | 11 | // 按下时触发 12 | slip.on("start", function(event) {}) 13 | 14 | // 按下时不放移动触发 15 | slip.on("start", function({ x, y, event }) {}) 16 | 17 | // 松开时触发 18 | slip.on("end", function({ x, y, event }) {}) 19 | ``` 20 | -------------------------------------------------------------------------------- /_src/sole/index.ts: -------------------------------------------------------------------------------- 1 | // ====================================================================== 获取页面唯一的 id 值 2 | // jsonp和禁止使用缓存中使用 3 | let soleTime: number = new Date().getTime() - 1000000 4 | let soleCount: number = 1000 5 | export default function sole(): string { 6 | soleCount += 1 7 | return Number(Math.round((Math.random() + 1) * 1000000) + (new Date().getTime() - soleTime) + "" + soleCount).toString(36) 8 | } 9 | -------------------------------------------------------------------------------- /_src/sole/readme.md: -------------------------------------------------------------------------------- 1 | ## 生成一个页面的唯一id 2 | 3 | ```ts 4 | import sole from "rimjs/sole" 5 | 6 | let id = sole() 7 | ``` -------------------------------------------------------------------------------- /_src/storage/index.ts: -------------------------------------------------------------------------------- 1 | interface storeData { 2 | expiration?: number 3 | session?: string 4 | item?: any 5 | } 6 | 7 | let soleTime: number = new Date().getTime() - 1000000 8 | let soleCount: number = 1000 9 | 10 | // 获取页面唯一的值 11 | function getOne(): string { 12 | soleCount 13 | soleCount += 1 14 | let rnd: string = (Math.round((Math.random() + 1) * 1000000) + (new Date().getTime() - soleTime)).toString() 15 | return parseInt(rnd + "" + soleCount.toString()).toString(36) 16 | } 17 | 18 | // 本地存储引用 19 | // 无本地存储,模拟本地实现 20 | // 数据存储本地,无法长期存储 21 | // 缓解无痕模式无法存储的问题 22 | let LSStore: any = {} 23 | let LS: any = { 24 | getItem(key: string): string { 25 | return LSStore[key] 26 | }, 27 | setItem(key: string, val: string): void { 28 | LSStore[key] = val 29 | }, 30 | removeItem(key: string): void { 31 | try { 32 | delete LSStore[key] 33 | } catch (e) {} 34 | } 35 | } 36 | 37 | let SSStore: any = {} 38 | let SS: any = { 39 | getItem(key: string): string { 40 | return SSStore[key] 41 | }, 42 | setItem(key: string, val: string): void { 43 | SSStore[key] = val 44 | }, 45 | removeItem(key: string): void { 46 | try { 47 | delete SSStore[key] 48 | } catch (e) {} 49 | } 50 | } 51 | 52 | // 本地存储是否可以使用 53 | try { 54 | window.localStorage.setItem("ls_can", "1") 55 | if (window.localStorage.getItem("ls_can") == "1") { 56 | LS = window.localStorage 57 | SS = window.sessionStorage 58 | } 59 | } catch (e) {} 60 | 61 | let sKeyKey: string = ":store-s-key" 62 | let sKey: string = SS.getItem(sKeyKey) 63 | if (!sKey) { 64 | sKey = getOne() 65 | SS.setItem(sKeyKey, sKey) 66 | } 67 | 68 | // 移除 69 | function remove(key: string): void { 70 | LS.removeItem(key) 71 | } 72 | 73 | // 日期上增加特定时间 74 | const appendTimeOpt: any = { 75 | s: 1000, 76 | m: 60 * 1000, 77 | h: 60 * 60 * 1000, 78 | d: 24 * 60 * 60 * 1000 79 | } 80 | 81 | /** 82 | * 本地存储分组类 83 | */ 84 | export class LSClass { 85 | preposition: string = ":" 86 | /** 87 | * pre 为前置参数 88 | * @param pre 89 | */ 90 | constructor(pre: string) { 91 | if (pre) { 92 | this.preposition = pre 93 | } 94 | } 95 | 96 | /** 97 | * 获取本地存储 98 | * @param key key 99 | */ 100 | getItem(key: string): any { 101 | key = this.preposition + key 102 | let val = LS.getItem(key) 103 | let json: storeData | null 104 | try { 105 | json = JSON.parse(val) 106 | } catch (e) { 107 | return 108 | } 109 | if (json) { 110 | // 检测是否过期 111 | let expiration = json.expiration 112 | let isOut: boolean = false 113 | if (expiration) { 114 | let now = new Date().getTime() 115 | if (expiration !== -1 && now > expiration) { 116 | // 过期 117 | isOut = true 118 | } 119 | } 120 | let session = json.session 121 | if (!isOut && session && session != sKey) { 122 | // 过期 123 | isOut = true 124 | } 125 | if (isOut) { 126 | remove(key) 127 | return null 128 | } 129 | return json.item 130 | } 131 | 132 | return null 133 | } 134 | 135 | /** 136 | * 设置本地存储 137 | * @param key 138 | * @param value 存入的值 139 | * @param expiration 过期时间 140 | */ 141 | setItem(key: string, value: any, expiration: number | string | Date = 0): void { 142 | key = this.preposition + key 143 | let json: storeData = { item: value } 144 | 145 | if (typeof expiration == "number") { 146 | if (expiration === 0) { 147 | json.session = sKey 148 | } else if (expiration === -1) { 149 | json.expiration = -1 150 | } else { 151 | json.expiration = new Date().getTime() + expiration 152 | } 153 | } else if (typeof expiration == "string") { 154 | if (/^(\d+)([a-z])$/i.test(expiration)) { 155 | let num = parseInt(RegExp.$1) * (appendTimeOpt[RegExp.$2.toLowerCase()] || 0) 156 | json.expiration = new Date().getTime() + num 157 | } else { 158 | json.expiration = new Date( 159 | expiration 160 | .replace(/-/g, "/") 161 | .replace(/T/, " ") 162 | .replace(/\.\d*$/, "") 163 | ).getTime() 164 | } 165 | } else if (expiration instanceof Date) { 166 | json.expiration = expiration.getTime() 167 | } 168 | 169 | LS.setItem(key, JSON.stringify(json)) 170 | } 171 | 172 | /** 173 | * 移除数据 174 | * @param key 175 | */ 176 | removeItem(key: string): void { 177 | remove(this.preposition + key) 178 | } 179 | } 180 | 181 | /** 182 | * 输出类 183 | */ 184 | let ls = Object.assign(new LSClass(":"), { LSClass }) 185 | 186 | export let getStorage = ls.getItem 187 | export let setStorage = ls.setItem 188 | export let removeStorage = ls.removeItem 189 | 190 | export default ls 191 | -------------------------------------------------------------------------------- /_src/storage/readme.md: -------------------------------------------------------------------------------- 1 | # H5 本地存储增强 2 | 3 | - 支持对本地存储设置过期时间 4 | - 当浏览器无法使用本地存储是(无痕模式),会自动降级,将数据存入内存中 5 | 6 | ## 使用 7 | 8 | ```javascript 9 | import store from "rimjs/storage" 10 | 11 | // 获取设置的本地数据 12 | store.getItem("the-key") 13 | 14 | // 设置本地存储 默认进程 15 | store.getItem("the-key", "value") 16 | 17 | // 设置本地存储 无过期 18 | store.getItem("the-key", "value", -1) 19 | 20 | // 设置本地存储 一天后过期 21 | store.getItem("the-key", "value", 1) 22 | 23 | // 设置本地存储 2200-10-1日过期 24 | store.getItem("the-key", "value", "2200-10-1") 25 | 26 | // 移除 27 | store.removeItem("the-key") 28 | 29 | // 更改默认的前置字符串 默认为 : 30 | store.prepreposition = "$" 31 | 32 | // 创建新的存储分组,并且使用 v4#作为前缀 33 | // store4 包含上面那些方法 34 | let store4 = new store.LSStore("v4#") 35 | ``` 36 | 37 | ## API 38 | 39 | ### 前缀 40 | 41 | > store.prepreposition 42 | 43 | - 为了和原生的本地存储区分,特地在所有通过此设置的数据,都加上前缀 44 | - 此前缀可以修改 45 | 46 | ### 存储 47 | 48 | > store.setItem(key:string, value: any [,expiration:string;data;number = 0]) 49 | 50 | - key 本地存储的唯一 key 51 | - value 存入的基础数据 52 | - expiration 什么时候过期 默认为 0 53 | - -1 永久不过期 相当于 localStorage 54 | - 0 相当于 sessionStorage 55 | - 大于 0 多少毫秒后过期 56 | - 时间字符串 过期时间 57 | - 1d 1天后过期 58 | - 1h 1小时后过期 59 | - 1m 1分钟后过期 60 | - 1s 1秒后过期 61 | - 日期 过期时间 62 | 63 | ### 获取 64 | 65 | > store.getItem(key:string) 66 | 67 | - key 本地存储的唯一 key 68 | 69 | ### 移除 70 | 71 | > store.removeItem(key:string) 72 | 73 | - key 本地存储的唯一 key 74 | 75 | ### 创建新的本地存储分组 76 | 77 | > new store.LSStore(prev:string) 78 | 79 | - prev 为本分组存入的本地存储的前缀 80 | -------------------------------------------------------------------------------- /_src/timeDown/index.ts: -------------------------------------------------------------------------------- 1 | import dateFn from "../date" 2 | import EventEmitter from "../event" 3 | 4 | /** 5 | * 获取当前时间,可以更改为获取当前服务器时间 6 | */ 7 | let getNow = function() { 8 | return dateFn.parse() 9 | } 10 | 11 | class TimeEventData { 12 | diff: string = "" 13 | spt: number = 0 14 | } 15 | 16 | type timeType = string | number | boolean | Date 17 | 18 | class TimeEvent extends EventEmitter { 19 | // 结束时间 20 | endNum: number = 0 21 | prevNum: number = 0 22 | 23 | diffText: string = "ss秒" 24 | 25 | isStop: boolean = false 26 | toStop: boolean = false 27 | 28 | constructor(time?: timeType, diffText?: string) { 29 | super() 30 | if (time) { 31 | this.setEndNum(time) 32 | } 33 | 34 | if (diffText) { 35 | this.diffText = diffText 36 | } 37 | } 38 | 39 | on(type: "change" | "end", fn: (arg: TimeEventData) => void, isPre: boolean = false): TimeEvent { 40 | this[":on"](type, fn, isPre) 41 | return this 42 | } 43 | 44 | setEndNum(time: string | number | boolean | Date) { 45 | if (typeof time == "number") { 46 | time = dateFn.parse().getTime() + time * 1000 47 | } 48 | this.endNum = dateFn.parse(time).getTime() 49 | } 50 | 51 | emitDiff() { 52 | if (this.isStop) { 53 | return false 54 | } 55 | return one(this) 56 | } 57 | 58 | stop() { 59 | if (!this.isStop) { 60 | this.toStop = true 61 | } 62 | } 63 | 64 | getNow() { 65 | return getNow() 66 | } 67 | } 68 | 69 | let queue: TimeEvent[] = [] 70 | let interval: null | ReturnType = null 71 | 72 | /** 73 | * 执行一次 一个 循环 74 | * @param {*} x 75 | */ 76 | function one(x: TimeEvent) { 77 | let ev = new TimeEventData() 78 | if (!x.isStop && x.toStop) { 79 | x.toStop = false 80 | x.emit("change", ev) 81 | return false 82 | } 83 | let spt = Math.floor((x.endNum - x.getNow().getTime()) / 1000) 84 | ev.spt = spt 85 | if (x.prevNum != spt) { 86 | // 本次时差与上一次有差异,就执行回调 87 | // 当spt <= 0 为最后一次回调 88 | let diff = dateFn.diff(spt * 1000, x.diffText) as any 89 | ev.diff = diff 90 | x.prevNum = spt 91 | if (spt <= 0) { 92 | x.isStop = true 93 | x.emit("end", ev) 94 | } else { 95 | x.emit("change", ev) 96 | } 97 | } 98 | return spt > 0 99 | } 100 | 101 | function step() { 102 | if (queue.length) { 103 | for (let i = 0; i < queue.length; ) { 104 | if (one(queue[i])) { 105 | // 下一个 106 | i += 1 107 | } else { 108 | // 移除 109 | queue.splice(i, 1) 110 | } 111 | } 112 | } else { 113 | // 无队列,移除 interval 114 | clearInterval(interval) 115 | interval = null 116 | } 117 | } 118 | 119 | /** 120 | * 倒计时 函数 121 | * @param {Number|String|Date} time 为数字时,代表,需要执行多少秒的倒计时 122 | * @return {eventemitter} 自定义事件对象 123 | * @event change 事件,剩余时间 改变时触发,两个参数 第一个 diff 字符串 第二个diff(秒) 124 | * @event end 倒计时结束时候调用 125 | */ 126 | function timeDown(time: string | number | boolean | Date, diffText?: string) { 127 | let one = new TimeEvent(time, diffText) 128 | queue.push(one) 129 | if (!interval) { 130 | interval = setInterval(step, 250) 131 | } 132 | return one 133 | } 134 | 135 | /** 136 | * 设置默认的 获取当前时间的函数 137 | * @param {Function} fn 138 | */ 139 | function setGetNowFn(fn: () => Date) { 140 | getNow = fn 141 | return timeDown 142 | } 143 | 144 | /** 145 | * 终止 146 | */ 147 | function stopAll() { 148 | queue.forEach(item => { 149 | item.stop() 150 | }) 151 | queue = [] 152 | // 无队列,移除 interval 153 | clearInterval(interval) 154 | interval = null 155 | } 156 | export default Object.assign(timeDown, { 157 | stopAll, 158 | setGetNowFn 159 | }) 160 | -------------------------------------------------------------------------------- /_src/util/getFullUrl.ts: -------------------------------------------------------------------------------- 1 | // ===================================================================== 获得url的真实地址 2 | // 判断请求是否为跨域使用 3 | let linkA = document.createElement("a") 4 | export function getFullUrl(url: string): string { 5 | linkA.setAttribute("href", url) 6 | return linkA.href 7 | } 8 | 9 | export default getFullUrl 10 | -------------------------------------------------------------------------------- /_src/util/loadJS.ts: -------------------------------------------------------------------------------- 1 | // jsonp 加载方式需要使用 2 | let head: HTMLElement = document.head || document.getElementsByTagName("head")[0] || document.documentElement 3 | export function loadJS(url: string, callback: Function): HTMLScriptElement { 4 | // 创建节点 5 | let node: HTMLScriptElement = document.createElement("script") 6 | // 设置属性 7 | node.setAttribute("type", "text/javascript") 8 | node.onload = node.onerror = function() { 9 | node.onload = node.onerror = null 10 | callback && callback() 11 | setTimeout(function() { 12 | //防止回调的时候,script还没执行完毕 13 | // 延时 2s 删除节点 14 | if (node) { 15 | let parent = node.parentNode as HTMLElement 16 | parent.removeChild(node) 17 | } 18 | }, 2000) 19 | } 20 | node.async = true 21 | head.appendChild(node) 22 | node.src = url 23 | return node 24 | } 25 | 26 | export default loadJS 27 | -------------------------------------------------------------------------------- /_src/validata/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 是否为Email 3 | * @method Util.cUtilValidate.isEmail 4 | * @param {String} agr1 5 | * @return {boolean} flag 6 | */ 7 | export function isEmail(text: string) { 8 | let reg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ 9 | return reg.test(text) 10 | } 11 | 12 | /** 13 | * 是否为合法手机号 14 | * @method Util.cUtilValidate.isMobile 15 | * @param {string} text 16 | * @returns {boolean} 17 | */ 18 | export function isMobile(text: string) { 19 | let reg = /^(1[0-9])\d{9}$/ 20 | return reg.test(text) 21 | } 22 | 23 | /** 24 | * 是否为中文字符 25 | * @method Util.cUtilValidate.isChinese 26 | * @param {string} text 27 | * @returns {boolean} 28 | */ 29 | export function isChinese(text: string) { 30 | let reg = /^[\u4e00-\u9fff]{0,}$/ 31 | return reg.test(text) 32 | } 33 | 34 | /** 35 | * 是否为英文字符 36 | * @method Util.cUtilValidate.isEnglish 37 | * @param {string} text 38 | * @returns {boolean} 39 | */ 40 | export function isEnglish(text: string) { 41 | let reg = /^[A-Za-z]+$/ 42 | return reg.test(text) 43 | } 44 | 45 | /** 46 | * 是否为6位数字邮编 47 | * @method Util.cUtilValidate.isZip 48 | * @param {string} text 49 | * @returns {boolean} 50 | */ 51 | export function isZip(text: string) { 52 | let reg = /^\d{6}$/ 53 | return reg.test(text) 54 | } 55 | 56 | /** 57 | * 是否为合法身份证有效证 58 | * @method Util.cUtilValidate.isIdCard 59 | * @param {String} text 60 | * @returns {boolean} flag 61 | */ 62 | export function isIdCard(idCard: string) { 63 | let num = idCard.toLowerCase().match(/\w/g) 64 | if (!num) { 65 | return false 66 | } 67 | if (idCard.match(/^\d{17}[\dx]$/i)) { 68 | let sum = 0 69 | let times = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] 70 | for (let i = 0; i < 17; i++) sum += parseInt(num[i], 10) * times[i] 71 | if ("10x98765432".charAt(sum % 11) != num[17]) { 72 | return false 73 | } 74 | return !!idCard.replace(/^\d{6}(\d{4})(\d{2})(\d{2}).+$/, "$1-$2-$3") 75 | } 76 | if (idCard.match(/^\d{15}$/)) { 77 | return !!idCard.replace(/^\d{6}(\d{2})(\d{2})(\d{2}).+$/, "19$1-$2-$3") 78 | } 79 | return false 80 | } 81 | 82 | /** 83 | * 是否为合法Url 84 | * @method Util.cUtilValidate.isUrl 85 | * @param {String} target 86 | * @returns {boolean} flag 87 | */ 88 | export function isUrl(target: string) { 89 | return /^http(s)?:\/\/[A-Za-z0-9-]+\.[A-Za-z0-9]+[/=?%\-&_~`@[\]:+!]*([^<>])*$/.test(target) 90 | } 91 | 92 | /** 93 | * 护照 94 | * @param {*} txt 95 | */ 96 | export function isPassport(txt: string) { 97 | return /^[a-zA-Z0-9]{5,17}$/.test(txt) 98 | } 99 | 100 | /** 101 | * 港澳通行证(回乡证) 102 | * @param {*} txt 103 | */ 104 | export function isGangAoPass(txt: string) { 105 | return /^(m|M|h|H)(\d{8}|\d{10})$/.test(txt) 106 | } 107 | 108 | /** 109 | * 台湾居民来往大陆通行证(台胞证) 110 | * @param {*} txt 111 | */ 112 | export function isTaiwanPass(txt: string) { 113 | return /^(\d{8}|[a-zA-Z][0-9]{9})$/.test(txt) 114 | } 115 | 116 | /** 117 | * 外国人永久居留身份证 118 | * 15位 3为字母 + 12阿拉伯数字 119 | */ 120 | export function isForeignerReside(txt: string) { 121 | return /^[a-zA-Z]{3}[0-9]{12}$/.test(txt) 122 | } 123 | 124 | /** 125 | * 港澳台居民居住证 126 | * 18位数字 开头为 81 || 82 || 83 127 | * 11.28 修改为 8100 || 8200 || 8300 128 | */ 129 | export function isGangAoTaiReside(txt: string) { 130 | return /^8[1-3]0{2}\d{13}[0-9x]$/i.test(txt) 131 | } 132 | -------------------------------------------------------------------------------- /_src/validata/readme.md: -------------------------------------------------------------------------------- 1 | # validata - 验证 -------------------------------------------------------------------------------- /_src/vueFn/readme.md: -------------------------------------------------------------------------------- 1 | # rimjs/vueFn 2 | 3 | - 外挂方式 4 | - 提供另一种方式的函数式方式写 vue 代码 5 | - 与 vue-funciton-api 不冲突 -\_- 6 | 7 | ## 先来一段简单代码 8 | 9 | ```html 10 | 13 | 14 | 29 | ``` 30 | 31 | ## API 32 | 33 | ### 最终返回的值 34 | 35 | `$set(vueOptions)` 36 | 37 | - 将 vueOptions 合并入 vue 的 options 参数 38 | 39 | ### 生成 name 40 | 41 | `$name(name:string)` 42 | 43 | - 同 vueOptions 的 name 属性 44 | 45 | ### 混合 46 | 47 | `$mixins(...arg[:options])` 48 | 49 | - 同 vueOptions 的 mixins 50 | 51 | ### 组件 52 | 53 | `$components({...})` 54 | 55 | - 同 vueOptions 的 components 56 | 57 | ### 自定义指令 58 | 59 | `$directives({...})` 60 | 61 | - 同 vueOptions 的 directives 62 | 63 | ### 组件传参 64 | 65 | `$props({...})` 66 | 67 | - 同 vueOptions 的 props 68 | 69 | ```js 70 | $props({ 71 | value: { 72 | type: String, 73 | default: "" 74 | } 75 | }) 76 | 77 | // 以下是传统写法 78 | { 79 | props: { 80 | value: { 81 | type: String, 82 | default: "" 83 | } 84 | } 85 | } 86 | ``` 87 | 88 | ### 数据设置 89 | 90 | `$data({...})` 91 | 92 | - 同 vueOptions 的 data 93 | - 多次设置,会自动合并代码 94 | 95 | ### 原生函数式 setup 中数据输出 96 | 97 | `$setup({...})` Vue3.0 98 | 99 | - 同 vueOptions 的 setup 100 | 101 | ### 计算属性设置 102 | 103 | `$computed({...})` 104 | 105 | - 同 vueOptions 的 computed 106 | 107 | ### 筛选格式化 108 | 109 | `$filters({...})` 110 | 111 | - 同 vueOptions 的 filters 112 | - 返回同\$filters 入参对应的对象数据 113 | 114 | ### 双向绑定设定 115 | 116 | `$model({...})` 117 | 118 | - 同 vueOptions 的 model 119 | 120 | ### 监控 121 | 122 | `$watch({...})` 123 | 124 | - 同 vueOptions 的 watch, 无返回 125 | 126 | ### 方法注册 127 | 128 | `$methods({...})` 129 | 130 | - 同 vueOptions 的 methods 131 | - 方法名称首字母为 : 表示该方法第一个参数接收为 extData,同时,vue 中的方法名称中无:号 132 | 133 | ### 生命周期函数注册 134 | 135 | `$lifecycle({...})` 136 | 137 | > 多次注册同一个钩子函数同时生效 138 | 139 | - $created(funciton(){}) 同 $lifecycle("created", function(){}) 140 | - $mounted(funciton(){}) 同 $lifecycle("mounted", function(){}) 141 | - $destroyed(funciton(){}) 同 $lifecycle("destroyed", function(){}) 142 | - 其他请使用注册函数 143 | 144 | ### 事件触发 145 | 146 | `$emit(...)` 147 | 148 | - 默认将在 mounted 触发 this.\$emit 149 | 150 | ### \$nextTick 151 | 152 | `$nextTick(fun:function)` 153 | 154 | - 默认将在 mounted 触发 this.\$nextTick 155 | 156 | ### 绑定方法的第一个参数为特定功能参数 \$extData 157 | 158 | `$(fun:function|object|array)` 159 | 160 | ### \$getExt 161 | 162 | `$getExt(vm)` 163 | 164 | - 获取 vm 对应的\$extData 数据 165 | 166 | ### \$setExt 167 | 168 | `$setExt` 169 | 170 | - 设置 \$extData 中的数据 171 | 172 | ## 特定的属性参数 \$extData 173 | 174 | ### 获取 vm 中的数据 175 | 176 | `get(key:string):any` 177 | 178 | - 获取 vm 中的数据,返回可以对应的值 179 | 180 | ### 设置 vm 的数据值 181 | 182 | `set(key:string|object, value)` 183 | 184 | - 设置 vm 中的数据 185 | 186 | ### 临时数据 temp 187 | 188 | `temp` 189 | 190 | ### 临时数据 自动清理 191 | 192 | `temp.$T$...` 193 | 194 | - 此命名打头的,当 vm 销毁是,会自动调用 clearTimeout,并设置值为 -1 195 | 196 | `temp.$I$...` 197 | 198 | - 此命名打头的,当 vm 销毁是,会自动调用 clearInterval,并设置值为 -1 199 | 200 | ### 其他插件模式提供的方法 201 | 202 | - 通过 vueExecFun.on 注册的其他方法 203 | 204 | ## 注册插件 205 | 206 | ```js 207 | import Vue from "Vue" 208 | import vueExecFun from "vue-exec-fun" 209 | Vue.use(vueExecFun.install, function({...}){ 210 | 211 | }) 212 | ``` 213 | 214 | ### 在实例函数执行完成后运行 215 | 216 | `after(fun:function)` 217 | 218 | ```js 219 | after(function() { 220 | // 这里执行时,已经完成 vueExecFun 方法的执行了 221 | }) 222 | ``` 223 | 224 | ### vueExecFun 方法参数 225 | 226 | `fnArg` 227 | 228 | - 通过次参数属性增加,可以增加 vueExecFun 中回调函数的参数 229 | - 注意:after 之后设置,会导致在参数无法获取到 230 | 231 | ### 生命周期函数绑定 232 | 233 | `lifecycle({...})` 234 | 235 | - 同 \$lifecycle 236 | 237 | ### 自定义插件中的生命周期函数绑定 238 | 239 | `makeLifecycle` 240 | 241 | ```js 242 | // 新增life周期属性 243 | let life = makeLifecycle() 244 | // fnArg 新增属性 $life $before $ready 245 | Object.assign(fnArg, { 246 | $life: life.on, 247 | $before: life.currying("before"), 248 | $ready: life.currying("ready") 249 | }) 250 | 251 | after(function() { 252 | if (life.has()) { 253 | // 如果有钩子函数,就绑定到options 254 | life.make("life") 255 | } 256 | 257 | // console.log("options", options) 258 | }) 259 | ``` 260 | 261 | ### 制作新的方法 262 | 263 | `quickSet({...})` 264 | 265 | ```js 266 | // 不会讲述,来两个实例吧 267 | 268 | fnArg.$props = quickSet("props") 269 | 270 | fnArg.$components = quickSet("components") 271 | 272 | fnArg.$methods = quickSet("methods") 273 | ``` 274 | 275 | ### 将某些方法绑定到制定生命周期后执行(默认 mounted ) 276 | 277 | `quickNext` 278 | 279 | ```js 280 | $nextTick = quickNext("$nextTick") 281 | $emit = quickNext("$emit") 282 | ``` 283 | 284 | ### 设置 quickNext 绑定的生命周期函数 285 | 286 | `setQuickNextExec(key:string)` 287 | 288 | ### 设置 options 的一些合并策略 289 | 290 | `merges` 291 | 292 | ### 当前组件的 extData 293 | 294 | `extData` 295 | -------------------------------------------------------------------------------- /_src/vueLake/readme.md: -------------------------------------------------------------------------------- 1 | ## rimjs/vueLake 2 | 3 | - 它是 Vuejs 的一个插件,解决了 Vue 中非父子组件通讯的痛点; 4 | - 它还可以使用在任意 JS 中,作为和 Vue 组件通讯的纽带; 5 | - 利用订阅者和发布者模式来管理消息; 6 | - 发布订阅类似koa2中的模式,需要通过next来运行下一个订阅。 7 | 8 | 9 | ## 更新日志 10 | 11 | - [2020-09-07]出发异步支持,类似koa2的剥洋葱 12 | 13 | ## 功能 14 | 15 | - 任意相对独立的 JS 之间的通讯(包括 Vue 组件以及 JS) 16 | - 订阅需要初始化客户端,并且有自身的生命周期 17 | - 当在 Vue lake 会自动注册,并将生命周期融合 18 | - 全局监控支持(当监控到某个组件初始化后,会自动触发回调) 19 | 20 | ## API 21 | 22 | ### JS 中使用 23 | 24 | ```javascript 25 | import Lake from "rimjs/vueLake" 26 | let lake = new Lake({ 27 | // 绑定的对象 28 | target: {}, 29 | // 实例唯一ID 30 | id: "id", 31 | // 实例分组,可以多个 字符串数组表示 32 | group:"group" 33 | }) 34 | 35 | // 消息订阅 36 | lake.sub("instruct", async function({ 37 | // emit时,第二个参数 38 | data, 39 | // 触发emit的实例 40 | from, 41 | // new 时,绑定的对象 42 | target 43 | }, next) { 44 | // ... 45 | 46 | // 下一个 47 | await next() 48 | 49 | // 回溯代码... 50 | }) 51 | 52 | // 取消订阅 instruct 并且 回调为 这个函数的 53 | lake.unSub("instruct", fun) 54 | // 取消 instruct 的全部订阅 55 | lake.unSub("instruct") 56 | // 取消全部和lake有关的订阅 57 | lake.unSub() 58 | 59 | // 消息发布 返回event 同 上面的回调参数 60 | let event = lake.pub('instruct', data) 61 | 62 | // 消息发布到指定id 63 | let event = lake.pub('instruct#id', data) 64 | 65 | // 消息发布到指定group 66 | let event = lake.pub('instruct@group', data) 67 | 68 | // 获取命名为 id 的lake 69 | let that = Lake.getId('id') 70 | 71 | // 获取分组 group 72 | let thats = Lake.getGroup('name') 73 | 74 | // 监控组件被命名为 id 75 | lake.listen("#id", function(that){ 76 | // that 命名为 id 的那个组件 77 | // ... 78 | }) 79 | // 监控组件分组中包含 group 80 | lake.listen("@group", function(that) { 81 | // ... 82 | }) 83 | 84 | // 取消特定监控 85 | lake.unListen("#id", fun) 86 | lake.unListen("@group", fun) 87 | 88 | // 取消指定所有监控 89 | lake.unListen("#id") 90 | lake.unListen("@group") 91 | 92 | // 取消全部和lake有关的监控 93 | lake.unListen() 94 | 95 | ``` 96 | 97 | ### main.js 注册 Lake 插件 98 | 99 | ```javascript 100 | import Vue from "vue" 101 | import VueLake from "rimjs/vueLake" 102 | // 非 cli 也必须 install一下 useProps 默认为 true,部分极端情况可以设置为false 例如:ant-design 103 | Vue.use(VueLake, { useProps: true }) 104 | ``` 105 | 106 | ### Vue 组件内部使用 107 | 108 | ```javascript 109 | { 110 | // 将这个组件归到group分组, 多个分组请使用字符串数组 111 | lakeName: 'group', 112 | // lake 是组件内部订阅消息设置的 113 | lakeSubs: { 114 | // 订阅消息 为 instruct 115 | async instruct (event, next) { 116 | // event 参数参照上面《JS中使用》中的on方法回调参数 117 | 118 | await next 119 | 120 | // ... 121 | 122 | } 123 | }, 124 | method: { 125 | doExec () { 126 | // 发布订阅消息 127 | // instruct 本组件如果订阅,也能收到 128 | this.$lake("instruct", arg) 129 | 130 | // 获取被命名为 id的组件引用 131 | // that 为lake实例,that.target 为Vue的实例 132 | let that = this.$lake.id("id") 133 | 134 | // 获取分组为 group 的所有vue 135 | let thats = this.$lake.group("group") 136 | 137 | // 原始 lake 对象的指向,不介意直接操作 138 | this._lake_data_.self 139 | } 140 | } 141 | } 142 | ``` 143 | 144 | ### Vue 组件实例化传参 145 | 146 | ```html 147 | 148 | 149 | 150 | 151 | ``` 152 | 153 | ### 一个实例 154 | ```ts 155 | import Lake from "../vueLake" 156 | 157 | let lake = new Lake() 158 | 159 | lake.sub("tt", function({ data }) { 160 | data.x = 1 161 | }) 162 | 163 | lake.sub<{ y: number; z: number }>("tt", async function(this: Lake, { data }, next) { 164 | data.y = 1 165 | 166 | await next() 167 | 168 | data.z = 100 169 | }) 170 | 171 | lake.sub("tt", async function({ data }, next) { 172 | data.z = 2 173 | 174 | await next() 175 | 176 | data.z = 50 177 | }) 178 | 179 | async function doExe() { 180 | // 输出 {data:{x:1, z: 1, y: 100}} 181 | console.log(await lake.pub("tt")) 182 | } 183 | 184 | doExe() 185 | 186 | ``` -------------------------------------------------------------------------------- /_src/vueLife/imgs/tu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/szpoppy/rimjs/2ec8e2635bae9a05b674db17e5703bc9c4b8338c/_src/vueLife/imgs/tu.png -------------------------------------------------------------------------------- /_src/vueLife/readme.md: -------------------------------------------------------------------------------- 1 | # rimjs/vueLife 2 | 3 | ## Vue 自定义生命周期 4 | 5 | - 所有自定义生命周期,都绑定 Vue 的实际生命周期函数,并确保在实际生命周期之后执行 6 | - 自定义生命周期函数的运行受限于本身项目中的特定流程。 7 | - 下面实例 8 | 9 | ## 示例 10 | 11 | ```javascript 12 | // 初始化 钩子函数 ready 13 | import VueLife from "rimjs/vueLife" 14 | Vue.use(VueLife, { 15 | // 完成回调 16 | init({ emit, vue, hooks }, ...args) { 17 | // 此处的emit是全局触发 18 | // 初始化内设置 绑定vue生命周期函数 19 | hooks.before = "beforeCreate" 20 | // 运行获取完成身份触发的事件 21 | setTimeout(() => { 22 | emit("user", { account: "account" }) 23 | }, 500) 24 | 25 | setTimeout(() => { 26 | emit("ready", "app is ready") 27 | }, 200) 28 | 29 | setTimeout(() => { 30 | emit("before", "app is before") 31 | }, 0) 32 | }, 33 | // 默认绑定的vue本身生命周期函数 34 | hookDef: "mounted", 35 | // 设置特定的生命周期函数绑定 36 | hooks: { 37 | user: "created" 38 | }, 39 | // 运行 init 函数时赋予的额外参数 40 | args: [] 41 | }) 42 | ``` 43 | 44 | ```javascript 45 | // vue中,实际触发 46 | { 47 | life: { 48 | befor ({data, then, emit}) { 49 | // emit 可以触发其他的事件,此事件只局限于本组件中 50 | // 此处触发大概在 beforeCreate 左右 51 | // 此处可以利用vue生命周期的间隔来初始化数据 52 | then(() => { 53 | // 此处触发,会在 hookDef(mounted) 设置的触发时机触发 54 | }) 55 | }, 56 | user ({data}) { 57 | // 这个生命周期将在 emit("user", {account: "account"}) 和 created 之后来触发生命周期(hooks配置) 58 | // data 内容为 {account: "account"} 59 | }, 60 | ready ({data}) { 61 | // 这个生命周期将在 emit("ready", "app is ready") 和 mounted 之后来触发生命周期(hookDef配置) 62 | // data 内容为 "app is ready" 63 | } 64 | } 65 | } 66 | 67 | ``` 68 | 69 | ## 实例 70 | 71 | > 下面两个 ajax 触发时间都可以发生在 vue 本省生命周期函数过度期间运行,加快页面加载速度 72 | 73 | ### 流程图 74 | 75 | !["流程图"](./imgs/tu.png) 76 | 77 | ### 初始化 78 | 79 | ```js 80 | import VueLife from "rimjs/vueLife" 81 | Vue.use(VueLife, { 82 | // 完成回调 83 | init({ emit, hooks }) { 84 | // user 事件关联 hooks.before = "beforeCreate" 85 | hooks.user = "beforeCreate" 86 | 87 | // ajax获取用户信息 88 | ajax(function(res) { 89 | // user 事件触发 90 | emit("user", res) 91 | }) 92 | } 93 | }) 94 | ``` 95 | 96 | ### vue 实例 97 | 98 | ```html 99 | 121 | ``` 122 | 123 | ### prepose 自定在 beforeCreate 时会触发 124 | 125 | ```html 126 | 147 | ``` 148 | -------------------------------------------------------------------------------- /_src/vueUnicom/readme.md: -------------------------------------------------------------------------------- 1 | ## rimjs/vueUnicom 2 | 3 | - 它是 Vuejs 的一个插件,解决了 Vue 中非父子组件通讯的痛点。 4 | - 它还可以使用在任意 JS 中,作为和 Vue 组件通讯的纽带 5 | - 利用订阅者和发布者模式来管理消息 6 | 7 | ## 更新日志 8 | 9 | - [2019-07-30]重构 vue-unicom,重构后代码逻辑更清晰 10 | - [2019-07-31]优化注解,修复全局订阅问题以及一些多余代码删除 11 | - [2020-01-21]TS 改造,只支持 CommonJS 加载 12 | - [2020-09-07]出发异步支持,类似koa2的剥洋葱 13 | 14 | ## 功能 15 | 16 | - 任意相对独立的 JS 之间的通讯(包括 Vue 组件以及 JS) 17 | - 订阅需要初始化客户端,并且有自身的生命周期 18 | - 当在 Vue 组件内,unicom 会自动注册,并将生命周期融合 19 | - 全局监控支持(当监控到某个组件初始化后,会自动触发回调) 20 | 21 | ## 运行 demo 22 | 23 | - vue-cli demo: https://github.com/szpoppy/vue-unicom-demo 24 | 25 | ## API 26 | 27 | ### JS 中使用 28 | 29 | ```javascript 30 | import Unicom from "rimjs/vueUnicom" 31 | let unicom = new Unicom({ 32 | // 绑定的对象 33 | target: {}, 34 | // 实例唯一ID 35 | id: "id", 36 | // 实例分组,可以多个 字符串数组表示 37 | group:"group" 38 | }) 39 | 40 | // 消息订阅 41 | unicom.on("instruct", function({ 42 | // emit时,第二个参数 43 | data, 44 | $1, 45 | // emit时,第三个参数,依次类推 46 | $2, 47 | // 触发emit的实例 48 | from, 49 | // new 时,绑定的对象 50 | target 51 | }, next) { 52 | // ... 53 | 54 | // 同步 55 | next && next() 56 | }) 57 | 58 | // 取消订阅 instruct 并且 回调为 这个函数的 59 | unicom.off("instruct", fun) 60 | // 取消 instruct 的全部订阅 61 | unicom.off("instruct") 62 | // 取消全部和unicom有关的订阅 63 | unicom.off() 64 | 65 | // 消息发布 返回event 同 上面的回调参数 66 | let event = unicom.emit('instruct', arg1, arg2, ...) 67 | 68 | // 消息发布到指定id 69 | let event = unicom.emit('instruct#id', arg1, arg2, ...) 70 | 71 | // 消息发布到指定group 72 | let event = unicom.emit('instruct@group', arg1, arg2, ...) 73 | 74 | // 获取命名为 id 的unicom 75 | let that = unicom.emit('#id') 76 | 77 | // 获取分组 group 78 | let thats = unicom.emit('@group') 79 | 80 | // 监控组件被命名为 id 81 | unicom.monitor("#id", function(that){ 82 | // that 命名为 id 的那个组件 83 | // ... 84 | }) 85 | // 监控组件分组中包含 group 86 | unicom.monitor("@group", function(that) { 87 | // ... 88 | }) 89 | 90 | // 取消特定监控 91 | unicom.monitorOff("#id", fun) 92 | unicom.monitorOff("@group", fun) 93 | 94 | // 取消指定所有监控 95 | unicom.monitorOff("#id") 96 | unicom.monitorOff("@group") 97 | 98 | // 取消全部和unicom有关的监控 99 | unicom.monitorOff() 100 | 101 | ``` 102 | 103 | ### main.js 注册 Unicom 插件 104 | 105 | ```javascript 106 | import Vue from "vue" 107 | import VueUnicom from "vue-unicom" 108 | // 非 cli 也必须 install一下 useProps 默认为 true 例如:ant-design 109 | Vue.use(VueUnicom, {useProps: true}) 110 | ``` 111 | 112 | ### Vue 组件内部使用 113 | 114 | ```javascript 115 | { 116 | // 将这个组件归到group分组, 多个分组请使用字符串数组 117 | unicomName: 'group', 118 | // unicom 是组件内部订阅消息设置的 119 | unicom: { 120 | // 订阅消息 为 instruct 121 | instruct (event) { 122 | // event 参数参照上面《JS中使用》中的on方法回调参数 123 | } 124 | }, 125 | method: { 126 | doExec () { 127 | // 发布订阅消息 128 | // instruct 本组件如果订阅,也能收到 129 | this.$unicom("instruct", arg1, arg2, ...) 130 | 131 | // 获取被命名为 id的组件引用 132 | // that 为unicom实例,that.target 为Vue的实例 133 | let that = this.$unicom("#id") 134 | 135 | // 获取分组为 group 的所有vue 136 | let thats = this.$unicom("@group") 137 | 138 | // 原始 unicom 对象的指向,不介意直接操作 139 | this._unicom_data_.self 140 | } 141 | } 142 | } 143 | ``` 144 | 145 | ### Vue 组件实例化传参 146 | 147 | ```html 148 | 149 | 150 | 151 | 152 | ``` 153 | -------------------------------------------------------------------------------- /ajax/browser.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /ajax/h5.d.ts: -------------------------------------------------------------------------------- 1 | import { AjaxGroup, fixedURL, getParamString } from "./lib"; 2 | import "./browser"; 3 | export * from "./lib"; 4 | export declare let ajaxUtil: { 5 | fixedURL: typeof fixedURL; 6 | toParam: typeof getParamString; 7 | }; 8 | export declare let ajax: AjaxGroup & { 9 | global: import("./lib").Global; 10 | Group: typeof AjaxGroup; 11 | util: { 12 | fixedURL: typeof fixedURL; 13 | toParam: typeof getParamString; 14 | }; 15 | }; 16 | export default ajax; 17 | -------------------------------------------------------------------------------- /ajax/h5.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 5 | }) : (function(o, m, k, k2) { 6 | if (k2 === undefined) k2 = k; 7 | o[k2] = m[k]; 8 | })); 9 | var __exportStar = (this && this.__exportStar) || function(m, exports) { 10 | for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 11 | }; 12 | Object.defineProperty(exports, "__esModule", { value: true }); 13 | exports.ajax = exports.ajaxUtil = void 0; 14 | var lib_1 = require("./lib"); 15 | require("./browser"); 16 | __exportStar(require("./lib"), exports); 17 | exports.ajaxUtil = { 18 | fixedURL: lib_1.fixedURL, 19 | toParam: lib_1.getParamString 20 | }; 21 | exports.ajax = Object.assign(new lib_1.AjaxGroup(), { global: lib_1.ajaxGlobal, Group: lib_1.AjaxGroup, util: exports.ajaxUtil }); 22 | exports.default = exports.ajax; 23 | //# sourceMappingURL=h5.js.map -------------------------------------------------------------------------------- /ajax/h5.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"h5.js","sourceRoot":"","sources":["../_src/ajax/h5.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6BAAuE;AACvE,qBAAkB;AAClB,wCAAqB;AAEV,QAAA,QAAQ,GAAG;IAClB,QAAQ,gBAAA;IACR,OAAO,EAAE,oBAAc;CAC1B,CAAA;AAEU,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,eAAS,EAAE,EAAE,EAAE,MAAM,EAAE,gBAAU,EAAE,KAAK,EAAE,eAAS,EAAE,IAAI,EAAE,gBAAQ,EAAE,CAAC,CAAA;AAC1G,kBAAe,YAAI,CAAA"} -------------------------------------------------------------------------------- /ajax/index.d.ts: -------------------------------------------------------------------------------- 1 | import { AjaxGroup, fixedURL, getParamString } from "./lib"; 2 | export * from "./lib"; 3 | export declare let ajaxUtil: { 4 | fixedURL: typeof fixedURL; 5 | toParam: typeof getParamString; 6 | }; 7 | export declare let ajax: AjaxGroup & { 8 | global: import("./lib").Global; 9 | Group: typeof AjaxGroup; 10 | util: { 11 | fixedURL: typeof fixedURL; 12 | toParam: typeof getParamString; 13 | }; 14 | }; 15 | export default ajax; 16 | -------------------------------------------------------------------------------- /ajax/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 5 | }) : (function(o, m, k, k2) { 6 | if (k2 === undefined) k2 = k; 7 | o[k2] = m[k]; 8 | })); 9 | var __exportStar = (this && this.__exportStar) || function(m, exports) { 10 | for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 11 | }; 12 | Object.defineProperty(exports, "__esModule", { value: true }); 13 | exports.ajax = exports.ajaxUtil = void 0; 14 | /* 15 | function getDefaultAdapter() { 16 | var adapter; 17 | if (typeof XMLHttpRequest !== 'undefined') { 18 | // For browsers use XHR adapter 19 | adapter = require('./adapters/xhr'); 20 | } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { 21 | // For node use HTTP adapter 22 | adapter = require('./adapters/http'); 23 | } 24 | return adapter; 25 | } 26 | */ 27 | var lib_1 = require("./lib"); 28 | __exportStar(require("./lib"), exports); 29 | exports.ajaxUtil = { 30 | fixedURL: lib_1.fixedURL, 31 | toParam: lib_1.getParamString 32 | }; 33 | require(typeof process !== "undefined" && Object.prototype.toString.call(process) === "[object process]" 34 | ? // node 35 | "./node-http" 36 | : // 浏览器 37 | "./browser"); 38 | exports.ajax = Object.assign(new lib_1.AjaxGroup(), { global: lib_1.ajaxGlobal, Group: lib_1.AjaxGroup, util: exports.ajaxUtil }); 39 | exports.default = exports.ajax; 40 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /ajax/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/ajax/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;;;;;;;;;;EAYE;AACF,6BAAuE;AACvE,wCAAqB;AAEV,QAAA,QAAQ,GAAG;IAClB,QAAQ,gBAAA;IACR,OAAO,EAAE,oBAAc;CAC1B,CAAA;AACD,OAAO,CAAC,OAAO,OAAO,KAAK,WAAW,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,kBAAkB;IACpG,CAAC,CAAC,OAAO;QACP,aAAa;IACf,CAAC,CAAC,MAAM;QACN,WAAW,CAAC,CAAA;AAEP,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,eAAS,EAAE,EAAE,EAAE,MAAM,EAAE,gBAAU,EAAE,KAAK,EAAE,eAAS,EAAE,IAAI,EAAE,gBAAQ,EAAE,CAAC,CAAA;AAC1G,kBAAe,YAAI,CAAA"} -------------------------------------------------------------------------------- /ajax/lib.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import Event from "../event"; 3 | import { ReadStream } from "fs"; 4 | export declare function fixedURL(url: string, paramStr: string): string; 5 | export declare function getParamString(param?: FormData | IParam | string, dataType?: string): string | FormData; 6 | export declare function getDefaultContentType(dataType?: string): string; 7 | interface NodeFormDataItem { 8 | value?: ReadStream | string | Buffer; 9 | url?: string; 10 | name?: string; 11 | fileName?: string; 12 | } 13 | declare type NodeFormDataItemValue = NodeFormDataItem | ReadStream | string | Buffer; 14 | export declare class NodeFormData { 15 | private _data; 16 | set(key: string, item: NodeFormDataItemValue): void; 17 | delete(key: string): void; 18 | has(key: string): boolean; 19 | forEach(fn: (item: NodeFormDataItemValue, key: string) => void): void; 20 | } 21 | interface IFStrObj { 22 | [propName: string]: string | number; 23 | } 24 | interface IParam { 25 | [propName: string]: number | string | boolean | Array | IParam; 26 | } 27 | declare type sendParam = IParam | string | FormData | Array | NodeFormData; 28 | declare enum EResType { 29 | json = "json", 30 | text = "text" 31 | } 32 | export interface IFAjaxConf { 33 | timeout?: number; 34 | baseURL?: string; 35 | paths?: IFStrObj; 36 | useFetch?: boolean; 37 | url?: string; 38 | method?: string; 39 | dataType?: string; 40 | resType?: EResType; 41 | param?: IParam | string; 42 | header?: IFStrObj; 43 | jsonpKey?: string; 44 | cache?: boolean; 45 | withCredentials?: boolean; 46 | } 47 | export declare class AjaxReq { 48 | baseURL?: string; 49 | paths: IFStrObj; 50 | useFetch: boolean; 51 | url: string; 52 | method: string; 53 | dataType: string; 54 | resType: EResType; 55 | param?: IParam | string | FormData; 56 | body: any; 57 | header: IFStrObj; 58 | jsonpKey: string; 59 | cache: boolean; 60 | withCredentials: boolean; 61 | xhr?: XMLHttpRequest; 62 | nodeReq: any; 63 | path: string; 64 | originURL: string; 65 | formatURL: string; 66 | isFormData: boolean; 67 | isCross: boolean; 68 | outFlag: boolean; 69 | [propName: string]: any; 70 | } 71 | export declare class AjaxRes { 72 | jsonKey: string; 73 | headers?: any; 74 | status?: number; 75 | text?: string; 76 | json?: any; 77 | cancel?: boolean; 78 | err?: any; 79 | result?: any; 80 | isTimeout?: boolean; 81 | isAbort?: boolean; 82 | [propName: string]: any; 83 | getData(prot: string, data?: any): any; 84 | getHeader(key: string): string; 85 | } 86 | export declare class AjaxCourse { 87 | req: AjaxReq; 88 | res: AjaxRes; 89 | progress?: ProgressEvent; 90 | ajax: Ajax; 91 | [propName: string]: any; 92 | getDate(this: AjaxCourse): Date; 93 | constructor(ajax: Ajax); 94 | } 95 | export declare class Ajax extends Event { 96 | _course?: AjaxCourse; 97 | conf: IFAjaxConf; 98 | parent: AjaxGroup; 99 | private _timeoutHandle; 100 | on(type: string, fn: (arg: AjaxCourse) => void, isPre?: boolean): void; 101 | constructor(parent: AjaxGroup, opt?: IFAjaxConf); 102 | setConf(opt?: IFAjaxConf): Ajax; 103 | abort(): Ajax; 104 | timeout(this: Ajax, time: number, callback?: IEventOnFn): Ajax; 105 | send(this: Ajax, param?: sendParam, over?: boolean): Ajax; 106 | then(): Promise; 107 | then(thenFn: (course: AjaxCourse) => T): Promise; 108 | then(thenFn: "res"): Promise; 109 | then(thenFn: "req"): Promise; 110 | then(thenFn: "ajax"): Promise; 111 | } 112 | declare type IEventOnFn = (this: Ajax, arg: AjaxCourse) => void; 113 | interface shortcutEventObj { 114 | [propName: string]: IEventOnFn; 115 | } 116 | declare type shortcutEvent = shortcutEventObj | IEventOnFn; 117 | declare type groupLoadOnNew = (ajax: Ajax) => void; 118 | export declare class AjaxGroup extends Event { 119 | dateDiff: number; 120 | conf: IFAjaxConf; 121 | parent?: Global; 122 | on(type: string, fn: (arg: AjaxCourse) => void, isPre?: boolean): void; 123 | constructor(opt?: IFAjaxConf); 124 | setConf(opt?: IFAjaxConf): AjaxGroup; 125 | create(opt?: IFAjaxConf): Ajax; 126 | shortcut(opt: IFAjaxConf, events?: shortcutEvent): (callback: IEventOnFn | sendParam, param?: sendParam) => Ajax; 127 | load(url: string | IFAjaxConf, callback?: IEventOnFn | sendParam, param?: sendParam | groupLoadOnNew, onNew?: groupLoadOnNew): Ajax; 128 | fetch(opt?: IFAjaxConf, param?: sendParam, onNew?: groupLoadOnNew): Promise; 129 | setDate(date: string | Date): void; 130 | getDate(): Date; 131 | } 132 | export declare class Global extends Event { 133 | conf: IFAjaxConf; 134 | on(type: string, fn: (arg: AjaxCourse) => void, isPre?: boolean): void; 135 | setConf(conf: IFAjaxConf): void; 136 | paramMerge(req: AjaxReq, param: any): void; 137 | fetchExecute(course: AjaxCourse, ajax: Ajax): void; 138 | } 139 | export declare let ajaxGlobal: Global; 140 | export declare function responseEnd(this: Ajax, course: AjaxCourse): void; 141 | export {}; 142 | -------------------------------------------------------------------------------- /ajax/node-http.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /ajax/node-http.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"node-http.js","sourceRoot":"","sources":["../_src/ajax/node-http.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /assign/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 深度混合 对象 3 | * @param target 4 | * @param objs 每个单元应该同target 的数据类型一致 5 | */ 6 | export declare function merge(target: T, source: U): T & U; 7 | export declare function merge(target: T, source1: U, source2: V): T & U & V; 8 | export declare function merge(target: T, source1: U, source2: V, source3: W): T & U & V & W; 9 | /** 10 | * 深度克隆 对象 11 | * @param target 12 | * @param objs 每个单元应该同target 的数据类型一致 13 | */ 14 | export declare function assign(target: T, source: U): T & U; 15 | export declare function assign(target: T, source1: U, source2: V): T & U & V; 16 | export declare function assign(target: T, source1: U, source2: V, source3: W): T & U & V & W; 17 | declare const _default: { 18 | merge: typeof merge; 19 | assign: typeof assign; 20 | }; 21 | export default _default; 22 | -------------------------------------------------------------------------------- /assign/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | exports.assign = exports.merge = void 0; 7 | var each_1 = __importDefault(require("../each")); 8 | // 用于类型判断 9 | var _toString = Object.prototype.toString; 10 | function __assign(target, source, flag) { 11 | if (flag === void 0) { flag = false; } 12 | each_1.default(source, function (item, n) { 13 | if (item) { 14 | var type = _toString.call(item).toLowerCase(); 15 | var isTArr = type == "[object array]"; 16 | var isTObj = type == "[object object]"; 17 | if (type == "[object date]") { 18 | target[n] = new Date(item.getTime()); 19 | return; 20 | } 21 | var targetType = _toString.call(target[n]).toLowerCase(); 22 | if (isTArr || isTObj) { 23 | // 数组 或者 对象 24 | if (target[n] == null || (!flag && targetType != type)) { 25 | target[n] = isTArr ? [] : {}; 26 | } 27 | __assign(target[n], item, flag); 28 | return; 29 | } 30 | } 31 | target[n] = item; 32 | }); 33 | return target; 34 | } 35 | function _assign(target, objs, flag) { 36 | if (flag === void 0) { flag = false; } 37 | each_1.default(objs, function (source) { 38 | __assign(target, source, flag); 39 | }); 40 | return target; 41 | } 42 | function merge(target) { 43 | var sources = []; 44 | for (var _i = 1; _i < arguments.length; _i++) { 45 | sources[_i - 1] = arguments[_i]; 46 | } 47 | return _assign(target, sources, true); 48 | } 49 | exports.merge = merge; 50 | function assign(target) { 51 | var sources = []; 52 | for (var _i = 1; _i < arguments.length; _i++) { 53 | sources[_i - 1] = arguments[_i]; 54 | } 55 | return _assign(target, sources, false); 56 | } 57 | exports.assign = assign; 58 | exports.default = { 59 | merge: merge, 60 | assign: assign 61 | }; 62 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /assign/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/assign/index.ts"],"names":[],"mappings":";;;;;;AAAA,iDAA6B;AAE7B,SAAS;AACT,IAAM,SAAS,GAAa,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;AAErD,SAAS,QAAQ,CAAC,MAAW,EAAE,MAAc,EAAE,IAAY;IAAZ,qBAAA,EAAA,YAAY;IACvD,cAAO,CAAC,MAAM,EAAE,UAAS,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,EAAE;YACN,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YAC7C,IAAI,MAAM,GAAG,IAAI,IAAI,gBAAgB,CAAA;YACrC,IAAI,MAAM,GAAG,IAAI,IAAI,iBAAiB,CAAA;YACtC,IAAI,IAAI,IAAI,eAAe,EAAE;gBACzB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;gBACpC,OAAM;aACT;YAED,IAAI,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;YACxD,IAAI,MAAM,IAAI,MAAM,EAAE;gBAClB,WAAW;gBACX,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,EAAE;oBACpD,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;iBAC/B;gBACD,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;gBAC/B,OAAM;aACT;SACJ;QACD,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACpB,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACjB,CAAC;AAED,SAAS,OAAO,CAAC,MAAW,EAAE,IAAgB,EAAE,IAAY;IAAZ,qBAAA,EAAA,YAAY;IACxD,cAAO,CAAC,IAAI,EAAE,UAAS,MAAc;QACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACjB,CAAC;AAUD,SAAgB,KAAK,CAAC,MAAc;IAAE,iBAAiB;SAAjB,UAAiB,EAAjB,qBAAiB,EAAjB,IAAiB;QAAjB,gCAAiB;;IACnD,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AACzC,CAAC;AAFD,sBAEC;AAUD,SAAgB,MAAM,CAAC,MAAc;IAAE,iBAAiB;SAAjB,UAAiB,EAAjB,qBAAiB,EAAjB,IAAiB;QAAjB,gCAAiB;;IACpD,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;AAC1C,CAAC;AAFD,wBAEC;AAED,kBAAe;IACX,KAAK,OAAA;IACL,MAAM,QAAA;CACT,CAAA"} -------------------------------------------------------------------------------- /cache/index.d.ts: -------------------------------------------------------------------------------- 1 | declare type initedNum = 0 | 2; 2 | declare type setDataFn = (data: any, initNum?: initedNum) => void; 3 | declare type getDataFn = (setData: setDataFn, para: any) => void; 4 | declare type backFn = (value: T) => void; 5 | declare class Cache { 6 | backs: backFn[]; 7 | inited: initedNum | 1; 8 | date: number; 9 | data: T; 10 | setData(data: T, inited?: initedNum | Boolean): void; 11 | } 12 | export interface IPromiseCacheBackFn { 13 | (para?: any): Promise; 14 | caches: Record>; 15 | } 16 | export declare function promiseCache(getFn: getDataFn, eTime?: number, getKey?: (key: any) => string): IPromiseCacheBackFn; 17 | declare const _default: { 18 | promise: typeof promiseCache; 19 | }; 20 | export default _default; 21 | -------------------------------------------------------------------------------- /cache/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.promiseCache = void 0; 4 | var Cache = /** @class */ (function () { 5 | function Cache() { 6 | this.backs = []; 7 | this.inited = 0; 8 | this.date = new Date().getTime(); 9 | } 10 | Cache.prototype.setData = function (data, inited) { 11 | if (inited === void 0) { inited = true; } 12 | if (inited == 2 || inited === true) { 13 | // 为0,异常,不更新 14 | this.data = data; 15 | } 16 | this.inited = inited ? 2 : 0; 17 | while (this.backs.length) { 18 | var fn = this.backs.shift(); 19 | fn(data); 20 | } 21 | }; 22 | return Cache; 23 | }()); 24 | function getKeyDef(para) { 25 | if (typeof para == "string") { 26 | return para; 27 | } 28 | if (para && para.toString) { 29 | return para.toString(); 30 | } 31 | return ":default"; 32 | } 33 | function promiseCache(getFn, eTime, getKey) { 34 | if (eTime === void 0) { eTime = 0; } 35 | if (getKey === void 0) { getKey = getKeyDef; } 36 | var caches = {}; 37 | var cacheFn = function (para) { 38 | if (para === void 0) { para = null; } 39 | var key = getKey(para); 40 | var cache = caches[key]; 41 | if (cache && cache.inited == 2 && eTime > 0 && cache.date + eTime < new Date().getTime()) { 42 | // 已经过期了 43 | cache.inited = 0; 44 | } 45 | if (!cache) { 46 | // 不存在或者过期了 47 | cache = caches[key] = new Cache(); 48 | } 49 | // 直接返回已经存在 50 | return new Promise(function (resolve) { 51 | if (cache.inited > 1) { 52 | resolve(cache.data); 53 | return; 54 | } 55 | cache.backs.push(resolve); 56 | if (cache.inited < 1) { 57 | cache.inited = 1; 58 | getFn(function (data, inited) { 59 | cache.setData(data, inited); 60 | }, para); 61 | } 62 | }); 63 | }; 64 | cacheFn.caches = caches; 65 | return cacheFn; 66 | } 67 | exports.promiseCache = promiseCache; 68 | exports.default = { 69 | promise: promiseCache 70 | }; 71 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /cache/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/cache/index.ts"],"names":[],"mappings":";;;AAMA;IAAA;QACI,UAAK,GAAgB,EAAE,CAAA;QACvB,WAAM,GAAkB,CAAC,CAAA;QACzB,SAAI,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAgBvC,CAAC;IAbG,uBAAO,GAAP,UAAQ,IAAO,EAAE,MAAkC;QAAlC,uBAAA,EAAA,aAAkC;QAC/C,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,KAAK,IAAI,EAAE;YAChC,YAAY;YACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;SACnB;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAE5B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACtB,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAe,CAAA;YACxC,EAAE,CAAC,IAAI,CAAC,CAAA;SACX;IACL,CAAC;IACL,YAAC;AAAD,CAAC,AAnBD,IAmBC;AAED,SAAS,SAAS,CAAC,IAAS;IACxB,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;QACzB,OAAO,IAAI,CAAA;KACd;IACD,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;QACvB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;KACzB;IACD,OAAO,UAAU,CAAA;AACrB,CAAC;AAOD,SAAgB,YAAY,CAAU,KAAgB,EAAE,KAAiB,EAAE,MAAwC;IAA3D,sBAAA,EAAA,SAAiB;IAAE,uBAAA,EAAA,kBAAwC;IAC/G,IAAI,MAAM,GAA6B,EAAE,CAAA;IACzC,IAAI,OAAO,GAAG,UAAS,IAAW;QAAX,qBAAA,EAAA,WAAW;QAC9B,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QACtB,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACvB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;YACtF,QAAQ;YACR,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;SACnB;QACD,IAAI,CAAC,KAAK,EAAE;YACR,WAAW;YACX,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,EAAE,CAAA;SACpC;QAED,WAAW;QACX,OAAO,IAAI,OAAO,CAAC,UAAS,OAAO;YAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACnB,OAAM;aACT;YACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAEzB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;gBAChB,KAAK,CAAC,UAAS,IAAI,EAAE,MAAM;oBACvB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBAC/B,CAAC,EAAE,IAAI,CAAC,CAAA;aACX;QACL,CAAC,CAAC,CAAA;IACN,CAA2B,CAAA;IAC3B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;IACvB,OAAO,OAAO,CAAA;AAClB,CAAC;AAhCD,oCAgCC;AAED,kBAAe;IACX,OAAO,EAAE,YAAY;CACxB,CAAA"} -------------------------------------------------------------------------------- /clean.js: -------------------------------------------------------------------------------- 1 | // 清理dist中的文件夹的 2 | 3 | let fs = require("fs") 4 | let path = require("path") 5 | 6 | function clean(file, isFirst) { 7 | if (fs.lstatSync(file).isDirectory()) { 8 | let flg = true 9 | fs.readdirSync(file).forEach(item => { 10 | if (item == "node_modules" || /^[\._]/.test(item) || (!clean(path.join(file, item), file === __dirname) && flg)) { 11 | flg = false 12 | } 13 | }) 14 | if (flg) { 15 | fs.rmdirSync(file) 16 | return true 17 | } 18 | return false 19 | } 20 | if (isFirst) { 21 | return false 22 | } 23 | fs.unlinkSync(file) 24 | return true 25 | } 26 | 27 | clean(__dirname) 28 | -------------------------------------------------------------------------------- /cookie/index.d.ts: -------------------------------------------------------------------------------- 1 | declare type TExpiration = number | string | Date; 2 | /** 3 | * 获取cookie 4 | * @param {String} key 5 | */ 6 | export declare function getCookie(key: string): string; 7 | /** 8 | * 设置cookie 9 | * @param {String} key 10 | * @param {String} value 11 | * @param {Number|String|Date} expiration 0:进程,-1:永久,数字:天数,字符串,日期 12 | * @param {Number|String|Date} expiration 1d 1天 1h 1小时 1m 1分钟 13 | * @param {String} path 文档路径 14 | * @param {String} domain 域名,可以设置主域名 15 | */ 16 | export declare function setCookie(key: string, value: string, expiration?: TExpiration, path?: string, domain?: string): void; 17 | /** 18 | * 移除cookie 19 | * @param {*} key 20 | * @param {*} path 文档路径 21 | * @param {*} domain 域名,可以设置主域名 22 | */ 23 | export declare function removeCookie(key: string, path?: string, domain?: string): void; 24 | export default class Cookie { 25 | expiration?: Date; 26 | path?: string; 27 | domain?: string; 28 | constructor({ expiration, path, domain }?: { 29 | expiration: TExpiration; 30 | path?: string; 31 | domain?: string; 32 | }); 33 | static getItem: typeof getCookie; 34 | getItem(key: string): string; 35 | static setItem: typeof setCookie; 36 | setItem(key: string, value: string): void; 37 | static removeItem: typeof removeCookie; 38 | removeItem(key: string): void; 39 | } 40 | export {}; 41 | -------------------------------------------------------------------------------- /cookie/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.removeCookie = exports.setCookie = exports.getCookie = void 0; 4 | function getExpiration(expiration) { 5 | if (typeof expiration === "number") { 6 | if (expiration == -1) { 7 | // 永久 8 | return new Date("3000/01/01"); 9 | } 10 | // 数字,为 天数 11 | return new Date(new Date().getTime() + expiration * 24 * 60 * 60 * 1000); 12 | } 13 | if (typeof expiration === "string") { 14 | var match = expiration.match(/^\s*(\d)+\s*([dhm])\s*$/); 15 | if (match) { 16 | var date = new Date(); 17 | switch (match[2]) { 18 | case "d": 19 | date.setDate(date.getDate() + parseInt(match[1])); 20 | break; 21 | case "m": 22 | date.setMinutes(date.getMinutes() + parseInt(match[1])); 23 | break; 24 | case "h": 25 | date.setHours(date.getHours() + parseInt(match[1])); 26 | break; 27 | } 28 | return date; 29 | } 30 | return new Date(expiration 31 | .replace(/-/g, "/") 32 | .replace(/T/, " ") 33 | .replace(/\.\d*$/, "")); 34 | } 35 | return expiration; 36 | } 37 | /** 38 | * 获取cookie 39 | * @param {String} key 40 | */ 41 | function getCookie(key) { 42 | return new RegExp("; ?" + key + "=([^;]*);?").test("; " + document.cookie) ? decodeURIComponent(RegExp.$1) : ""; 43 | } 44 | exports.getCookie = getCookie; 45 | /** 46 | * 设置cookie 47 | * @param {String} key 48 | * @param {String} value 49 | * @param {Number|String|Date} expiration 0:进程,-1:永久,数字:天数,字符串,日期 50 | * @param {Number|String|Date} expiration 1d 1天 1h 1小时 1m 1分钟 51 | * @param {String} path 文档路径 52 | * @param {String} domain 域名,可以设置主域名 53 | */ 54 | function setCookie(key, value, expiration, path, domain) { 55 | if (expiration === void 0) { expiration = 0; } 56 | var str = key + "=" + encodeURIComponent(value); 57 | if (expiration) { 58 | str += "; expires=" + getExpiration(expiration).toString(); 59 | } 60 | if (path) { 61 | str += "; path=" + path; 62 | } 63 | if (domain) { 64 | str += "; domain=" + domain; 65 | } 66 | document.cookie = str; 67 | } 68 | exports.setCookie = setCookie; 69 | /** 70 | * 移除cookie 71 | * @param {*} key 72 | * @param {*} path 文档路径 73 | * @param {*} domain 域名,可以设置主域名 74 | */ 75 | function removeCookie(key, path, domain) { 76 | var str = key + "=; expires=" + new Date(0).toString(); 77 | if (path) { 78 | str += "; path=" + path; 79 | } 80 | if (domain) { 81 | str += "; domain=" + domain; 82 | } 83 | document.cookie = str; 84 | } 85 | exports.removeCookie = removeCookie; 86 | // 预先设置好 过期时间 路径 域名 87 | var Cookie = /** @class */ (function () { 88 | function Cookie(_a) { 89 | var _b = _a === void 0 ? { expiration: 0 } : _a, expiration = _b.expiration, path = _b.path, domain = _b.domain; 90 | this.expiration = getExpiration(expiration); 91 | if (path) { 92 | this.path = path; 93 | } 94 | if (domain) { 95 | this.domain = domain; 96 | } 97 | } 98 | Cookie.prototype.getItem = function (key) { 99 | return getCookie(key); 100 | }; 101 | Cookie.prototype.setItem = function (key, value) { 102 | return setCookie(key, value, this.expiration, this.path, this.domain); 103 | }; 104 | Cookie.prototype.removeItem = function (key) { 105 | removeCookie(key, this.path, this.domain); 106 | }; 107 | // 获取 108 | Cookie.getItem = getCookie; 109 | // 设置 110 | Cookie.setItem = setCookie; 111 | // 移除 112 | Cookie.removeItem = removeCookie; 113 | return Cookie; 114 | }()); 115 | exports.default = Cookie; 116 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /cookie/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/cookie/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /date/index.d.ts: -------------------------------------------------------------------------------- 1 | export declare type dateType = boolean | number | string | Date; 2 | /** 3 | * 新建一个时间对象 4 | * @param date 时间传入,支持 GMT 5 | * @param isWipe 是否去除时分秒 6 | * @return 返回新的时间对象(local) 7 | */ 8 | export declare function parseDate(date?: dateType, isWipe?: boolean): Date; 9 | interface dateProt { 10 | date: Date; 11 | YYYY: number; 12 | SSS: string; 13 | YY: number; 14 | MM: string; 15 | M: number; 16 | DD: string; 17 | D: number; 18 | hh: string; 19 | h: number; 20 | mm: string; 21 | m: number; 22 | ss: string; 23 | s: number; 24 | w: number; 25 | W: string; 26 | EW: string; 27 | FW: string; 28 | X: string; 29 | } 30 | /** 31 | * 将date格式化为formatStr的格式 32 | * @param date 33 | * @param formatStr 34 | */ 35 | export declare function getDate(date: dateType): dateProt; 36 | export declare function getDate(date: dateType, formatStr: string): string; 37 | interface diffProt { 38 | D: number; 39 | DD: string; 40 | ms: number; 41 | mms: string; 42 | m: number; 43 | mm: string; 44 | h: number; 45 | hh: string; 46 | s: number; 47 | ss: string; 48 | } 49 | /** 50 | * date1 和 date2之间的时间差 51 | * @param arg1 52 | * @param arg2 53 | * @param arg3 格式化 54 | */ 55 | export declare function diffDate(arg1: number): diffProt; 56 | export declare function diffDate(arg1: dateType, arg2: dateType): diffProt; 57 | export declare function diffDate(arg1: number, arg2: string): string; 58 | export declare function diffDate(arg1: dateType, arg2: dateType, arg3: string): string; 59 | /** 60 | * 在date上增加时间 61 | * @param n 62 | * @param date 63 | * @param formatStr 64 | */ 65 | export declare function appendDate(n: string | number, date: dateType): Date; 66 | export declare function appendDate(n: string | number, date: dateType, isWipe: boolean): Date; 67 | export declare function appendDate(n: string | number, date: dateType, formatStr: string): string; 68 | declare const _default: { 69 | parse: typeof parseDate; 70 | get: typeof getDate; 71 | diff: typeof diffDate; 72 | append: typeof appendDate; 73 | }; 74 | export default _default; 75 | -------------------------------------------------------------------------------- /date/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.appendDate = exports.diffDate = exports.getDate = exports.parseDate = void 0; 4 | // 星期几 中文 5 | var weekDayArr = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]; 6 | var weekDayArrE = ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"]; 7 | var weekDayArrF = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]; 8 | // 克隆一个时间兑现,是否只保留年月日 9 | function wipeOut(date, isWipe) { 10 | if (isWipe === void 0) { isWipe = false; } 11 | if (isWipe) { 12 | var y = date.getFullYear(); 13 | var m = date.getMonth() + 1; 14 | var d = date.getDate(); 15 | return new Date(y + "/" + m + "/" + d); 16 | } 17 | return new Date(date.getTime()); 18 | } 19 | /** 20 | * 新建一个时间对象 21 | * @param date 时间传入,支持 GMT 22 | * @param isWipe 是否去除时分秒 23 | * @return 返回新的时间对象(local) 24 | */ 25 | function parseDate(date, isWipe) { 26 | if (typeof date == "boolean") { 27 | isWipe = date; 28 | date = undefined; 29 | } 30 | if (!date) { 31 | // 返回当前时间 32 | return wipeOut(new Date(), isWipe); 33 | } 34 | // 日期 35 | if (date instanceof Date) { 36 | return wipeOut(date, isWipe); 37 | } 38 | // 时间戳 39 | if (typeof date == "number") { 40 | return wipeOut(new Date(date), isWipe); 41 | } 42 | var gmt = ""; 43 | date = date.trim().replace(/\s*GMT(?:[+-]\d{1,4})?$/i, function (match) { 44 | gmt = " " + match.trim().toUpperCase(); 45 | return ""; 46 | }); 47 | if (/^\d{13,}$/.test(date)) { 48 | date = parseInt(date); 49 | if (gmt) { 50 | return parseDate(getDate(date, "YYYY/MM/DD hh:mm:ss") + gmt, isWipe); 51 | } 52 | return wipeOut(new Date(date), isWipe); 53 | } 54 | date = date 55 | .replace(/^(\d{4})(\d{2})(\d{2})(\d{2})?(\d{2})?(\d{2})?$/, function (str, Y, M, D, h, m, s) { 56 | return Y + "/" + M + "/" + D + " " + (h || "00") + ":" + (m || "00") + ":" + (s || "00"); 57 | }) 58 | .replace(/-/g, "/") 59 | .replace(/T/, " ") 60 | .replace(/(?:\.[\d]+)?(\+[\d]+)?$/, function (s0, s1) { 61 | if (s1) { 62 | return " GMT" + s1; 63 | } 64 | return ""; 65 | }); 66 | // 防止报错 67 | return wipeOut(new Date(date + gmt), isWipe); 68 | } 69 | exports.parseDate = parseDate; 70 | // 格式化 71 | function format(str, arr, info) { 72 | if (!str) { 73 | // 无格式化字符串 74 | return info; 75 | } 76 | str = str.replace(/<(\w+):(.*?)>/g, function (s0, s1, s2) { 77 | var val = info[s1]; 78 | if (val && /[^0]/.test(String(val))) { 79 | return val + s2; 80 | } 81 | return ""; 82 | }); 83 | for (var i = 0; i < arr.length; i += 1) { 84 | str = str.replace(new RegExp(arr[i], "g"), info[arr[i]]); 85 | } 86 | return str; 87 | } 88 | // 格式化日期 89 | // formatStr为格式化日期 90 | var parseArr = "YYYY,SSS,YY,MM,M,DD,D,hh,h,mm,m,ss,s,w,EW,FW,W,X".split(","); 91 | function getDate(date, formatStr) { 92 | if (formatStr === void 0) { formatStr = ""; } 93 | var theDate = parseDate(date); 94 | var tZone = 0; 95 | if (formatStr) { 96 | formatStr = formatStr.replace(/^([+-]\d+)([hm]):/i, function (match, n, uni) { 97 | tZone = parseInt(n); 98 | if (uni == "h") { 99 | tZone *= 60; 100 | } 101 | return ""; 102 | }); 103 | } 104 | if (tZone) { 105 | // 设置为要求时区的时间 106 | theDate.setMinutes(theDate.getTimezoneOffset() + tZone + theDate.getMinutes()); 107 | } 108 | var YYYY = theDate.getFullYear(); 109 | var YY = YYYY - 1900; 110 | var M = theDate.getMonth() + 1; 111 | var MM = ("0" + M).slice(-2); 112 | var D = theDate.getDate(); 113 | var DD = ("0" + D).slice(-2); 114 | var h = theDate.getHours(); 115 | var hh = ("0" + h).slice(-2); 116 | var m = theDate.getMinutes(); 117 | var mm = ("0" + m).slice(-2); 118 | var s = theDate.getSeconds(); 119 | var ss = ("0" + s).slice(-2); 120 | var SSS = ("00" + theDate.getMilliseconds()).slice(-3); 121 | var w = theDate.getDay(); 122 | var EW = weekDayArrE[w]; 123 | var FW = weekDayArrF[w]; 124 | var W = weekDayArr[w]; 125 | var diff = wipeOut(theDate, true).getTime() - parseDate(true).getTime(); 126 | var X = diff == 86400000 ? "明天" : diff == 0 ? "今天" : W; 127 | var opt = { 128 | date: theDate, 129 | YYYY: YYYY, 130 | YY: YY, 131 | MM: MM, 132 | M: M, 133 | DD: DD, 134 | D: D, 135 | hh: hh, 136 | h: h, 137 | mm: mm, 138 | m: m, 139 | ss: ss, 140 | s: s, 141 | SSS: SSS, 142 | w: w, 143 | W: W, 144 | EW: EW, 145 | FW: FW, 146 | X: X 147 | }; 148 | if (!formatStr) { 149 | return opt; 150 | } 151 | return format(formatStr, parseArr, opt); 152 | } 153 | exports.getDate = getDate; 154 | // 时间间隔差 155 | var diffIntervalArr = "DD,D,mms,ms,hh,h,mm,m,ss,s".split(","); 156 | function diffDate(arg1, arg2, arg3) { 157 | var num; 158 | var outStr; 159 | if (typeof arg1 == "number") { 160 | num = arg1; 161 | outStr = arg2 || ""; 162 | } 163 | else { 164 | num = parseDate(arg1).getTime() - parseDate(arg2).getTime(); 165 | outStr = arg3 || ""; 166 | } 167 | var x = Math.abs(num); 168 | // 毫秒 169 | var ms = x % 1000; 170 | // 秒 171 | x = Math.floor(x / 1000); 172 | var s = x % 60; 173 | x = Math.floor(x / 60); 174 | var m = x % 60; 175 | x = Math.floor(x / 60); 176 | var h = x % 24; 177 | var D = Math.floor(x / 24); 178 | var opt = { 179 | DD: ("0" + D).slice(-2), 180 | D: D, 181 | mms: ("0" + ms).slice(-2), 182 | ms: ms, 183 | hh: ("0" + h).slice(-2), 184 | h: h, 185 | mm: ("0" + m).slice(-2), 186 | m: m, 187 | ss: ("0" + s).slice(-2), 188 | s: s 189 | }; 190 | if (!outStr) { 191 | return opt; 192 | } 193 | return format(outStr, diffIntervalArr, opt); 194 | } 195 | exports.diffDate = diffDate; 196 | // 日期上增加特定时间 197 | var appendTimeOpt = { 198 | s: 1000, 199 | m: 60 * 1000, 200 | h: 60 * 60 * 1000, 201 | d: 24 * 60 * 60 * 1000 202 | }; 203 | function appendDate(n, date, formatStr) { 204 | var num = n; 205 | if (typeof n == "string") { 206 | if (/^(-?\d+)([a-z])$/i.test(n)) { 207 | num = parseInt(RegExp.$1) * (appendTimeOpt[RegExp.$2.toLowerCase()] || 0); 208 | } 209 | else { 210 | num = 0; 211 | } 212 | } 213 | if (typeof formatStr == "boolean") { 214 | return new Date(parseDate(date, formatStr).getTime() + num); 215 | } 216 | var val = new Date(parseDate(date).getTime() + num); 217 | if (formatStr) { 218 | return getDate(val, formatStr); 219 | } 220 | return val; 221 | } 222 | exports.appendDate = appendDate; 223 | exports.default = { 224 | parse: parseDate, 225 | get: getDate, 226 | diff: diffDate, 227 | append: appendDate 228 | }; 229 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /debug/index.d.ts: -------------------------------------------------------------------------------- 1 | export default function debug(...args: any[]): void; 2 | -------------------------------------------------------------------------------- /debug/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var traceDom, tarceI, tc = ["#F00", "#0F0", "#00F", "#FF0", "#F0F", "#0FF"], cc = ["#FFF", "#000", "#FFF", "#000", "#FFF", "#000"]; 4 | function debug() { 5 | var args = []; 6 | for (var _i = 0; _i < arguments.length; _i++) { 7 | args[_i] = arguments[_i]; 8 | } 9 | if (!traceDom) { 10 | tarceI = 0; 11 | traceDom = document.createElement("div"); 12 | traceDom.style.cssText = "position:absolute; top:0; left:0; right:0; z-index:999999999;"; 13 | traceDom.onclick = function (ev) { 14 | traceDom.innerHTML = ""; 15 | ev.stopPropagation(); 16 | }; 17 | if (document.body) { 18 | if (document.body.firstChild) { 19 | document.body.insertBefore(traceDom, document.body.firstChild); 20 | } 21 | else { 22 | document.body.appendChild(traceDom); 23 | } 24 | } 25 | else { 26 | document.documentElement.appendChild(traceDom); 27 | } 28 | } 29 | var strs = []; 30 | for (var i = 0; i < args.length; i += 1) { 31 | strs.push(JSON.stringify(args[i])); 32 | } 33 | var div = document.createElement("div"); 34 | div.style.cssText = "padding: 5px; color:" + cc[tarceI] + "; word-wrap: break-word; background-color:" + tc[tarceI++]; 35 | div.innerHTML = strs.join(" , "); 36 | traceDom.appendChild(div); 37 | tarceI = tarceI % tc.length; 38 | } 39 | exports.default = debug; 40 | window.onerror = function ($1, $2, $3) { 41 | debug(String($1) + ":::" + String($2) + ":::" + String($3)); 42 | }; 43 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /debug/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/debug/index.ts"],"names":[],"mappings":";;AAAA,IAAI,QAAqB,EACrB,MAAc,EACd,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACrD,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAEzD,SAAwB,KAAK;IAAC,cAAc;SAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;QAAd,yBAAc;;IACxC,IAAI,CAAC,QAAQ,EAAE;QACX,MAAM,GAAG,CAAC,CAAA;QACV,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACxC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,+DAA+D,CAAA;QACxF,QAAQ,CAAC,OAAO,GAAG,UAAS,EAAE;YAC1B,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAA;YACvB,EAAE,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC,CAAA;QACD,IAAI,QAAQ,CAAC,IAAI,EAAE;YACf,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC1B,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;aACjE;iBAAM;gBACH,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;aACtC;SACJ;aAAM;YACH,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;SACjD;KACJ;IACD,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KACrC;IACD,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACvC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,sBAAsB,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,4CAA4C,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAA;IACrH,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAChC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACzB,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,CAAA;AAC/B,CAAC;AA5BD,wBA4BC;AAED,MAAM,CAAC,OAAO,GAAG,UAAS,EAAE,EAAE,EAAE,EAAE,EAAE;IAChC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;AAC/D,CAAC,CAAA"} -------------------------------------------------------------------------------- /each/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 数据循环 3 | */ 4 | /** 5 | * 数据循环 6 | * @param arr arr或者obj 7 | * @param fn 运行函数 8 | * @param exe 返回的值 9 | */ 10 | export declare function each(arr: any, fn: (item: any, index: number | string, stop: () => void) => any): void; 11 | export declare function each(arr: any, fn: (item: any, index: number | string, stop: () => void) => any, exe: T): T; 12 | export default each; 13 | -------------------------------------------------------------------------------- /each/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /** 3 | * 数据循环 4 | */ 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | exports.each = void 0; 7 | // 用于类型判断 8 | var _toString = Object.prototype.toString; 9 | // 数组push 10 | function forPush(arr, v) { 11 | arr.push(v); 12 | } 13 | // 对象增加k-v 14 | function forAppend(obj, v, k) { 15 | obj[k] = v; 16 | } 17 | // 普通 18 | function forBack() { } 19 | // 支持for循环的 数据 20 | var forTypes = "-[object array]-[object nodelist]-[object htmlcollection]-[object arguments]-"; 21 | function each(arr, fn, exe) { 22 | // 终止循环 23 | var isStop = false; 24 | function stop() { 25 | isStop = true; 26 | } 27 | if (arr) { 28 | var doExe = forBack; 29 | if (exe) { 30 | doExe = exe instanceof Array ? forPush : forAppend; 31 | } 32 | var len = arr.length; 33 | if (forTypes.indexOf("-" + _toString.call(arr).toLowerCase() + "-") > -1) { 34 | for (var i = 0; i < len; i += 1) { 35 | var item = fn(arr[i], i, stop); 36 | if (isStop) { 37 | break; 38 | } 39 | doExe(exe, item, i); 40 | } 41 | } 42 | else { 43 | for (var n in arr) { 44 | // eslint-disable-next-line 45 | if (!arr.hasOwnProperty || arr.hasOwnProperty(n)) { 46 | var item = fn(arr[n], n, stop); 47 | if (isStop) { 48 | break; 49 | } 50 | doExe(exe, item, n); 51 | } 52 | } 53 | } 54 | } 55 | return exe; 56 | } 57 | exports.each = each; 58 | exports.default = each; 59 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /each/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/each/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,SAAS;AACT,IAAM,SAAS,GAAa,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;AAErD,SAAS;AACT,SAAS,OAAO,CAAC,GAAU,EAAE,CAAM;IAC/B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACf,CAAC;AAED,UAAU;AACV,SAAS,SAAS,CAAC,GAAQ,EAAE,CAAM,EAAE,CAAS;IAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AACd,CAAC;AAED,KAAK;AACL,SAAS,OAAO,KAAU,CAAC;AAE3B,cAAc;AACd,IAAM,QAAQ,GAAG,+EAA+E,CAAA;AAUhG,SAAgB,IAAI,CAAI,GAAQ,EAAE,EAAgE,EAAE,GAAO;IACvG,OAAO;IACP,IAAI,MAAM,GAAY,KAAK,CAAA;IAC3B,SAAS,IAAI;QACT,MAAM,GAAG,IAAI,CAAA;IACjB,CAAC;IACD,IAAI,GAAG,EAAE;QACL,IAAI,KAAK,GAAa,OAAO,CAAA;QAC7B,IAAI,GAAG,EAAE;YACL,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;SACrD;QAED,IAAI,GAAG,GAAW,GAAG,CAAC,MAAM,CAAA;QAC5B,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;YACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC7B,IAAI,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;gBAC9B,IAAI,MAAM,EAAE;oBACR,MAAK;iBACR;gBACD,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;aACtB;SACJ;aAAM;YACH,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE;gBACf,2BAA2B;gBAC3B,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;oBAC9C,IAAI,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;oBAC9B,IAAI,MAAM,EAAE;wBACR,MAAK;qBACR;oBACD,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;iBACtB;aACJ;SACJ;KACJ;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AApCD,oBAoCC;AAED,kBAAe,IAAI,CAAA"} -------------------------------------------------------------------------------- /event/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 事件类 3 | */ 4 | export interface IEventFn { 5 | (this: T, arg: any): void; 6 | } 7 | export default class Event { 8 | private _events; 9 | private _parent; 10 | constructor(parent?: any); 11 | once(type: string, fn: IEventFn, isPre?: boolean): void; 12 | on(type: string, fn: IEventFn, isPre?: boolean): void; 13 | /** 14 | * 绑定事件 15 | * @param type 事件名称 16 | * @param fn 事件函数 17 | * @param isPre 是否前面插入 18 | */ 19 | ":on"(type: string, fn: IEventFn, isPre?: boolean): void; 20 | /** 21 | * 移除事件 可以移除全部事件 22 | * @param type 23 | * @param fn 24 | */ 25 | off(type?: string, fn?: IEventFn): void; 26 | /** 27 | * 内部调用 事件触发函数 28 | * @param target 29 | * @param type 30 | * @param args 31 | */ 32 | private ":emit"; 33 | emit(type: string, arg: R): R; 34 | /** 35 | * 判断事件是否存在 36 | * @param type 37 | */ 38 | hasEvent(type: string): boolean; 39 | } 40 | -------------------------------------------------------------------------------- /event/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /** 3 | * 事件类 4 | */ 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | var Event = /** @class */ (function () { 7 | function Event(parent) { 8 | this._events = {}; 9 | this._parent = null; 10 | this._events = {}; 11 | if (parent) { 12 | this._parent = parent; 13 | } 14 | } 15 | Event.prototype.once = function (type, fn, isPre) { 16 | if (isPre === void 0) { isPre = false; } 17 | function back() { 18 | fn.apply(this, arguments); 19 | this.off(type, back); 20 | } 21 | back.__isOnce = true; 22 | this[":on"](type, back, isPre); 23 | }; 24 | Event.prototype.on = function (type, fn, isPre) { 25 | if (isPre === void 0) { isPre = false; } 26 | this[":on"](type, fn, isPre); 27 | }; 28 | /** 29 | * 绑定事件 30 | * @param type 事件名称 31 | * @param fn 事件函数 32 | * @param isPre 是否前面插入 33 | */ 34 | Event.prototype[":on"] = function (type, fn, isPre) { 35 | if (isPre === void 0) { isPre = false; } 36 | var evs = this._events[type]; 37 | if (!evs) { 38 | evs = this._events[type] = []; 39 | } 40 | evs[isPre ? "unshift" : "push"](fn); 41 | }; 42 | /** 43 | * 移除事件 可以移除全部事件 44 | * @param type 45 | * @param fn 46 | */ 47 | Event.prototype.off = function (type, fn) { 48 | if (!type) { 49 | this._events = {}; 50 | return; 51 | } 52 | if (!fn) { 53 | delete this._events[type]; 54 | return; 55 | } 56 | var evs = this._events[type]; 57 | if (!evs) { 58 | return; 59 | } 60 | var index = evs.indexOf(fn); 61 | if (index >= 0) { 62 | evs.splice(index, 1); 63 | } 64 | }; 65 | /** 66 | * 内部调用 事件触发函数 67 | * @param target 68 | * @param type 69 | * @param args 70 | */ 71 | Event.prototype[":emit"] = function (target, type, arg) { 72 | if (this._parent && this._parent[":emit"]) { 73 | this._parent[":emit"](target, type, arg); 74 | } 75 | var evs = this._events[type] || []; 76 | for (var i = 0; i < evs.length;) { 77 | var fn = evs[i]; 78 | fn.call(target, arg); 79 | if (!fn.__isOnce) { 80 | i += 1; 81 | } 82 | } 83 | return arg; 84 | }; 85 | // 事件触发 86 | Event.prototype.emit = function (type, arg) { 87 | return this[":emit"](this, type, arg); 88 | }; 89 | /** 90 | * 判断事件是否存在 91 | * @param type 92 | */ 93 | Event.prototype.hasEvent = function (type) { 94 | var target = this; 95 | do { 96 | var evs = target._events[type] || []; 97 | if (evs.length > 0) { 98 | return true; 99 | } 100 | } while ((target = target._parent)); 101 | return false; 102 | }; 103 | return Event; 104 | }()); 105 | exports.default = Event; 106 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /event/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/event/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;AASH;IAGI,eAAY,MAAY;QAFhB,YAAO,GAAe,EAAE,CAAA;QACxB,YAAO,GAAQ,IAAI,CAAA;QAEvB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACjB,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;SACxB;IACL,CAAC;IAED,oBAAI,GAAJ,UAAQ,IAAY,EAAE,EAAe,EAAE,KAAsB;QAAtB,sBAAA,EAAA,aAAsB;QACzD,SAAS,IAAI;YACT,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;YACzB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACxB,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IAClC,CAAC;IAED,kBAAE,GAAF,UAAM,IAAY,EAAE,EAAe,EAAE,KAAsB;QAAtB,sBAAA,EAAA,aAAsB;QACvD,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IAChC,CAAC;IAED;;;;;OAKG;IACH,sBAAK,GAAL,UAAS,IAAY,EAAE,EAAe,EAAE,KAAsB;QAAtB,sBAAA,EAAA,aAAsB;QAC1D,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,GAAG,EAAE;YACN,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;SAChC;QACD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAA;IACvC,CAAC;IAED;;;;OAIG;IACH,mBAAG,GAAH,UAAI,IAAa,EAAE,EAAa;QAC5B,IAAI,CAAC,IAAI,EAAE;YACP,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;YACjB,OAAM;SACT;QACD,IAAI,CAAC,EAAE,EAAE;YACL,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACzB,OAAM;SACT;QACD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,GAAG,EAAE;YACN,OAAM;SACT;QACD,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC3B,IAAI,KAAK,IAAI,CAAC,EAAE;YACZ,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;SACvB;IACL,CAAC;IAED;;;;;OAKG;IACK,wBAAO,GAAf,UAAsB,MAAS,EAAE,IAAY,EAAE,GAAM;QACjD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;SAC3C;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG;YAC7B,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAQ,CAAA;YACtB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;YACpB,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;gBACd,CAAC,IAAI,CAAC,CAAA;aACT;SACJ;QAED,OAAO,GAAG,CAAA;IACd,CAAC;IAED,OAAO;IACP,oBAAI,GAAJ,UAAQ,IAAY,EAAE,GAAM;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACzC,CAAC;IAED;;;OAGG;IACH,wBAAQ,GAAR,UAAS,IAAY;QACjB,IAAI,MAAM,GAAU,IAAI,CAAA;QACxB,GAAG;YACC,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YACpC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChB,OAAO,IAAI,CAAA;aACd;SACJ,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,EAAC;QACnC,OAAO,KAAK,CAAA;IAChB,CAAC;IACL,YAAC;AAAD,CAAC,AAvGD,IAuGC"} -------------------------------------------------------------------------------- /lake/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * [2020-09-07] 开发 3 | */ 4 | export declare class LakeEvent { 5 | lakes: Lake[]; 6 | instruct: string; 7 | from: Lake | null; 8 | data: D; 9 | [propName: string]: any; 10 | constructor(from: Lake | null, data: D, query?: string); 11 | get lake(): Lake; 12 | } 13 | export declare function lakePub(lake: Lake, query: string, data?: D): Promise>; 14 | export declare function lakePub(lake: string, query?: D): Promise>; 15 | export interface ILakeArg { 16 | id?: string; 17 | group?: string | Array; 18 | target?: T; 19 | } 20 | interface lakeInstruct { 21 | [propName: string]: Function[]; 22 | } 23 | export declare class Lake { 24 | protected _instruct_: lakeInstruct; 25 | target: T | Lake; 26 | id: string; 27 | group: Array; 28 | static pub: typeof lakePub; 29 | static getId: (id: string) => Lake; 30 | static getGroup: (name: string) => Lake[]; 31 | protected _monitor_back_: null | ReturnType; 32 | constructor({ id, group, target }?: ILakeArg); 33 | protected listenExec(): Lake; 34 | listen(instruct: string, callback: Function): Lake; 35 | unListen(instruct?: string, callback?: Function): Lake; 36 | destroy(): void; 37 | setId(id: string): Lake; 38 | setGroup(group: string | string[]): this; 39 | has(type: string): boolean; 40 | sub(type: string, fn: (arg: LakeEvent, next: () => Promise) => void): Lake; 41 | getSubs(query: string): Function[]; 42 | unSub(type?: string, fn?: Function): Lake; 43 | pub(query: string, data?: D): Promise>; 44 | } 45 | export default Lake; 46 | -------------------------------------------------------------------------------- /md5/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | 作者:代码来自网络, 轨迹修改 3 | 功能:MD5编码 4 | */ 5 | export declare function hex(s: string): string; 6 | export declare function b64(s: string): string; 7 | export declare function str(s: string): string; 8 | export declare function mac_hex(key: string, data: string): string; 9 | export declare function mac_b64(key: string, data: string): string; 10 | export declare function mac_str(key: string, data: string): string; 11 | export default function utf8_hex(s: string): string; 12 | export declare function utf8_b64(s: string): string; 13 | export declare function utf8_str(s: string): string; 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rimjs", 3 | "version": "1.9.11", 4 | "scripts": { 5 | "build": "node clean.js && tsc" 6 | }, 7 | "devDependencies": { 8 | "@types/node": "15.0.1", 9 | "@typescript-eslint/eslint-plugin": "4.22.0", 10 | "@typescript-eslint/parser": "4.22.0", 11 | "eslint": "6.8.0", 12 | "eslint-config-prettier": "6.9.0", 13 | "eslint-plugin-prettier": "3.1.2", 14 | "prettier": "1.19.1", 15 | "typescript": "4.2.4" 16 | }, 17 | "dependencies": { 18 | "vue": "2.6.12", 19 | "vue3": "npm:vue@3.2.0" 20 | }, 21 | "publishConfig": { 22 | "registry": "https://registry.npmjs.org/" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /qs/index.d.ts: -------------------------------------------------------------------------------- 1 | interface initOpt { 2 | sep?: string; 3 | eq?: string; 4 | unescape?: Function; 5 | escape?: Function; 6 | } 7 | export interface IFQueryHash { 8 | [prot: string]: string | null | number | (string | null | number)[]; 9 | } 10 | export declare class QueryString { 11 | sep: string; 12 | eq: string; 13 | unescape: typeof decodeURIComponent; 14 | escape: typeof encodeURIComponent; 15 | constructor(opt?: initOpt); 16 | /** 17 | * 解析为 对象输出 18 | * @param str 19 | */ 20 | parse(str: string): IFQueryHash; 21 | /** 22 | * 序列化为字符串 23 | * @param opt 24 | */ 25 | stringify(opt: IFQueryHash): string; 26 | } 27 | declare let qs: QueryString & { 28 | QueryString: typeof QueryString; 29 | }; 30 | export declare function parseQS(str: string): IFQueryHash; 31 | export declare function stringifyQS(opt: IFQueryHash): string; 32 | export default qs; 33 | -------------------------------------------------------------------------------- /qs/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.stringifyQS = exports.parseQS = exports.QueryString = void 0; 4 | var QueryString = /** @class */ (function () { 5 | function QueryString(opt) { 6 | this.sep = "&"; 7 | this.eq = "="; 8 | this.unescape = decodeURIComponent; 9 | this.escape = encodeURIComponent; 10 | if (opt) { 11 | Object.assign(this, opt); 12 | } 13 | } 14 | /** 15 | * 解析为 对象输出 16 | * @param str 17 | */ 18 | QueryString.prototype.parse = function (str) { 19 | var sep = this.sep; 20 | var eq = this.eq; 21 | var unescape = this.unescape; 22 | var data = {}; 23 | // 去除部分没有的字符 24 | str.replace(/^[\s#?]+/, "") 25 | .split(sep) 26 | .forEach(function (item) { 27 | if (!item) { 28 | return; 29 | } 30 | var arr = item.split(eq); 31 | var key = arr[0]; 32 | if (key) { 33 | var val = unescape(arr[1] || ""); 34 | if (data[key] === undefined) { 35 | // 赋值 36 | data[key] = val; 37 | } 38 | else if (data[key].push) { 39 | // 多个相同字符 40 | data[key].push(val); 41 | } 42 | else { 43 | // 值转化为数组 44 | data[key] = [data[key], val]; 45 | } 46 | } 47 | }); 48 | return data; 49 | }; 50 | /** 51 | * 序列化为字符串 52 | * @param opt 53 | */ 54 | QueryString.prototype.stringify = function (opt) { 55 | var sep = this.sep; 56 | var eq = this.eq; 57 | var escape = this.escape; 58 | var arr = []; 59 | var _loop_1 = function (n) { 60 | var item = opt[n]; 61 | if (item == null) { 62 | item = ""; 63 | } 64 | var key = escape(n); 65 | if (item && item.constructor == Array) { 66 | // 数组要转化为多个相同kv 67 | item.forEach(function (one) { 68 | arr.push(key + eq + escape(one)); 69 | }); 70 | } 71 | else { 72 | arr.push(key + eq + escape(item)); 73 | } 74 | }; 75 | for (var n in opt) { 76 | _loop_1(n); 77 | } 78 | return arr.join(sep); 79 | }; 80 | return QueryString; 81 | }()); 82 | exports.QueryString = QueryString; 83 | var qs = Object.assign(new QueryString(), { QueryString: QueryString }); 84 | function parseQS(str) { 85 | return qs.parse(str); 86 | } 87 | exports.parseQS = parseQS; 88 | function stringifyQS(opt) { 89 | return qs.stringify(opt); 90 | } 91 | exports.stringifyQS = stringifyQS; 92 | exports.default = qs; 93 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /qs/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/qs/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /slip/index.d.ts: -------------------------------------------------------------------------------- 1 | import EventEmitter from "../event"; 2 | export default class Slip extends EventEmitter { 3 | dom: HTMLElement; 4 | ax: number; 5 | ay: number; 6 | mx: number; 7 | my: number; 8 | bx: number; 9 | by: number; 10 | on(type: "start", fn: (this: T, arg: Event) => void, isPre?: boolean): void; 11 | on(type: "move" | "end", fn: (this: T, arg: { 12 | x: number; 13 | y: number; 14 | event: Event; 15 | }) => void, isPre?: boolean): void; 16 | constructor(id: string | HTMLElement, mx?: number, my?: number); 17 | setSkewing(x: number, y: number): [number, number]; 18 | } 19 | -------------------------------------------------------------------------------- /slip/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __extends = (this && this.__extends) || (function () { 3 | var extendStatics = function (d, b) { 4 | extendStatics = Object.setPrototypeOf || 5 | ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || 6 | function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; 7 | return extendStatics(d, b); 8 | }; 9 | return function (d, b) { 10 | if (typeof b !== "function" && b !== null) 11 | throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); 12 | extendStatics(d, b); 13 | function __() { this.constructor = d; } 14 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 15 | }; 16 | })(); 17 | var __importDefault = (this && this.__importDefault) || function (mod) { 18 | return (mod && mod.__esModule) ? mod : { "default": mod }; 19 | }; 20 | Object.defineProperty(exports, "__esModule", { value: true }); 21 | var event_1 = __importDefault(require("../event")); 22 | var doc = window.document; 23 | var isTouch = "ontouchstart" in doc; 24 | var moveData = null; 25 | function getEventXY(ev) { 26 | //移动是多点触控,默认使用第一个作为clientX和clientY 27 | if (ev.clientX == null) { 28 | var touches = ev.targetTouches && ev.targetTouches[0] ? ev.targetTouches : ev.changedTouches; 29 | if (touches && touches[0]) { 30 | ev.clientX = touches[0].clientX; 31 | ev.clientY = touches[0].clientY; 32 | return [touches[0].clientX, touches[0].clientY]; 33 | } 34 | } 35 | return [ev.clientX, ev.clientY]; 36 | } 37 | var events = { 38 | move: isTouch ? "touchmove" : "mousemove", 39 | down: isTouch ? "touchstart" : "mousedown", 40 | up: isTouch ? "touchend" : "mouseup" 41 | }; 42 | function appendEvent(dom, type, fn, cap) { 43 | if (cap === void 0) { cap = false; } 44 | dom.addEventListener(events[type], fn, !!cap); 45 | } 46 | function removeEvent(dom, type, fn, cap) { 47 | if (cap === void 0) { cap = false; } 48 | dom.removeEventListener(events[type], fn, !!cap); 49 | } 50 | function getMax(m, c) { 51 | if (m == 0) { 52 | return c; 53 | } 54 | if (m < 0) { 55 | return c < m ? m : c > 0 ? 0 : c; 56 | } 57 | return c > m ? m : c < 0 ? 0 : c; 58 | } 59 | //鼠标移动开始 60 | function slipDown(ev) { 61 | if (moveData) { 62 | return; 63 | } 64 | moveData = this; 65 | appendEvent(doc, "move", slipMove, true); 66 | appendEvent(doc, "up", slipUp, true); 67 | var _a = getEventXY(ev), x = _a[0], y = _a[1]; 68 | this.bx = this.ax - x; 69 | this.by = this.ay - y; 70 | this.emit("start", ev); 71 | } 72 | function getSlipData(ev) { 73 | var _a = getEventXY(ev), x = _a[0], y = _a[1]; 74 | var md = moveData; 75 | return { 76 | x: getMax(md.mx, x + md.bx), 77 | y: getMax(md.my, y + md.by), 78 | event: ev 79 | }; 80 | } 81 | //鼠标移动中 82 | function slipMove(evt) { 83 | if (moveData) { 84 | var x = window.getSelection && window.getSelection(); 85 | if (x) { 86 | x.removeAllRanges(); 87 | } 88 | moveData.emit("move", getSlipData(evt)); 89 | } 90 | } 91 | //鼠标抬起 92 | function slipUp(evt) { 93 | if (moveData) { 94 | removeEvent(doc, "up", slipUp, true); 95 | removeEvent(doc, "move", slipMove, true); 96 | var d = getSlipData(evt); 97 | var x = d.x, y = d.y; 98 | moveData.ax = x; 99 | moveData.ay = y; 100 | moveData.emit("end", d); 101 | moveData = null; 102 | } 103 | } 104 | var Slip = /** @class */ (function (_super) { 105 | __extends(Slip, _super); 106 | // 初始化 107 | function Slip(id, mx, my) { 108 | var _this = _super.call(this) || this; 109 | _this.ax = 0; 110 | _this.ay = 0; 111 | _this.mx = 0; 112 | _this.my = 0; 113 | _this.bx = 0; 114 | _this.by = 0; 115 | if (typeof id == "string") { 116 | var x = doc.getElementById(id); 117 | if (x) { 118 | id = x; 119 | } 120 | } 121 | if (!id) { 122 | // eslint-disable-next-line 123 | throw "no id element"; 124 | } 125 | _this.dom = id; 126 | if (mx) { 127 | _this.mx = mx; 128 | } 129 | if (my) { 130 | _this.my = my; 131 | } 132 | appendEvent(_this.dom, "down", slipDown.bind(_this), false); 133 | return _this; 134 | } 135 | Slip.prototype.on = function (type, fn, isPre) { 136 | if (isPre === void 0) { isPre = false; } 137 | this[":on"](type, fn, isPre); 138 | }; 139 | // 清理 140 | Slip.prototype.setSkewing = function (x, y) { 141 | this.ax = getMax(this.mx, x || 0); 142 | this.ay = getMax(this.my, y || 0); 143 | return [this.ax, this.ay]; 144 | }; 145 | return Slip; 146 | }(event_1.default)); 147 | exports.default = Slip; 148 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /slip/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/slip/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /sole/index.d.ts: -------------------------------------------------------------------------------- 1 | export default function sole(): string; 2 | -------------------------------------------------------------------------------- /sole/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | // ====================================================================== 获取页面唯一的 id 值 4 | // jsonp和禁止使用缓存中使用 5 | var soleTime = new Date().getTime() - 1000000; 6 | var soleCount = 1000; 7 | function sole() { 8 | soleCount += 1; 9 | return Number(Math.round((Math.random() + 1) * 1000000) + (new Date().getTime() - soleTime) + "" + soleCount).toString(36); 10 | } 11 | exports.default = sole; 12 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /sole/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/sole/index.ts"],"names":[],"mappings":";;AAAA,sFAAsF;AACtF,kBAAkB;AAClB,IAAI,QAAQ,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,OAAO,CAAA;AACrD,IAAI,SAAS,GAAW,IAAI,CAAA;AAC5B,SAAwB,IAAI;IACxB,SAAS,IAAI,CAAC,CAAA;IACd,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAC9H,CAAC;AAHD,uBAGC"} -------------------------------------------------------------------------------- /storage/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 本地存储分组类 3 | */ 4 | export declare class LSClass { 5 | preposition: string; 6 | /** 7 | * pre 为前置参数 8 | * @param pre 9 | */ 10 | constructor(pre: string); 11 | /** 12 | * 获取本地存储 13 | * @param key key 14 | */ 15 | getItem(key: string): any; 16 | /** 17 | * 设置本地存储 18 | * @param key 19 | * @param value 存入的值 20 | * @param expiration 过期时间 21 | */ 22 | setItem(key: string, value: any, expiration?: number | string | Date): void; 23 | /** 24 | * 移除数据 25 | * @param key 26 | */ 27 | removeItem(key: string): void; 28 | } 29 | /** 30 | * 输出类 31 | */ 32 | declare let ls: LSClass & { 33 | LSClass: typeof LSClass; 34 | }; 35 | export declare let getStorage: (key: string) => any; 36 | export declare let setStorage: (key: string, value: any, expiration?: number | string | Date) => void; 37 | export declare let removeStorage: (key: string) => void; 38 | export default ls; 39 | -------------------------------------------------------------------------------- /storage/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.removeStorage = exports.setStorage = exports.getStorage = exports.LSClass = void 0; 4 | var soleTime = new Date().getTime() - 1000000; 5 | var soleCount = 1000; 6 | // 获取页面唯一的值 7 | function getOne() { 8 | soleCount; 9 | soleCount += 1; 10 | var rnd = (Math.round((Math.random() + 1) * 1000000) + (new Date().getTime() - soleTime)).toString(); 11 | return parseInt(rnd + "" + soleCount.toString()).toString(36); 12 | } 13 | // 本地存储引用 14 | // 无本地存储,模拟本地实现 15 | // 数据存储本地,无法长期存储 16 | // 缓解无痕模式无法存储的问题 17 | var LSStore = {}; 18 | var LS = { 19 | getItem: function (key) { 20 | return LSStore[key]; 21 | }, 22 | setItem: function (key, val) { 23 | LSStore[key] = val; 24 | }, 25 | removeItem: function (key) { 26 | try { 27 | delete LSStore[key]; 28 | } 29 | catch (e) { } 30 | } 31 | }; 32 | var SSStore = {}; 33 | var SS = { 34 | getItem: function (key) { 35 | return SSStore[key]; 36 | }, 37 | setItem: function (key, val) { 38 | SSStore[key] = val; 39 | }, 40 | removeItem: function (key) { 41 | try { 42 | delete SSStore[key]; 43 | } 44 | catch (e) { } 45 | } 46 | }; 47 | // 本地存储是否可以使用 48 | try { 49 | window.localStorage.setItem("ls_can", "1"); 50 | if (window.localStorage.getItem("ls_can") == "1") { 51 | LS = window.localStorage; 52 | SS = window.sessionStorage; 53 | } 54 | } 55 | catch (e) { } 56 | var sKeyKey = ":store-s-key"; 57 | var sKey = SS.getItem(sKeyKey); 58 | if (!sKey) { 59 | sKey = getOne(); 60 | SS.setItem(sKeyKey, sKey); 61 | } 62 | // 移除 63 | function remove(key) { 64 | LS.removeItem(key); 65 | } 66 | // 日期上增加特定时间 67 | var appendTimeOpt = { 68 | s: 1000, 69 | m: 60 * 1000, 70 | h: 60 * 60 * 1000, 71 | d: 24 * 60 * 60 * 1000 72 | }; 73 | /** 74 | * 本地存储分组类 75 | */ 76 | var LSClass = /** @class */ (function () { 77 | /** 78 | * pre 为前置参数 79 | * @param pre 80 | */ 81 | function LSClass(pre) { 82 | this.preposition = ":"; 83 | if (pre) { 84 | this.preposition = pre; 85 | } 86 | } 87 | /** 88 | * 获取本地存储 89 | * @param key key 90 | */ 91 | LSClass.prototype.getItem = function (key) { 92 | key = this.preposition + key; 93 | var val = LS.getItem(key); 94 | var json; 95 | try { 96 | json = JSON.parse(val); 97 | } 98 | catch (e) { 99 | return; 100 | } 101 | if (json) { 102 | // 检测是否过期 103 | var expiration = json.expiration; 104 | var isOut = false; 105 | if (expiration) { 106 | var now = new Date().getTime(); 107 | if (expiration !== -1 && now > expiration) { 108 | // 过期 109 | isOut = true; 110 | } 111 | } 112 | var session = json.session; 113 | if (!isOut && session && session != sKey) { 114 | // 过期 115 | isOut = true; 116 | } 117 | if (isOut) { 118 | remove(key); 119 | return null; 120 | } 121 | return json.item; 122 | } 123 | return null; 124 | }; 125 | /** 126 | * 设置本地存储 127 | * @param key 128 | * @param value 存入的值 129 | * @param expiration 过期时间 130 | */ 131 | LSClass.prototype.setItem = function (key, value, expiration) { 132 | if (expiration === void 0) { expiration = 0; } 133 | key = this.preposition + key; 134 | var json = { item: value }; 135 | if (typeof expiration == "number") { 136 | if (expiration === 0) { 137 | json.session = sKey; 138 | } 139 | else if (expiration === -1) { 140 | json.expiration = -1; 141 | } 142 | else { 143 | json.expiration = new Date().getTime() + expiration; 144 | } 145 | } 146 | else if (typeof expiration == "string") { 147 | if (/^(\d+)([a-z])$/i.test(expiration)) { 148 | var num = parseInt(RegExp.$1) * (appendTimeOpt[RegExp.$2.toLowerCase()] || 0); 149 | json.expiration = new Date().getTime() + num; 150 | } 151 | else { 152 | json.expiration = new Date(expiration 153 | .replace(/-/g, "/") 154 | .replace(/T/, " ") 155 | .replace(/\.\d*$/, "")).getTime(); 156 | } 157 | } 158 | else if (expiration instanceof Date) { 159 | json.expiration = expiration.getTime(); 160 | } 161 | LS.setItem(key, JSON.stringify(json)); 162 | }; 163 | /** 164 | * 移除数据 165 | * @param key 166 | */ 167 | LSClass.prototype.removeItem = function (key) { 168 | remove(this.preposition + key); 169 | }; 170 | return LSClass; 171 | }()); 172 | exports.LSClass = LSClass; 173 | /** 174 | * 输出类 175 | */ 176 | var ls = Object.assign(new LSClass(":"), { LSClass: LSClass }); 177 | exports.getStorage = ls.getItem; 178 | exports.setStorage = ls.setItem; 179 | exports.removeStorage = ls.removeItem; 180 | exports.default = ls; 181 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /storage/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/storage/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /timeDown/index.d.ts: -------------------------------------------------------------------------------- 1 | import EventEmitter from "../event"; 2 | declare class TimeEventData { 3 | diff: string; 4 | spt: number; 5 | } 6 | declare type timeType = string | number | boolean | Date; 7 | declare class TimeEvent extends EventEmitter { 8 | endNum: number; 9 | prevNum: number; 10 | diffText: string; 11 | isStop: boolean; 12 | toStop: boolean; 13 | constructor(time?: timeType, diffText?: string); 14 | on(type: "change" | "end", fn: (arg: TimeEventData) => void, isPre?: boolean): TimeEvent; 15 | setEndNum(time: string | number | boolean | Date): void; 16 | emitDiff(): boolean; 17 | stop(): void; 18 | getNow(): Date; 19 | } 20 | /** 21 | * 倒计时 函数 22 | * @param {Number|String|Date} time 为数字时,代表,需要执行多少秒的倒计时 23 | * @return {eventemitter} 自定义事件对象 24 | * @event change 事件,剩余时间 改变时触发,两个参数 第一个 diff 字符串 第二个diff(秒) 25 | * @event end 倒计时结束时候调用 26 | */ 27 | declare function timeDown(time: string | number | boolean | Date, diffText?: string): TimeEvent; 28 | /** 29 | * 设置默认的 获取当前时间的函数 30 | * @param {Function} fn 31 | */ 32 | declare function setGetNowFn(fn: () => Date): typeof timeDown; 33 | /** 34 | * 终止 35 | */ 36 | declare function stopAll(): void; 37 | declare const _default: typeof timeDown & { 38 | stopAll: typeof stopAll; 39 | setGetNowFn: typeof setGetNowFn; 40 | }; 41 | export default _default; 42 | -------------------------------------------------------------------------------- /timeDown/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __extends = (this && this.__extends) || (function () { 3 | var extendStatics = function (d, b) { 4 | extendStatics = Object.setPrototypeOf || 5 | ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || 6 | function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; 7 | return extendStatics(d, b); 8 | }; 9 | return function (d, b) { 10 | if (typeof b !== "function" && b !== null) 11 | throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); 12 | extendStatics(d, b); 13 | function __() { this.constructor = d; } 14 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 15 | }; 16 | })(); 17 | var __importDefault = (this && this.__importDefault) || function (mod) { 18 | return (mod && mod.__esModule) ? mod : { "default": mod }; 19 | }; 20 | Object.defineProperty(exports, "__esModule", { value: true }); 21 | var date_1 = __importDefault(require("../date")); 22 | var event_1 = __importDefault(require("../event")); 23 | /** 24 | * 获取当前时间,可以更改为获取当前服务器时间 25 | */ 26 | var getNow = function () { 27 | return date_1.default.parse(); 28 | }; 29 | var TimeEventData = /** @class */ (function () { 30 | function TimeEventData() { 31 | this.diff = ""; 32 | this.spt = 0; 33 | } 34 | return TimeEventData; 35 | }()); 36 | var TimeEvent = /** @class */ (function (_super) { 37 | __extends(TimeEvent, _super); 38 | function TimeEvent(time, diffText) { 39 | var _this = _super.call(this) || this; 40 | // 结束时间 41 | _this.endNum = 0; 42 | _this.prevNum = 0; 43 | _this.diffText = "ss秒"; 44 | _this.isStop = false; 45 | _this.toStop = false; 46 | if (time) { 47 | _this.setEndNum(time); 48 | } 49 | if (diffText) { 50 | _this.diffText = diffText; 51 | } 52 | return _this; 53 | } 54 | TimeEvent.prototype.on = function (type, fn, isPre) { 55 | if (isPre === void 0) { isPre = false; } 56 | this[":on"](type, fn, isPre); 57 | return this; 58 | }; 59 | TimeEvent.prototype.setEndNum = function (time) { 60 | if (typeof time == "number") { 61 | time = date_1.default.parse().getTime() + time * 1000; 62 | } 63 | this.endNum = date_1.default.parse(time).getTime(); 64 | }; 65 | TimeEvent.prototype.emitDiff = function () { 66 | if (this.isStop) { 67 | return false; 68 | } 69 | return one(this); 70 | }; 71 | TimeEvent.prototype.stop = function () { 72 | if (!this.isStop) { 73 | this.toStop = true; 74 | } 75 | }; 76 | TimeEvent.prototype.getNow = function () { 77 | return getNow(); 78 | }; 79 | return TimeEvent; 80 | }(event_1.default)); 81 | var queue = []; 82 | var interval = null; 83 | /** 84 | * 执行一次 一个 循环 85 | * @param {*} x 86 | */ 87 | function one(x) { 88 | var ev = new TimeEventData(); 89 | if (!x.isStop && x.toStop) { 90 | x.toStop = false; 91 | x.emit("change", ev); 92 | return false; 93 | } 94 | var spt = Math.floor((x.endNum - x.getNow().getTime()) / 1000); 95 | ev.spt = spt; 96 | if (x.prevNum != spt) { 97 | // 本次时差与上一次有差异,就执行回调 98 | // 当spt <= 0 为最后一次回调 99 | var diff = date_1.default.diff(spt * 1000, x.diffText); 100 | ev.diff = diff; 101 | x.prevNum = spt; 102 | if (spt <= 0) { 103 | x.isStop = true; 104 | x.emit("end", ev); 105 | } 106 | else { 107 | x.emit("change", ev); 108 | } 109 | } 110 | return spt > 0; 111 | } 112 | function step() { 113 | if (queue.length) { 114 | for (var i = 0; i < queue.length;) { 115 | if (one(queue[i])) { 116 | // 下一个 117 | i += 1; 118 | } 119 | else { 120 | // 移除 121 | queue.splice(i, 1); 122 | } 123 | } 124 | } 125 | else { 126 | // 无队列,移除 interval 127 | clearInterval(interval); 128 | interval = null; 129 | } 130 | } 131 | /** 132 | * 倒计时 函数 133 | * @param {Number|String|Date} time 为数字时,代表,需要执行多少秒的倒计时 134 | * @return {eventemitter} 自定义事件对象 135 | * @event change 事件,剩余时间 改变时触发,两个参数 第一个 diff 字符串 第二个diff(秒) 136 | * @event end 倒计时结束时候调用 137 | */ 138 | function timeDown(time, diffText) { 139 | var one = new TimeEvent(time, diffText); 140 | queue.push(one); 141 | if (!interval) { 142 | interval = setInterval(step, 250); 143 | } 144 | return one; 145 | } 146 | /** 147 | * 设置默认的 获取当前时间的函数 148 | * @param {Function} fn 149 | */ 150 | function setGetNowFn(fn) { 151 | getNow = fn; 152 | return timeDown; 153 | } 154 | /** 155 | * 终止 156 | */ 157 | function stopAll() { 158 | queue.forEach(function (item) { 159 | item.stop(); 160 | }); 161 | queue = []; 162 | // 无队列,移除 interval 163 | clearInterval(interval); 164 | interval = null; 165 | } 166 | exports.default = Object.assign(timeDown, { 167 | stopAll: stopAll, 168 | setGetNowFn: setGetNowFn 169 | }); 170 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /timeDown/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/timeDown/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "target": "es5", 5 | "module": "commonjs", 6 | "moduleResolution": "node", 7 | "outDir": "./", 8 | "rootDir": "./_src/", 9 | "experimentalDecorators": true, 10 | "lib": ["es2020", "dom"], 11 | "types": ["node"], 12 | 13 | "resolveJsonModule":true, 14 | "noImplicitAny": true, 15 | "esModuleInterop": true, 16 | "sourceMap": true, 17 | "baseUrl": "." 18 | }, 19 | "include": ["_src/**/*"], 20 | "exclude": ["node_modules"] 21 | } 22 | -------------------------------------------------------------------------------- /util/getFullUrl.d.ts: -------------------------------------------------------------------------------- 1 | export declare function getFullUrl(url: string): string; 2 | export default getFullUrl; 3 | -------------------------------------------------------------------------------- /util/getFullUrl.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.getFullUrl = void 0; 4 | // ===================================================================== 获得url的真实地址 5 | // 判断请求是否为跨域使用 6 | var linkA = document.createElement("a"); 7 | function getFullUrl(url) { 8 | linkA.setAttribute("href", url); 9 | return linkA.href; 10 | } 11 | exports.getFullUrl = getFullUrl; 12 | exports.default = getFullUrl; 13 | //# sourceMappingURL=getFullUrl.js.map -------------------------------------------------------------------------------- /util/getFullUrl.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"getFullUrl.js","sourceRoot":"","sources":["../_src/util/getFullUrl.ts"],"names":[],"mappings":";;;AAAA,mFAAmF;AACnF,cAAc;AACd,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;AACvC,SAAgB,UAAU,CAAC,GAAW;IAClC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAA;AACrB,CAAC;AAHD,gCAGC;AAED,kBAAe,UAAU,CAAA"} -------------------------------------------------------------------------------- /util/loadJS.d.ts: -------------------------------------------------------------------------------- 1 | export declare function loadJS(url: string, callback: Function): HTMLScriptElement; 2 | export default loadJS; 3 | -------------------------------------------------------------------------------- /util/loadJS.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.loadJS = void 0; 4 | // jsonp 加载方式需要使用 5 | var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement; 6 | function loadJS(url, callback) { 7 | // 创建节点 8 | var node = document.createElement("script"); 9 | // 设置属性 10 | node.setAttribute("type", "text/javascript"); 11 | node.onload = node.onerror = function () { 12 | node.onload = node.onerror = null; 13 | callback && callback(); 14 | setTimeout(function () { 15 | //防止回调的时候,script还没执行完毕 16 | // 延时 2s 删除节点 17 | if (node) { 18 | var parent_1 = node.parentNode; 19 | parent_1.removeChild(node); 20 | } 21 | }, 2000); 22 | }; 23 | node.async = true; 24 | head.appendChild(node); 25 | node.src = url; 26 | return node; 27 | } 28 | exports.loadJS = loadJS; 29 | exports.default = loadJS; 30 | //# sourceMappingURL=loadJS.js.map -------------------------------------------------------------------------------- /util/loadJS.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"loadJS.js","sourceRoot":"","sources":["../_src/util/loadJS.ts"],"names":[],"mappings":";;;AAAA,iBAAiB;AACjB,IAAI,IAAI,GAAgB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,eAAe,CAAA;AAC7G,SAAgB,MAAM,CAAC,GAAW,EAAE,QAAkB;IAClD,OAAO;IACP,IAAI,IAAI,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC9D,OAAO;IACP,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACjC,QAAQ,IAAI,QAAQ,EAAE,CAAA;QACtB,UAAU,CAAC;YACP,sBAAsB;YACtB,aAAa;YACb,IAAI,IAAI,EAAE;gBACN,IAAI,QAAM,GAAG,IAAI,CAAC,UAAyB,CAAA;gBAC3C,QAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;aAC3B;QACL,CAAC,EAAE,IAAI,CAAC,CAAA;IACZ,CAAC,CAAA;IACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACtB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IACd,OAAO,IAAI,CAAA;AACf,CAAC;AArBD,wBAqBC;AAED,kBAAe,MAAM,CAAA"} -------------------------------------------------------------------------------- /validata/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 是否为Email 3 | * @method Util.cUtilValidate.isEmail 4 | * @param {String} agr1 5 | * @return {boolean} flag 6 | */ 7 | export declare function isEmail(text: string): boolean; 8 | /** 9 | * 是否为合法手机号 10 | * @method Util.cUtilValidate.isMobile 11 | * @param {string} text 12 | * @returns {boolean} 13 | */ 14 | export declare function isMobile(text: string): boolean; 15 | /** 16 | * 是否为中文字符 17 | * @method Util.cUtilValidate.isChinese 18 | * @param {string} text 19 | * @returns {boolean} 20 | */ 21 | export declare function isChinese(text: string): boolean; 22 | /** 23 | * 是否为英文字符 24 | * @method Util.cUtilValidate.isEnglish 25 | * @param {string} text 26 | * @returns {boolean} 27 | */ 28 | export declare function isEnglish(text: string): boolean; 29 | /** 30 | * 是否为6位数字邮编 31 | * @method Util.cUtilValidate.isZip 32 | * @param {string} text 33 | * @returns {boolean} 34 | */ 35 | export declare function isZip(text: string): boolean; 36 | /** 37 | * 是否为合法身份证有效证 38 | * @method Util.cUtilValidate.isIdCard 39 | * @param {String} text 40 | * @returns {boolean} flag 41 | */ 42 | export declare function isIdCard(idCard: string): boolean; 43 | /** 44 | * 是否为合法Url 45 | * @method Util.cUtilValidate.isUrl 46 | * @param {String} target 47 | * @returns {boolean} flag 48 | */ 49 | export declare function isUrl(target: string): boolean; 50 | /** 51 | * 护照 52 | * @param {*} txt 53 | */ 54 | export declare function isPassport(txt: string): boolean; 55 | /** 56 | * 港澳通行证(回乡证) 57 | * @param {*} txt 58 | */ 59 | export declare function isGangAoPass(txt: string): boolean; 60 | /** 61 | * 台湾居民来往大陆通行证(台胞证) 62 | * @param {*} txt 63 | */ 64 | export declare function isTaiwanPass(txt: string): boolean; 65 | /** 66 | * 外国人永久居留身份证 67 | * 15位 3为字母 + 12阿拉伯数字 68 | */ 69 | export declare function isForeignerReside(txt: string): boolean; 70 | /** 71 | * 港澳台居民居住证 72 | * 18位数字 开头为 81 || 82 || 83 73 | * 11.28 修改为 8100 || 8200 || 8300 74 | */ 75 | export declare function isGangAoTaiReside(txt: string): boolean; 76 | -------------------------------------------------------------------------------- /validata/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.isGangAoTaiReside = exports.isForeignerReside = exports.isTaiwanPass = exports.isGangAoPass = exports.isPassport = exports.isUrl = exports.isIdCard = exports.isZip = exports.isEnglish = exports.isChinese = exports.isMobile = exports.isEmail = void 0; 4 | /** 5 | * 是否为Email 6 | * @method Util.cUtilValidate.isEmail 7 | * @param {String} agr1 8 | * @return {boolean} flag 9 | */ 10 | function isEmail(text) { 11 | var reg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 12 | return reg.test(text); 13 | } 14 | exports.isEmail = isEmail; 15 | /** 16 | * 是否为合法手机号 17 | * @method Util.cUtilValidate.isMobile 18 | * @param {string} text 19 | * @returns {boolean} 20 | */ 21 | function isMobile(text) { 22 | var reg = /^(1[0-9])\d{9}$/; 23 | return reg.test(text); 24 | } 25 | exports.isMobile = isMobile; 26 | /** 27 | * 是否为中文字符 28 | * @method Util.cUtilValidate.isChinese 29 | * @param {string} text 30 | * @returns {boolean} 31 | */ 32 | function isChinese(text) { 33 | var reg = /^[\u4e00-\u9fff]{0,}$/; 34 | return reg.test(text); 35 | } 36 | exports.isChinese = isChinese; 37 | /** 38 | * 是否为英文字符 39 | * @method Util.cUtilValidate.isEnglish 40 | * @param {string} text 41 | * @returns {boolean} 42 | */ 43 | function isEnglish(text) { 44 | var reg = /^[A-Za-z]+$/; 45 | return reg.test(text); 46 | } 47 | exports.isEnglish = isEnglish; 48 | /** 49 | * 是否为6位数字邮编 50 | * @method Util.cUtilValidate.isZip 51 | * @param {string} text 52 | * @returns {boolean} 53 | */ 54 | function isZip(text) { 55 | var reg = /^\d{6}$/; 56 | return reg.test(text); 57 | } 58 | exports.isZip = isZip; 59 | /** 60 | * 是否为合法身份证有效证 61 | * @method Util.cUtilValidate.isIdCard 62 | * @param {String} text 63 | * @returns {boolean} flag 64 | */ 65 | function isIdCard(idCard) { 66 | var num = idCard.toLowerCase().match(/\w/g); 67 | if (!num) { 68 | return false; 69 | } 70 | if (idCard.match(/^\d{17}[\dx]$/i)) { 71 | var sum = 0; 72 | var times = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; 73 | for (var i = 0; i < 17; i++) 74 | sum += parseInt(num[i], 10) * times[i]; 75 | if ("10x98765432".charAt(sum % 11) != num[17]) { 76 | return false; 77 | } 78 | return !!idCard.replace(/^\d{6}(\d{4})(\d{2})(\d{2}).+$/, "$1-$2-$3"); 79 | } 80 | if (idCard.match(/^\d{15}$/)) { 81 | return !!idCard.replace(/^\d{6}(\d{2})(\d{2})(\d{2}).+$/, "19$1-$2-$3"); 82 | } 83 | return false; 84 | } 85 | exports.isIdCard = isIdCard; 86 | /** 87 | * 是否为合法Url 88 | * @method Util.cUtilValidate.isUrl 89 | * @param {String} target 90 | * @returns {boolean} flag 91 | */ 92 | function isUrl(target) { 93 | return /^http(s)?:\/\/[A-Za-z0-9-]+\.[A-Za-z0-9]+[/=?%\-&_~`@[\]:+!]*([^<>])*$/.test(target); 94 | } 95 | exports.isUrl = isUrl; 96 | /** 97 | * 护照 98 | * @param {*} txt 99 | */ 100 | function isPassport(txt) { 101 | return /^[a-zA-Z0-9]{5,17}$/.test(txt); 102 | } 103 | exports.isPassport = isPassport; 104 | /** 105 | * 港澳通行证(回乡证) 106 | * @param {*} txt 107 | */ 108 | function isGangAoPass(txt) { 109 | return /^(m|M|h|H)(\d{8}|\d{10})$/.test(txt); 110 | } 111 | exports.isGangAoPass = isGangAoPass; 112 | /** 113 | * 台湾居民来往大陆通行证(台胞证) 114 | * @param {*} txt 115 | */ 116 | function isTaiwanPass(txt) { 117 | return /^(\d{8}|[a-zA-Z][0-9]{9})$/.test(txt); 118 | } 119 | exports.isTaiwanPass = isTaiwanPass; 120 | /** 121 | * 外国人永久居留身份证 122 | * 15位 3为字母 + 12阿拉伯数字 123 | */ 124 | function isForeignerReside(txt) { 125 | return /^[a-zA-Z]{3}[0-9]{12}$/.test(txt); 126 | } 127 | exports.isForeignerReside = isForeignerReside; 128 | /** 129 | * 港澳台居民居住证 130 | * 18位数字 开头为 81 || 82 || 83 131 | * 11.28 修改为 8100 || 8200 || 8300 132 | */ 133 | function isGangAoTaiReside(txt) { 134 | return /^8[1-3]0{2}\d{13}[0-9x]$/i.test(txt); 135 | } 136 | exports.isGangAoTaiReside = isGangAoTaiReside; 137 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /validata/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/validata/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /vueFn/index.d.ts: -------------------------------------------------------------------------------- 1 | import Vue, { ComponentOptions, Component, AsyncComponent, DirectiveFunction, DirectiveOptions, PropOptions, ComputedOptions, WatchOptionsWithHandler, WatchHandler } from "vue"; 2 | interface IAnyObj { 3 | [propName: string]: any; 4 | } 5 | export interface IVueFnExtVal { 6 | vm: IVue; 7 | temp: IAnyObj; 8 | get: (key: string) => any; 9 | set: (key: string | IAnyObj, val?: any) => void; 10 | [propName: string]: any; 11 | } 12 | interface IVue extends Vue { 13 | [propName: string]: any; 14 | } 15 | interface IOnExportFn { 16 | (): void; 17 | } 18 | export interface IVueFnPluginArg { 19 | onExport(fn: IOnExportFn): void; 20 | lifecycle: any; 21 | makeLifecycle: any; 22 | quickSet: any; 23 | merges: any; 24 | extData: any; 25 | } 26 | interface IModel { 27 | prop?: string; 28 | event?: string; 29 | } 30 | interface IOptions { 31 | (key: string | Record, val?: T): void; 32 | } 33 | interface ILifecycle { 34 | (fn: (this: IVue, ext: IVueFnExtVal) => void, isExt: true): void; 35 | (fn: (this: IVue) => void, isExt: false): void; 36 | (fn: (this: IVue) => void): void; 37 | } 38 | interface ILifecycleByKey { 39 | (key: string, fn: (this: IVue, ext: IVueFnExtVal) => void, isExt: true): void; 40 | (key: string, fn: (this: IVue) => void, isExt: false): void; 41 | (key: string, fn: (this: IVue) => void): void; 42 | } 43 | declare type Accessors = { 44 | [K in keyof T]: (() => T[K]) | ComputedOptions; 45 | }; 46 | export interface IVueFnArg { 47 | plugin: (plug: (plug: IVueFnPluginArg, arg: IVueFnArg) => T) => T; 48 | $set: (prot?: string | execOptions, val?: any) => execOptions | undefined; 49 | $name: (name: string) => void; 50 | $mixins: (mixin: ComponentOptions | typeof Vue) => void; 51 | $components: IOptions | AsyncComponent>; 52 | $directives: IOptions; 53 | $props: IOptions>; 54 | $data: IOptions; 55 | $setup: IOptions; 56 | $computed: IOptions>; 59 | $filters: IOptions; 60 | $model: (model: IModel) => void; 61 | $watch: IOptions | WatchHandler | string>; 62 | $methods: IOptions<(this: IVue, ...args: any[]) => any>; 63 | $lifecycle: ILifecycleByKey; 64 | $created: ILifecycle; 65 | $mounted: ILifecycle; 66 | $destroyed: ILifecycle; 67 | $: (fn: IBindInFn | IBindInFnObj | IBindInFn[]) => IBindFn | IBindFnObj | IBindFn[]; 68 | $getExt: (vm: IVue) => IVueFnExtVal | null; 69 | $setExt: (key: string | IAnyObj, val?: any) => void; 70 | $export: () => ComputedOptions; 71 | [propName: string]: any; 72 | } 73 | interface IBindInFn { 74 | (ext: IVueFnExtVal, ...args: any[]): any; 75 | } 76 | interface IBindInFnObj { 77 | [propName: string]: IBindInFn; 78 | } 79 | interface IBindFn extends Function { 80 | __$ext?: boolean; 81 | } 82 | interface IBindFnObj { 83 | [propName: string]: IBindFn; 84 | } 85 | interface execOptions extends ComponentOptions { 86 | [propName: string]: any; 87 | } 88 | export declare function vueFn(): IVueFnArg; 89 | export default vueFn; 90 | -------------------------------------------------------------------------------- /vueLake/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * [2020-09-07] 开发 3 | */ 4 | import Vue, { VueConstructor } from "vue"; 5 | import { App } from "vue3"; 6 | import Lake, { LakeEvent } from "../lake"; 7 | export * from "../lake"; 8 | export interface IVueLakeBackOption { 9 | [propName: string]: (this: V, arg: LakeEvent, next: () => Promise) => void; 10 | } 11 | interface vueInstruct { 12 | [propName: string]: (arg: LakeEvent) => void; 13 | } 14 | declare class vueLakeData { 15 | isIgnore: boolean; 16 | initGroup?: Array; 17 | instructs?: Array; 18 | lake?: Lake; 19 | setId(id: string): void; 20 | setGroup(group: string | string[]): void; 21 | } 22 | declare let lakeProt: ((this: any, query: any, data?: D) => Promise>) & { 23 | id: (id: string) => Lake; 24 | group: (name: string) => Lake[]; 25 | }; 26 | declare module "vue/types/options" { 27 | interface ComponentOptions { 28 | lakeId?: string; 29 | lakeName?: string | string[]; 30 | lakeSubs?: IVueLakeBackOption; 31 | } 32 | } 33 | declare module "vue/types/vue" { 34 | interface Vue { 35 | $lake: typeof lakeProt; 36 | _lake_data_?: vueLakeData; 37 | } 38 | } 39 | declare module "vue" { 40 | interface ComponentCustomProperties { 41 | $lake: typeof lakeProt; 42 | _lake_data_?: vueLakeData; 43 | } 44 | interface ComponentCustomOptions { 45 | lakeId?: string; 46 | lakeName?: string | string[]; 47 | lakeSubs?: IVueLakeBackOption; 48 | } 49 | } 50 | export declare function vueLakeInstall(V: VueConstructor | App, { useProps }?: { 51 | useProps?: boolean; 52 | }): void; 53 | export default Lake; 54 | -------------------------------------------------------------------------------- /vueLake/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/vueLake/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /vueLife/index.d.ts: -------------------------------------------------------------------------------- 1 | import { VueConstructor } from "vue"; 2 | import { App } from "vue3"; 3 | /** 4 | * 初始化传入参数 5 | */ 6 | export interface IVueLiveInitObj { 7 | init: Function; 8 | hookDef?: string; 9 | hooks?: object; 10 | prepose?: string; 11 | args?: Array | any; 12 | } 13 | export interface IVueLiveHookEvent { 14 | data: T; 15 | emit: (key: string, data: any) => void; 16 | then: (fn: () => void) => void; 17 | } 18 | export interface IVueLiveHookOptionFn { 19 | (arg: IVueLiveHookEvent): void; 20 | } 21 | export interface IVueLiveHookOption { 22 | [propName: string]: IVueLiveHookOptionFn; 23 | } 24 | export interface IVueLifeInitFnArg { 25 | emit(key: string, data?: T): T | undefined; 26 | hooks: { 27 | [propName: string]: string; 28 | }; 29 | vue: VueConstructor | App; 30 | } 31 | declare module "vue/types/options" { 32 | interface ComponentOptions { 33 | life?: IVueLiveHookOption; 34 | } 35 | } 36 | declare module "vue" { 37 | interface ComponentCustomOptions { 38 | life?: IVueLiveHookOption; 39 | } 40 | } 41 | export declare function vueLifeInstall(V: VueConstructor | App, init: Function | IVueLiveInitObj): void; 42 | export default vueLifeInstall; 43 | -------------------------------------------------------------------------------- /vueLife/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __spreadArray = (this && this.__spreadArray) || function (to, from) { 3 | for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) 4 | to[j] = from[i]; 5 | return to; 6 | }; 7 | Object.defineProperty(exports, "__esModule", { value: true }); 8 | exports.vueLifeInstall = void 0; 9 | // 插件默认名称 10 | var defName = "life"; 11 | // 所有绑定关系 12 | var hooks = {}; 13 | // 默认绑定 14 | var hookDef; 15 | // 所有的钩子参数 16 | var hookLifes = {}; 17 | // emit产生的数据 18 | var hookEmitData = {}; 19 | // 生成唯一ID 20 | var lifeIndexNum = 100; 21 | /** 22 | * 获取that绑定的数据 23 | * @param that 24 | */ 25 | function getHookLife(that) { 26 | var id = that._life_id_; 27 | if (!id) { 28 | lifeIndexNum += 1; 29 | id = "$" + lifeIndexNum.toString(); 30 | // eslint-disable-next-line 31 | that._life_id_ = id; 32 | } 33 | var life = hookLifes[id]; 34 | if (!life) { 35 | var data = {}; 36 | for (var n in hookEmitData) { 37 | data[n] = hookEmitData[n]; 38 | } 39 | life = hookLifes[id] = { 40 | that: that, 41 | ready: {}, 42 | data: data 43 | }; 44 | } 45 | return life; 46 | } 47 | /** 48 | * 获取数据中data对应的属性值 49 | * @param key 50 | * @param that 51 | */ 52 | function getHookEmitData(key, that) { 53 | var data = that ? getHookLife(that).data : hookEmitData; 54 | if (key) { 55 | return data[key]; 56 | } 57 | return data; 58 | } 59 | /** 60 | * 增加 hookLife 节点 61 | * @param that 62 | * @param vueLifeName 63 | */ 64 | function addHookLifes(that, vueLifeName) { 65 | var life = getHookLife(that); 66 | life.ready[vueLifeName] = true; 67 | if (vueLifeName == hookDef && life.callback) { 68 | // 事件中的then函数 69 | life.callback(); 70 | } 71 | return life; 72 | } 73 | /** 74 | * 整理触发的事件 75 | * @param life 76 | * @param key 77 | */ 78 | function hookEmitEvent(life, key) { 79 | return { 80 | data: life.data[key], 81 | /** 82 | * 当前vm中触发新的事件 83 | * @param key 84 | * @param value 85 | */ 86 | emit: function (key, data) { 87 | hookEmit(key, data, life.that); 88 | }, 89 | /** 90 | * 加入到ready后执行 91 | * @param callback 92 | */ 93 | then: function (callback) { 94 | if (life.ready[hookDef]) { 95 | callback && callback(); 96 | return; 97 | } 98 | life.callback = callback; 99 | } 100 | }; 101 | } 102 | function _hookExec(key, life, data) { 103 | if (!data) { 104 | return; 105 | } 106 | var lifes = life.that.$options[defName] || []; 107 | var hook = hooks[key] || hookDef; 108 | if (!life.ready[hook]) { 109 | return; 110 | } 111 | // console.log(key, "lifes", lifes) 112 | var lifeFn; 113 | for (var i = 0; i < lifes.length; i += 1) { 114 | lifeFn = lifes[i][key]; 115 | if (lifeFn) { 116 | lifeFn.call(life.that, hookEmitEvent(life, key)); 117 | } 118 | } 119 | } 120 | function hookEmit(key, data, that) { 121 | var hookData = getHookEmitData("", that); 122 | hookData[key] = { 123 | data: data 124 | }; 125 | if (that) { 126 | _hookExec(key, getHookLife(that), hookData[key]); 127 | return; 128 | } 129 | // console.log("hookLifes", hookLifes) 130 | for (var n in hookLifes) { 131 | _hookExec(key, hookLifes[n], hookData[key]); 132 | } 133 | } 134 | function vueLifeInstall(V, init) { 135 | // 初始化函数 136 | if (typeof init == "function") { 137 | init = { 138 | init: init 139 | }; 140 | } 141 | var initFn = init.init; 142 | // 设定在什么钩子函数中出发 143 | hookDef = init.hookDef || "mounted"; 144 | hooks = init.hooks || {}; 145 | // prepose 146 | if (!hooks.prepose) { 147 | hooks.prepose = "beforeCreate"; 148 | } 149 | var initArgs = init.args == null ? [] : Object.prototype.toString.call(init.args).toLowerCase() != "[object array]" ? [init.args] : init.args; 150 | function hookExecByVM(that, lifeName) { 151 | var life = addHookLifes(that, lifeName); 152 | var lifes = that.$options[defName] || []; 153 | var readys = {}; 154 | for (var i = 0; i < lifes.length; i += 1) { 155 | for (var k in lifes[i]) { 156 | if (!readys[k] && (hooks[k] || hookDef) == lifeName) { 157 | readys[k] = true; 158 | _hookExec(k, life, getHookEmitData(k, that)); 159 | } 160 | } 161 | } 162 | } 163 | function hooksFn(key) { 164 | return function () { 165 | // console.log("$$++++", key, hooks) 166 | var life = this.$options[defName]; 167 | if (life) { 168 | if (hooks.prepose == key) { 169 | // prepose 触发 emit 170 | hookEmit("prepose", {}, this); 171 | } 172 | hookExecByVM(this, key); 173 | } 174 | }; 175 | } 176 | // console.log("mixinOpt", mixinOpt) 177 | V.config.optionMergeStrategies[defName] = function (pVal, nVal) { 178 | var val = pVal instanceof Array ? pVal : pVal ? [pVal] : []; 179 | if (nVal) { 180 | val.push(nVal); 181 | } 182 | // console.log(val) 183 | return val; 184 | }; 185 | if (initFn) { 186 | var arg = { 187 | emit: function (key, data) { 188 | hookEmit(key, data); 189 | return data; 190 | }, 191 | hooks: hooks, 192 | vue: V 193 | }; 194 | initFn.apply(void 0, __spreadArray([arg], initArgs)); 195 | } 196 | var mixinOpt = {}; 197 | for (var n in hooks) { 198 | if (!mixinOpt[hooks[n]]) { 199 | mixinOpt[hooks[n]] = hooksFn(hooks[n]); 200 | } 201 | } 202 | if (!mixinOpt[hookDef]) { 203 | mixinOpt[hookDef] = hooksFn(hookDef); 204 | } 205 | // 销毁 206 | var destroyedFn = mixinOpt.destroyed; 207 | mixinOpt.destroyed = function () { 208 | if (destroyedFn) { 209 | destroyedFn.call(this); 210 | } 211 | var life = this.$options[defName]; 212 | if (life) { 213 | for (var n in hookLifes) { 214 | if (this == hookLifes[n].that) { 215 | delete hookLifes[n]; 216 | } 217 | } 218 | } 219 | }; 220 | V.mixin(mixinOpt); 221 | } 222 | exports.vueLifeInstall = vueLifeInstall; 223 | exports.default = vueLifeInstall; 224 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /vueLife/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../_src/vueLife/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /vueUnicom/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * unicom 联通 想到中国联通就想到了这个名字 -_- 3 | * 目的,提供vue 全局的转发机制 4 | * [2019-07-21] 重构,以事件模型为基础,多组件之间 订阅者和发布者来制作 5 | */ 6 | import Vue, { VueConstructor } from "vue"; 7 | import { App } from "vue3"; 8 | export declare class VueUnicomEvent { 9 | from: any; 10 | target: T; 11 | data: D; 12 | [propName: string]: any; 13 | constructor(from: any, args: Array); 14 | } 15 | export declare type VueUnicomEmitBack = VueUnicomEvent | VueUnicom | VueUnicom[]; 16 | export declare function unicomEmit(query: string, data?: D, ...args: any): VueUnicomEmitBack; 17 | export interface IVueUnicomArg { 18 | id?: string; 19 | group?: string | Array; 20 | target?: any; 21 | } 22 | interface vueUnicomInstruct { 23 | [propName: string]: Function[]; 24 | } 25 | export interface IVueUnicomBackOption { 26 | [propName: string]: (arg: VueUnicomEvent) => void; 27 | } 28 | declare module "vue/types/options" { 29 | interface ComponentOptions { 30 | unicomId?: string; 31 | unicomName?: string | string[]; 32 | unicom?: IVueUnicomBackOption; 33 | } 34 | } 35 | declare module "vue/types/vue" { 36 | interface Vue { 37 | $unicom: (query: string, data?: D, ...args: any) => VueUnicomEmitBack; 38 | _unicom_data_?: vueUnicomData; 39 | } 40 | } 41 | declare module "vue" { 42 | interface ComponentCustomOptions { 43 | unicomId?: string; 44 | unicomName?: string | string[]; 45 | unicom?: IVueUnicomBackOption; 46 | } 47 | interface ComponentCustomProperties { 48 | $unicom: (query: string, data?: D, ...args: any) => VueUnicomEmitBack; 49 | _unicom_data_?: vueUnicomData; 50 | } 51 | } 52 | export declare class VueUnicom { 53 | static install: typeof vueUnicomInstall; 54 | protected _instruct_: vueUnicomInstruct; 55 | target: any; 56 | id: string; 57 | group: Array; 58 | static emit: typeof unicomEmit; 59 | private _monitor_back_; 60 | constructor({ id, group, target }?: IVueUnicomArg); 61 | monitorBack(): VueUnicom; 62 | monitor(instruct: string, callback: Function): VueUnicom; 63 | monitorOff(instruct?: string, callback?: Function): VueUnicom; 64 | destroy(): void; 65 | setId(id: string): VueUnicom; 66 | setGroup(group: string | string[]): this; 67 | has(type: string): boolean; 68 | on(type: string, fn: (arg: VueUnicomEvent) => void): VueUnicom; 69 | off(type?: string, fn?: Function): VueUnicom; 70 | emit(query: string, data?: D, ...args: any): VueUnicomEmitBack; 71 | } 72 | interface vueInstruct { 73 | [propName: string]: (arg: VueUnicomEvent) => void; 74 | } 75 | interface vueUnicomData { 76 | isIgnore: boolean; 77 | initGroup?: Array; 78 | instructs?: Array; 79 | unicom?: VueUnicom; 80 | } 81 | export declare function vueUnicomInstall(V: VueConstructor | App, { useProps }?: { 82 | useProps?: boolean; 83 | }): void; 84 | export default VueUnicom; 85 | --------------------------------------------------------------------------------