0.5.14 • Published 2 months ago

unstable v0.5.14

Weekly downloads
87
License
ISC
Repository
-
Last release
2 months ago

unstable

unstable是一个工具库,正如其名,是不稳定的,请不要在生产环境中使用,仅供实验性开发和探索使用

安装

  npm install unstable

标志

下文所有参数类型加?为可选参数, 在代码中函数后方加的注释均为返回值

基本函数

isObject

检测目标是否是对象

(any) -> boolean
参数: (任意)

import { isObject } from "unstable";
isObject({}); // true
isObject([]); // true
isObject("string"); // false
isObject(null); // false

typeOf

获取目标的具体类型,值从 Object.prototype.toString 返回的结果中截取

(any) -> string
参数:(任意)

import { typeOf } from "unstable";
typeOf({}); // "Object"
typeOf([]); // "Array"
typeOf(new Map()); // "Map"
typeOf(new Set()); // "Set"
typeOf(new Promise(()=> {})); // "Promise"
typeOf(new Error()); // "Error"
typeOf(/\\/); // "RegExp"
// ...

merge

深度合并多个对象,不同于Object.assign,基本示例如下

(Array\<object>) -> object
参数: (包含多个对象的数组)

import { merge } from "unstable";
merge(
  [
    { a: 1, b: 2, c: 3 },
    { a:2, d: 5 },
    { b: 3, g: 7 }
  ]
);
/*
  {a: 2, b: 3, c: 3, d: 5, g: 7}
*/

isJSON

检测是否是json

(string) -> boolean
参数:(要检测的字符串)

deepCopy

深复制

(object) -> object
参数:(要深复制的对象)

debounce

防抖

(function, number, object?) -> function
参数: (要防抖的函数, 最大间隔, this对象?);

import { debounce } from "unstable";
let debounced = debounce(function() {}, 100, {a: 1});

throttle

节流

(function, number, object?) -> function
参数: (要节流的函数, 最大间隔, this对象?);

import { throttle } from "unstable";
let throttled = throttle(function() {}, 100, {a: 1});

once

包装单次运行的函数

(function, object?) -> function
参数: (要单次运行的函数, this对象?);

import { once } from "unstable";
let onced = once(()=> console.log("runed"));
onced(); // "runed"
onced(); // 

浏览器可用函数

loadJs

从给定的源加载一个js文件

(string) -> void
参数:(uri地址)

removeElement

删除目标元素

(element) -> void
参数:(要删除的元素)

style方法

获取和设置style

getStyle

(element, string) -> string
参数:(DOM元素, 样式名)

setStyle

(element, object) -> string
参数:(DOM元素, 样式对象)

import { setStyle } from "unstable";
setStyle(element/* 目标元素 */, {
  width: "100px",
  height: "100px",
  "z-index": "10" 
});

cookie方法

读写cookie

getCookie

(string) -> string

setCookie

(string, string, number) -> void

import { getCookie, setCookie } from "unstable";
// 设置 cookie 的方法,第三个参数单位:天
setCookie("key", "value", 1); 
getCookie("key"); // "value"

readFileAsText

读取文件中的文本内容

(file) -> Promise\<string>
参数:(从input标签中获取的文件)

drag

使目标元素可拖动到任意位置

(element) -> void
参数:(DOM元素)

额外函数

compileXMLToAST

将XML编译为AST,基础示例如下,在线使用

(string) -> object
参数:(XML字符串)

import { compileXMLToAST } from "unstable";
// <></>表示Fragment
compileXMLToAST(`
<>
  <input>
  <br />
  <div class="container">
    <span>content</span>
  </div>
</>
`);/*
{
  "props": {},
  "type": "Fragment",
  "nodeName": "",
  "children": [
    {
      "props": {},
      "type": "Tag",
      "nodeName": "input"
    },
    {
      "props": {},
      "type": "Tag",
      "nodeName": "br"
    },
    {
      "props": {
        "class": "container"
      },
      "type": "Tag",
      "nodeName": "div",
      "children": [
        {
          "props": {},
          "type": "Tag",
          "nodeName": "span",
          "children": [
            {
              "type": "String",
              "value": "content"
            }
          ]
        }
      ]
    }
  ]
}
*/

createElement

根据compileXMLToAST返回的对象创建元素及其子元素,返回创建的元素

(object)-> element
参数:(compileXMLToAST返回的对象)

reactivity 相关

这些功能与vue reactivity功能大致相同, 实现了 ref, isRef, toRef, toRefs, reactive, shallowReactive, isReactive, readonly, shallowReadonly, isReadonly, watch, watchEffect, computed
参考vue reactivity 文档

scheduler 相关

用于根据优先级调度任务的执行,减少因执行卡顿导致浏览器阻塞
当任务未到过期时间,如果浏览器需要渲染,则中断调度,待浏览器渲染后,任务将继续执行,这可以避免阻塞用户交互
当同时有多个任务,过期时间近的任务会被排在前面,过期时间远任务会被排在后面
当任务到达过期时间,会变成同步(阻塞)执行

scheduleExpireCallback

(number, function) -> void
参数:(过期时间-毫秒, 回调函数)

schedulePriorityCallback

(number, function) -> void
参数:(优先级变量, 回调函数)

优先级变量导出
immediatePriority 立即执行,过期时间 -1ms

userBlockingPriority 用户阻塞优先级,过期时间 250ms

normalPriority 一般优先级,过期时间 1000ms

lowPriority 低优先级,过期时间 10000ms

idlePriority 空闲优先级,过期时间 1073741823ms (v8最大整数)

parseq

一种异步控制流的方式,参考 douglas-crockford 的 parseq ,但有一些不同,并且提供了一些额外功能

概念
callback

一种用于传递异步操作结果的函数,便于理解,称之为回调函数(callback),下面的异步操作的返回值,指这里 (any, any)-> void 参数:(成功的值, 失败的原因)
返回值: 可选返回一个取消函数,用于取消异步操作
失败的原因一般来说是 Error 的实例,建议始终是 Error 实例
手动调用的时候,如果成功则只传入一个参数作为成功的值,比如 callback(value)
如果失败就传入两个参数,第一个为undefined,第二个为失败原因,一般返回捕获的Error,比如 callback(undefined, error)

requestor

一种接收一个回调函数,一个值的函数,便于理解,称之为请求器(requestor) (function, any?) -> function? 参数:(回调函数, 初始值) 请求器一般为自定义的用于异步操作的函数,里面可以有任意异步操作,如果异步操作结束,则调用 callback 结束这个异步操作,调用方式与上述相同,请求器可选返回一个取消函数,用于取消该异步操作,初始值在请求器调用的时候可在内部使用

方法

下述所有方法均返回一个新的请求器,一旦该请求器内产生错误,则调用其他所有请求器返回的取消方法(如果有的话)
借助下面的方法可以轻松组合许多请求器,从而产生强大的控制流

parallel

接收一组请求器,返回一个新的请求器 (Array\, number?, number?, string?) -> function 参数 (Array\<请求器>, 时间限制?, 并发数?, 函数名称?) -> 请求器 参数详情

  • Array\<请求器>: 一个请求器数组,包含了一组异步操作,每个请求器符合上述请求器的规范
  • 时间限制: 如果超时就会直接创建一个超时错误通过调用 callback(undefined, error) 传出
  • 并发数: 同时运行请求器的最大数量
  • 函数名称:函数的名称,一般不需要传,仅用于错误信息生成 该方法的动作类似于 Promise.all , 只要有一个失败,那么就会以这个失败抛出,成功则返回成功结果数组
race

和上述 parallel 方法参数相同 该方法的动作类似于 Promise.race , 只要有一个完成(不论成功或失败),那么就会完成(不论成功或失败)

any

和上述 parallel 方法参数相同 该方法的动作类似于 Promise.any , 只要有一个成功 ,那么就会成功,如果所有的都失败了,则抛出失败

allSettled

和上述 parallel 方法参数相同 该方法的动作类似于 Promise.allSettled , 不论成功或者失败(不超时),都会返回结果数组,如果超时,则返回超时错误

sequence

串行执行请求器,会依次执行请求器,并且以前面请求器的结果作为后面请求器的参数,全部成功则返回最后一个请求器的结果,失败则返回失败的那个请求器的失败原因
(Array\, number?, string?) -> function
参数 (Array\<请求器>, 时间限制?, 函数名称?) -> 请求器
该方法的动作类似于 promise.then(xx).then(xx).then(xx)

0.5.14

2 months ago

0.5.13

6 months ago

0.5.10

9 months ago

0.5.11

9 months ago

0.5.12

9 months ago

0.5.9

9 months ago

0.5.8

1 year ago

0.5.7

1 year ago

0.5.6

1 year ago

0.5.5

1 year ago

0.5.4

2 years ago

0.5.3

2 years ago

0.5.0

2 years ago

0.5.2

2 years ago

0.5.1

2 years ago

0.5.0-beta.1

2 years ago

0.5.0-beta.0

2 years ago

0.4.13

2 years ago

0.5.0-beta.2

2 years ago

0.4.12

2 years ago

0.4.10

2 years ago

0.4.11

2 years ago

0.4.9

2 years ago

0.4.8

2 years ago

0.4.5

2 years ago

0.4.4

2 years ago

0.4.7

2 years ago

0.4.6

2 years ago

0.4.3

2 years ago

0.4.2

2 years ago

0.4.1

2 years ago

0.4.0-beta.6

3 years ago

0.3.38

3 years ago

0.4.0-beat.1

3 years ago

0.4.0-beta.0

3 years ago

0.4.0-beta.1

3 years ago

0.4.0-beta.2

3 years ago

0.4.0-beta.3

3 years ago

0.4.0-beta.4

3 years ago

0.4.0-beta.5

3 years ago

4.0.0-beta.0

3 years ago

0.3.37

3 years ago

0.3.36

3 years ago

0.3.35

3 years ago

0.3.34

3 years ago

0.3.33

3 years ago

0.3.32

3 years ago

0.3.31

3 years ago

0.3.30

3 years ago

0.3.29

3 years ago

0.3.28

3 years ago

0.3.27

3 years ago

0.3.20

3 years ago

0.3.26

3 years ago

0.3.25

3 years ago

0.3.24

3 years ago

0.3.23

3 years ago

0.3.22

3 years ago

0.3.21

3 years ago

0.3.19

3 years ago

0.3.18

3 years ago

0.3.17

3 years ago

0.3.16

3 years ago

0.3.15

3 years ago

0.3.14

3 years ago

0.3.13

3 years ago

0.3.12

3 years ago

0.3.11

3 years ago

0.3.10

3 years ago

0.3.9

3 years ago

0.3.8

3 years ago

0.3.7

3 years ago

0.3.6

3 years ago

0.3.5

3 years ago

0.3.4

3 years ago

0.3.3

3 years ago

0.3.2

3 years ago

0.3.1

4 years ago

0.3.0

4 years ago

0.2.0

4 years ago

0.1.18

4 years ago

0.0.18

4 years ago

0.0.17

4 years ago

0.0.16

4 years ago

0.0.14

4 years ago

0.0.15

4 years ago

0.0.13

4 years ago

0.0.10

4 years ago

0.0.11

4 years ago

0.0.12

4 years ago

0.0.9

4 years ago

0.0.8

4 years ago

0.0.7

4 years ago

0.0.6

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago