diff --git a/.changeset/yellow-beds-shake.md b/.changeset/yellow-beds-shake.md new file mode 100644 index 000000000..a3bb646d8 --- /dev/null +++ b/.changeset/yellow-beds-shake.md @@ -0,0 +1,13 @@ +--- +'@web/dev-server-import-maps': patch +'@web/dev-server-esbuild': patch +'@web/test-runner-mocha': patch +'@web/polyfills-loader': patch +'@web/test-runner-core': patch +'@web/dev-server-core': patch +'@web/config-loader': patch +'@web/test-runner': patch +'@web/dev-server': patch +--- + +Update TypeScript diff --git a/package.json b/package.json index 3d48396d8..6e1b42ace 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "rollup": "^3.15.0", "rollup-plugin-terser": "^7.0.2", "ts-node": "^10.4.0", - "typescript": "4.2.4" + "typescript": "~4.7.4" }, "resolutions": { "@lion/accordion": "^0.11.1", diff --git a/packages/config-loader/src/importConfig.js b/packages/config-loader/src/importConfig.js index 5e9c46212..f0e44abb4 100644 --- a/packages/config-loader/src/importConfig.js +++ b/packages/config-loader/src/importConfig.js @@ -35,7 +35,7 @@ async function importConfig(path) { return config.default; } catch (e) { - if (CJS_ERRORS.some(msg => e.stack.includes(msg))) { + if (CJS_ERRORS.some(msg => /** @type {Error} */(e).stack?.includes(msg))) { throw new ConfigLoaderError( 'You are using CommonJS syntax such as "require" or "module.exports" in a config loaded as es module. ' + 'Use import/export syntax, or load the file as a CommonJS module by ' + diff --git a/packages/config-loader/src/requireConfig.js b/packages/config-loader/src/requireConfig.js index c94bd8b5a..bb27c97fe 100644 --- a/packages/config-loader/src/requireConfig.js +++ b/packages/config-loader/src/requireConfig.js @@ -14,7 +14,7 @@ function requireConfig(path) { try { return require(path); } catch (e) { - if (ESM_ERRORS.some(msg => e.stack.includes(msg))) { + if (ESM_ERRORS.some(msg => /** @type {Error} **/(e).stack?.includes(msg))) { throw new ConfigLoaderError( 'You are using es module syntax in a config loaded as CommonJS module. ' + 'Use require/module.exports syntax, or load the file as es module by using the .mjs ' + diff --git a/packages/dev-server-core/src/middleware/pluginTransformMiddleware.ts b/packages/dev-server-core/src/middleware/pluginTransformMiddleware.ts index b1b57290d..7a5599370 100644 --- a/packages/dev-server-core/src/middleware/pluginTransformMiddleware.ts +++ b/packages/dev-server-core/src/middleware/pluginTransformMiddleware.ts @@ -5,6 +5,7 @@ import { DevServerCoreConfig } from '../server/DevServerCoreConfig'; import { PluginTransformCache } from './PluginTransformCache'; import { getRequestFilePath, getResponseBody, RequestCancelledError } from '../utils'; import { Logger } from '../logger/Logger'; +import type { PluginSyntaxError } from '../logger/PluginSyntaxError'; /** * Sets up a middleware which allows plugins to transform files before they are served to the browser. @@ -84,15 +85,17 @@ export function pluginTransformMiddleware( cacheKey, ); } - } catch (error) { - if (error instanceof RequestCancelledError) { + } catch (e) { + if (e instanceof RequestCancelledError) { return undefined; } context.body = 'Error while transforming file. See the terminal for more information.'; context.status = 500; + const error = e as NodeJS.ErrnoException; + if (error.name === 'PluginSyntaxError') { - logger.logSyntaxError(error); + logger.logSyntaxError(error as PluginSyntaxError); return; } diff --git a/packages/dev-server-core/src/plugins/transformModuleImportsPlugin.ts b/packages/dev-server-core/src/plugins/transformModuleImportsPlugin.ts index c4dace11a..5995721dc 100644 --- a/packages/dev-server-core/src/plugins/transformModuleImportsPlugin.ts +++ b/packages/dev-server-core/src/plugins/transformModuleImportsPlugin.ts @@ -117,13 +117,14 @@ export async function transformImports( const parseResult = await parse(code, filePath); imports = parseResult[0] as any as ParsedImport[]; } catch (error) { - if (typeof error.idx === 'number') { + if (typeof (error as Error & { idx: number }).idx === 'number') { + const lexerError = error as Error & { idx: number }; throw new PluginSyntaxError( 'Syntax error', filePath, code, - code.slice(0, error.idx).split('\n').length, - error.idx - code.lastIndexOf('\n', error.idx - 1), + code.slice(0, lexerError.idx).split('\n').length, + lexerError.idx - code.lastIndexOf('\n', lexerError.idx - 1), ); } throw error; diff --git a/packages/dev-server-core/test/plugins/transformModuleImportsPlugin.test.ts b/packages/dev-server-core/test/plugins/transformModuleImportsPlugin.test.ts index 9c38c0d23..0278be5fc 100644 --- a/packages/dev-server-core/test/plugins/transformModuleImportsPlugin.test.ts +++ b/packages/dev-server-core/test/plugins/transformModuleImportsPlugin.test.ts @@ -2,6 +2,7 @@ import { expect } from 'chai'; import fetch from 'node-fetch'; import { transformImports } from '../../src/plugins/transformModuleImportsPlugin'; +import type { PluginSyntaxError } from '../../src/logger/PluginSyntaxError'; import { createTestServer } from '../helpers'; const defaultFilePath = '/root/my-file.js'; @@ -257,10 +258,10 @@ describe('transformImports()', () => { await transformImports('\n\nconst file = "a', defaultFilePath, defaultResolveImport); } catch (error) { thrown = true; - expect(error.message).to.equal('Syntax error'); - expect(error.filePath).to.equal('/root/my-file.js'); - expect(error.column).to.equal(16); - expect(error.line).to.equal(3); + expect((error as PluginSyntaxError).message).to.equal('Syntax error'); + expect((error as PluginSyntaxError).filePath).to.equal('/root/my-file.js'); + expect((error as PluginSyntaxError).column).to.equal(16); + expect((error as PluginSyntaxError).line).to.equal(3); } expect(thrown).to.be.true; diff --git a/packages/dev-server-esbuild/src/EsbuildPlugin.ts b/packages/dev-server-esbuild/src/EsbuildPlugin.ts index 477f21da4..5655e4662 100644 --- a/packages/dev-server-esbuild/src/EsbuildPlugin.ts +++ b/packages/dev-server-esbuild/src/EsbuildPlugin.ts @@ -6,7 +6,7 @@ import { DevServerCoreConfig, getRequestFilePath, } from '@web/dev-server-core'; -import type { TransformOptions } from 'esbuild'; +import type { TransformOptions, BuildFailure } from 'esbuild'; import { Loader, Message, transform } from 'esbuild'; import { promisify } from 'util'; import path from 'path'; @@ -203,8 +203,8 @@ export class EsbuildPlugin implements Plugin { return transformedCode; } catch (e) { - if (Array.isArray(e.errors)) { - const msg = e.errors[0] as Message; + if (Array.isArray((e as BuildFailure).errors)) { + const msg = (e as BuildFailure).errors[0] as Message; if (msg.location) { throw new PluginSyntaxError( diff --git a/packages/dev-server-esbuild/src/browser-targets.ts b/packages/dev-server-esbuild/src/browser-targets.ts index 4cc58f62d..67c9ffea3 100644 --- a/packages/dev-server-esbuild/src/browser-targets.ts +++ b/packages/dev-server-esbuild/src/browser-targets.ts @@ -29,7 +29,9 @@ function createModernTarget() { ]; } catch (error) { throw new Error( - `Error while initializing default browser targets for @web/dev-server-esbuild: ${error.message}`, + `Error while initializing default browser targets for @web/dev-server-esbuild: ${ + (error as Error).message + }`, ); } } diff --git a/packages/dev-server-import-maps/src/importMapsPlugin.ts b/packages/dev-server-import-maps/src/importMapsPlugin.ts index 2b0fed6b5..be127bcdb 100644 --- a/packages/dev-server-import-maps/src/importMapsPlugin.ts +++ b/packages/dev-server-import-maps/src/importMapsPlugin.ts @@ -148,7 +148,9 @@ export function importMapsPlugin(config: ImportMapsPluginConfig = {}): Plugin { } catch (error) { const filePath = getRequestFilePath(context.url, rootDir); const relativeFilePath = path.relative(process.cwd(), filePath); - logger.warn(`Failed to parse import map in "${relativeFilePath}": ${error.message}`); + logger.warn( + `Failed to parse import map in "${relativeFilePath}": ${(error as Error).message}`, + ); return; } } diff --git a/packages/dev-server/src/plugins/esbuildPlugin.ts b/packages/dev-server/src/plugins/esbuildPlugin.ts index 8ec259b2f..42a4c4243 100644 --- a/packages/dev-server/src/plugins/esbuildPlugin.ts +++ b/packages/dev-server/src/plugins/esbuildPlugin.ts @@ -3,7 +3,7 @@ function requirePlugin() { const path = require.resolve('@web/dev-server-esbuild', { paths: [__dirname, process.cwd()] }); return require(path); } catch (error) { - if (error.code === 'MODULE_NOT_FOUND') { + if ((error as NodeJS.ErrnoException).code === 'MODULE_NOT_FOUND') { throw new Error( 'You need to add @web/dev-server-esbuild as a dependency of your project to use the esbuild flags.', ); diff --git a/packages/polyfills-loader/src/createPolyfillsData.ts b/packages/polyfills-loader/src/createPolyfillsData.ts index 3998a8216..4915e0626 100644 --- a/packages/polyfills-loader/src/createPolyfillsData.ts +++ b/packages/polyfills-loader/src/createPolyfillsData.ts @@ -13,7 +13,7 @@ export async function createPolyfillsData(cfg: PolyfillsLoaderConfig): Promise
{
- private originalFunctions: Partial