@whitesev/utils 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.amd.js CHANGED
@@ -3171,7 +3171,7 @@ define((function () { 'use strict';
3171
3171
  /// <reference path="./ajaxHooker/index.d.ts" />
3172
3172
  class Utils {
3173
3173
  /** 版本号 */
3174
- version = "2024.5.28";
3174
+ version = "2024.5.30";
3175
3175
  addStyle(cssText) {
3176
3176
  if (typeof cssText !== "string") {
3177
3177
  throw new Error("Utils.addStyle 参数cssText 必须为String类型");
@@ -5598,251 +5598,318 @@ define((function () { 'use strict';
5598
5598
  await UtilsContext.tryCatch(index, item).run(handleFunc);
5599
5599
  }));
5600
5600
  }
5601
- async waitNode(...nodeSelectors) {
5602
- /* 检查每个参数是否为字符串类型 */
5603
- for (let nodeSelector of nodeSelectors) {
5604
- if (typeof nodeSelector !== "string") {
5605
- throw new Error("Utils.waitNode 参数必须都是 string 类型");
5601
+ waitNode(...args) {
5602
+ // 过滤掉undefined
5603
+ args = args.filter((arg) => arg !== void 0);
5604
+ let that = this;
5605
+ // 选择器
5606
+ let selector = args[0];
5607
+ // 父元素(监听的元素)
5608
+ let parent = UtilsCore.document;
5609
+ // 超时时间
5610
+ let timeout = 0;
5611
+ if (typeof args[0] !== "string" && !Array.isArray(args[0])) {
5612
+ throw new TypeError("Utils.waitNode 第一个参数必须是string|string[]");
5613
+ }
5614
+ if (args.length === 1) ;
5615
+ else if (args.length === 2) {
5616
+ let secondParam = args[1];
5617
+ if (typeof secondParam === "number") {
5618
+ // "div",10000
5619
+ timeout = secondParam;
5620
+ }
5621
+ else if (typeof secondParam === "object" &&
5622
+ secondParam instanceof Node) {
5623
+ // "div",document
5624
+ parent = secondParam;
5625
+ }
5626
+ else {
5627
+ throw new TypeError("Utils.waitNode 第二个参数必须是number|Node");
5628
+ }
5629
+ }
5630
+ else if (args.length === 3) {
5631
+ // "div",document,10000
5632
+ // 第二个参数,parent
5633
+ let secondParam = args[1];
5634
+ // 第三个参数,timeout
5635
+ let thirdParam = args[2];
5636
+ if (typeof secondParam === "object" && secondParam instanceof Node) {
5637
+ parent = secondParam;
5638
+ if (typeof thirdParam === "number") {
5639
+ timeout = thirdParam;
5640
+ }
5641
+ else {
5642
+ throw new TypeError("Utils.waitNode 第三个参数必须是number");
5643
+ }
5644
+ }
5645
+ else {
5646
+ throw new TypeError("Utils.waitNode 第二个参数必须是Node");
5606
5647
  }
5607
5648
  }
5608
- let UtilsContext = this;
5649
+ else {
5650
+ throw new TypeError("Utils.waitNode 参数个数错误");
5651
+ }
5609
5652
  return new Promise((resolve) => {
5610
- /* 防止触发第二次回调 */
5611
- let isReturn = false;
5612
- /**
5613
- * 检查所有选择器是否匹配到节点
5614
- * @param observer
5615
- */
5616
- let checkNodes = (observer) => {
5617
- let isFind = true;
5618
- let selectNodeArray = [];
5619
- for (let selector of nodeSelectors) {
5620
- let element = document.querySelector(selector);
5621
- if (!element) {
5622
- /* 没找到,直接退出循环 */
5623
- isFind = false;
5624
- break;
5653
+ function getNode() {
5654
+ if (Array.isArray(selector)) {
5655
+ let result = [];
5656
+ for (let index = 0; index < selector.length; index++) {
5657
+ let node = parent.querySelector(selector[index]);
5658
+ if (node) {
5659
+ result.push(node);
5660
+ }
5625
5661
  }
5626
- selectNodeArray.push(element);
5627
- }
5628
- if (isFind) {
5629
- isReturn = true;
5630
- observer?.disconnect();
5631
- /* 如果只有一个选择器,那么返回数组中存储的第一个 */
5632
- if (selectNodeArray.length === 1) {
5633
- resolve(selectNodeArray[0]);
5634
- }
5635
- else {
5636
- resolve(selectNodeArray);
5662
+ if (result.length === selector.length) {
5663
+ return result;
5637
5664
  }
5638
5665
  }
5639
- };
5640
- /* 在函数开始时检查节点是否已经存在 */
5641
- checkNodes();
5642
- /* 监听 DOM 的变化,直到至少有一个节点被匹配到 */
5643
- UtilsContext.mutationObserver(document.documentElement, {
5644
- config: { subtree: true, childList: true, attributes: true },
5645
- callback: (mutations, observer) => {
5646
- if (isReturn) {
5666
+ else {
5667
+ return parent.querySelector(selector);
5668
+ }
5669
+ }
5670
+ let node = getNode();
5671
+ if (node) {
5672
+ resolve(node);
5673
+ return;
5674
+ }
5675
+ let observer = that.mutationObserver(parent, {
5676
+ config: {
5677
+ subtree: true,
5678
+ childList: true,
5679
+ attributes: true,
5680
+ },
5681
+ callback() {
5682
+ let node = getNode();
5683
+ if (node) {
5684
+ // 取消观察器
5685
+ observer.disconnect();
5686
+ resolve(node);
5647
5687
  return;
5648
5688
  }
5649
- checkNodes(observer);
5650
5689
  },
5651
5690
  });
5691
+ if (timeout > 0) {
5692
+ setTimeout(() => {
5693
+ // 取消观察器
5694
+ observer.disconnect();
5695
+ resolve(null);
5696
+ }, timeout);
5697
+ }
5652
5698
  });
5653
5699
  }
5654
- waitNodeWithInterval(nodeSelectorsList = [], maxTime = 0) {
5655
- let UtilsContext = this;
5656
- let nodeSelectors = [];
5657
- /* 检查每个参数是否为字符串类型 */
5658
- if (Array.isArray(nodeSelectorsList)) {
5659
- for (let nodeSelector of nodeSelectorsList) {
5660
- if (typeof nodeSelector !== "string") {
5661
- throw new Error("Utils.waitNodeWithInterval 参数nodeSelectorsList必须为 string[] 类型");
5700
+ waitAnyNode(...args) {
5701
+ // 过滤掉undefined
5702
+ args = args.filter((arg) => arg !== void 0);
5703
+ let that = this;
5704
+ // 选择器
5705
+ let selectorList = args[0];
5706
+ // 父元素(监听的元素)
5707
+ let parent = UtilsCore.document;
5708
+ // 超时时间
5709
+ let timeout = 0;
5710
+ if (typeof args[0] !== "object" && !Array.isArray(args[0])) {
5711
+ throw new TypeError("Utils.waitAnyNode 第一个参数必须是string[]");
5712
+ }
5713
+ if (args.length === 1) ;
5714
+ else if (args.length === 2) {
5715
+ let secondParam = args[1];
5716
+ if (typeof secondParam === "number") {
5717
+ // "div",10000
5718
+ timeout = secondParam;
5719
+ }
5720
+ else if (typeof secondParam === "object" &&
5721
+ secondParam instanceof Node) {
5722
+ // "div",document
5723
+ parent = secondParam;
5724
+ }
5725
+ else {
5726
+ throw new TypeError("Utils.waitAnyNode 第二个参数必须是number|Node");
5727
+ }
5728
+ }
5729
+ else if (args.length === 3) {
5730
+ // "div",document,10000
5731
+ // 第二个参数,parent
5732
+ let secondParam = args[1];
5733
+ // 第三个参数,timeout
5734
+ let thirdParam = args[2];
5735
+ if (typeof secondParam === "object" && secondParam instanceof Node) {
5736
+ parent = secondParam;
5737
+ if (typeof thirdParam === "number") {
5738
+ timeout = thirdParam;
5739
+ }
5740
+ else {
5741
+ throw new TypeError("Utils.waitAnyNode 第三个参数必须是number");
5662
5742
  }
5663
5743
  }
5664
- nodeSelectors = nodeSelectorsList;
5744
+ else {
5745
+ throw new TypeError("Utils.waitAnyNode 第二个参数必须是Node");
5746
+ }
5665
5747
  }
5666
5748
  else {
5667
- nodeSelectors.push(nodeSelectorsList);
5749
+ throw new TypeError("Utils.waitAnyNode 参数个数错误");
5668
5750
  }
5669
- return new Promise((resolve, reject) => {
5670
- /* 防止触发第二次回调 */
5671
- let isReturn = false;
5672
- /* 检查所有选择器是否匹配到节点 */
5673
- let checkNodes = (observer) => {
5674
- let isFind = true;
5675
- let selectNodeArray = [];
5676
- for (let selector of nodeSelectors) {
5677
- let element = document.querySelector(selector);
5678
- if (!element) {
5679
- /* 没找到,直接退出循环 */
5680
- isFind = false;
5681
- break;
5682
- }
5683
- selectNodeArray.push(element);
5684
- }
5685
- if (isFind) {
5686
- isReturn = true;
5687
- observer?.disconnect();
5688
- /* 如果只有一个选择器,那么返回数组中存储的第一个 */
5689
- if (selectNodeArray.length === 1) {
5690
- resolve(selectNodeArray[0]);
5691
- }
5692
- else {
5693
- resolve(selectNodeArray);
5694
- }
5695
- }
5696
- };
5697
- /* 在函数开始时检查节点是否已经存在 */
5698
- checkNodes();
5699
- /* 监听 DOM 的变化,直到至少有一个节点被匹配到 */
5700
- let mutationObserver = UtilsContext.mutationObserver(document.documentElement, {
5701
- config: { subtree: true, childList: true, attributes: true },
5702
- callback: (mutations, observer) => {
5703
- if (isReturn) {
5704
- return;
5705
- }
5706
- checkNodes(observer);
5707
- },
5708
- });
5709
- setTimeout(() => {
5710
- mutationObserver.disconnect();
5711
- reject();
5712
- }, maxTime);
5751
+ let promiseList = selectorList.map((selector) => {
5752
+ return that.waitNode(selector, parent, timeout);
5713
5753
  });
5754
+ return Promise.any(promiseList);
5714
5755
  }
5715
- waitAnyNode(...nodeSelectors) {
5716
- let UtilsContext = this;
5717
- /* 检查每个参数是否为字符串类型 */
5718
- for (let nodeSelector of nodeSelectors) {
5719
- if (typeof nodeSelector !== "string") {
5720
- throw new Error("Utils.waitNode 参数必须为 ...string 类型");
5756
+ waitNodeList(...args) {
5757
+ // 过滤掉undefined
5758
+ args = args.filter((arg) => arg !== void 0);
5759
+ let that = this;
5760
+ // 选择器数组
5761
+ let selector = args[0];
5762
+ // 父元素(监听的元素)
5763
+ let parent = UtilsCore.document;
5764
+ // 超时时间
5765
+ let timeout = 0;
5766
+ if (typeof args[0] !== "string" && !Array.isArray(args[0])) {
5767
+ throw new TypeError("Utils.waitNodeList 第一个参数必须是string|string[]");
5768
+ }
5769
+ if (args.length === 1) ;
5770
+ else if (args.length === 2) {
5771
+ let secondParam = args[1];
5772
+ if (typeof secondParam === "number") {
5773
+ // "div",10000
5774
+ timeout = secondParam;
5775
+ }
5776
+ else if (typeof secondParam === "object" &&
5777
+ secondParam instanceof Node) {
5778
+ // "div",document
5779
+ parent = secondParam;
5721
5780
  }
5722
- }
5723
- return new Promise((resolve) => {
5724
- /* 防止触发第二次回调 */
5725
- let isReturn = false;
5726
- /* 检查所有选择器是否存在任意匹配到元素 */
5727
- let checkNodes = (observer) => {
5728
- let selectNode = null;
5729
- for (let selector of nodeSelectors) {
5730
- selectNode = document.querySelector(selector);
5731
- if (selectNode) {
5732
- /* 找到,退出循环 */
5733
- break;
5734
- }
5781
+ else {
5782
+ throw new TypeError("Utils.waitNodeList 第二个参数必须是number|Node");
5783
+ }
5784
+ }
5785
+ else if (args.length === 3) {
5786
+ // "div",document,10000
5787
+ // 第二个参数,parent
5788
+ let secondParam = args[1];
5789
+ // 第三个参数,timeout
5790
+ let thirdParam = args[2];
5791
+ if (typeof secondParam === "object" && secondParam instanceof Node) {
5792
+ parent = secondParam;
5793
+ if (typeof thirdParam === "number") {
5794
+ timeout = thirdParam;
5735
5795
  }
5736
- if (selectNode) {
5737
- isReturn = true;
5738
- observer?.disconnect();
5739
- resolve(selectNode);
5796
+ else {
5797
+ throw new TypeError("Utils.waitNodeList 第三个参数必须是number");
5740
5798
  }
5741
- };
5742
- /* 在函数开始时检查节点是否已经存在 */
5743
- checkNodes();
5744
- /* 监听 DOM 的变化,直到至少有一个节点被匹配到 */
5745
- UtilsContext.mutationObserver(document.documentElement, {
5746
- config: { subtree: true, childList: true, attributes: true },
5747
- callback: (mutations, observer) => {
5748
- if (isReturn) {
5749
- return;
5750
- }
5751
- checkNodes(observer);
5752
- },
5753
- });
5754
- });
5755
- }
5756
- waitNodeList(...nodeSelectors) {
5757
- let UtilsContext = this;
5758
- /* 检查每个参数是否为字符串类型 */
5759
- for (let nodeSelector of nodeSelectors) {
5760
- if (typeof nodeSelector !== "string") {
5761
- throw new Error("Utils.waitNode 参数必须为 ...string 类型");
5799
+ }
5800
+ else {
5801
+ throw new TypeError("Utils.waitNodeList 第二个参数必须是Node");
5762
5802
  }
5763
5803
  }
5804
+ else {
5805
+ throw new TypeError("Utils.waitNodeList 参数个数错误");
5806
+ }
5764
5807
  return new Promise((resolve) => {
5765
- /* 防止触发第二次回调 */
5766
- let isReturn = false;
5767
- /* 检查所有选择器是否匹配到节点 */
5768
- let checkNodes = (observer) => {
5769
- let isFind = true;
5770
- let selectNodes = [];
5771
- for (let selector of nodeSelectors) {
5772
- let nodeList = document.querySelectorAll(selector);
5773
- if (nodeList.length === 0) {
5774
- /* 没找到,直接退出循环 */
5775
- isFind = false;
5776
- break;
5808
+ function getNodeList() {
5809
+ if (Array.isArray(selector)) {
5810
+ let result = [];
5811
+ for (let index = 0; index < selector.length; index++) {
5812
+ let nodeList = parent.querySelectorAll(selector[index]);
5813
+ if (nodeList.length) {
5814
+ result.push(nodeList);
5815
+ }
5777
5816
  }
5778
- selectNodes.push(nodeList);
5779
- }
5780
- if (isFind) {
5781
- isReturn = true;
5782
- observer?.disconnect();
5783
- /* 如果只有一个选择器,那么返回第一个 */
5784
- if (selectNodes.length === 1) {
5785
- resolve(selectNodes[0]);
5817
+ if (result.length === selector.length) {
5818
+ return result;
5786
5819
  }
5787
- else {
5788
- resolve(selectNodes);
5820
+ }
5821
+ else {
5822
+ let nodeList = parent.querySelectorAll(selector);
5823
+ if (nodeList.length) {
5824
+ return nodeList;
5789
5825
  }
5790
5826
  }
5791
- };
5792
- /* 在函数开始时检查节点是否已经存在 */
5793
- checkNodes();
5794
- /* 监听 DOM 的变化,直到至少有一个节点被匹配到 */
5795
- UtilsContext.mutationObserver(document.documentElement, {
5796
- config: { subtree: true, childList: true, attributes: true },
5797
- callback: (mutations, observer) => {
5798
- if (isReturn) {
5827
+ }
5828
+ let nodeList = getNodeList();
5829
+ if (nodeList) {
5830
+ resolve(nodeList);
5831
+ return;
5832
+ }
5833
+ let observer = that.mutationObserver(parent, {
5834
+ config: {
5835
+ subtree: true,
5836
+ childList: true,
5837
+ attributes: true,
5838
+ },
5839
+ callback() {
5840
+ let node = getNodeList();
5841
+ if (node) {
5842
+ // 取消观察器
5843
+ observer.disconnect();
5844
+ resolve(node);
5799
5845
  return;
5800
5846
  }
5801
- checkNodes(observer);
5802
5847
  },
5803
5848
  });
5849
+ if (timeout > 0) {
5850
+ setTimeout(() => {
5851
+ // 取消观察器
5852
+ observer.disconnect();
5853
+ resolve(null);
5854
+ }, timeout);
5855
+ }
5804
5856
  });
5805
5857
  }
5806
- waitAnyNodeList(...nodeSelectors) {
5807
- let UtilsContext = this;
5808
- /* 检查每个参数是否为字符串类型 */
5809
- for (let nodeSelector of nodeSelectors) {
5810
- if (typeof nodeSelector !== "string") {
5811
- throw new Error("Utils.waitNode 参数必须为 ...string 类型");
5858
+ waitAnyNodeList(...args) {
5859
+ // 过滤掉undefined
5860
+ args = args.filter((arg) => arg !== void 0);
5861
+ let that = this;
5862
+ // 选择器数组
5863
+ let selectorList = args[0];
5864
+ // 父元素(监听的元素)
5865
+ let parent = UtilsCore.document;
5866
+ // 超时时间
5867
+ let timeout = 0;
5868
+ if (!Array.isArray(args[0])) {
5869
+ throw new TypeError("Utils.waitAnyNodeList 第一个参数必须是string[]");
5870
+ }
5871
+ if (args.length === 1) ;
5872
+ else if (args.length === 2) {
5873
+ let secondParam = args[1];
5874
+ if (typeof secondParam === "number") {
5875
+ // "div",10000
5876
+ timeout = secondParam;
5877
+ }
5878
+ else if (typeof secondParam === "object" &&
5879
+ secondParam instanceof Node) {
5880
+ // "div",document
5881
+ parent = secondParam;
5812
5882
  }
5813
- }
5814
- return new Promise((resolve) => {
5815
- /* 防止触发第二次回调 */
5816
- let isReturn = false;
5817
- /* 检查所有选择器是否匹配到节点 */
5818
- let checkNodes = (observer) => {
5819
- let selectNodes = [];
5820
- for (let selector of nodeSelectors) {
5821
- selectNodes = document.querySelectorAll(selector);
5822
- if (selectNodes.length) {
5823
- /* 找到,退出循环 */
5824
- break;
5825
- }
5883
+ else {
5884
+ throw new TypeError("Utils.waitAnyNodeList 第二个参数必须是number|Node");
5885
+ }
5886
+ }
5887
+ else if (args.length === 3) {
5888
+ // "div",document,10000
5889
+ // 第二个参数,parent
5890
+ let secondParam = args[1];
5891
+ // 第三个参数,timeout
5892
+ let thirdParam = args[2];
5893
+ if (typeof secondParam === "object" && secondParam instanceof Node) {
5894
+ parent = secondParam;
5895
+ if (typeof thirdParam === "number") {
5896
+ timeout = thirdParam;
5826
5897
  }
5827
- if (selectNodes.length) {
5828
- isReturn = true;
5829
- observer?.disconnect();
5830
- resolve(selectNodes);
5898
+ else {
5899
+ throw new TypeError("Utils.waitAnyNodeList 第三个参数必须是number");
5831
5900
  }
5832
- };
5833
- /* 在函数开始时检查节点是否已经存在 */
5834
- checkNodes();
5835
- /* 监听 DOM 的变化,直到至少有一个节点被匹配到 */
5836
- UtilsContext.mutationObserver(document.documentElement, {
5837
- config: { subtree: true, childList: true, attributes: true },
5838
- callback: (mutations, observer) => {
5839
- if (isReturn) {
5840
- return;
5841
- }
5842
- checkNodes(observer);
5843
- },
5844
- });
5901
+ }
5902
+ else {
5903
+ throw new TypeError("Utils.waitAnyNodeList 第二个参数必须是Node");
5904
+ }
5905
+ }
5906
+ else {
5907
+ throw new TypeError("Utils.waitAnyNodeList 参数个数错误");
5908
+ }
5909
+ let promiseList = selectorList.map((selector) => {
5910
+ return that.waitNodeList(selector, parent, timeout);
5845
5911
  });
5912
+ return Promise.any(promiseList);
5846
5913
  }
5847
5914
  waitProperty(checkObj, checkPropertyName) {
5848
5915
  return new Promise((resolve) => {