diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b3f80f..11a749a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,21 @@ # 更新日志 +## [v4.1.6](https://github.com/buession/buession-prototype/releases/tag/4.1.6)(2025-04-11) + +### ⭐ 新特性 + +- browser 新增范围 cookieEnabled、language、languages + +### 🔔 变化 + +- 支持导出浏览器判断变量 + +### 🐞 BUG 修复 + +- 修复 Optional 和 Try 导出问题 + + ## [v4.1.5](https://github.com/buession/buession-prototype/releases/tag/4.1.5)(2025-04-10) ### 🐞 BUG 修复 diff --git a/package.json b/package.json index dac5a20..d62e925 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@buession/prototype", "alias": "prototype", - "version": "v4.1.5", + "version": "v4.1.6", "description": "A native object extension framework for Javascript.", "homepage": "https://prototype.buession.com/", "author": { diff --git a/src/core.ts b/src/core.ts index c700c1d..fe14218 100644 --- a/src/core.ts +++ b/src/core.ts @@ -13,3 +13,7 @@ export type MaybePromise = T | Promise; export type GenericData = Record; export type Data = GenericData; + +export type IfAny = 0 extends 1 & T ? Y : N; + +export type ArrayElementType = T extends (infer E)[] ? E : T; diff --git a/src/window.ts b/src/window.ts index b48d6dd..9845782 100644 --- a/src/window.ts +++ b/src/window.ts @@ -55,6 +55,9 @@ interface Browser { } interface Location { + + search: string; + /** * 获取所有的请求参数及值 * @@ -101,20 +104,33 @@ interface ClipboardData { setData(format: ClipboardDataFormat, content: string): void; } +export const isMobile = ["Android", "iPhone", "iPod", "Windows Phone", "Mobile", "Coolpad", "mmp", "SmartPhone", "midp", "wap", "xoom", "Symbian", "J2ME", "Blackberry", "Wince"].some((value)=>navigator.userAgent.exists(value)); +export const isChrome = /\(KHTML, like Gecko\) Chrome\//.test(navigator.userAgent); +export const isFirefox = navigator.userAgent.exists("Firefox"); +export const isMozilla = navigator.userAgent.exists("Mozilla"); +export const isEdge = navigator.userAgent.exists("Edge"); +export const isMSIE = navigator.userAgent.exists("MSIE") && navigator.userAgent.exists("compatible"); +export const isOpera = navigator.userAgent.exists("Opera"); +export const isSafari = navigator.userAgent.exists("Safari"); +export const isNetscape = /Netscape([\d]*)\/([^\s]+)/i.test(navigator.userAgent); + Object.defineProperty(window, "browser", { value: { userAgent: navigator.userAgent, name: navigator.appName, version: navigator.appVersion, - isMobile: ["Android", "iPhone", "iPod", "Windows Phone", "Mobile", "Coolpad", "mmp", "SmartPhone", "midp", "wap", "xoom", "Symbian", "J2ME", "Blackberry", "Wince"].some((value)=>navigator.userAgent.exists(value)), - isChrome: /\(KHTML, like Gecko\) Chrome\//.test(navigator.userAgent), - isFirefox: navigator.userAgent.exists("Firefox"), - isMozilla: navigator.userAgent.exists("Mozilla"), - isEdge: navigator.userAgent.exists("Edge"), - isMSIE: navigator.userAgent.exists("MSIE") && navigator.userAgent.exists("compatible"), - isOpera: navigator.userAgent.exists("Opera"), - isSafari: navigator.userAgent.exists("Safari"), - isNetscape: /Netscape([\d]*)\/([^\s]+)/i.test(navigator.userAgent) + cookieEnabled: navigator.cookieEnabled, + language: navigator.language, + languages: navigator.languages, + isMobile: isMobile, + isChrome: isChrome, + isFirefox: isFirefox, + isMozilla: isMozilla, + isEdge: isEdge, + isMSIE: isMSIE, + isOpera: isOpera, + isSafari: isSafari, + isNetscape: isNetscape }, configurable: true, writable: false