@snack-kit/lib 0.6.0 → 0.8.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/README.md +17 -0
- package/dist/cjs/{chunk-HGUNPVKD.cjs → chunk-LQ5WJVQX.cjs} +19 -13
- package/dist/cjs/chunk-LQ5WJVQX.cjs.map +1 -0
- package/dist/cjs/{chunk-U6KYHCBL.cjs → chunk-MNKOKLT2.cjs} +124 -2
- package/dist/cjs/chunk-MNKOKLT2.cjs.map +1 -0
- package/dist/cjs/debugger.cjs +2 -2
- package/dist/cjs/index.cjs +46 -38
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/utils.cjs +43 -35
- package/dist/es/chunk-C4CPPDML.js +349 -0
- package/dist/es/chunk-C4CPPDML.js.map +1 -0
- package/dist/es/{chunk-FB42OGY3.js → chunk-YXJTZURC.js} +19 -13
- package/dist/es/chunk-YXJTZURC.js.map +1 -0
- package/dist/es/debugger.js +1 -1
- package/dist/es/index.js +3 -3
- package/dist/es/index.js.map +1 -1
- package/dist/es/utils.js +1 -1
- package/dist/types/debugger.d.ts +16 -11
- package/dist/types/index.d.ts +2 -2
- package/dist/types/utils.d.ts +119 -1
- package/dist/umd/debugger.global.js +17 -11
- package/dist/umd/debugger.global.js.map +1 -1
- package/dist/umd/index.global.js +140 -12
- package/dist/umd/index.global.js.map +1 -1
- package/dist/umd/utils.global.js +122 -0
- package/dist/umd/utils.global.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/chunk-HGUNPVKD.cjs.map +0 -1
- package/dist/cjs/chunk-U6KYHCBL.cjs.map +0 -1
- package/dist/es/chunk-FB42OGY3.js.map +0 -1
- package/dist/es/chunk-WJX5Q3WL.js +0 -229
- package/dist/es/chunk-WJX5Q3WL.js.map +0 -1
package/dist/umd/index.global.js
CHANGED
|
@@ -11625,7 +11625,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
|
|
|
11625
11625
|
});
|
|
11626
11626
|
|
|
11627
11627
|
// package.json
|
|
11628
|
-
var version = "0.
|
|
11628
|
+
var version = "0.8.0";
|
|
11629
11629
|
|
|
11630
11630
|
// node_modules/axios/lib/helpers/bind.js
|
|
11631
11631
|
function bind(fn, thisArg) {
|
|
@@ -16139,24 +16139,21 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
|
|
|
16139
16139
|
/**
|
|
16140
16140
|
* 初始化并渲染调试面板
|
|
16141
16141
|
*
|
|
16142
|
+
* 支持两种调用形式:
|
|
16143
|
+
* - **配置对象**:传入 `DebuggerOptions`,可配置网关列表和超时时间
|
|
16144
|
+
* - **数组简写**:直接传入网关 URL 数组,等价于 `{ gateways: [...] }`
|
|
16145
|
+
*
|
|
16142
16146
|
* 调用后在页面右下角插入浮动按钮,点击展开调试面板。
|
|
16143
16147
|
* 面板支持:选择调试网关、切换目标服务、查看并复制路由 ctx。
|
|
16144
16148
|
* 网关/服务选择通过 `localStorage` 持久化,刷新后自动恢复。
|
|
16145
16149
|
*
|
|
16146
|
-
* @param options
|
|
16150
|
+
* @param options 配置对象 或 网关 URL 数组
|
|
16147
16151
|
*
|
|
16148
|
-
* @example
|
|
16152
|
+
* @example 配置对象形式
|
|
16149
16153
|
* ```ts
|
|
16150
16154
|
* import { Debugger } from '@snack-kit/lib/debugger'
|
|
16151
16155
|
*
|
|
16152
16156
|
* await Debugger.init({
|
|
16153
|
-
* gateways: 'http://dev-gateway.example.com',
|
|
16154
|
-
* })
|
|
16155
|
-
* ```
|
|
16156
|
-
*
|
|
16157
|
-
* @example 多网关(开发/测试环境切换)
|
|
16158
|
-
* ```ts
|
|
16159
|
-
* await Debugger.init({
|
|
16160
16157
|
* gateways: [
|
|
16161
16158
|
* 'http://dev-gateway.example.com',
|
|
16162
16159
|
* 'http://test-gateway.example.com',
|
|
@@ -16165,17 +16162,26 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
|
|
|
16165
16162
|
* })
|
|
16166
16163
|
* ```
|
|
16167
16164
|
*
|
|
16165
|
+
* @example 数组简写形式
|
|
16166
|
+
* ```ts
|
|
16167
|
+
* await Debugger.init([
|
|
16168
|
+
* 'http://dev-gateway.example.com',
|
|
16169
|
+
* 'http://test-gateway.example.com',
|
|
16170
|
+
* ])
|
|
16171
|
+
* ```
|
|
16172
|
+
*
|
|
16168
16173
|
* @example 仅在非生产环境加载
|
|
16169
16174
|
* ```ts
|
|
16170
16175
|
* if (import.meta.env.DEV) {
|
|
16171
16176
|
* const { Debugger } = await import('@snack-kit/lib/debugger')
|
|
16172
|
-
* await Debugger.init(
|
|
16177
|
+
* await Debugger.init(['http://dev-gateway.example.com'])
|
|
16173
16178
|
* }
|
|
16174
16179
|
* ```
|
|
16175
16180
|
*/
|
|
16176
16181
|
static async init(options) {
|
|
16177
16182
|
globalThis[DEBUGGER_ACTIVE_KEY] = true;
|
|
16178
|
-
const
|
|
16183
|
+
const normalized = Array.isArray(options) ? { gateways: options } : options;
|
|
16184
|
+
const instance = new _Debugger({ timeout: 1e4, ...normalized });
|
|
16179
16185
|
instance.injectStyle();
|
|
16180
16186
|
instance.buildDOM();
|
|
16181
16187
|
await instance.restoreState();
|
|
@@ -16522,6 +16528,98 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
|
|
|
16522
16528
|
var IsIpv4 = (val) => REGEX.ipv4.test(val);
|
|
16523
16529
|
var IsInteger = (val) => REGEX.integer.test(val);
|
|
16524
16530
|
var IsPositiveInteger = (val) => REGEX.positiveInteger.test(val);
|
|
16531
|
+
var REGEXPRULES = {
|
|
16532
|
+
// ── 数字 / 英文 / 中文 ──────────────────────────────────────────────────
|
|
16533
|
+
/** 只能是数字和字母 */
|
|
16534
|
+
numberEnglish: /^\w+$/,
|
|
16535
|
+
/** 只能是非数字和字母 */
|
|
16536
|
+
unnumberEnglish: /^\W*$/,
|
|
16537
|
+
/** 只能是数字 */
|
|
16538
|
+
number: /^\d+$/,
|
|
16539
|
+
/** 只能是非数字 */
|
|
16540
|
+
unnumber: /^\D*$/,
|
|
16541
|
+
/** 只能是英文 */
|
|
16542
|
+
english: /^[a-zA-Z]+$/,
|
|
16543
|
+
/** 只能是中文 */
|
|
16544
|
+
chinese: /^[\u4E00-\u9FA5]+$/,
|
|
16545
|
+
/** 不能包含中文 */
|
|
16546
|
+
unchinese: /^[^\u4e00-\u9fa5]*$/,
|
|
16547
|
+
/** 整数(含负数和零) */
|
|
16548
|
+
integer: /(^-|^)\d+$/,
|
|
16549
|
+
/** 中文、字母、数字 */
|
|
16550
|
+
chineseEnglishNumber: /^[\u4e00-\u9fa5\w]+$/,
|
|
16551
|
+
/** 浮点数 */
|
|
16552
|
+
floatNumber: /^(-?[1-9]\d*\.\d+|-?0\.\d*[1-9]\d*|0\.0+)$/,
|
|
16553
|
+
/** 严格浮点数 */
|
|
16554
|
+
strictFloatNumber: /^(-?[1-9]\d*\.\d+|-?0\.\d*[1-9])$/,
|
|
16555
|
+
// ── 身份证 ──────────────────────────────────────────────────────────────
|
|
16556
|
+
/** 二代身份证 */
|
|
16557
|
+
idcard: /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/,
|
|
16558
|
+
/** 香港身份证 */
|
|
16559
|
+
hkIdcard: /^[a-zA-Z]\d{6}\([\dA]\)$/,
|
|
16560
|
+
/** 澳门身份证 */
|
|
16561
|
+
amIdcard: /^[1|5|7]\d{6}\(\d\)$/,
|
|
16562
|
+
/** 台湾身份证 */
|
|
16563
|
+
twIdcard: /^[a-zA-Z][0-9]{9}$/,
|
|
16564
|
+
// ── 邮箱 ────────────────────────────────────────────────────────────────
|
|
16565
|
+
/** 邮箱(符合 RFC 标准) */
|
|
16566
|
+
email: /^(([^<>()[\]\\.,;:\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,}))$/,
|
|
16567
|
+
/** 中文邮箱 */
|
|
16568
|
+
chineseEmail: /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/,
|
|
16569
|
+
// ── 电话 ────────────────────────────────────────────────────────────────
|
|
16570
|
+
/** 手机号(宽松:13-19 开头) */
|
|
16571
|
+
phone: /^(?:(?:\+|00)86)?1[3-9]\d{9}$/,
|
|
16572
|
+
/** 手机号(严谨,基于工信部 2019 年最新公布号段) */
|
|
16573
|
+
strictPhone: /^(?:(?:\+|00)86)?1(?:(?:3\d)|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8\d)|(?:9[189]))\d{8}$/,
|
|
16574
|
+
/** 座机 */
|
|
16575
|
+
telphone: /^(?:(?:\d{3}-)?\d{8}|^(?:\d{4}-)?\d{7,8})(?:-\d+)?$/,
|
|
16576
|
+
/** 手机机身号码(IMEI) */
|
|
16577
|
+
IMEI: /^\d{15,17}$/,
|
|
16578
|
+
// ── URL / 地址 ──────────────────────────────────────────────────────────
|
|
16579
|
+
/** URL(http / https / ftp) */
|
|
16580
|
+
url: /^(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-.,@?^=%&:/~+#]*[\w\-@?^=%&/~+#])?/,
|
|
16581
|
+
/** URL(仅 http / https) */
|
|
16582
|
+
link: /^(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-.,@?^=%&:/~+#]*[\w\-@?^=%&/~+#])?/,
|
|
16583
|
+
/** 磁力链接(宽松匹配) */
|
|
16584
|
+
magnet: /^magnet:\?xt=urn:btih:[0-9a-fA-F]{40,}.*$/,
|
|
16585
|
+
/** 图片地址 */
|
|
16586
|
+
image: /^https?:\/\/(.+\/)+.+(\.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif))$/i,
|
|
16587
|
+
/** 视频地址 */
|
|
16588
|
+
video: /^https?:\/\/(.+\/)+.+(\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4))$/i,
|
|
16589
|
+
/** Base64 数据 URI */
|
|
16590
|
+
base64: /^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@/?%\s]*?)\s*$/i,
|
|
16591
|
+
/** 以 http/https 开头的绝对路径 */
|
|
16592
|
+
httpStart: /^(http|https):\/\/\S*/,
|
|
16593
|
+
// ── IP ──────────────────────────────────────────────────────────────────
|
|
16594
|
+
/** 必须带端口号的网址或 IP */
|
|
16595
|
+
ipport: /^((ht|f)tps?:\/\/)?[\w-]+(\.[\w-]+)+:\d{1,5}\/?$/,
|
|
16596
|
+
/** IPv4(可带端口) */
|
|
16597
|
+
ipv4Port: /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/,
|
|
16598
|
+
/** 子网掩码 */
|
|
16599
|
+
netmask: /^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/,
|
|
16600
|
+
// ── 时间 ────────────────────────────────────────────────────────────────
|
|
16601
|
+
/** 24 小时制时间(HH:mm:ss) */
|
|
16602
|
+
"24Time": /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/,
|
|
16603
|
+
/** 12 小时制时间(hh:mm:ss) */
|
|
16604
|
+
"12Time": /^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/,
|
|
16605
|
+
/** 日期(宽松,如 2022-9-1) */
|
|
16606
|
+
date: /^\d{1,4}(-)(1[0-2]|0?[1-9])\1(0?[1-9]|[1-2]\d|30|31)$/,
|
|
16607
|
+
/** 日期(严谨,支持闰年判断) */
|
|
16608
|
+
strictDate: /^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$/,
|
|
16609
|
+
// ── 其他 ────────────────────────────────────────────────────────────────
|
|
16610
|
+
/** QQ 号 */
|
|
16611
|
+
qq: /^[1-9][0-9]{4,10}$/,
|
|
16612
|
+
/** 微信号(6-20 位,字母开头) */
|
|
16613
|
+
wx: /^[a-zA-Z][-_a-zA-Z0-9]{5,19}$/,
|
|
16614
|
+
/** 邮政编码(中国) */
|
|
16615
|
+
postal: /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/,
|
|
16616
|
+
/** 匹配连续重复字符 */
|
|
16617
|
+
double: /(.)\1+/g,
|
|
16618
|
+
/** 密码强度(最少 6 位,含大小写字母、数字、特殊字符各至少 1 个) */
|
|
16619
|
+
passwordCheck: /^\S*(?=\S{6,})(?=\S*\d)(?=\S*[A-Z])(?=\S*[a-z])(?=\S*[!@#$%^&*? ])\S*$/,
|
|
16620
|
+
/** 16 进制颜色值 */
|
|
16621
|
+
color: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
|
|
16622
|
+
};
|
|
16525
16623
|
|
|
16526
16624
|
// src/utils/array.ts
|
|
16527
16625
|
var Unique = (arr) => [...new Set(arr)];
|
|
@@ -16653,6 +16751,34 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
|
|
|
16653
16751
|
});
|
|
16654
16752
|
return result;
|
|
16655
16753
|
};
|
|
16754
|
+
var CopyToClipboard = async (str) => {
|
|
16755
|
+
if (typeof navigator !== "undefined" && navigator.clipboard?.writeText) {
|
|
16756
|
+
try {
|
|
16757
|
+
await navigator.clipboard.writeText(str);
|
|
16758
|
+
return true;
|
|
16759
|
+
} catch {
|
|
16760
|
+
}
|
|
16761
|
+
}
|
|
16762
|
+
try {
|
|
16763
|
+
const el = document.createElement("textarea");
|
|
16764
|
+
el.value = str;
|
|
16765
|
+
el.setAttribute("readonly", "");
|
|
16766
|
+
el.style.cssText = "position:absolute;left:-9999px;top:-9999px";
|
|
16767
|
+
document.body.appendChild(el);
|
|
16768
|
+
const selection = document.getSelection();
|
|
16769
|
+
const prevRange = selection && selection.rangeCount > 0 ? selection.getRangeAt(0) : null;
|
|
16770
|
+
el.select();
|
|
16771
|
+
const ok = document.execCommand("copy");
|
|
16772
|
+
document.body.removeChild(el);
|
|
16773
|
+
if (prevRange && selection) {
|
|
16774
|
+
selection.removeAllRanges();
|
|
16775
|
+
selection.addRange(prevRange);
|
|
16776
|
+
}
|
|
16777
|
+
return ok;
|
|
16778
|
+
} catch {
|
|
16779
|
+
return false;
|
|
16780
|
+
}
|
|
16781
|
+
};
|
|
16656
16782
|
|
|
16657
16783
|
// src/utils/time.ts
|
|
16658
16784
|
var FormatDate = (date = /* @__PURE__ */ new Date(), format = "yyyy-MM-dd HH:mm:ss") => {
|
|
@@ -16714,6 +16840,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
|
|
|
16714
16840
|
exports.CancelAll = CancelAll;
|
|
16715
16841
|
exports.CleanObject = CleanObject;
|
|
16716
16842
|
exports.Context = Context;
|
|
16843
|
+
exports.CopyToClipboard = CopyToClipboard;
|
|
16717
16844
|
exports.Ctx = Ctx;
|
|
16718
16845
|
exports.DEBUGGER_ACTIVE_KEY = DEBUGGER_ACTIVE_KEY;
|
|
16719
16846
|
exports.Debounce = Debounce;
|
|
@@ -16753,6 +16880,7 @@ var SnackKit = (function (exports, crypto2, url, http, https, http2, util2, zlib
|
|
|
16753
16880
|
exports.Put = Put;
|
|
16754
16881
|
exports.QueryToObject = QueryToObject;
|
|
16755
16882
|
exports.REGEX = REGEX;
|
|
16883
|
+
exports.REGEXPRULES = REGEXPRULES;
|
|
16756
16884
|
exports.Request = Request;
|
|
16757
16885
|
exports.Throttle = Throttle;
|
|
16758
16886
|
exports.UUID = UUID;
|