From 51b42ba50b06d44cb2109ba99a5e875f103bc797 Mon Sep 17 00:00:00 2001 From: D-xuanmo Date: Sun, 27 Oct 2024 08:29:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A6=96=E5=AD=97=E6=AF=8D=E8=BD=AC?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E5=86=99=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .prettierrc | 19 ---- README.md | 64 +++++++------- package.json | 12 +-- src/URL.ts | 36 -------- src/index.ts | 3 +- src/object.ts | 15 ++++ src/string.ts | 24 ++++- src/ua.ts | 17 ++-- test/object.test.js | 7 +- test/string.test.js | 12 +++ test/ua.test.js | 13 +++ tsconfig.json | 6 +- yarn.lock | 208 ++++++++++++++++++++++++++++++++++++++++---- 13 files changed, 316 insertions(+), 120 deletions(-) delete mode 100644 .prettierrc delete mode 100644 src/URL.ts create mode 100644 test/string.test.js create mode 100644 test/ua.test.js diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 24392cb..0000000 --- a/.prettierrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "arrowParens": "always", - "bracketSpacing": true, - "embeddedLanguageFormatting": "auto", - "htmlWhitespaceSensitivity": "css", - "insertPragma": false, - "jsxBracketSameLine": false, - "jsxSingleQuote": false, - "printWidth": 80, - "proseWrap": "preserve", - "quoteProps": "as-needed", - "requirePragma": false, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "useTabs": false, - "vueIndentScriptAndStyle": false -} diff --git a/README.md b/README.md index 508942d..74182de 100644 --- a/README.md +++ b/README.md @@ -19,38 +19,38 @@ import { debounce } from '@xuanmo/utils' ### 已有方法 -| 工具名 | 描述 | Nodejs 可用 | -|:--------------------:|:----------------------------:|:---------:| -| realType | 获取数据真实类型 | ✔ | -| isObject | 是否为对象 | ✔ | -| isRegexp | 是否为正则表达式 | ✔ | -| isFunction | 是否为函数 | ✔ | -| isImageUrl | 判断 url 是否为图片路径 | ✔ | -| isNumber | 是否为纯数字 | ✔ | -| isEmpty | 是否为空 | ✔ | -| isBoolean | 是否为布尔值 | ✔ | -| isPromise | 是否为 `Promise` | ✔ | -| toBoolean | 转换 `string` 布尔值 | ✔ | -| toLowerCamelCase | 下划线转小驼峰 | ✔ | -| toUnderline | 小驼峰转下划线分割 | ✔ | -| toPascalCase | 中横线转大驼峰 | ✔ | -| formatThousandth | 数字千分位 | ✔ | -| countDown | 倒计时 | ✖ | -| debounce | 防抖 | ✔ | -| debounceDecorator | 防抖装饰器版 | ✔ | -| deepCopy | 深拷贝 | ✔ | -| searchParams | 获取 URL 单个查询参数 | ✔ | -| formatQueryParams | 获取 URL 全部查询参数 | ✔ | -| createRandomID | 生成随机 ID | ✔ | -| objectKeyToCamelCase | Object key 转换为小驼峰 | ✔ | -| ua | 对 `navigator.userAgent` 进行解析 | ✖ | -| dCookie | `cookie` 操作 | ✖ | -| generateTree | 一维数组转树形数据 | ✔ | -| throwError | 统一报错信息处理 | ✔ | -| debugWarn | 警告信息统一处理 | ✔ | -| deleteArrayItems | 指定删除数组的某些元素 | ✔ | -| pickLastItem | 选择数组的最后一项元素 | ✔ | -| treeToMap | 树形数据转 map | ✔ | +|工具名|描述|Nodejs 可用| +|:----:|:---:|:------:| +|realType|获取数据真实类型|✔| +|isObject|是否为对象|✔| +|isRegexp|是否为正则表达式|✔| +|isFunction|是否为函数|✔| +|isImageUrl|判断 URL 是否为图片路径|✔| +|isNumber|是否为纯数字|✔| +|isEmpty|是否为空|✔| +|isBoolean|是否为布尔值|✔| +|isPromise|是否为 `Promise`|✔| +|toBoolean|转换 `string` 布尔值|✔| +|toLowerCamelCase|下划线转小驼峰|✔| +|toUnderline|小驼峰转下划线分割|✔| +|toPascalCase|中横线转大驼峰|✔| +|formatThousandth|数字千分位|✔| +|countDown|倒计时|✖| +|debounce|防抖|✔| +|debounceDecorator|防抖装饰器版|✔| +|deepCopy|深拷贝|✔| +|createRandomID|生成随机ID|✔| +|objectKeyToCamelCase|Object key转换为小驼峰|✔| +|ua|对 `navigator.userAgent` 进行解析|✖| +|dCookie|`cookie` 操作|✖| +|generateTree|一维数组转树形数据|✔| +|throwError|统一报错信息处理|✔| +|debugWarn|警告信息统一处理|✔| +|deleteArrayItems|指定删除数组的某些元素|✔| +|pickLastItem|选择数组的最后一项元素|✔| +|treeToMap|树形数据转 map|✔| +|firstLetterLowercase|首字母小写|✔| +|firstLetterUppercase|首字母大写|✔| ### ua 示例 diff --git a/package.json b/package.json index 4405dc0..538b315 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@xuanmo/utils", - "version": "0.0.2", + "version": "0.0.3", "author": { "name": "xuanmo", "email": "me@xuanmo.xin" @@ -15,7 +15,7 @@ "build": "npm run clear && rollup -c --bundleConfigAsCjs", "clear": "rimraf dist", "lint": "eslint src/**/*.ts --fix", - "test": "jest test/" + "test": "npm run build && jest test/" }, "license": "MIT", "repository": { @@ -31,15 +31,17 @@ "@rollup/plugin-typescript": "^11.0.0", "@typescript-eslint/eslint-plugin": "^5.54.0", "@typescript-eslint/parser": "^5.54.0", + "@xuanmo/prettier-config": "^0.0.2", "husky": "^7.0.4", "jest": "^27.2.5", "rimraf": "^3.0.2", - "rollup": "^3.18.0", + "rollup": "^4.24.0", "rollup-plugin-uglify": "^6.0.4", "tslib": "^2.3.0", - "typescript": "^4.3.4" + "typescript": "^5.6.3" }, "hooks": { "pre-commit": "npm test" - } + }, + "prettier": "@xuanmo/prettier-config" } diff --git a/src/URL.ts b/src/URL.ts deleted file mode 100644 index eb569b8..0000000 --- a/src/URL.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 获取 URL 查询参数 - * @param {string} url URL 查询参数 - * @param {string} key 参数名 - * @returns {string} - */ -export function searchParams(url: string = location?.search, key: string): string | null { - const searchParams = new URLSearchParams(url) - - return searchParams.get(key) -} - -/** - * 格式化查询参数 - * @param {string} params get 请求查询参数 - * @returns {object} [key: string]: string - */ -export const formatQueryParams = (params: string): { [key: string]: string } => { - const decodeParams = /\?(?(.*)=.+)/.exec(decodeURIComponent(params))?.groups - - if (!decodeParams) return {} - - const newParams = decodeParams.params.split('&') - const result: { - [key: string]: string - } = {} - - for (let i = 0; i < newParams.length; i++) { - const item = newParams[i] - item.replace(/([^?&]*)=([^?&]*)/, (match, $1, $2) => { - result[$1] = $2 - return match - }) - } - return result -} diff --git a/src/index.ts b/src/index.ts index c429135..9602e19 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,8 +2,7 @@ export * from './base' export { default as deepCopy } from './deep-copy' export * from './debounce' export { default as countDown } from './count-down' -export * from './URL' -export { default as ua } from './ua' +export * from './ua' export * from './cookie' export * from './tree' export * from './debug' diff --git a/src/object.ts b/src/object.ts index 4519bff..558df02 100644 --- a/src/object.ts +++ b/src/object.ts @@ -30,3 +30,18 @@ export function objectKeyToCamelCase(source: any, filterKey?: string, separator? } return result } + +/** + * 排除对象中的某些属性 + * @param data 原始对象 + * @param keys 要排除的属性 + */ +export function exclude, K extends keyof T>(data: T, keys: K[]) { + const result = {} as T + for (const [key, value] of Object.entries(data)) { + if (!keys.includes(key as K)) { + result[key as K] = value + } + } + return result as Exclude +} diff --git a/src/string.ts b/src/string.ts index 4e92ad0..9feaeec 100644 --- a/src/string.ts +++ b/src/string.ts @@ -38,10 +38,32 @@ export const toPascalCase = (str: string): string => { */ export const createRandomID = (length = 12): string => { const result: string[] = [] - const word = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('') + const word = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] const wordLength = word.length for (let i = 0; i < length; i++) { result.push(word[Math.round(Math.random() * wordLength)]) } return result.join('') } + +/** + * 首字母大写 + * @param str + */ +export const firstLetterUppercase = (str: T) => { + const [first, ...rest] = str + return `${first.toUpperCase()}${rest.join('')}` as FirstLetterUppercase +} + +/** + * 首字母小写 + * @param str + */ +export const firstLetterLowercase = (str: T) => { + const [first, ...rest] = str + return `${first.toLowerCase()}${rest.join('')}` as FirstLetterLowercase +} + +export type FirstLetterUppercase = T extends `${infer First}${infer Rest}` ? `${Uppercase}${Rest}` : T + +export type FirstLetterLowercase = T extends `${infer First}${infer Rest}` ? `${Lowercase}${Rest}` : T diff --git a/src/ua.ts b/src/ua.ts index f424643..7ed020d 100644 --- a/src/ua.ts +++ b/src/ua.ts @@ -115,7 +115,7 @@ class UA { */ constructor(userAgent: string) { this.agent = userAgent - this.init() + this.format() const { browser, browserVersion, osVersion } = this.info this.info = { ...this.info, @@ -125,7 +125,7 @@ class UA { } } - private init() { + private format() { try { this.getSystemName() this.getBrowserName() @@ -180,7 +180,7 @@ class UA { } if (/^Macintosh/i.test($1)) { - [, osVersion] = $1.match(/X\s((\d+(_|\.))+\d+)/) || [] + [, osVersion] = $1.match(/X\s((\d+([_.]))+\d+)/) || [] this.info.os = 'Macintosh' this.info.device = 'PC' this.info.osVersion = osVersion?.replace(/_/g, '.') ?? 'Unknown' @@ -237,11 +237,11 @@ class UA { this.info = { ...this.info, - ...this._formatBrowserVersion(browser[0]) + ...this.formatBrowserVersion(browser[0]) } } - _formatBrowserVersion(str: string): Browser { + private formatBrowserVersion(str: string): Browser { try { // ie 浏览器版本对照 const ieVersionMap: any = { @@ -250,12 +250,13 @@ class UA { '6.0': 10, '7.0': 11 } - const { name, version } = str.match(/(?[a-z\d]+)(\/|\s)(?(\d+\.)+\d+)/i)?.groups ?? {} + + const [name, , version] = str.match(/([a-z\d]+)(\/|\s)((\d+\.)+\d+)/i) || [] // 遍历查出浏览器名称,名称支持正则所以需要遍历查找 let browserName: any = {} for (const [key, value] of Object.entries(this.browserNameMap)) { - if (new RegExp(key).test(name)) { + if (new RegExp(key).test(name!)) { browserName = value break } @@ -283,7 +284,7 @@ class UA { } } -export default function(agent = navigator.userAgent) { +export const ua = (agent = navigator.userAgent) => { const ua: UA = new UA(agent) return ua.info } diff --git a/test/object.test.js b/test/object.test.js index 28979bd..70b3d3e 100644 --- a/test/object.test.js +++ b/test/object.test.js @@ -1,4 +1,4 @@ -const { objectKeyToCamelCase } = require('../dist/index.cjs') +const { objectKeyToCamelCase, exclude } = require('../dist/index.cjs') const expected = { name: 'xuanmo', @@ -37,3 +37,8 @@ const received = { test('objectKeyToCamelCase', () => { expect(JSON.stringify(objectKeyToCamelCase(expected, '', ['\\.']))).toBe(JSON.stringify(received)) }) + +test('exclude', () => { + const obj = { a: 1, b: 2, c: 3 } + expect(exclude(obj, ['a'])).toEqual({ b: 2, c: 3 }) +}) diff --git a/test/string.test.js b/test/string.test.js new file mode 100644 index 0000000..a7077d2 --- /dev/null +++ b/test/string.test.js @@ -0,0 +1,12 @@ +const { + firstLetterUppercase, + firstLetterLowercase +} = require('../dist/index.cjs') + +test('firstLetterUppercase', () => { + expect(firstLetterUppercase('tom')).toBe('Tom') +}) + +test('firstLetterLowercase', () => { + expect(firstLetterLowercase('Tom')).toBe('tom') +}) diff --git a/test/ua.test.js b/test/ua.test.js new file mode 100644 index 0000000..fbf9c93 --- /dev/null +++ b/test/ua.test.js @@ -0,0 +1,13 @@ +const { ua } = require('../dist/index.cjs') + +test('ua', () => { + expect(ua('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36')).toEqual({ + browser: 'Chrome', + browserZH: 'Chrome', + browserVersion: '/', + os: 'Macintosh', + osVersion: '10.15.7', + device: 'PC', + engine: 'WebKit' + }) +}) diff --git a/tsconfig.json b/tsconfig.json index 90e3b2a..f515efa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,11 +9,15 @@ "allowJs": false, "strict": true, "noUnusedLocals": true, + "downlevelIteration": true, "experimentalDecorators": true, "resolveJsonModule": true, "esModuleInterop": true, "removeComments": false, - "lib": ["esnext", "dom"], + "lib": [ + "esnext", + "dom" + ], "emitDeclarationOnly": true, "declaration": true, "declarationMap": false, diff --git a/yarn.lock b/yarn.lock index 72e543e..c124bdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1812,6 +1812,118 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.24.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-android-arm64@npm:4.24.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.24.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.24.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.24.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.24.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.24.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.24.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.24.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.24.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.24.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.24.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.24.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.24.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@sinonjs/commons@npm:^1.7.0": version: 1.8.6 resolution: "@sinonjs/commons@npm:1.8.6" @@ -1899,6 +2011,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9 + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.2": version: 4.1.6 resolution: "@types/graceful-fs@npm:4.1.6" @@ -2114,6 +2233,15 @@ __metadata: languageName: node linkType: hard +"@xuanmo/prettier-config@npm:^0.0.2": + version: 0.0.2 + resolution: "@xuanmo/prettier-config@npm:0.0.2" + peerDependencies: + prettier: ^3.0.0 + checksum: b7de813f5bcdda6f0f8026b4228a5a5d4ddaec8531396af3da1ea5cbb147055f41c42c979e2539aee6816094f9b724f5d5ad0b6760c5d6f44e56a1f93710da33 + languageName: node + linkType: hard + "@xuanmo/utils@workspace:.": version: 0.0.0-use.local resolution: "@xuanmo/utils@workspace:." @@ -2126,13 +2254,14 @@ __metadata: "@rollup/plugin-typescript": ^11.0.0 "@typescript-eslint/eslint-plugin": ^5.54.0 "@typescript-eslint/parser": ^5.54.0 + "@xuanmo/prettier-config": ^0.0.2 husky: ^7.0.4 jest: ^27.2.5 rimraf: ^3.0.2 - rollup: ^3.18.0 + rollup: ^4.24.0 rollup-plugin-uglify: ^6.0.4 tslib: ^2.3.0 - typescript: ^4.3.4 + typescript: ^5.6.3 languageName: unknown linkType: soft @@ -5455,17 +5584,66 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^3.18.0": - version: 3.18.0 - resolution: "rollup@npm:3.18.0" - dependencies: +"rollup@npm:^4.24.0": + version: 4.24.0 + resolution: "rollup@npm:4.24.0" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.24.0 + "@rollup/rollup-android-arm64": 4.24.0 + "@rollup/rollup-darwin-arm64": 4.24.0 + "@rollup/rollup-darwin-x64": 4.24.0 + "@rollup/rollup-linux-arm-gnueabihf": 4.24.0 + "@rollup/rollup-linux-arm-musleabihf": 4.24.0 + "@rollup/rollup-linux-arm64-gnu": 4.24.0 + "@rollup/rollup-linux-arm64-musl": 4.24.0 + "@rollup/rollup-linux-powerpc64le-gnu": 4.24.0 + "@rollup/rollup-linux-riscv64-gnu": 4.24.0 + "@rollup/rollup-linux-s390x-gnu": 4.24.0 + "@rollup/rollup-linux-x64-gnu": 4.24.0 + "@rollup/rollup-linux-x64-musl": 4.24.0 + "@rollup/rollup-win32-arm64-msvc": 4.24.0 + "@rollup/rollup-win32-ia32-msvc": 4.24.0 + "@rollup/rollup-win32-x64-msvc": 4.24.0 + "@types/estree": 1.0.6 fsevents: ~2.3.2 dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true fsevents: optional: true bin: rollup: dist/bin/rollup - checksum: 0bcd1abb1cc383abdd09b5594de862ecb2f946e950954bb472a370289bdc4499aea8d04477be55ce205450d973d38ad255f0dc6926162500a251d73bf0e60e6f + checksum: b7e915b0cc43749c2c71255ff58858496460b1a75148db2abecc8e9496af83f488517768593826715f610e20e480a5ae7f1132a1408eb1d364830d6b239325cf languageName: node linkType: hard @@ -5980,23 +6158,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.3.4": - version: 4.9.5 - resolution: "typescript@npm:4.9.5" +"typescript@npm:^5.6.3": + version: 5.6.3 + resolution: "typescript@npm:5.6.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db + checksum: ba302f8822777ebefb28b554105f3e074466b671e7444ec6b75dadc008a62f46f373d9e57ceced1c433756d06c8b7dc569a7eefdf3a9573122a49205ff99021a languageName: node linkType: hard -"typescript@patch:typescript@^4.3.4#~builtin": - version: 4.9.5 - resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587" +"typescript@patch:typescript@^5.6.3#~builtin": + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#~builtin::version=5.6.3&hash=77c9e2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 1f8f3b6aaea19f0f67cba79057674ba580438a7db55057eb89cc06950483c5d632115c14077f6663ea76fd09fce3c190e6414bb98582ec80aa5a4eaf345d5b68 + checksum: ade87bce2363ee963eed0e4ca8a312ea02c81873ebd53609bc3f6dc0a57f6e61ad7e3fb8cbb7f7ab8b5081cbee801b023f7c4823ee70b1c447eae050e6c7622b languageName: node linkType: hard