@fast-china/utils 2.1.6 → 2.1.8

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.
Files changed (60) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +4 -2
  3. package/README.zh.md +4 -2
  4. package/THIRD_PARTY_LICENSES.md +26 -0
  5. package/dist/crypto/index.mjs +2240 -33
  6. package/dist/crypto/index.mjs.map +1 -1
  7. package/dist/dom/index.mjs +2 -0
  8. package/dist/env/index.mjs +4 -4
  9. package/dist/env/index.mjs.map +1 -1
  10. package/dist/index.d.mts +1918 -32
  11. package/dist/index.global.min.js +2 -2
  12. package/dist/index.global.min.js.map +1 -1
  13. package/dist/index.mjs +2 -0
  14. package/dist/internal/runtime.mjs +21 -1
  15. package/dist/internal/runtime.mjs.map +1 -1
  16. package/dist/logger/index.mjs +2 -2
  17. package/dist/logger/index.mjs.map +1 -1
  18. package/dist/storage/index.mjs +2 -2
  19. package/dist/storage/index.mjs.map +1 -1
  20. package/dist/string/index.mjs +2 -2
  21. package/dist/string/index.mjs.map +1 -1
  22. package/dist/vue/index.mjs +15 -0
  23. package/dist/vue/now.mjs +2 -2
  24. package/dist/vue/now.mjs.map +1 -1
  25. package/package.json +4 -6
  26. package/dist/array/index.d.mts +0 -94
  27. package/dist/async/index.d.mts +0 -145
  28. package/dist/base64/index.d.mts +0 -106
  29. package/dist/color/index.d.mts +0 -89
  30. package/dist/crypto/index.d.mts +0 -327
  31. package/dist/date/index.d.mts +0 -190
  32. package/dist/dom/style.d.mts +0 -29
  33. package/dist/env/index.d.mts +0 -62
  34. package/dist/function/index.d.mts +0 -13
  35. package/dist/identity/index.d.mts +0 -77
  36. package/dist/internal/text.d.mts +0 -15
  37. package/dist/logger/index.d.mts +0 -90
  38. package/dist/number/index.d.mts +0 -89
  39. package/dist/object/index.d.mts +0 -114
  40. package/dist/storage/index.d.mts +0 -115
  41. package/dist/string/index.d.mts +0 -141
  42. package/dist/vue/breakpoints.d.mts +0 -21
  43. package/dist/vue/element-size.d.mts +0 -25
  44. package/dist/vue/emits.d.mts +0 -23
  45. package/dist/vue/event-listener.d.mts +0 -16
  46. package/dist/vue/expose.d.mts +0 -11
  47. package/dist/vue/func.d.mts +0 -13
  48. package/dist/vue/index.d.mts +0 -15
  49. package/dist/vue/install.d.mts +0 -50
  50. package/dist/vue/now.d.mts +0 -13
  51. package/dist/vue/props.d.mts +0 -22
  52. package/dist/vue/render.d.mts +0 -11
  53. package/dist/vue/resize-observer.d.mts +0 -15
  54. package/dist/vue/slots.d.mts +0 -18
  55. package/dist/vue/window-size.d.mts +0 -16
  56. package/dist/vue/with.d.mts +0 -11
  57. package/docs/API.md +0 -155
  58. package/docs/API.zh-CN.md +0 -154
  59. package/docs/DEVELOPMENT_RELEASE.zh-CN.md +0 -65
  60. package/docs/RUNTIME_CONTRACT.md +0 -44
@@ -0,0 +1,2 @@
1
+ import { addCssUnit, serializeStyle } from "./style.mjs";
2
+ export { addCssUnit, serializeStyle };
@@ -1,4 +1,4 @@
1
- import { runtimeGlobals } from "../internal/runtime.mjs";
1
+ import { getRuntimeUni, runtimeGlobals } from "../internal/runtime.mjs";
2
2
  //#region src/env/index.ts
3
3
  /**
4
4
  * 延迟读取当前 User-Agent。
@@ -49,12 +49,12 @@ function isNode() {
49
49
  return typeof versions.node === "string";
50
50
  }
51
51
  /**
52
- * 判断当前运行时是否暴露 uni-app 的 `uni` 全局对象。
52
+ * 判断当前运行时是否暴露 uni-app 的 `uni` 运行时对象。
53
53
  *
54
- * @returns 全局属性存在且不为 `undefined` 时返回 `true`;不调用任何平台 API。
54
+ * @returns `uni` 标识符或兼容全局属性存在时返回 `true`;不调用任何平台 API。
55
55
  */
56
56
  function isUniApp() {
57
- return runtimeGlobals.uni !== void 0;
57
+ return getRuntimeUni() !== void 0;
58
58
  }
59
59
  /**
60
60
  * 判断当前运行时是否具备本库完整加密 API 所需的 Web Crypto 能力。
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/env/index.ts"],"sourcesContent":["import { runtimeGlobals } from \"../internal/runtime\";\n\n/** 可识别的主要 JavaScript 运行环境。 */\nexport type RuntimeKind = \"browser\" | \"node\" | \"unknown\" | \"worker\";\n\n/**\n * 延迟读取当前 User-Agent。\n *\n * @returns Navigator 不存在或字段类型异常时返回空字符串。\n */\nconst currentUserAgent = (): string => {\n\tconst userAgent: unknown = runtimeGlobals.navigator?.userAgent;\n\treturn typeof userAgent === \"string\" ? userAgent : \"\";\n};\n/**\n * 延迟读取当前设备报告的最大触点数。\n *\n * @returns Navigator 不存在或字段类型异常时返回 `0`。\n */\nconst currentTouchPoints = (): number => {\n\tconst maxTouchPoints: unknown = runtimeGlobals.navigator?.maxTouchPoints;\n\treturn typeof maxTouchPoints === \"number\" ? maxTouchPoints : 0;\n};\n\n/**\n * 判断当前运行时是否具有浏览器 `window` 与 `document`。\n *\n * @returns 两项能力均存在时返回 `true`;不读取 DOM 内容。\n */\nexport function isBrowser(): boolean {\n\treturn runtimeGlobals.window?.document !== undefined;\n}\n\n/**\n * 判断当前运行时是否像 Web Worker 且不是 Window。\n *\n * @remarks 经典、模块、Shared 与 Service Worker 全局通常都暴露 `importScripts`;模块\n * Worker 中调用它可能抛错,本检测只检查能力存在,不会执行。\n * @returns 具有 `importScripts` 且不是浏览器 Window 时返回 `true`。\n */\nexport function isWebWorker(): boolean {\n\treturn !isBrowser() && typeof runtimeGlobals.importScripts === \"function\";\n}\n\n/**\n * 判断当前运行时是否暴露 Node.js 版本标记。\n *\n * @returns `process.versions.node` 为字符串时返回 `true`。\n */\nexport function isNode(): boolean {\n\tconst process = runtimeGlobals.process;\n\tif ((typeof process !== \"object\" && typeof process !== \"function\") || process === null) return false;\n\tconst versions: unknown = (process as { versions?: unknown }).versions;\n\tif ((typeof versions !== \"object\" && typeof versions !== \"function\") || versions === null) return false;\n\treturn typeof (versions as { node?: unknown }).node === \"string\";\n}\n\n/**\n * 判断当前运行时是否暴露 uni-app 的 `uni` 全局对象。\n *\n * @returns 全局属性存在且不为 `undefined` 时返回 `true`;不调用任何平台 API。\n */\nexport function isUniApp(): boolean {\n\treturn runtimeGlobals.uni !== undefined;\n}\n\n/**\n * 判断当前运行时是否具备本库完整加密 API 所需的 Web Crypto 能力。\n *\n * @remarks 普通随机数、随机字符串和 UUID 在缺少 Web Crypto 时可以回退到 `Math.random()`,但本函数\n * 仍会返回 `false`,因为摘要、PBKDF2、AES-GCM、RSA 与 ECC 需要完整的 Web Crypto 能力。\n * @returns 同时提供本库 Web Crypto 功能所需方法时返回 `true`。\n */\nexport function hasWebCrypto(): boolean {\n\tconst crypto = runtimeGlobals.crypto;\n\tconst subtle = crypto?.subtle;\n\treturn (\n\t\ttypeof crypto?.getRandomValues === \"function\" &&\n\t\ttypeof subtle?.decrypt === \"function\" &&\n\t\ttypeof subtle.deriveBits === \"function\" &&\n\t\ttypeof subtle.deriveKey === \"function\" &&\n\t\ttypeof subtle.digest === \"function\" &&\n\t\ttypeof subtle.encrypt === \"function\" &&\n\t\ttypeof subtle.exportKey === \"function\" &&\n\t\ttypeof subtle.generateKey === \"function\" &&\n\t\ttypeof subtle.importKey === \"function\" &&\n\t\ttypeof subtle.sign === \"function\" &&\n\t\ttypeof subtle.verify === \"function\"\n\t);\n}\n\n/**\n * 返回当前主要运行环境。\n *\n * @remarks 在使用 DOM 模拟器的 Node.js 进程中优先报告 `browser`,因为可观察能力比宿主进程名称更有用。\n * @returns `browser`、`worker`、`node` 或无法识别时的 `unknown`。\n */\nexport function detectRuntime(): RuntimeKind {\n\tif (isBrowser()) return \"browser\";\n\tif (isWebWorker()) return \"worker\";\n\tif (isNode()) return \"node\";\n\treturn \"unknown\";\n}\n\n/**\n * 基于 User-Agent 启发式判断手机设备。\n *\n * @param userAgent - 默认读取当前 `navigator.userAgent`;平台对象不存在时使用空字符串。\n * @remarks User-Agent 可以被伪造,不得用于鉴权、安全策略或永久功能分流。\n * @returns 命中手机特征时返回 `true`。\n */\nexport function isMobileUserAgent(userAgent: string = currentUserAgent()): boolean {\n\treturn /Mobile|iPhone|Android.*Mobile|Windows Phone/iu.test(userAgent);\n}\n\n/**\n * 基于 User-Agent 与触点数量启发式判断平板设备。\n *\n * @param userAgent - 默认读取当前 User-Agent。\n * @param maxTouchPoints - 用于识别桌面 User-Agent 模式下的 iPadOS,默认读取当前触点数。\n * @returns 命中平板特征时返回 `true`。\n */\nexport function isTabletUserAgent(userAgent: string = currentUserAgent(), maxTouchPoints: number = currentTouchPoints()): boolean {\n\treturn /iPad|Android(?!.*Mobile)|Tablet/iu.test(userAgent) || (/Macintosh/iu.test(userAgent) && maxTouchPoints > 1);\n}\n"],"mappings":";;;;;;;AAUA,MAAM,yBAAiC;CACtC,MAAM,YAAqB,eAAe,WAAW;CACrD,OAAO,OAAO,cAAc,WAAW,YAAY;AACpD;;;;;;AAMA,MAAM,2BAAmC;CACxC,MAAM,iBAA0B,eAAe,WAAW;CAC1D,OAAO,OAAO,mBAAmB,WAAW,iBAAiB;AAC9D;;;;;;AAOA,SAAgB,YAAqB;CACpC,OAAO,eAAe,QAAQ,aAAa,KAAA;AAC5C;;;;;;;;AASA,SAAgB,cAAuB;CACtC,OAAO,CAAC,UAAU,KAAK,OAAO,eAAe,kBAAkB;AAChE;;;;;;AAOA,SAAgB,SAAkB;CACjC,MAAM,UAAU,eAAe;CAC/B,IAAK,OAAO,YAAY,YAAY,OAAO,YAAY,cAAe,YAAY,MAAM,OAAO;CAC/F,MAAM,WAAqB,QAAmC;CAC9D,IAAK,OAAO,aAAa,YAAY,OAAO,aAAa,cAAe,aAAa,MAAM,OAAO;CAClG,OAAO,OAAQ,SAAgC,SAAS;AACzD;;;;;;AAOA,SAAgB,WAAoB;CACnC,OAAO,eAAe,QAAQ,KAAA;AAC/B;;;;;;;;AASA,SAAgB,eAAwB;CACvC,MAAM,SAAS,eAAe;CAC9B,MAAM,SAAS,QAAQ;CACvB,OACC,OAAO,QAAQ,oBAAoB,cACnC,OAAO,QAAQ,YAAY,cAC3B,OAAO,OAAO,eAAe,cAC7B,OAAO,OAAO,cAAc,cAC5B,OAAO,OAAO,WAAW,cACzB,OAAO,OAAO,YAAY,cAC1B,OAAO,OAAO,cAAc,cAC5B,OAAO,OAAO,gBAAgB,cAC9B,OAAO,OAAO,cAAc,cAC5B,OAAO,OAAO,SAAS,cACvB,OAAO,OAAO,WAAW;AAE3B;;;;;;;AAQA,SAAgB,gBAA6B;CAC5C,IAAI,UAAU,GAAG,OAAO;CACxB,IAAI,YAAY,GAAG,OAAO;CAC1B,IAAI,OAAO,GAAG,OAAO;CACrB,OAAO;AACR;;;;;;;;AASA,SAAgB,kBAAkB,YAAoB,iBAAiB,GAAY;CAClF,OAAO,gDAAgD,KAAK,SAAS;AACtE;;;;;;;;AASA,SAAgB,kBAAkB,YAAoB,iBAAiB,GAAG,iBAAyB,mBAAmB,GAAY;CACjI,OAAO,oCAAoC,KAAK,SAAS,KAAM,cAAc,KAAK,SAAS,KAAK,iBAAiB;AAClH"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/env/index.ts"],"sourcesContent":["import { getRuntimeUni, runtimeGlobals } from \"../internal/runtime\";\n\n/** 可识别的主要 JavaScript 运行环境。 */\nexport type RuntimeKind = \"browser\" | \"node\" | \"unknown\" | \"worker\";\n\n/**\n * 延迟读取当前 User-Agent。\n *\n * @returns Navigator 不存在或字段类型异常时返回空字符串。\n */\nconst currentUserAgent = (): string => {\n\tconst userAgent: unknown = runtimeGlobals.navigator?.userAgent;\n\treturn typeof userAgent === \"string\" ? userAgent : \"\";\n};\n/**\n * 延迟读取当前设备报告的最大触点数。\n *\n * @returns Navigator 不存在或字段类型异常时返回 `0`。\n */\nconst currentTouchPoints = (): number => {\n\tconst maxTouchPoints: unknown = runtimeGlobals.navigator?.maxTouchPoints;\n\treturn typeof maxTouchPoints === \"number\" ? maxTouchPoints : 0;\n};\n\n/**\n * 判断当前运行时是否具有浏览器 `window` 与 `document`。\n *\n * @returns 两项能力均存在时返回 `true`;不读取 DOM 内容。\n */\nexport function isBrowser(): boolean {\n\treturn runtimeGlobals.window?.document !== undefined;\n}\n\n/**\n * 判断当前运行时是否像 Web Worker 且不是 Window。\n *\n * @remarks 经典、模块、Shared 与 Service Worker 全局通常都暴露 `importScripts`;模块\n * Worker 中调用它可能抛错,本检测只检查能力存在,不会执行。\n * @returns 具有 `importScripts` 且不是浏览器 Window 时返回 `true`。\n */\nexport function isWebWorker(): boolean {\n\treturn !isBrowser() && typeof runtimeGlobals.importScripts === \"function\";\n}\n\n/**\n * 判断当前运行时是否暴露 Node.js 版本标记。\n *\n * @returns `process.versions.node` 为字符串时返回 `true`。\n */\nexport function isNode(): boolean {\n\tconst process = runtimeGlobals.process;\n\tif ((typeof process !== \"object\" && typeof process !== \"function\") || process === null) return false;\n\tconst versions: unknown = (process as { versions?: unknown }).versions;\n\tif ((typeof versions !== \"object\" && typeof versions !== \"function\") || versions === null) return false;\n\treturn typeof (versions as { node?: unknown }).node === \"string\";\n}\n\n/**\n * 判断当前运行时是否暴露 uni-app 的 `uni` 运行时对象。\n *\n * @returns `uni` 标识符或兼容全局属性存在时返回 `true`;不调用任何平台 API。\n */\nexport function isUniApp(): boolean {\n\treturn getRuntimeUni() !== undefined;\n}\n\n/**\n * 判断当前运行时是否具备本库完整加密 API 所需的 Web Crypto 能力。\n *\n * @remarks 普通随机数、随机字符串和 UUID 在缺少 Web Crypto 时可以回退到 `Math.random()`,但本函数\n * 仍会返回 `false`,因为摘要、PBKDF2、AES-GCM、RSA 与 ECC 需要完整的 Web Crypto 能力。\n * @returns 同时提供本库 Web Crypto 功能所需方法时返回 `true`。\n */\nexport function hasWebCrypto(): boolean {\n\tconst crypto = runtimeGlobals.crypto;\n\tconst subtle = crypto?.subtle;\n\treturn (\n\t\ttypeof crypto?.getRandomValues === \"function\" &&\n\t\ttypeof subtle?.decrypt === \"function\" &&\n\t\ttypeof subtle.deriveBits === \"function\" &&\n\t\ttypeof subtle.deriveKey === \"function\" &&\n\t\ttypeof subtle.digest === \"function\" &&\n\t\ttypeof subtle.encrypt === \"function\" &&\n\t\ttypeof subtle.exportKey === \"function\" &&\n\t\ttypeof subtle.generateKey === \"function\" &&\n\t\ttypeof subtle.importKey === \"function\" &&\n\t\ttypeof subtle.sign === \"function\" &&\n\t\ttypeof subtle.verify === \"function\"\n\t);\n}\n\n/**\n * 返回当前主要运行环境。\n *\n * @remarks 在使用 DOM 模拟器的 Node.js 进程中优先报告 `browser`,因为可观察能力比宿主进程名称更有用。\n * @returns `browser`、`worker`、`node` 或无法识别时的 `unknown`。\n */\nexport function detectRuntime(): RuntimeKind {\n\tif (isBrowser()) return \"browser\";\n\tif (isWebWorker()) return \"worker\";\n\tif (isNode()) return \"node\";\n\treturn \"unknown\";\n}\n\n/**\n * 基于 User-Agent 启发式判断手机设备。\n *\n * @param userAgent - 默认读取当前 `navigator.userAgent`;平台对象不存在时使用空字符串。\n * @remarks User-Agent 可以被伪造,不得用于鉴权、安全策略或永久功能分流。\n * @returns 命中手机特征时返回 `true`。\n */\nexport function isMobileUserAgent(userAgent: string = currentUserAgent()): boolean {\n\treturn /Mobile|iPhone|Android.*Mobile|Windows Phone/iu.test(userAgent);\n}\n\n/**\n * 基于 User-Agent 与触点数量启发式判断平板设备。\n *\n * @param userAgent - 默认读取当前 User-Agent。\n * @param maxTouchPoints - 用于识别桌面 User-Agent 模式下的 iPadOS,默认读取当前触点数。\n * @returns 命中平板特征时返回 `true`。\n */\nexport function isTabletUserAgent(userAgent: string = currentUserAgent(), maxTouchPoints: number = currentTouchPoints()): boolean {\n\treturn /iPad|Android(?!.*Mobile)|Tablet/iu.test(userAgent) || (/Macintosh/iu.test(userAgent) && maxTouchPoints > 1);\n}\n"],"mappings":";;;;;;;AAUA,MAAM,yBAAiC;CACtC,MAAM,YAAqB,eAAe,WAAW;CACrD,OAAO,OAAO,cAAc,WAAW,YAAY;AACpD;;;;;;AAMA,MAAM,2BAAmC;CACxC,MAAM,iBAA0B,eAAe,WAAW;CAC1D,OAAO,OAAO,mBAAmB,WAAW,iBAAiB;AAC9D;;;;;;AAOA,SAAgB,YAAqB;CACpC,OAAO,eAAe,QAAQ,aAAa,KAAA;AAC5C;;;;;;;;AASA,SAAgB,cAAuB;CACtC,OAAO,CAAC,UAAU,KAAK,OAAO,eAAe,kBAAkB;AAChE;;;;;;AAOA,SAAgB,SAAkB;CACjC,MAAM,UAAU,eAAe;CAC/B,IAAK,OAAO,YAAY,YAAY,OAAO,YAAY,cAAe,YAAY,MAAM,OAAO;CAC/F,MAAM,WAAqB,QAAmC;CAC9D,IAAK,OAAO,aAAa,YAAY,OAAO,aAAa,cAAe,aAAa,MAAM,OAAO;CAClG,OAAO,OAAQ,SAAgC,SAAS;AACzD;;;;;;AAOA,SAAgB,WAAoB;CACnC,OAAO,cAAc,MAAM,KAAA;AAC5B;;;;;;;;AASA,SAAgB,eAAwB;CACvC,MAAM,SAAS,eAAe;CAC9B,MAAM,SAAS,QAAQ;CACvB,OACC,OAAO,QAAQ,oBAAoB,cACnC,OAAO,QAAQ,YAAY,cAC3B,OAAO,OAAO,eAAe,cAC7B,OAAO,OAAO,cAAc,cAC5B,OAAO,OAAO,WAAW,cACzB,OAAO,OAAO,YAAY,cAC1B,OAAO,OAAO,cAAc,cAC5B,OAAO,OAAO,gBAAgB,cAC9B,OAAO,OAAO,cAAc,cAC5B,OAAO,OAAO,SAAS,cACvB,OAAO,OAAO,WAAW;AAE3B;;;;;;;AAQA,SAAgB,gBAA6B;CAC5C,IAAI,UAAU,GAAG,OAAO;CACxB,IAAI,YAAY,GAAG,OAAO;CAC1B,IAAI,OAAO,GAAG,OAAO;CACrB,OAAO;AACR;;;;;;;;AASA,SAAgB,kBAAkB,YAAoB,iBAAiB,GAAY;CAClF,OAAO,gDAAgD,KAAK,SAAS;AACtE;;;;;;;;AASA,SAAgB,kBAAkB,YAAoB,iBAAiB,GAAG,iBAAyB,mBAAmB,GAAY;CACjI,OAAO,oCAAoC,KAAK,SAAS,KAAM,cAAc,KAAK,SAAS,KAAK,iBAAiB;AAClH"}