From 51c6fcc76b127a445d3b4530894b89829ef52fc6 Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 21 Jul 2026 08:10:33 -0700 Subject: [PATCH] chore(many): upgrade Typescript --- core/tsconfig.json | 32 +-- package-lock.json | 3 +- packages/angular/tsconfig.json | 22 +- packages/angular/tsconfig.schematics.json | 6 +- packages/react-router/package.json | 2 +- packages/react-router/tsconfig.json | 18 +- packages/react/package-lock.json | 224 ++++++++---------- packages/react/package.json | 4 +- packages/react/src/components/IonPage.tsx | 2 +- packages/react/src/components/IonRoute.tsx | 2 +- .../react/src/components/IonRouterOutlet.tsx | 2 +- .../src/components/createRoutingComponent.tsx | 2 +- .../components/navigation/IonBackButton.tsx | 2 +- .../src/components/navigation/IonTabBar.tsx | 2 +- .../src/components/navigation/IonTabs.tsx | 2 +- .../react/src/lifecycle/IonLifeCycleHOC.tsx | 2 +- .../react/src/routing/OutletPageManager.tsx | 2 +- packages/react/src/routing/PageManager.tsx | 2 +- packages/react/tsconfig.json | 24 +- packages/vue-router/package.json | 2 +- packages/vue-router/tsconfig.json | 16 +- packages/vue/package.json | 2 +- packages/vue/tsconfig.json | 15 +- tsconfig.json | 8 +- 24 files changed, 138 insertions(+), 260 deletions(-) diff --git a/core/tsconfig.json b/core/tsconfig.json index 6e2271dfde6..7b9616e3df5 100644 --- a/core/tsconfig.json +++ b/core/tsconfig.json @@ -1,34 +1,18 @@ { + "extends": "../tsconfig", "compilerOptions": { - "strict": true, - "alwaysStrict": true, - "allowSyntheticDefaultImports": true, - "allowUnreachableCode": false, - "declaration": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, "assumeChangesOnlyAffectDirectDependencies": true, - "jsx": "react", - "jsxFactory": "h", - "jsxFragmentFactory": "Fragment", + // dom.iterable required for for...of iteration over DOM collections (NodeList, HTMLCollection) + // See: slot-mutation-controller.ts, popover.tsx, router/utils/dom.ts "lib": [ "dom", "dom.iterable", - "es2017", - "es2020", - "es2021", - "esnext" + "es2022" ], - "module": "esnext", - "moduleResolution": "node", - "noImplicitAny": true, - "noImplicitReturns": true, - "noUnusedLocals": true, - "noUnusedParameters": true, + "jsx": "react", + "jsxFactory": "h", + "jsxFragmentFactory": "Fragment", "outDir": ".tmp", - "pretty": true, - "removeComments": false, - "target": "es2017", "baseUrl": ".", "paths": { "@utils/*": ["src/utils/*"], @@ -37,7 +21,7 @@ } }, "include": [ - "src", + "src" ], "exclude": [ "node_modules" diff --git a/package-lock.json b/package-lock.json index 54ec41085ba..d071e527ba9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9288,7 +9288,8 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true + "dev": true, + "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { "version": "6.6.2", diff --git a/packages/angular/tsconfig.json b/packages/angular/tsconfig.json index 15c0467cb48..aa29e696770 100644 --- a/packages/angular/tsconfig.json +++ b/packages/angular/tsconfig.json @@ -1,4 +1,5 @@ { + "extends": "../../tsconfig", "angularCompilerOptions": { "annotateForClosureCompiler": true, "strictMetadataEmit": true, @@ -8,28 +9,11 @@ "compilationMode": "partial" }, "compilerOptions": { - "alwaysStrict": true, - "strict": true, - "allowSyntheticDefaultImports": true, - "allowUnreachableCode": false, - "declaration": true, "declarationDir": "dist", - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, - "lib": ["dom", "es2017"], "module": "es2022", - "moduleResolution": "bundler", - "noImplicitAny": true, - "noImplicitReturns": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "outDir": "build/es2015", - "pretty": true, - "removeComments": false, - "importHelpers": true, + "outDir": "build/es2022", "rootDir": "./", - "strictPropertyInitialization": false, - "target": "es2015", + "target": "es2022", "plugins": [ { "name": "typescript-eslint-language-service" diff --git a/packages/angular/tsconfig.schematics.json b/packages/angular/tsconfig.schematics.json index 101b2032288..3343ff4b475 100644 --- a/packages/angular/tsconfig.schematics.json +++ b/packages/angular/tsconfig.schematics.json @@ -5,16 +5,14 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowUnreachableCode": false, - "lib": ["es2017", "dom"], + "lib": ["es2022"], "module": "nodenext", "moduleResolution": "nodenext", "sourceMap": false, "pretty": true, "rootDir": "schematics", - "target": "es2017", + "target": "es2022", "outDir": "dist/schematics", - // TypeScript 6.0 defaults `types` to []; the devkit .d.ts the schematics - // consume reference Node globals (Buffer, node:url), so opt them back in. "types": ["node"] }, "exclude": ["node_modules"], diff --git a/packages/react-router/package.json b/packages/react-router/package.json index b5626d0beb9..eab1f0ccd38 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -63,7 +63,7 @@ "react-router-dom": "^6.30.0", "rimraf": "^3.0.2", "rollup": "^4.2.0", - "typescript": "^4.0.5" + "typescript": "^6.0.0" }, "prettier": "@ionic/prettier-config" } diff --git a/packages/react-router/tsconfig.json b/packages/react-router/tsconfig.json index d51e26286c4..d8380c5d5e2 100644 --- a/packages/react-router/tsconfig.json +++ b/packages/react-router/tsconfig.json @@ -1,27 +1,13 @@ { + "extends": "../../tsconfig", "compilerOptions": { - "strict": true, - "allowUnreachableCode": false, - "allowSyntheticDefaultImports": true, - "declaration": true, "emitDecoratorMetadata": true, - "experimentalDecorators": true, "esModuleInterop": true, - "lib": ["dom", "es2015"], - "importHelpers": true, - "module": "es2015", - "moduleResolution": "node", - "noImplicitAny": true, - "noImplicitReturns": true, - "noUnusedLocals": true, - "noUnusedParameters": true, "outDir": "dist", "declarationDir": "dist/types", - "removeComments": false, "inlineSources": true, "sourceMap": true, - "jsx": "react", - "target": "es2017" + "jsx": "react" }, "include": ["src/**/*.ts", "src/**/*.tsx"], "exclude": ["**/__tests__/**"], diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index feb308cd8b0..3c5a198c3c8 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -36,8 +36,8 @@ "react-dom": "^18.3.1", "rimraf": "^3.0.2", "rollup": "^4.2.0", - "ts-jest": "^29.1.3", - "typescript": "^5.0.0" + "ts-jest": "^29.4.0", + "typescript": "^6.0.0" }, "peerDependencies": { "react": ">=16.8.6", @@ -3026,12 +3026,6 @@ "node": ">=8" } }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, "node_modules/async-exit-hook": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", @@ -4271,21 +4265,6 @@ "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/electron-to-chromium": { "version": "1.5.11", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.11.tgz", @@ -5088,36 +5067,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5515,6 +5464,28 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -6821,40 +6792,6 @@ "node": ">=8" } }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -9136,6 +9073,13 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, "node_modules/new-github-release-url": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-1.0.0.tgz", @@ -10713,13 +10657,11 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -10748,24 +10690,6 @@ "semver": "bin/semver.js" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -11362,20 +11286,21 @@ } }, "node_modules/ts-jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", - "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "ejs": "^3.1.10", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" @@ -11385,11 +11310,12 @@ }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { @@ -11406,9 +11332,25 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-jest/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", @@ -11595,10 +11537,11 @@ } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11607,6 +11550,20 @@ "node": ">=14.17" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -11926,6 +11883,13 @@ "node": ">=8" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", diff --git a/packages/react/package.json b/packages/react/package.json index 2a2fe96cfba..febb9dfeb70 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -71,8 +71,8 @@ "react-dom": "^18.3.1", "rimraf": "^3.0.2", "rollup": "^4.2.0", - "ts-jest": "^29.1.3", - "typescript": "^5.0.0" + "ts-jest": "^29.4.0", + "typescript": "^6.0.0" }, "jest": { "testEnvironment": "jsdom", diff --git a/packages/react/src/components/IonPage.tsx b/packages/react/src/components/IonPage.tsx index 67e6dadfbec..ceddbd70afc 100644 --- a/packages/react/src/components/IonPage.tsx +++ b/packages/react/src/components/IonPage.tsx @@ -15,7 +15,7 @@ interface IonPageInternalProps extends IonPageProps { } class IonPageInternal extends React.Component { - context!: React.ContextType; + declare context: React.ContextType; constructor(props: IonPageInternalProps) { super(props); diff --git a/packages/react/src/components/IonRoute.tsx b/packages/react/src/components/IonRoute.tsx index 29e1708fd63..34523bef238 100644 --- a/packages/react/src/components/IonRoute.tsx +++ b/packages/react/src/components/IonRoute.tsx @@ -15,7 +15,7 @@ export interface IonRouteProps { interface IonRouteState {} export class IonRoute extends React.PureComponent { - context!: React.ContextType; + declare context: React.ContextType; render() { const IonRouteInner = this.context.getIonRoute(); diff --git a/packages/react/src/components/IonRouterOutlet.tsx b/packages/react/src/components/IonRouterOutlet.tsx index 7ebf9765e21..5440aa4b8d9 100644 --- a/packages/react/src/components/IonRouterOutlet.tsx +++ b/packages/react/src/components/IonRouterOutlet.tsx @@ -25,7 +25,7 @@ interface InternalProps extends Props { interface InternalState {} class IonRouterOutletContainer extends React.Component { - context!: React.ContextType; + declare context: React.ContextType; private readonly outletId: string; constructor(props: InternalProps) { diff --git a/packages/react/src/components/createRoutingComponent.tsx b/packages/react/src/components/createRoutingComponent.tsx index 64d556b9139..7409e8d2a77 100644 --- a/packages/react/src/components/createRoutingComponent.tsx +++ b/packages/react/src/components/createRoutingComponent.tsx @@ -32,7 +32,7 @@ export const createRoutingComponent = (tagName: string, c const displayName = dashToPascalCase(tagName); const ReactComponent = class extends React.Component> { - context!: React.ContextType; + declare context: React.ContextType; ref: React.RefObject; stableMergedRefs: React.RefCallback; diff --git a/packages/react/src/components/navigation/IonBackButton.tsx b/packages/react/src/components/navigation/IonBackButton.tsx index 58ed6be6dac..3229fb18390 100644 --- a/packages/react/src/components/navigation/IonBackButton.tsx +++ b/packages/react/src/components/navigation/IonBackButton.tsx @@ -13,7 +13,7 @@ type Props = PropsWithChildren< >; export class IonBackButton extends React.Component { - context!: React.ContextType; + declare context: React.ContextType; clickButton = (e: React.MouseEvent) => { /** diff --git a/packages/react/src/components/navigation/IonTabBar.tsx b/packages/react/src/components/navigation/IonTabBar.tsx index 0c5da8dd383..7a4c5401294 100644 --- a/packages/react/src/components/navigation/IonTabBar.tsx +++ b/packages/react/src/components/navigation/IonTabBar.tsx @@ -58,7 +58,7 @@ const matchesTab = (pathname: string, href: string | undefined): boolean => { }; class IonTabBarUnwrapped extends React.PureComponent { - context!: React.ContextType; + declare context: React.ContextType; constructor(props: InternalProps) { super(props); diff --git a/packages/react/src/components/navigation/IonTabs.tsx b/packages/react/src/components/navigation/IonTabs.tsx index 135e51fec08..8bb962ff515 100644 --- a/packages/react/src/components/navigation/IonTabs.tsx +++ b/packages/react/src/components/navigation/IonTabs.tsx @@ -52,7 +52,7 @@ export class IonTabs extends React.Component { return true; } - context!: React.ContextType; + declare context: React.ContextType; /** * `routerOutletRef` allows users to add a `ref` to `IonRouterOutlet`. * Without this, `ref.current` will be `undefined` in the user's app, diff --git a/packages/react/src/lifecycle/IonLifeCycleHOC.tsx b/packages/react/src/lifecycle/IonLifeCycleHOC.tsx index 234944f2d5c..9ff2455e035 100644 --- a/packages/react/src/lifecycle/IonLifeCycleHOC.tsx +++ b/packages/react/src/lifecycle/IonLifeCycleHOC.tsx @@ -6,7 +6,7 @@ import { IonLifeCycleContext } from '../contexts/IonLifeCycleContext'; export const withIonLifeCycle = (WrappedComponent: React.ComponentType) => { return class IonLifeCycle extends React.Component { - context!: React.ContextType; + declare context: React.ContextType; componentRef = React.createRef(); constructor(props: any) { diff --git a/packages/react/src/routing/OutletPageManager.tsx b/packages/react/src/routing/OutletPageManager.tsx index 79ad03238b3..abb9bda0481 100644 --- a/packages/react/src/routing/OutletPageManager.tsx +++ b/packages/react/src/routing/OutletPageManager.tsx @@ -18,7 +18,7 @@ interface OutletPageManagerProps { export class OutletPageManager extends React.Component { ionLifeCycleContext!: React.ContextType; - context!: React.ContextType; + declare context: React.ContextType; ionRouterOutlet: HTMLIonRouterOutletElement | undefined; outletIsReady: boolean; diff --git a/packages/react/src/routing/PageManager.tsx b/packages/react/src/routing/PageManager.tsx index e62b1282c2b..212fc8181b6 100644 --- a/packages/react/src/routing/PageManager.tsx +++ b/packages/react/src/routing/PageManager.tsx @@ -15,7 +15,7 @@ interface PageManagerProps { export class PageManager extends React.PureComponent { ionLifeCycleContext!: React.ContextType; - context!: React.ContextType; + declare context: React.ContextType; ionPageElementRef: React.RefObject; stableMergedRefs: React.RefCallback; diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json index 8e9aa65bdf9..a3821a15fb0 100644 --- a/packages/react/tsconfig.json +++ b/packages/react/tsconfig.json @@ -1,31 +1,15 @@ { + "extends": "../../tsconfig", "compilerOptions": { - "strict": true, - "allowUnreachableCode": false, - "allowSyntheticDefaultImports": true, - "declaration": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, "esModuleInterop": true, - "lib": [ - "dom", - "es2020", - "dom.iterable" - ], - "importHelpers": true, - "module": "esnext", - "moduleResolution": "bundler", - "noImplicitAny": true, - "noImplicitReturns": true, - "noUnusedLocals": true, - "noUnusedParameters": true, "outDir": "dist", "declarationDir": "dist/types", - "removeComments": false, + "rootDir": "src", + "types": ["node", "jest", "@testing-library/jest-dom"], "inlineSources": true, "sourceMap": true, "jsx": "react-jsx", - "target": "es2020", + "target": "es2022" }, "include": ["src/**/*.ts", "src/**/*.tsx"], "compileOnSave": false, diff --git a/packages/vue-router/package.json b/packages/vue-router/package.json index 9064ff94397..a5ca82b027a 100644 --- a/packages/vue-router/package.json +++ b/packages/vue-router/package.json @@ -56,7 +56,7 @@ "prettier": "^2.8.3", "rimraf": "^3.0.2", "rollup": "^4.2.0", - "typescript": "^5.7.3", + "typescript": "^6.0.0", "vue": "^3.5.0", "vue-router": "^5.0.6" } diff --git a/packages/vue-router/tsconfig.json b/packages/vue-router/tsconfig.json index 9c9920d5eb4..836ab628991 100644 --- a/packages/vue-router/tsconfig.json +++ b/packages/vue-router/tsconfig.json @@ -1,24 +1,12 @@ { + "extends": "../../tsconfig", "compilerOptions": { - "allowUnreachableCode": false, - "allowSyntheticDefaultImports": true, - "declaration": true, "emitDecoratorMetadata": true, - "experimentalDecorators": true, "esModuleInterop": true, - "lib": ["dom", "es2020"], - "module": "esnext", - "moduleResolution": "node", - "noImplicitAny": true, - "noImplicitReturns": true, - "noUnusedLocals": true, - "noUnusedParameters": true, "outDir": "dist-transpiled", "declarationDir": "dist/types", - "removeComments": false, "sourceMap": true, - "jsx": "react", - "target": "es2017" + "jsx": "react" }, "include": ["src/**/*.ts", "src/**/*.tsx"], "exclude": ["./__tests__/**", "node_modules", "setupTests.ts"], diff --git a/packages/vue/package.json b/packages/vue/package.json index d1d493dd678..3eb247ee437 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -63,7 +63,7 @@ "prettier": "^2.8.3", "rimraf": "^3.0.2", "rollup": "^4.2.0", - "typescript": "^5.7.3", + "typescript": "^6.0.0", "vue": "^3.5.0", "vue-router": "^5.0.6" }, diff --git a/packages/vue/tsconfig.json b/packages/vue/tsconfig.json index 3fdabe6f1a3..5f401386e31 100644 --- a/packages/vue/tsconfig.json +++ b/packages/vue/tsconfig.json @@ -1,24 +1,13 @@ { + "extends": "../../tsconfig", "compilerOptions": { - "allowUnreachableCode": false, - "allowSyntheticDefaultImports": true, - "declaration": true, "emitDecoratorMetadata": true, - "experimentalDecorators": true, "esModuleInterop": true, - "lib": ["dom", "es2020"], - "module": "ES2020", - "moduleResolution": "bundler", - "noImplicitAny": true, "noImplicitReturns": false, - "noUnusedLocals": true, - "noUnusedParameters": true, "outDir": "dist", "declarationDir": "dist/types", - "removeComments": false, "sourceMap": true, - "jsx": "react", - "target": "es2017" + "jsx": "react" }, "include": ["src/**/*.ts", "src/**/*.tsx"], "exclude": ["./__tests__/**", "node_modules", "setupTests.ts"], diff --git a/tsconfig.json b/tsconfig.json index cd3ebdcbdd3..d311770e393 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,10 +10,10 @@ "importHelpers": true, "lib": [ "dom", - "es2017", + "es2022" ], - "module": "es2015", - "moduleResolution": "node", + "module": "esnext", + "moduleResolution": "bundler", "noImplicitAny": true, "noImplicitReturns": true, "noUnusedLocals": true, @@ -21,7 +21,7 @@ "pretty": true, "removeComments": false, "strictPropertyInitialization": false, - "target": "es2017", + "target": "es2022", "paths": { "@ionic/core/hydrate": [ "./core/hydrate"