diff --git a/assertions.ts b/assertions.ts index 11bfbd5c22e..7069705efe0 100644 --- a/assertions.ts +++ b/assertions.ts @@ -50,7 +50,7 @@ export function assertRequiredRemovalDateSet( } if ( feature.compat_features && - Object.keys(feature.status.by_compat_key).length > 0 + Object.keys(feature.status.by_compat_key ?? {}).length > 0 ) return; throw new Error( diff --git a/index.ts b/index.ts index cd9a441237b..6720df3a324 100644 --- a/index.ts +++ b/index.ts @@ -107,7 +107,7 @@ const snapshots: { [key: string]: SnapshotData } = Object.fromEntries(yamlEntrie // TODO: validate the snapshot data. // Helper to iterate an optional string-or-array-of-strings value. -function* identifiers(value) { +function* identifiers(value: undefined | string | string[]) { if (value === undefined) { return; } diff --git a/package-lock.json b/package-lock.json index bd2a83ebe53..52fbfc38d97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "tsx": "^4.21.0", - "typescript": "^5.9.3", + "typescript": "^6.0.2", "typescript-eslint": "^8.58.0", "unified": "^11.0.5", "web-specs": "^3.82.1", @@ -6112,9 +6112,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index fde313bc145..5410760a7bc 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "tsx": "^4.21.0", - "typescript": "^5.9.3", + "typescript": "^6.0.2", "typescript-eslint": "^8.58.0", "unified": "^11.0.5", "web-specs": "^3.82.1", diff --git a/packages/compute-baseline/src/browser-compat-data/feature.test.ts b/packages/compute-baseline/src/browser-compat-data/feature.test.ts index 9ba2f7d07aa..1549b48858c 100644 --- a/packages/compute-baseline/src/browser-compat-data/feature.test.ts +++ b/packages/compute-baseline/src/browser-compat-data/feature.test.ts @@ -118,8 +118,15 @@ describe("features", function () { "css.properties.line-clamp", ).supportedInDetails(cr.version("100")); assert.equal(lineClamp.length, 1); - assert.equal(lineClamp[0]?.supported, true); - assert.equal(lineClamp[0]?.qualifications?.prefix, "-webkit-"); + const release = lineClamp[0]; + assert("supported" in release); + assert(release.supported === true); + assert(release.supported !== null); + if ("qualifications" in release) { + assert.equal(release.qualifications.prefix, "-webkit-"); + } else { + assert(false); + } }); it("returns mixed results for (un)prefixed features", function () { diff --git a/packages/compute-baseline/src/browser-compat-data/feature.ts b/packages/compute-baseline/src/browser-compat-data/feature.ts index 477c17f44ed..554551dab51 100644 --- a/packages/compute-baseline/src/browser-compat-data/feature.ts +++ b/packages/compute-baseline/src/browser-compat-data/feature.ts @@ -126,7 +126,7 @@ export class Feature { let unknown = false; for (const s of this.supportStatements(release.browser)) { const supported = s.supportedInDetails(release); - if (supported.supported && !supported.qualifications) { + if (supported.supported && !("qualifications" in supported)) { return true; } diff --git a/packages/compute-baseline/tsconfig.json b/packages/compute-baseline/tsconfig.json index 8da82e0b5ec..43b8de4d752 100644 --- a/packages/compute-baseline/tsconfig.json +++ b/packages/compute-baseline/tsconfig.json @@ -4,12 +4,14 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "resolveJsonModule": true, + "rootDir": "./src", "outDir": "./dist", "declaration": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, - "strict": true, - "noUncheckedIndexedAccess": true + "noUncheckedIndexedAccess": true, + "types": ["node", "mocha"], + "strict": false }, "include": ["./src"] } diff --git a/packages/web-features/package-lock.json b/packages/web-features/package-lock.json index 58babd505a2..d41f85bdbc1 100644 --- a/packages/web-features/package-lock.json +++ b/packages/web-features/package-lock.json @@ -10,7 +10,7 @@ "license": "Apache-2.0", "devDependencies": { "@types/node": "^20.19.37", - "typescript": "^5.9.3" + "typescript": "^6.0.2" } }, "node_modules/@types/node": { @@ -24,9 +24,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/packages/web-features/package.json b/packages/web-features/package.json index 4ad669352af..e622afda25a 100644 --- a/packages/web-features/package.json +++ b/packages/web-features/package.json @@ -29,6 +29,6 @@ }, "devDependencies": { "@types/node": "^20.19.37", - "typescript": "^5.9.3" + "typescript": "^6.0.2" } } diff --git a/packages/web-features/tsconfig.json b/packages/web-features/tsconfig.json index e483fa95943..5b8a54dccaf 100644 --- a/packages/web-features/tsconfig.json +++ b/packages/web-features/tsconfig.json @@ -4,6 +4,7 @@ "module": "ESNext", "moduleResolution": "Bundler", "typeRoots": ["./node_modules/@types"], - "declaration": true + "declaration": true, + "types": ["node"] } } diff --git a/tsconfig.json b/tsconfig.json index e41e938e6e1..37d770fc5f6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,10 @@ "moduleResolution": "Bundler", "esModuleInterop": true, "resolveJsonModule": true, - "noEmit": true + "noEmit": true, + "lib": ["ES2023"], + "types": ["node", "mocha"], + "strict": false }, "exclude": ["packages/", "gh-pages/"] } diff --git a/type-guards.ts b/type-guards.ts index 806a88139d4..8d6a00c0064 100644 --- a/type-guards.ts +++ b/type-guards.ts @@ -1,13 +1,19 @@ import type { FeatureData, FeatureMovedData, FeatureSplitData } from "./types"; export function isOrdinaryFeatureData(x: unknown): x is FeatureData { - return typeof x === "object" && "kind" in x && x.kind === "feature"; + return ( + typeof x === "object" && x !== null && "kind" in x && x.kind === "feature" + ); } export function isSplit(x: unknown): x is FeatureSplitData { - return typeof x === "object" && "kind" in x && x.kind === "split"; + return ( + typeof x === "object" && x !== null && "kind" in x && x.kind === "split" + ); } export function isMoved(x: unknown): x is FeatureMovedData { - return typeof x === "object" && "kind" in x && x.kind === "moved"; + return ( + typeof x === "object" && x !== null && "kind" in x && x.kind === "moved" + ); }