From 63997e4bcbacdde4d5161dfb31ab56559beda584 Mon Sep 17 00:00:00 2001 From: Abner <22141172+Silentely@users.noreply.github.com> Date: Sat, 16 May 2026 21:15:48 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor:=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=8F=AF=E9=80=89=E9=93=BE=E5=92=8C=E7=A9=BA=E5=80=BC?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E8=BF=90=E7=AE=97=E7=AC=A6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=AE=89=E5=85=A8=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 cookie-handler.js 中使用 `err?.message` 替代 `err && err.message`,提升错误信息获取的代码简洁性和安全性 - 在 giffgaff-app.js 中将多个 `(error && error.message) || ''` 形式的表达式替换为 `error?.message ?? ''`,统一代码风格并增强空值处理 - 在 esim-service.js 中多处使用可选链操作符(`?.`)替代多层属性访问的条件判断,防止因对象为 null 或 undefined 导致的运行时错误 - 在 giffgaff-app.js 和 esim-service.js 中将逻辑或(`||`)默认值替换为空值合并运算符(`??`),确保只有 null 或 undefined 时使用默认值,保留空字符串等有效 falsy 值 - 更新 package-lock.json 文件以反映依赖关系的变化 --- package-lock.json | 31 ++++++++++++++++------- src/giffgaff/js/giffgaff-app.js | 8 +++--- src/giffgaff/js/modules/cookie-handler.js | 2 +- src/giffgaff/js/modules/esim-service.js | 8 +++--- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 875f88c..1e28bb9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -149,6 +149,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1995,6 +1996,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -2018,6 +2020,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -4118,6 +4121,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -4139,6 +4143,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.5.1.tgz", "integrity": "sha512-MHbu8XxCHcBn6RwvCt2Vpn1WnLMNECfNKYB14LI5XypcgH4IE0/DiVifVR9tAkwPMyLXN8dOoPJfya3IryLQVw==", "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.19.0 || >=20.6.0" }, @@ -4151,6 +4156,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.5.1.tgz", "integrity": "sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -4574,6 +4580,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.5.1.tgz", "integrity": "sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "2.5.1", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -4590,6 +4597,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.5.1.tgz", "integrity": "sha512-iZH3Gw8cxQn0gjpOjJMmKLd9GIaNh/E3v3ST67vyzLSxHBs14HsG4dy7jMYyC5WXGdBVEcM7U/XTF5hCQxjDMw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "2.5.1", "@opentelemetry/resources": "2.5.1", @@ -4607,6 +4615,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz", "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" } @@ -5381,8 +5390,7 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -6131,6 +6139,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6179,6 +6188,7 @@ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -6762,6 +6772,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -7822,8 +7833,7 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/dom-serializer": { "version": "2.0.0", @@ -12297,6 +12307,7 @@ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "dev": true, "license": "MIT", + "peer": true, "bin": { "jiti": "bin/jiti.js" } @@ -12328,6 +12339,7 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -12577,7 +12589,6 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -13577,6 +13588,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -14335,7 +14347,6 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -14351,7 +14362,6 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -14489,8 +14499,7 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/read-cache": { "version": "1.0.0", @@ -14734,6 +14743,7 @@ "integrity": "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -15849,6 +15859,7 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -16377,6 +16388,7 @@ "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -16426,6 +16438,7 @@ "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", diff --git a/src/giffgaff/js/giffgaff-app.js b/src/giffgaff/js/giffgaff-app.js index dede3c9..a69b662 100644 --- a/src/giffgaff/js/giffgaff-app.js +++ b/src/giffgaff/js/giffgaff-app.js @@ -98,7 +98,7 @@ class GiffgaffApp { } isIgnoredUnhandledRejection(error) { - const payload = `${(error && error.message) || ''}\n${(error && error.stack) || ''}`.toLowerCase(); + const payload = `${error?.message ?? ''}\n${error?.stack ?? ''}`.toLowerCase(); const ignoredKeywords = [ 'wallet must has at least one account', 'wallet must have at least one account', @@ -686,7 +686,7 @@ class GiffgaffApp { const codeInput = document.getElementById('smsInlineCode'); const statusEl = document.getElementById('smsInlineStatus'); - const code = ((codeInput && codeInput.value) || '').trim(); + const code = (codeInput?.value ?? '').trim(); if (!/^\d{6}$/.test(code)) { uiController.showStatus(statusEl, tl('请输入6位数字验证码'), 'error'); @@ -719,8 +719,8 @@ class GiffgaffApp { const activationInput = document.getElementById('manualActivationCode'); const ssnInput = document.getElementById('manualSSN'); - const activationCode = ((activationInput && activationInput.value) || '').trim(); - const ssn = ((ssnInput && ssnInput.value) || '').trim(); + const activationCode = (activationInput?.value ?? '').trim(); + const ssn = (ssnInput?.value ?? '').trim(); if (!activationCode) { const statusEl = document.getElementById('esimReserveStatus'); diff --git a/src/giffgaff/js/modules/cookie-handler.js b/src/giffgaff/js/modules/cookie-handler.js index ffbe51c..43e9017 100644 --- a/src/giffgaff/js/modules/cookie-handler.js +++ b/src/giffgaff/js/modules/cookie-handler.js @@ -104,7 +104,7 @@ export class CookieHandler { return { valid: false }; } catch (err) { console.error(t('giffgaff.cookie.log.checkError'), err); - return { transientError: true, error: err && err.message }; + return { transientError: true, error: err?.message }; } } diff --git a/src/giffgaff/js/modules/esim-service.js b/src/giffgaff/js/modules/esim-service.js index e5b3114..5195d40 100644 --- a/src/giffgaff/js/modules/esim-service.js +++ b/src/giffgaff/js/modules/esim-service.js @@ -50,7 +50,7 @@ export class ESimService { if (data.errors) { const errorObj = data.errors[0]; - const errorMessage = (errorObj && errorObj.message) || (errorObj && errorObj.error) || JSON.stringify(errorObj); + const errorMessage = errorObj?.message || errorObj?.error || JSON.stringify(errorObj); throw new Error(errorMessage); } @@ -108,7 +108,7 @@ export class ESimService { if (data.errors) { const errorObj = data.errors[0]; - const errorMessage = (errorObj && errorObj.message) || (errorObj && errorObj.error) || JSON.stringify(errorObj); + const errorMessage = errorObj?.message || errorObj?.error || JSON.stringify(errorObj); throw new Error(errorMessage); } @@ -177,7 +177,7 @@ export class ESimService { throw new Error(errorMessage); } - const newSim = swapData && swapData.data && swapData.data.swapSim && swapData.data.swapSim.new; + const newSim = swapData?.data?.swapSim?.new; if (!newSim || !newSim.ssn) { throw new Error(t('giffgaff.esim.errors.swapMissingSim')); } @@ -231,7 +231,7 @@ export class ESimService { if (data.errors) { const errorObj = data.errors[0]; - const errorMessage = (errorObj && errorObj.message) || (errorObj && errorObj.error) || JSON.stringify(errorObj); + const errorMessage = errorObj?.message || errorObj?.error || JSON.stringify(errorObj); throw new Error(errorMessage); }