From c595a6e1d1005413fef4df0103bd06128f74ba61 Mon Sep 17 00:00:00 2001 From: "yong.teng" Date: Fri, 11 Apr 2025 16:18:53 +0800 Subject: [PATCH 1/2] Upgrade 4.1.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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": { From b7fa63c8ddabb25fd67bdf35afff90db3e4bde0d Mon Sep 17 00:00:00 2001 From: "yong.teng" Date: Fri, 11 Apr 2025 16:19:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?browser=20=E6=96=B0=E5=A2=9E=E8=8C=83?= =?UTF-8?q?=E5=9B=B4=20cookieEnabled=E3=80=81language=E3=80=81languages=20?= =?UTF-8?q?&&=20=E6=94=AF=E6=8C=81=E5=AF=BC=E5=87=BA=E6=B5=8F=E8=A7=88?= =?UTF-8?q?=E5=99=A8=E5=88=A4=E6=96=AD=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 15 +++++++++++++++ src/core.ts | 4 ++++ src/window.ts | 34 +++++++++++++++++++++++++--------- 3 files changed, 44 insertions(+), 9 deletions(-) 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/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