@fast-china/utils 1.0.38 → 2.0.2

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 (237) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/CONTRIBUTING.md +87 -0
  3. package/README.md +109 -50
  4. package/README.zh.md +109 -50
  5. package/SECURITY.md +46 -0
  6. package/dist/array/index.d.mts +87 -0
  7. package/dist/array/index.mjs +161 -0
  8. package/dist/array/index.mjs.map +1 -0
  9. package/dist/async/index.d.mts +146 -0
  10. package/dist/async/index.mjs +336 -0
  11. package/dist/async/index.mjs.map +1 -0
  12. package/dist/base64/index.d.mts +105 -0
  13. package/dist/base64/index.mjs +427 -0
  14. package/dist/base64/index.mjs.map +1 -0
  15. package/dist/color/index.d.mts +90 -0
  16. package/dist/color/index.mjs +178 -0
  17. package/dist/color/index.mjs.map +1 -0
  18. package/dist/crypto/index.d.mts +326 -0
  19. package/dist/crypto/index.mjs +843 -0
  20. package/dist/crypto/index.mjs.map +1 -0
  21. package/dist/date/index.d.mts +191 -0
  22. package/dist/date/index.mjs +383 -0
  23. package/dist/date/index.mjs.map +1 -0
  24. package/dist/dom/style.d.mts +30 -0
  25. package/dist/dom/style.mjs +74 -0
  26. package/dist/dom/style.mjs.map +1 -0
  27. package/dist/env/index.d.mts +63 -0
  28. package/dist/env/index.mjs +97 -0
  29. package/dist/env/index.mjs.map +1 -0
  30. package/dist/identity/index.d.mts +78 -0
  31. package/dist/identity/index.mjs +87 -0
  32. package/dist/identity/index.mjs.map +1 -0
  33. package/dist/index.d.mts +24 -0
  34. package/dist/index.global.min.js +3 -2
  35. package/dist/index.global.min.js.map +1 -1
  36. package/dist/index.mjs +23 -0
  37. package/dist/internal/text.mjs +36 -0
  38. package/dist/internal/text.mjs.map +1 -0
  39. package/dist/logger/index.d.mts +87 -0
  40. package/dist/logger/index.mjs +124 -0
  41. package/dist/logger/index.mjs.map +1 -0
  42. package/dist/number/index.d.mts +89 -0
  43. package/dist/number/index.mjs +215 -0
  44. package/dist/number/index.mjs.map +1 -0
  45. package/dist/object/index.d.mts +76 -0
  46. package/dist/object/index.mjs +134 -0
  47. package/dist/object/index.mjs.map +1 -0
  48. package/dist/storage/index.d.mts +107 -0
  49. package/dist/storage/index.mjs +327 -0
  50. package/dist/storage/index.mjs.map +1 -0
  51. package/dist/string/index.d.mts +130 -0
  52. package/dist/string/index.mjs +275 -0
  53. package/dist/string/index.mjs.map +1 -0
  54. package/dist/vue/emits.d.mts +24 -0
  55. package/dist/vue/emits.mjs +47 -0
  56. package/dist/vue/emits.mjs.map +1 -0
  57. package/dist/vue/expose.d.mts +12 -0
  58. package/dist/vue/expose.mjs +16 -0
  59. package/dist/vue/expose.mjs.map +1 -0
  60. package/dist/vue/func.d.mts +14 -0
  61. package/dist/vue/func.mjs +16 -0
  62. package/dist/vue/func.mjs.map +1 -0
  63. package/dist/vue/index.d.mts +9 -0
  64. package/dist/vue/install.d.mts +51 -0
  65. package/dist/vue/install.mjs +123 -0
  66. package/dist/vue/install.mjs.map +1 -0
  67. package/dist/vue/props.d.mts +23 -0
  68. package/dist/vue/props.mjs +41 -0
  69. package/dist/vue/props.mjs.map +1 -0
  70. package/dist/vue/render.d.mts +12 -0
  71. package/dist/vue/render.mjs +17 -0
  72. package/dist/vue/render.mjs.map +1 -0
  73. package/dist/vue/slots.d.mts +19 -0
  74. package/dist/vue/slots.mjs +13 -0
  75. package/dist/vue/slots.mjs.map +1 -0
  76. package/dist/vue/with.d.mts +12 -0
  77. package/dist/vue/with.mjs +15 -0
  78. package/dist/vue/with.mjs.map +1 -0
  79. package/docs/API.md +112 -0
  80. package/docs/API.zh-CN.md +112 -0
  81. package/docs/DEVELOPMENT_RELEASE.zh-CN.md +65 -0
  82. package/docs/RUNTIME_CONTRACT.md +37 -0
  83. package/package.json +63 -73
  84. package/dist/index.global.js +0 -14500
  85. package/dist/index.global.js.map +0 -1
  86. package/es/array/index.d.ts +0 -19
  87. package/es/array/index.mjs +0 -2
  88. package/es/array/index.mjs.map +0 -1
  89. package/es/base64/index.d.ts +0 -21
  90. package/es/base64/index.mjs +0 -2
  91. package/es/base64/index.mjs.map +0 -1
  92. package/es/click/index.d.ts +0 -33
  93. package/es/click/index.mjs +0 -2
  94. package/es/click/index.mjs.map +0 -1
  95. package/es/color/index.d.ts +0 -33
  96. package/es/color/index.mjs +0 -2
  97. package/es/color/index.mjs.map +0 -1
  98. package/es/console/index.d.ts +0 -31
  99. package/es/console/index.mjs +0 -2
  100. package/es/console/index.mjs.map +0 -1
  101. package/es/crypto/index.d.ts +0 -46
  102. package/es/crypto/index.mjs +0 -2
  103. package/es/crypto/index.mjs.map +0 -1
  104. package/es/date/index.d.ts +0 -44
  105. package/es/date/index.mjs +0 -2
  106. package/es/date/index.mjs.map +0 -1
  107. package/es/dom/index.d.ts +0 -1
  108. package/es/dom/index.mjs +0 -2
  109. package/es/dom/index.mjs.map +0 -1
  110. package/es/dom/style.d.ts +0 -12
  111. package/es/dom/style.mjs +0 -2
  112. package/es/dom/style.mjs.map +0 -1
  113. package/es/env/index.d.ts +0 -25
  114. package/es/env/index.mjs +0 -2
  115. package/es/env/index.mjs.map +0 -1
  116. package/es/error/index.d.ts +0 -3
  117. package/es/error/index.mjs +0 -2
  118. package/es/error/index.mjs.map +0 -1
  119. package/es/identity/index.d.ts +0 -14
  120. package/es/identity/index.mjs +0 -2
  121. package/es/identity/index.mjs.map +0 -1
  122. package/es/index.d.ts +0 -15
  123. package/es/index.es.d.ts +0 -2
  124. package/es/index.mjs +0 -2
  125. package/es/index.mjs.map +0 -1
  126. package/es/object/index.d.ts +0 -13
  127. package/es/object/index.mjs +0 -2
  128. package/es/object/index.mjs.map +0 -1
  129. package/es/storage/index.d.ts +0 -96
  130. package/es/storage/index.mjs +0 -2
  131. package/es/storage/index.mjs.map +0 -1
  132. package/es/string/index.d.ts +0 -114
  133. package/es/string/index.mjs +0 -2
  134. package/es/string/index.mjs.map +0 -1
  135. package/es/vue/emits.d.ts +0 -8
  136. package/es/vue/emits.mjs +0 -2
  137. package/es/vue/emits.mjs.map +0 -1
  138. package/es/vue/expose.d.ts +0 -4
  139. package/es/vue/expose.mjs +0 -2
  140. package/es/vue/expose.mjs.map +0 -1
  141. package/es/vue/func.d.ts +0 -6
  142. package/es/vue/func.mjs +0 -2
  143. package/es/vue/func.mjs.map +0 -1
  144. package/es/vue/index.d.ts +0 -8
  145. package/es/vue/index.mjs +0 -2
  146. package/es/vue/index.mjs.map +0 -1
  147. package/es/vue/install.d.ts +0 -5
  148. package/es/vue/install.mjs +0 -2
  149. package/es/vue/install.mjs.map +0 -1
  150. package/es/vue/props.d.ts +0 -9
  151. package/es/vue/props.mjs +0 -2
  152. package/es/vue/props.mjs.map +0 -1
  153. package/es/vue/slots.d.ts +0 -11
  154. package/es/vue/slots.mjs +0 -2
  155. package/es/vue/slots.mjs.map +0 -1
  156. package/es/vue/useRender.d.ts +0 -6
  157. package/es/vue/useRender.mjs +0 -2
  158. package/es/vue/useRender.mjs.map +0 -1
  159. package/es/vue/with.d.ts +0 -5
  160. package/es/vue/with.mjs +0 -2
  161. package/es/vue/with.mjs.map +0 -1
  162. package/lib/array/index.d.ts +0 -19
  163. package/lib/array/index.js +0 -2
  164. package/lib/array/index.js.map +0 -1
  165. package/lib/base64/index.d.ts +0 -21
  166. package/lib/base64/index.js +0 -2
  167. package/lib/base64/index.js.map +0 -1
  168. package/lib/click/index.d.ts +0 -33
  169. package/lib/click/index.js +0 -2
  170. package/lib/click/index.js.map +0 -1
  171. package/lib/color/index.d.ts +0 -33
  172. package/lib/color/index.js +0 -2
  173. package/lib/color/index.js.map +0 -1
  174. package/lib/console/index.d.ts +0 -31
  175. package/lib/console/index.js +0 -2
  176. package/lib/console/index.js.map +0 -1
  177. package/lib/crypto/index.d.ts +0 -46
  178. package/lib/crypto/index.js +0 -2
  179. package/lib/crypto/index.js.map +0 -1
  180. package/lib/date/index.d.ts +0 -44
  181. package/lib/date/index.js +0 -2
  182. package/lib/date/index.js.map +0 -1
  183. package/lib/dom/index.d.ts +0 -1
  184. package/lib/dom/index.js +0 -2
  185. package/lib/dom/index.js.map +0 -1
  186. package/lib/dom/style.d.ts +0 -12
  187. package/lib/dom/style.js +0 -2
  188. package/lib/dom/style.js.map +0 -1
  189. package/lib/env/index.d.ts +0 -25
  190. package/lib/env/index.js +0 -2
  191. package/lib/env/index.js.map +0 -1
  192. package/lib/error/index.d.ts +0 -3
  193. package/lib/error/index.js +0 -2
  194. package/lib/error/index.js.map +0 -1
  195. package/lib/identity/index.d.ts +0 -14
  196. package/lib/identity/index.js +0 -2
  197. package/lib/identity/index.js.map +0 -1
  198. package/lib/index.d.ts +0 -15
  199. package/lib/index.es.d.ts +0 -2
  200. package/lib/index.js +0 -2
  201. package/lib/index.js.map +0 -1
  202. package/lib/object/index.d.ts +0 -13
  203. package/lib/object/index.js +0 -2
  204. package/lib/object/index.js.map +0 -1
  205. package/lib/storage/index.d.ts +0 -96
  206. package/lib/storage/index.js +0 -2
  207. package/lib/storage/index.js.map +0 -1
  208. package/lib/string/index.d.ts +0 -114
  209. package/lib/string/index.js +0 -2
  210. package/lib/string/index.js.map +0 -1
  211. package/lib/vue/emits.d.ts +0 -8
  212. package/lib/vue/emits.js +0 -2
  213. package/lib/vue/emits.js.map +0 -1
  214. package/lib/vue/expose.d.ts +0 -4
  215. package/lib/vue/expose.js +0 -2
  216. package/lib/vue/expose.js.map +0 -1
  217. package/lib/vue/func.d.ts +0 -6
  218. package/lib/vue/func.js +0 -2
  219. package/lib/vue/func.js.map +0 -1
  220. package/lib/vue/index.d.ts +0 -8
  221. package/lib/vue/index.js +0 -2
  222. package/lib/vue/index.js.map +0 -1
  223. package/lib/vue/install.d.ts +0 -5
  224. package/lib/vue/install.js +0 -2
  225. package/lib/vue/install.js.map +0 -1
  226. package/lib/vue/props.d.ts +0 -9
  227. package/lib/vue/props.js +0 -2
  228. package/lib/vue/props.js.map +0 -1
  229. package/lib/vue/slots.d.ts +0 -11
  230. package/lib/vue/slots.js +0 -2
  231. package/lib/vue/slots.js.map +0 -1
  232. package/lib/vue/useRender.d.ts +0 -6
  233. package/lib/vue/useRender.js +0 -2
  234. package/lib/vue/useRender.js.map +0 -1
  235. package/lib/vue/with.d.ts +0 -5
  236. package/lib/vue/with.js +0 -2
  237. package/lib/vue/with.js.map +0 -1
@@ -0,0 +1,97 @@
1
+ //#region src/env/index.ts
2
+ const runtimeGlobals = globalThis;
3
+ /**
4
+ * 延迟读取当前 User-Agent。
5
+ *
6
+ * @returns Navigator 不存在或字段类型异常时返回空字符串。
7
+ */
8
+ const currentUserAgent = () => typeof runtimeGlobals.navigator?.userAgent === "string" ? runtimeGlobals.navigator.userAgent : "";
9
+ /**
10
+ * 延迟读取当前设备报告的最大触点数。
11
+ *
12
+ * @returns Navigator 不存在或字段类型异常时返回 `0`。
13
+ */
14
+ const currentTouchPoints = () => typeof runtimeGlobals.navigator?.maxTouchPoints === "number" ? runtimeGlobals.navigator.maxTouchPoints : 0;
15
+ /**
16
+ * 判断当前运行时是否具有浏览器 `window` 与 `document`。
17
+ *
18
+ * @returns 两项能力均存在时返回 `true`;不读取 DOM 内容。
19
+ */
20
+ function isBrowser() {
21
+ const window = runtimeGlobals.window;
22
+ return window !== void 0 && window !== null && window.document !== null && typeof window.document === "object";
23
+ }
24
+ /**
25
+ * 判断当前运行时是否像 Web Worker 且不是 Window。
26
+ *
27
+ * @remarks 经典、模块、Shared 与 Service Worker 全局通常都暴露 `importScripts`;模块
28
+ * Worker 中调用它可能抛错,本检测只检查能力存在,不会执行。
29
+ * @returns 具有 `importScripts` 且不是浏览器 Window 时返回 `true`。
30
+ */
31
+ function isWebWorker() {
32
+ return !isBrowser() && typeof runtimeGlobals.importScripts === "function";
33
+ }
34
+ /**
35
+ * 判断当前运行时是否暴露 Node.js 版本标记。
36
+ *
37
+ * @returns `process.versions.node` 为字符串时返回 `true`。
38
+ */
39
+ function isNode() {
40
+ return typeof runtimeGlobals.process?.versions?.node === "string";
41
+ }
42
+ /**
43
+ * 判断当前运行时是否暴露 uni-app 的 `uni` 全局对象。
44
+ *
45
+ * @returns 全局属性存在且不为 `undefined` 时返回 `true`;不调用任何平台 API。
46
+ */
47
+ function isUniApp() {
48
+ return runtimeGlobals.uni !== void 0;
49
+ }
50
+ /**
51
+ * 判断当前运行时是否具备本库完整加密 API 所需的 Web Crypto 能力。
52
+ *
53
+ * @remarks 只具有 `getRandomValues` 的平台仍可调用随机数与随机字符串 API,但本函数
54
+ * 会返回 `false`,因为摘要、PBKDF2、AES-GCM、RSA 与 ECC 还需要完整的 `SubtleCrypto` 方法集。
55
+ * @returns 同时提供本库 Web Crypto 功能所需方法时返回 `true`。
56
+ */
57
+ function hasWebCrypto() {
58
+ const crypto = runtimeGlobals.crypto;
59
+ const subtle = crypto?.subtle;
60
+ return typeof crypto?.getRandomValues === "function" && typeof subtle?.decrypt === "function" && typeof subtle.deriveBits === "function" && typeof subtle.deriveKey === "function" && typeof subtle.digest === "function" && typeof subtle.encrypt === "function" && typeof subtle.exportKey === "function" && typeof subtle.generateKey === "function" && typeof subtle.importKey === "function" && typeof subtle.sign === "function" && typeof subtle.verify === "function";
61
+ }
62
+ /**
63
+ * 返回当前主要运行环境。
64
+ *
65
+ * @remarks 在使用 DOM 模拟器的 Node.js 进程中优先报告 `browser`,因为可观察能力比宿主进程名称更有用。
66
+ * @returns `browser`、`worker`、`node` 或无法识别时的 `unknown`。
67
+ */
68
+ function detectRuntime() {
69
+ if (isBrowser()) return "browser";
70
+ if (isWebWorker()) return "worker";
71
+ if (isNode()) return "node";
72
+ return "unknown";
73
+ }
74
+ /**
75
+ * 基于 User-Agent 启发式判断手机设备。
76
+ *
77
+ * @param userAgent - 默认读取当前 `navigator.userAgent`;平台对象不存在时使用空字符串。
78
+ * @remarks User-Agent 可以被伪造,不得用于鉴权、安全策略或永久功能分流。
79
+ * @returns 命中手机特征时返回 `true`。
80
+ */
81
+ function isMobileUserAgent(userAgent = currentUserAgent()) {
82
+ return /Mobile|iPhone|Android.*Mobile|Windows Phone/iu.test(userAgent);
83
+ }
84
+ /**
85
+ * 基于 User-Agent 与触点数量启发式判断平板设备。
86
+ *
87
+ * @param userAgent - 默认读取当前 User-Agent。
88
+ * @param maxTouchPoints - 用于识别桌面 User-Agent 模式下的 iPadOS,默认读取当前触点数。
89
+ * @returns 命中平板特征时返回 `true`。
90
+ */
91
+ function isTabletUserAgent(userAgent = currentUserAgent(), maxTouchPoints = currentTouchPoints()) {
92
+ return /iPad|Android(?!.*Mobile)|Tablet/iu.test(userAgent) || /Macintosh/iu.test(userAgent) && maxTouchPoints > 1;
93
+ }
94
+ //#endregion
95
+ export { detectRuntime, hasWebCrypto, isBrowser, isMobileUserAgent, isNode, isTabletUserAgent, isUniApp, isWebWorker };
96
+
97
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/env/index.ts"],"sourcesContent":["/** 可识别的主要 JavaScript 运行环境。 */\nexport type RuntimeKind = \"browser\" | \"node\" | \"unknown\" | \"worker\";\n\n/** 环境检测需要逐项确认的 SubtleCrypto 最小能力集合。 */\ntype RuntimeSubtleCrypto = Partial<\n\tPick<SubtleCrypto, \"decrypt\" | \"deriveBits\" | \"deriveKey\" | \"digest\" | \"encrypt\" | \"exportKey\" | \"generateKey\" | \"importKey\" | \"sign\" | \"verify\">\n>;\n\n/** 环境检测读取的 Web Crypto 最小视图。 */\ninterface RuntimeEnvironmentCrypto extends Partial<Pick<Crypto, \"getRandomValues\">> {\n\t/** 可选 SubtleCrypto 能力;只有所需方法全部存在时才视为完整 Web Crypto。 */\n\tsubtle?: RuntimeSubtleCrypto;\n}\n\n/** 环境检测读取的最小 Navigator 视图。 */\ninterface RuntimeNavigator {\n\t/** 平台报告的最大同时触点数;类型异常时按 `0` 处理。 */\n\tmaxTouchPoints?: unknown;\n\t/** 平台报告的 User-Agent;类型异常时按空字符串处理。 */\n\tuserAgent?: unknown;\n}\n\n/** 环境检测读取的最小 Node 进程视图。 */\ninterface RuntimeProcess {\n\t/** 可选运行时版本表。 */\n\tversions?: RuntimeVersions;\n}\n\n/** 环境检测读取的最小运行时版本表。 */\ninterface RuntimeVersions {\n\t/** Node.js 版本文本;存在字符串值时识别为 Node 环境。 */\n\tnode?: unknown;\n}\n\n/** 环境检测读取的最小 Window 视图。 */\ninterface RuntimeWindow {\n\t/** DOM 文档标记;只检查是否为非空对象。 */\n\tdocument?: unknown;\n}\n\n/** 可选平台全局对象的结构化视图,避免导入 Node 或 uni-app 全局类型。 */\ninterface RuntimeGlobals {\n\t/** 可选 Web Crypto 能力;所有方法都在调用前逐项检查,不因对象存在而假定完整实现。 */\n\tcrypto?: RuntimeEnvironmentCrypto;\n\t/** Web Worker 中通常存在的脚本导入函数;只检查其类型,不会在检测阶段调用。 */\n\timportScripts?: unknown;\n\t/** 浏览器或 WebView 暴露的最小 Navigator 字段;未知类型会被能力读取函数视为缺失。 */\n\tnavigator?: RuntimeNavigator;\n\t/** 工具或测试环境可能暴露的 Node 版本标记;仅用于检测,不代表 Node 属于应用运行时契约。 */\n\tprocess?: RuntimeProcess;\n\t/** uni-app 平台标记;Storage 会在调用 `configureStorage` 时读取并校验该全局对象。 */\n\tuni?: unknown;\n\t/** 浏览器 Window 的最小结构;`document` 只用于能力判定,不在模块导入阶段读取 DOM 内容。 */\n\twindow?: RuntimeWindow | null;\n}\n\nconst runtimeGlobals = globalThis as unknown as RuntimeGlobals;\n\n/**\n * 延迟读取当前 User-Agent。\n *\n * @returns Navigator 不存在或字段类型异常时返回空字符串。\n */\nconst currentUserAgent = (): string => (typeof runtimeGlobals.navigator?.userAgent === \"string\" ? runtimeGlobals.navigator.userAgent : \"\");\n/**\n * 延迟读取当前设备报告的最大触点数。\n *\n * @returns Navigator 不存在或字段类型异常时返回 `0`。\n */\nconst currentTouchPoints = (): number => (typeof runtimeGlobals.navigator?.maxTouchPoints === \"number\" ? runtimeGlobals.navigator.maxTouchPoints : 0);\n\n/**\n * 判断当前运行时是否具有浏览器 `window` 与 `document`。\n *\n * @returns 两项能力均存在时返回 `true`;不读取 DOM 内容。\n */\nexport function isBrowser(): boolean {\n\tconst window = runtimeGlobals.window;\n\treturn window !== undefined && window !== null && window.document !== null && typeof window.document === \"object\";\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\treturn typeof runtimeGlobals.process?.versions?.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 只具有 `getRandomValues` 的平台仍可调用随机数与随机字符串 API,但本函数\n * 会返回 `false`,因为摘要、PBKDF2、AES-GCM、RSA 与 ECC 还需要完整的 `SubtleCrypto` 方法集。\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":";AAwDA,MAAM,iBAAiB;;;;;;AAOvB,MAAM,yBAAkC,OAAO,eAAe,WAAW,cAAc,WAAW,eAAe,UAAU,YAAY;;;;;;AAMvI,MAAM,2BAAoC,OAAO,eAAe,WAAW,mBAAmB,WAAW,eAAe,UAAU,iBAAiB;;;;;;AAOnJ,SAAgB,YAAqB;CACpC,MAAM,SAAS,eAAe;CAC9B,OAAO,WAAW,KAAA,KAAa,WAAW,QAAQ,OAAO,aAAa,QAAQ,OAAO,OAAO,aAAa;AAC1G;;;;;;;;AASA,SAAgB,cAAuB;CACtC,OAAO,CAAC,UAAU,KAAK,OAAO,eAAe,kBAAkB;AAChE;;;;;;AAOA,SAAgB,SAAkB;CACjC,OAAO,OAAO,eAAe,SAAS,UAAU,SAAS;AAC1D;;;;;;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"}
@@ -0,0 +1,78 @@
1
+ //#region src/identity/index.d.ts
2
+ /** {@link configureInstallationIdentity} 接收的安装标识配置。 */
3
+ interface InstallationIdentityConfiguration {
4
+ /**
5
+ * `Local` 中使用的业务键,默认 `identity:installation-id`。
6
+ *
7
+ * @remarks 必须是无外围空白的非空字符串,并在首次访问 Identity API 前配置;物理键仍会叠加 Storage 全局前缀。
8
+ */
9
+ cacheKey?: string;
10
+ }
11
+ /** 浏览器或 uni-app 当前安装实例标识。 */
12
+ interface InstallationIdentity {
13
+ /**
14
+ * `Local` 中使用的业务键。
15
+ *
16
+ * @remarks 首次读取会锁定默认配置;之后不能再切换为其他业务键。
17
+ */
18
+ readonly cacheKey: string;
19
+ /**
20
+ * 当前内存中的安装标识;尚未取得标识或调用 {@link InstallationIdentity.clear clear} 后为空字符串。
21
+ *
22
+ * @remarks 直接赋值只改变内存,不会校验或持久化;通常应调用 {@link InstallationIdentity.getOrCreate getOrCreate}。
23
+ */
24
+ deviceId: string;
25
+ /**
26
+ * 删除当前 `cacheKey` 对应的持久化标识,并把 `deviceId` 重置为空字符串。
27
+ *
28
+ * @throws `Error` 当当前平台存储不可用。
29
+ */
30
+ clear: () => void;
31
+ /**
32
+ * 按“显式参数、当前内存、持久化值、安全生成值”的优先级取得安装标识。
33
+ *
34
+ * @param installationId - 可选 UUID v4;传入时覆盖内存值和当前持久化值。
35
+ * @returns 已校验并同时写入 `deviceId` 与 `Local` 的 UUID v4。
36
+ * @throws `TypeError` 当显式参数、内存值或持久化值不是 UUID v4。
37
+ * @throws `Error` 当当前平台存储不可用,或生成新值时平台缺少 Web Crypto。
38
+ */
39
+ getOrCreate: (installationId?: string) => string;
40
+ /**
41
+ * 读取并校验当前 `cacheKey` 对应的持久化标识。
42
+ *
43
+ * @remarks 该方法不修改 `deviceId`,只负责读取;过期记录由 Storage 视为缺失。
44
+ * @returns 已持久化的 UUID v4;键缺失或过期时返回 `undefined`。
45
+ * @throws `TypeError` 当持久化值不是字符串或不是 UUID v4。
46
+ * @throws `Error` 当当前平台存储不可用。
47
+ */
48
+ read: () => string | undefined;
49
+ }
50
+ /**
51
+ * 在应用入口配置安装标识使用的 Storage 业务键。
52
+ *
53
+ * @remarks 必须在首次读取 `installationIdentity.cacheKey` 或调用其他安装标识 API 前执行。相同配置
54
+ * 可以幂等重复调用;切换到不同键会抛错,避免同一页面产生分裂状态。
55
+ * @param options - 安装标识配置;省略 `cacheKey` 时使用 `identity:installation-id`。
56
+ * @throws `TypeError` 当 `cacheKey` 不是非空字符串或包含外围空白。
57
+ * @throws `Error` 当安装标识已经使用另一个业务键初始化。
58
+ */
59
+ declare function configureInstallationIdentity(options?: InstallationIdentityConfiguration): void;
60
+ /**
61
+ * 全局安装标识状态。
62
+ *
63
+ * @remarks Storage 未显式配置时会使用其默认值。默认随机源只使用 Web Crypto,
64
+ * 能力缺失时明确抛错,不回退到 `Math.random()`。该值不是硬件标识、认证凭证或安全边界。
65
+ */
66
+ declare const installationIdentity: InstallationIdentity;
67
+ /**
68
+ * 返回已有安装标识,否则创建并持久化一个安全 UUID v4。
69
+ *
70
+ * @param installationId - 可选的显式安装标识;传入时会校验并覆盖当前持久化值。
71
+ * @returns 显式值、内存值、持久化值或新生成值中的最终安装标识。
72
+ * @throws `TypeError` 当显式值或持久化值不是 UUID v4。
73
+ * @throws `Error` 当当前平台存储不可用或缺少 Web Crypto。
74
+ */
75
+ declare function getOrCreateInstallationId(installationId?: string): string;
76
+ //#endregion
77
+ export { InstallationIdentity, InstallationIdentityConfiguration, configureInstallationIdentity, getOrCreateInstallationId, installationIdentity };
78
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,87 @@
1
+ import { Local } from "../storage/index.mjs";
2
+ import { generateUuidV4, isUuidV4 } from "../string/index.mjs";
3
+ //#region src/identity/index.ts
4
+ const defaultInstallationIdentityStorageKey = "identity:installation-id";
5
+ /**
6
+ * 校验安装标识格式。
7
+ *
8
+ * @param value - 外部传入或从 Storage 读取的候选值。
9
+ * @throws `TypeError` 当值不是 RFC 4122 UUID v4。
10
+ */
11
+ const assertInstallationId = (value) => {
12
+ if (!isUuidV4(value)) throw new TypeError("Installation Identity values must be RFC 4122 version 4 UUIDs.");
13
+ };
14
+ let activeStorageKey;
15
+ /**
16
+ * 取得已经锁定的安装标识业务键。
17
+ *
18
+ * @remarks 首次读取会锁定默认值,防止标识已经写入后再切换键而产生两个安装标识。
19
+ * @returns 应用于后续全部 Identity 操作的业务键。
20
+ */
21
+ const getInstallationIdentityStorageKey = () => {
22
+ activeStorageKey ??= defaultInstallationIdentityStorageKey;
23
+ return activeStorageKey;
24
+ };
25
+ /**
26
+ * 在应用入口配置安装标识使用的 Storage 业务键。
27
+ *
28
+ * @remarks 必须在首次读取 `installationIdentity.cacheKey` 或调用其他安装标识 API 前执行。相同配置
29
+ * 可以幂等重复调用;切换到不同键会抛错,避免同一页面产生分裂状态。
30
+ * @param options - 安装标识配置;省略 `cacheKey` 时使用 `identity:installation-id`。
31
+ * @throws `TypeError` 当 `cacheKey` 不是非空字符串或包含外围空白。
32
+ * @throws `Error` 当安装标识已经使用另一个业务键初始化。
33
+ */
34
+ function configureInstallationIdentity(options = {}) {
35
+ const cacheKey = options.cacheKey ?? defaultInstallationIdentityStorageKey;
36
+ if (typeof cacheKey !== "string" || cacheKey.length === 0 || cacheKey.trim() !== cacheKey) throw new TypeError("Installation Identity cacheKey must be a non-empty string without surrounding whitespace.");
37
+ if (activeStorageKey === void 0) {
38
+ activeStorageKey = cacheKey;
39
+ return;
40
+ }
41
+ if (activeStorageKey !== cacheKey) throw new Error("Installation Identity has already been configured with a different cacheKey.");
42
+ }
43
+ /**
44
+ * 全局安装标识状态。
45
+ *
46
+ * @remarks Storage 未显式配置时会使用其默认值。默认随机源只使用 Web Crypto,
47
+ * 能力缺失时明确抛错,不回退到 `Math.random()`。该值不是硬件标识、认证凭证或安全边界。
48
+ */
49
+ const installationIdentity = {
50
+ get cacheKey() {
51
+ return getInstallationIdentityStorageKey();
52
+ },
53
+ deviceId: "",
54
+ clear() {
55
+ Local.remove(installationIdentity.cacheKey);
56
+ installationIdentity.deviceId = "";
57
+ },
58
+ getOrCreate(installationId) {
59
+ const candidate = installationId ?? (installationIdentity.deviceId.length > 0 ? installationIdentity.deviceId : installationIdentity.read()) ?? generateUuidV4();
60
+ assertInstallationId(candidate);
61
+ Local.set(installationIdentity.cacheKey, candidate);
62
+ installationIdentity.deviceId = candidate;
63
+ return candidate;
64
+ },
65
+ read() {
66
+ const stored = Local.get(installationIdentity.cacheKey);
67
+ if (stored === void 0) return void 0;
68
+ if (typeof stored !== "string") throw new TypeError("The stored identity is corrupted.");
69
+ assertInstallationId(stored);
70
+ return stored;
71
+ }
72
+ };
73
+ /**
74
+ * 返回已有安装标识,否则创建并持久化一个安全 UUID v4。
75
+ *
76
+ * @param installationId - 可选的显式安装标识;传入时会校验并覆盖当前持久化值。
77
+ * @returns 显式值、内存值、持久化值或新生成值中的最终安装标识。
78
+ * @throws `TypeError` 当显式值或持久化值不是 UUID v4。
79
+ * @throws `Error` 当当前平台存储不可用或缺少 Web Crypto。
80
+ */
81
+ function getOrCreateInstallationId(installationId) {
82
+ return installationIdentity.getOrCreate(installationId);
83
+ }
84
+ //#endregion
85
+ export { configureInstallationIdentity, getOrCreateInstallationId, installationIdentity };
86
+
87
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/identity/index.ts"],"sourcesContent":["import { Local } from \"../storage/index\";\nimport { generateUuidV4, isUuidV4 } from \"../string/index\";\n\nconst defaultInstallationIdentityStorageKey = \"identity:installation-id\";\n\n/** {@link configureInstallationIdentity} 接收的安装标识配置。 */\nexport interface InstallationIdentityConfiguration {\n\t/**\n\t * `Local` 中使用的业务键,默认 `identity:installation-id`。\n\t *\n\t * @remarks 必须是无外围空白的非空字符串,并在首次访问 Identity API 前配置;物理键仍会叠加 Storage 全局前缀。\n\t */\n\tcacheKey?: string;\n}\n\n/** 浏览器或 uni-app 当前安装实例标识。 */\nexport interface InstallationIdentity {\n\t/**\n\t * `Local` 中使用的业务键。\n\t *\n\t * @remarks 首次读取会锁定默认配置;之后不能再切换为其他业务键。\n\t */\n\treadonly cacheKey: string;\n\t/**\n\t * 当前内存中的安装标识;尚未取得标识或调用 {@link InstallationIdentity.clear clear} 后为空字符串。\n\t *\n\t * @remarks 直接赋值只改变内存,不会校验或持久化;通常应调用 {@link InstallationIdentity.getOrCreate getOrCreate}。\n\t */\n\tdeviceId: string;\n\t/**\n\t * 删除当前 `cacheKey` 对应的持久化标识,并把 `deviceId` 重置为空字符串。\n\t *\n\t * @throws `Error` 当当前平台存储不可用。\n\t */\n\tclear: () => void;\n\t/**\n\t * 按“显式参数、当前内存、持久化值、安全生成值”的优先级取得安装标识。\n\t *\n\t * @param installationId - 可选 UUID v4;传入时覆盖内存值和当前持久化值。\n\t * @returns 已校验并同时写入 `deviceId` 与 `Local` 的 UUID v4。\n\t * @throws `TypeError` 当显式参数、内存值或持久化值不是 UUID v4。\n\t * @throws `Error` 当当前平台存储不可用,或生成新值时平台缺少 Web Crypto。\n\t */\n\tgetOrCreate: (installationId?: string) => string;\n\t/**\n\t * 读取并校验当前 `cacheKey` 对应的持久化标识。\n\t *\n\t * @remarks 该方法不修改 `deviceId`,只负责读取;过期记录由 Storage 视为缺失。\n\t * @returns 已持久化的 UUID v4;键缺失或过期时返回 `undefined`。\n\t * @throws `TypeError` 当持久化值不是字符串或不是 UUID v4。\n\t * @throws `Error` 当当前平台存储不可用。\n\t */\n\tread: () => string | undefined;\n}\n\n/**\n * 校验安装标识格式。\n *\n * @param value - 外部传入或从 Storage 读取的候选值。\n * @throws `TypeError` 当值不是 RFC 4122 UUID v4。\n */\nconst assertInstallationId = (value: string): void => {\n\tif (!isUuidV4(value)) throw new TypeError(\"Installation Identity values must be RFC 4122 version 4 UUIDs.\");\n};\n\nlet activeStorageKey: string | undefined;\n\n/**\n * 取得已经锁定的安装标识业务键。\n *\n * @remarks 首次读取会锁定默认值,防止标识已经写入后再切换键而产生两个安装标识。\n * @returns 应用于后续全部 Identity 操作的业务键。\n */\nconst getInstallationIdentityStorageKey = (): string => {\n\tactiveStorageKey ??= defaultInstallationIdentityStorageKey;\n\treturn activeStorageKey;\n};\n\n/**\n * 在应用入口配置安装标识使用的 Storage 业务键。\n *\n * @remarks 必须在首次读取 `installationIdentity.cacheKey` 或调用其他安装标识 API 前执行。相同配置\n * 可以幂等重复调用;切换到不同键会抛错,避免同一页面产生分裂状态。\n * @param options - 安装标识配置;省略 `cacheKey` 时使用 `identity:installation-id`。\n * @throws `TypeError` 当 `cacheKey` 不是非空字符串或包含外围空白。\n * @throws `Error` 当安装标识已经使用另一个业务键初始化。\n */\nexport function configureInstallationIdentity(options: InstallationIdentityConfiguration = {}): void {\n\tconst cacheKey = options.cacheKey ?? defaultInstallationIdentityStorageKey;\n\tif (typeof cacheKey !== \"string\" || cacheKey.length === 0 || cacheKey.trim() !== cacheKey) {\n\t\tthrow new TypeError(\"Installation Identity cacheKey must be a non-empty string without surrounding whitespace.\");\n\t}\n\tif (activeStorageKey === undefined) {\n\t\tactiveStorageKey = cacheKey;\n\t\treturn;\n\t}\n\tif (activeStorageKey !== cacheKey) throw new Error(\"Installation Identity has already been configured with a different cacheKey.\");\n}\n\n/**\n * 全局安装标识状态。\n *\n * @remarks Storage 未显式配置时会使用其默认值。默认随机源只使用 Web Crypto,\n * 能力缺失时明确抛错,不回退到 `Math.random()`。该值不是硬件标识、认证凭证或安全边界。\n */\nexport const installationIdentity: InstallationIdentity = {\n\tget cacheKey(): string {\n\t\treturn getInstallationIdentityStorageKey();\n\t},\n\tdeviceId: \"\",\n\tclear(): void {\n\t\tLocal.remove(installationIdentity.cacheKey);\n\t\tinstallationIdentity.deviceId = \"\";\n\t},\n\tgetOrCreate(installationId?: string): string {\n\t\tconst candidate =\n\t\t\tinstallationId ??\n\t\t\t(installationIdentity.deviceId.length > 0 ? installationIdentity.deviceId : installationIdentity.read()) ??\n\t\t\tgenerateUuidV4();\n\t\tassertInstallationId(candidate);\n\t\tLocal.set(installationIdentity.cacheKey, candidate);\n\t\tinstallationIdentity.deviceId = candidate;\n\t\treturn candidate;\n\t},\n\tread(): string | undefined {\n\t\tconst stored = Local.get(installationIdentity.cacheKey);\n\t\tif (stored === undefined) return undefined;\n\t\tif (typeof stored !== \"string\") throw new TypeError(\"The stored identity is corrupted.\");\n\t\tassertInstallationId(stored);\n\t\treturn stored;\n\t},\n};\n\n/**\n * 返回已有安装标识,否则创建并持久化一个安全 UUID v4。\n *\n * @param installationId - 可选的显式安装标识;传入时会校验并覆盖当前持久化值。\n * @returns 显式值、内存值、持久化值或新生成值中的最终安装标识。\n * @throws `TypeError` 当显式值或持久化值不是 UUID v4。\n * @throws `Error` 当当前平台存储不可用或缺少 Web Crypto。\n */\nexport function getOrCreateInstallationId(installationId?: string): string {\n\treturn installationIdentity.getOrCreate(installationId);\n}\n"],"mappings":";;;AAGA,MAAM,wCAAwC;;;;;;;AA0D9C,MAAM,wBAAwB,UAAwB;CACrD,IAAI,CAAC,SAAS,KAAK,GAAG,MAAM,IAAI,UAAU,gEAAgE;AAC3G;AAEA,IAAI;;;;;;;AAQJ,MAAM,0CAAkD;CACvD,qBAAqB;CACrB,OAAO;AACR;;;;;;;;;;AAWA,SAAgB,8BAA8B,UAA6C,CAAC,GAAS;CACpG,MAAM,WAAW,QAAQ,YAAY;CACrC,IAAI,OAAO,aAAa,YAAY,SAAS,WAAW,KAAK,SAAS,KAAK,MAAM,UAChF,MAAM,IAAI,UAAU,2FAA2F;CAEhH,IAAI,qBAAqB,KAAA,GAAW;EACnC,mBAAmB;EACnB;CACD;CACA,IAAI,qBAAqB,UAAU,MAAM,IAAI,MAAM,8EAA8E;AAClI;;;;;;;AAQA,MAAa,uBAA6C;CACzD,IAAI,WAAmB;EACtB,OAAO,kCAAkC;CAC1C;CACA,UAAU;CACV,QAAc;EACb,MAAM,OAAO,qBAAqB,QAAQ;EAC1C,qBAAqB,WAAW;CACjC;CACA,YAAY,gBAAiC;EAC5C,MAAM,YACL,mBACC,qBAAqB,SAAS,SAAS,IAAI,qBAAqB,WAAW,qBAAqB,KAAK,MACtG,eAAe;EAChB,qBAAqB,SAAS;EAC9B,MAAM,IAAI,qBAAqB,UAAU,SAAS;EAClD,qBAAqB,WAAW;EAChC,OAAO;CACR;CACA,OAA2B;EAC1B,MAAM,SAAS,MAAM,IAAI,qBAAqB,QAAQ;EACtD,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;EACjC,IAAI,OAAO,WAAW,UAAU,MAAM,IAAI,UAAU,mCAAmC;EACvF,qBAAqB,MAAM;EAC3B,OAAO;CACR;AACD;;;;;;;;;AAUA,SAAgB,0BAA0B,gBAAiC;CAC1E,OAAO,qBAAqB,YAAY,cAAc;AACvD"}
@@ -0,0 +1,24 @@
1
+ import { KeySelector, allEqualBy, chunk, difference, groupBy, hasDuplicatesBy, intersection, partition, removeNullishValues, unique, uniqueBy } from "./array/index.mjs";
2
+ import { AbortOptions, ConcurrentMapOptions, DebouncedFunction, RetryContext, RetryOptions, ThrottledFunction, TimeoutOptions, debounce, mapConcurrent, retry, sleep, throttle, withTimeout } from "./async/index.mjs";
3
+ import { decodeBase64, decodeBase64Bytes, decodeBase64Url, decodeBase64UrlBytes, decodeLatin1Base64, decodeSecureBase64, encodeBase64, encodeBase64Bytes, encodeBase64Url, encodeBase64UrlBytes, encodeLatin1Base64, encodeSecureBase64 } from "./base64/index.mjs";
4
+ import { RgbColor, RgbaColor, contrastRatio, formatHexColor, mixHexColorWithBlack, mixHexColorWithWhite, mixHexColors, parseHexColor, pickHigherContrastColor, relativeLuminance } from "./color/index.mjs";
5
+ import { AESDecrypt, AESDecryptAuthenticated, AESDecryptWithPassword, AESEncrypt, AESEncryptAuthenticated, AESEncryptWithPassword, AesCipherMode, AesPaddingMode, DeriveECDHKeySHA256, DeriveECDHSecret, ECDSASign, ECDSAVerify, EcNamedCurve, FixedTimeEquals, GenerateECDHKeyPair, GenerateECDSAKeyPair, GenerateRSAKeyPair, GenerateRandomBytes, HKDFSHA256, HMACSHA256Encrypt, HMACSHA384Encrypt, HMACSHA512Encrypt, HashPasswordPBKDF2SHA256, MD5Encrypt, PBKDF2SHA256, PemKeyPair, RSADecryptOAEP, RSAEncryptOAEP, RSASignPSS, RSAVerifyPSS, SHA1Encrypt, SHA256Bytes, SHA256Encrypt, SHA384Bytes, SHA384Encrypt, SHA512Bytes, SHA512Encrypt, VerifyPasswordPBKDF2SHA256 } from "./crypto/index.mjs";
6
+ import { DateInput, DateRangeShortcut, DateShortcut, RelativeTimeOptions, addDays, addMonths, addYears, createDateRangeShortcuts, createDateShortcuts, createOneMonthRangeFromToday, endOfDay, formatChineseRelativeTime, formatRelativeTime, getLocalDayBounds, getLocalTimeGreeting, getStartOfToday, isDateAfterNow, isFuture, isSameDay, isValidDate, isWithinInterval, startOfDay, toDate } from "./date/index.mjs";
7
+ import { StyleInput, StyleObject, StyleValue, addCssUnit, serializeStyle } from "./dom/style.mjs";
8
+ import { RuntimeKind, detectRuntime, hasWebCrypto, isBrowser, isMobileUserAgent, isNode, isTabletUserAgent, isUniApp, isWebWorker } from "./env/index.mjs";
9
+ import { InstallationIdentity, InstallationIdentityConfiguration, configureInstallationIdentity, getOrCreateInstallationId, installationIdentity } from "./identity/index.mjs";
10
+ import { LogLevel, Logger, LoggerOptions, LoggerSink, createLogger, logger } from "./logger/index.mjs";
11
+ import { FormatBytesOptions, average, clamp, formatBytes, inRange, lerp, roundTo, secureRandomInt, sum } from "./number/index.mjs";
12
+ import { QueryPrimitive, QueryStringOptions, QueryValue, hasOwn, isPlainObject, mapValues, omit, pick, shallowEqual, toQueryString } from "./object/index.mjs";
13
+ import { Local, Session, StorageArea, StorageCodec, StorageConfiguration, StorageWriteOptions, base64StorageCodec, configureStorage, isStorageConfigured } from "./storage/index.mjs";
14
+ import { ParsedQueryParameters, StringLocale, camelCase, decodeURIComponentRepeatedly, escapeHtml, generateUuidV4, isUuidV4, isValidJson, kebabCase, lowerFirst, normalizeWhitespace, parseQueryString, pascalCase, secureRandomString, splitWords, truncateGraphemes, upperFirst } from "./string/index.mjs";
15
+ import { EmitHandlers, useEmits } from "./vue/emits.mjs";
16
+ import { useExpose } from "./vue/expose.mjs";
17
+ import { AwaitableFunction, callOptionalFunction } from "./vue/func.mjs";
18
+ import { Installable, TSXWithInstall, VueInstallValue, withInstall, withInstallDirective, withNoopInstall } from "./vue/install.mjs";
19
+ import { definePropType, useProps } from "./vue/props.mjs";
20
+ import { useRender } from "./vue/render.mjs";
21
+ import { TypedSlots, TypedSlotsDeclaration, makeSlots } from "./vue/slots.mjs";
22
+ import { withDefineType } from "./vue/with.mjs";
23
+ import "./vue/index.mjs";
24
+ export { AESDecrypt, AESDecryptAuthenticated, AESDecryptWithPassword, AESEncrypt, AESEncryptAuthenticated, AESEncryptWithPassword, AbortOptions, AesCipherMode, AesPaddingMode, AwaitableFunction, ConcurrentMapOptions, DateInput, DateRangeShortcut, DateShortcut, DebouncedFunction, DeriveECDHKeySHA256, DeriveECDHSecret, ECDSASign, ECDSAVerify, EcNamedCurve, EmitHandlers, FixedTimeEquals, FormatBytesOptions, GenerateECDHKeyPair, GenerateECDSAKeyPair, GenerateRSAKeyPair, GenerateRandomBytes, HKDFSHA256, HMACSHA256Encrypt, HMACSHA384Encrypt, HMACSHA512Encrypt, HashPasswordPBKDF2SHA256, Installable, InstallationIdentity, InstallationIdentityConfiguration, KeySelector, Local, LogLevel, Logger, LoggerOptions, LoggerSink, MD5Encrypt, PBKDF2SHA256, ParsedQueryParameters, PemKeyPair, QueryPrimitive, QueryStringOptions, QueryValue, RSADecryptOAEP, RSAEncryptOAEP, RSASignPSS, RSAVerifyPSS, RelativeTimeOptions, RetryContext, RetryOptions, RgbColor, RgbaColor, RuntimeKind, SHA1Encrypt, SHA256Bytes, SHA256Encrypt, SHA384Bytes, SHA384Encrypt, SHA512Bytes, SHA512Encrypt, Session, StorageArea, StorageCodec, StorageConfiguration, StorageWriteOptions, StringLocale, StyleInput, StyleObject, StyleValue, TSXWithInstall, ThrottledFunction, TimeoutOptions, TypedSlots, TypedSlotsDeclaration, VerifyPasswordPBKDF2SHA256, VueInstallValue, addCssUnit, addDays, addMonths, addYears, allEqualBy, average, base64StorageCodec, callOptionalFunction, camelCase, chunk, clamp, configureInstallationIdentity, configureStorage, contrastRatio, createDateRangeShortcuts, createDateShortcuts, createLogger, createOneMonthRangeFromToday, debounce, decodeBase64, decodeBase64Bytes, decodeBase64Url, decodeBase64UrlBytes, decodeLatin1Base64, decodeSecureBase64, decodeURIComponentRepeatedly, definePropType, detectRuntime, difference, encodeBase64, encodeBase64Bytes, encodeBase64Url, encodeBase64UrlBytes, encodeLatin1Base64, encodeSecureBase64, endOfDay, escapeHtml, formatBytes, formatChineseRelativeTime, formatHexColor, formatRelativeTime, generateUuidV4, getLocalDayBounds, getLocalTimeGreeting, getOrCreateInstallationId, getStartOfToday, groupBy, hasDuplicatesBy, hasOwn, hasWebCrypto, inRange, installationIdentity, intersection, isBrowser, isDateAfterNow, isFuture, isMobileUserAgent, isNode, isPlainObject, isSameDay, isStorageConfigured, isTabletUserAgent, isUniApp, isUuidV4, isValidDate, isValidJson, isWebWorker, isWithinInterval, kebabCase, lerp, logger, lowerFirst, makeSlots, mapConcurrent, mapValues, mixHexColorWithBlack, mixHexColorWithWhite, mixHexColors, normalizeWhitespace, omit, parseHexColor, parseQueryString, partition, pascalCase, pick, pickHigherContrastColor, relativeLuminance, removeNullishValues, retry, roundTo, secureRandomInt, secureRandomString, serializeStyle, shallowEqual, sleep, splitWords, startOfDay, sum, throttle, toDate, toQueryString, truncateGraphemes, unique, uniqueBy, upperFirst, useEmits, useExpose, useProps, useRender, withDefineType, withInstall, withInstallDirective, withNoopInstall, withTimeout };