From dde36767d841b347cd902ee317c1c13f5293854d Mon Sep 17 00:00:00 2001 From: ZHAO JinXiang Date: Mon, 31 Jul 2023 01:02:58 +0800 Subject: [PATCH] fix: type error --- .vscode/settings.json | 3 +- .../cases/context/delete-file/index.test.ts | 53 +++++++++++-------- packages/rspack/src/ErrorHelpers.js | 12 ++++- packages/rspack/src/ResolverFactory.js | 8 ++- .../src/config/browserslistTargetHandler.js | 2 +- packages/rspack/src/config/target.js | 10 +++- packages/rspack/src/lib/BannerPlugin.js | 17 ++++-- packages/rspack/src/lib/Cache.js | 10 ++++ packages/rspack/src/lib/CacheFacade.js | 5 +- packages/rspack/src/lib/EnvironmentPlugin.js | 8 ++- packages/rspack/src/lib/HookWebpackError.js | 4 +- .../rspack/src/lib/LoaderOptionsPlugin.js | 9 +++- .../rspack/src/lib/ModuleFilenameHelpers.js | 15 ++++-- packages/rspack/src/lib/Template.js | 43 ++++++++++----- .../rspack/src/lib/cache/getLazyHashedEtag.js | 7 ++- packages/rspack/src/lib/formatLocation.js | 6 ++- .../src/lib/util/create-schema-validation.js | 2 + packages/rspack/src/lib/util/memoize.js | 2 + .../rspack/src/loader-runner/loadLoader.js | 8 +++ .../src/schemas/plugins/BannerPlugin.check.js | 2 + .../plugins/LoaderOptionsPlugin.check.js | 1 + packages/rspack/src/util/cleverMerge.js | 25 ++++++++- packages/rspack/src/util/hash/BatchedHash.js | 1 + packages/rspack/src/util/hash/wasm-hash.js | 2 + packages/rspack/src/util/identifier.js | 17 ++++++ packages/rspack/tsconfig.json | 3 ++ 26 files changed, 212 insertions(+), 63 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 13fbc411a762..0896623893f1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -44,5 +44,6 @@ "tokio", "ukey", "Ukey" - ] + ], + "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/packages/playground/cases/context/delete-file/index.test.ts b/packages/playground/cases/context/delete-file/index.test.ts index 61a6ea287df1..4dbc8fcd9deb 100644 --- a/packages/playground/cases/context/delete-file/index.test.ts +++ b/packages/playground/cases/context/delete-file/index.test.ts @@ -1,26 +1,33 @@ import { test, expect } from "@/fixtures"; - -test("delete file should work", async ({ page, request, fileAction, rspack }) => { - // asset page status - const statusText = await page.textContent("#root"); - expect(statusText).toBe('__PAGE_RENDER__'); - // asset script content - const response = await request.get(`http://localhost:${rspack.devServer.options.port}/main.js`); - const bodyResponse = (await response.body()).toString(); - expect(bodyResponse).toContain('this is mod1'); - expect(bodyResponse).toContain('this is mod2'); - // mock file delete action - fileAction.deleteFile("src/mod1.js"); - await rspack.waitingForHmr(async () => { - // ensure page status changed - const statusText = await page.textContent("#root"); - return statusText === "__HMR_UPDATED__"; - }); - // asset new script content - const responseAfterDelete = await request.get(`http://localhost:${rspack.devServer.options.port}/main.js`); - const bodyResponseAfterDelete = (await responseAfterDelete.body()).toString(); - expect(bodyResponseAfterDelete).not.toContain('this is mod1'); - expect(bodyResponseAfterDelete).toContain('this is mod2'); +test("delete file should work", async ({ + page, + request, + fileAction, + rspack +}) => { + // asset page status + const statusText = await page.textContent("#root"); + expect(statusText).toBe("__PAGE_RENDER__"); + // asset script content + const response = await request.get( + `http://localhost:${rspack.devServer.options.port}/main.js` + ); + const bodyResponse = (await response.body()).toString(); + expect(bodyResponse).toContain("this is mod1"); + expect(bodyResponse).toContain("this is mod2"); + // mock file delete action + fileAction.deleteFile("src/mod1.js"); + await rspack.waitingForHmr(async () => { + // ensure page status changed + const statusText = await page.textContent("#root"); + return statusText === "__HMR_UPDATED__"; + }); + // asset new script content + const responseAfterDelete = await request.get( + `http://localhost:${rspack.devServer.options.port}/main.js` + ); + const bodyResponseAfterDelete = (await responseAfterDelete.body()).toString(); + expect(bodyResponseAfterDelete).not.toContain("this is mod1"); + expect(bodyResponseAfterDelete).toContain("this is mod2"); }); - diff --git a/packages/rspack/src/ErrorHelpers.js b/packages/rspack/src/ErrorHelpers.js index 1ae08b73191e..d800289364bb 100644 --- a/packages/rspack/src/ErrorHelpers.js +++ b/packages/rspack/src/ErrorHelpers.js @@ -14,6 +14,7 @@ const loaderFlag = "LOADER_EXECUTION"; const webpackOptionsFlag = "WEBPACK_OPTIONS"; +// @ts-expect-error exports.cutOffByFlag = (stack, flag) => { stack = stack.split("\n"); for (let i = 0; i < stack.length; i++) { @@ -23,26 +24,31 @@ exports.cutOffByFlag = (stack, flag) => { } return stack.join("\n"); }; +// @ts-expect-error exports.cutOffLoaderExecution = stack => exports.cutOffByFlag(stack, loaderFlag); - +// @ts-expect-error exports.cutOffWebpackOptions = stack => exports.cutOffByFlag(stack, webpackOptionsFlag); +// @ts-expect-error exports.cutOffMultilineMessage = (stack, message) => { stack = stack.split("\n"); message = message.split("\n"); - + // @ts-expect-error const result = []; + // @ts-expect-error stack.forEach((line, idx) => { if (!line.includes(message[idx])) result.push(line); }); + // @ts-expect-error return result.join("\n"); }; +// @ts-expect-error exports.cutOffMessage = (stack, message) => { const nextLine = stack.indexOf("\n"); if (nextLine === -1) { @@ -53,12 +59,14 @@ exports.cutOffMessage = (stack, message) => { } }; +// @ts-expect-error exports.cleanUp = (stack, message) => { stack = exports.cutOffLoaderExecution(stack); stack = exports.cutOffMessage(stack, message); return stack; }; +// @ts-expect-error exports.cleanUpWebpackOptions = (stack, message) => { stack = exports.cutOffWebpackOptions(stack); stack = exports.cutOffMultilineMessage(stack, message); diff --git a/packages/rspack/src/ResolverFactory.js b/packages/rspack/src/ResolverFactory.js index ad7b634109f7..300f6abcd20f 100644 --- a/packages/rspack/src/ResolverFactory.js +++ b/packages/rspack/src/ResolverFactory.js @@ -20,8 +20,10 @@ const { /** @typedef {import("enhanced-resolve").ResolveOptions} ResolveOptions */ /** @typedef {import("enhanced-resolve").Resolver} Resolver */ -/** @typedef {import("../declarations/WebpackOptions").ResolveOptions} WebpackResolveOptions */ -/** @typedef {import("../declarations/WebpackOptions").ResolvePluginInstance} ResolvePluginInstance */ +// /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} WebpackResolveOptions */ +// /** @typedef {import("../declarations/WebpackOptions").ResolvePluginInstance} ResolvePluginInstance */ +/** @typedef {any} WebpackResolveOptions */ +/** @typedef {any} ResolvePluginInstance */ /** @typedef {WebpackResolveOptions & {dependencyType?: string, resolveToContext?: boolean }} ResolveOptionsWithDependencyType */ /** @@ -48,6 +50,7 @@ const convertToResolveOptions = resolveOptionsWithDepType => { plugins: plugins && /** @type {ResolvePluginInstance[]} */ ( + // @ts-expect-error plugins.filter(item => item !== "...") ) }; @@ -63,6 +66,7 @@ const convertToResolveOptions = resolveOptionsWithDepType => { partialOptions ); + // @ts-expect-error return removeOperations( resolveByProperty(options, "byDependency", dependencyType) ); diff --git a/packages/rspack/src/config/browserslistTargetHandler.js b/packages/rspack/src/config/browserslistTargetHandler.js index 1a2823d26e67..ecd545106252 100644 --- a/packages/rspack/src/config/browserslistTargetHandler.js +++ b/packages/rspack/src/config/browserslistTargetHandler.js @@ -54,7 +54,7 @@ const parse = (input, context) => { /** * @param {string} input input string * @param {string} context the context directory - * @returns {string[] | undefined} selected browsers + * @returns {string[] | undefined | null} selected browsers */ const load = (input, context) => { const { configPath, env, query } = parse(input, context); diff --git a/packages/rspack/src/config/target.js b/packages/rspack/src/config/target.js index 107852deccbf..f22694c2ffe7 100644 --- a/packages/rspack/src/config/target.js +++ b/packages/rspack/src/config/target.js @@ -14,6 +14,7 @@ const getBrowserslistTargetHandler = memoize(() => require("./browserslistTargetHandler") ); +// @ts-expect-error const getDefaultTarget = context => { // TODO: align with webpack // const browsers = getBrowserslistTargetHandler().load(null, context); @@ -69,10 +70,12 @@ const getDefaultTarget = context => { /** @template A @template B @typedef {(A & Never) | (Never & B) | (A & B)} Mix */ /** @typedef {Mix, Mix>} TargetProperties */ +// @ts-expect-error const versionDependent = (major, minor) => { if (!major) return () => /** @type {undefined} */ (undefined); major = +major; minor = minor ? +minor : 0; + // @ts-expect-error return (vMajor, vMinor = 0) => { return major > vMajor || (major === vMajor && minor >= vMinor); }; @@ -87,6 +90,7 @@ const TARGETS = [ (rest, context) => { const browserslistTargetHandler = getBrowserslistTargetHandler(); const browsers = browserslistTargetHandler.load( + // @ts-expect-error rest ? rest.trim() : null, context ); @@ -149,6 +153,7 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis "[async-]node[X[.Y]]", "Node.js in version X.Y. The 'async-' prefix will load chunks asynchronously via 'fs' and 'vm' instead of 'require()'. Examples: node14.5, async-node10.", /^(async-)?node(\d+(?:\.(\d+))?)?$/, + // @ts-expect-error (asyncFlag, major, minor) => { const v = versionDependent(major, minor); // see https://node.green/ @@ -186,6 +191,7 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis "electron[X[.Y]]-main/preload/renderer", "Electron in version X.Y. Script is running in main, preload resp. renderer context.", /^electron(\d+(?:\.(\d+))?)?-(main|preload|renderer)$/, + // @ts-expect-error (major, minor, context) => { const v = versionDependent(major, minor); // see https://node.green/ + https://github.com/electron/releases @@ -227,6 +233,7 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis "nwjs[X[.Y]] / node-webkit[X[.Y]]", "NW.js in version X.Y.", /^(?:nwjs|node-webkit)(\d+(?:\.(\d+))?)?$/, + // @ts-expect-error (major, minor) => { const v = versionDependent(major, minor); // see https://node.green/ + https://github.com/nwjs/nw.js/blob/nw48/CHANGELOG.md @@ -304,7 +311,7 @@ const getTargetProperties = (target, context) => { ).join("\n")}` ); }; - +// @ts-expect-error const mergeTargetProperties = targetProperties => { const keys = new Set(); for (const tp of targetProperties) { @@ -328,6 +335,7 @@ const mergeTargetProperties = targetProperties => { } } if (hasTrue || hasFalse) + // @ts-expect-error result[key] = hasFalse && hasTrue ? null : hasTrue ? true : false; } return /** @type {TargetProperties} */ (result); diff --git a/packages/rspack/src/lib/BannerPlugin.js b/packages/rspack/src/lib/BannerPlugin.js index 3970908b29e6..1255631e2337 100644 --- a/packages/rspack/src/lib/BannerPlugin.js +++ b/packages/rspack/src/lib/BannerPlugin.js @@ -11,12 +11,16 @@ const ModuleFilenameHelpers = require("./ModuleFilenameHelpers"); const Template = require("./Template"); const createSchemaValidation = require("./util/create-schema-validation"); -/** @typedef {import("../declarations/plugins/BannerPlugin").BannerPluginArgument} BannerPluginArgument */ -/** @typedef {import("../declarations/plugins/BannerPlugin").BannerPluginOptions} BannerPluginOptions */ -/** @typedef {import("./Compiler")} Compiler */ +// /** @typedef {import("../declarations/plugins/BannerPlugin").BannerPluginArgument} BannerPluginArgument */ +// /** @typedef {import("../declarations/plugins/BannerPlugin").BannerPluginOptions} BannerPluginOptions */ +// /** @typedef {import("./Compiler")} Compiler */ +/** @typedef {any} BannerPluginArgument */ +/** @typedef {any} BannerPluginOptions */ +/** @typedef {any} Compiler */ const validate = createSchemaValidation( require("../schemas/plugins/BannerPlugin.check.js"), + // @ts-expect-error () => require("../schemas/plugins/BannerPlugin.json"), { name: "Banner Plugin", @@ -24,6 +28,7 @@ const validate = createSchemaValidation( } ); +// @ts-expect-error const wrapComment = str => { if (!str.includes("\n")) { return Template.toComment(str); @@ -56,7 +61,8 @@ class BannerPlugin { const getBanner = bannerOption; this.banner = this.options.raw ? getBanner - : data => wrapComment(getBanner(data)); + : // @ts-expect-error + data => wrapComment(getBanner(data)); } else { const banner = this.options.raw ? bannerOption @@ -79,10 +85,12 @@ class BannerPlugin { ); const cache = new WeakMap(); + // @ts-expect-error compiler.hooks.compilation.tap("BannerPlugin", compilation => { compilation.hooks.processAssets.tap( { name: "BannerPlugin", + // @ts-expect-error stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONS }, () => { @@ -105,6 +113,7 @@ class BannerPlugin { typeof banner === "function" ? banner({ chunk }) : banner; const comment = compilation.getPath(normalizedBanner, data); + // @ts-expect-error compilation.updateAsset(file, old => { let cached = cache.get(old); if (!cached || cached.comment !== comment) { diff --git a/packages/rspack/src/lib/Cache.js b/packages/rspack/src/lib/Cache.js index 484d5b3dad03..46a706962d76 100644 --- a/packages/rspack/src/lib/Cache.js +++ b/packages/rspack/src/lib/Cache.js @@ -33,7 +33,9 @@ const { * @returns {void} */ +// @ts-expect-error const needCalls = (times, callback) => { + // @ts-expect-error return err => { if (--times === 0) { return callback(err); @@ -71,7 +73,9 @@ class Cache { * @returns {void} */ get(identifier, etag, callback) { + // @ts-expect-error const gotHandlers = []; + // @ts-expect-error this.hooks.get.callAsync(identifier, etag, gotHandlers, (err, result) => { if (err) { callback(makeWebpackError(err, "Cache.hooks.get")); @@ -84,10 +88,12 @@ class Cache { const innerCallback = needCalls(gotHandlers.length, () => callback(null, result) ); + // @ts-expect-error for (const gotHandler of gotHandlers) { gotHandler(result, innerCallback); } } else if (gotHandlers.length === 1) { + // @ts-expect-error gotHandlers[0](result, () => callback(null, result)); } else { callback(null, result); @@ -108,6 +114,7 @@ class Cache { identifier, etag, data, + // @ts-expect-error makeWebpackErrorCallback(callback, "Cache.hooks.store") ); } @@ -121,6 +128,7 @@ class Cache { storeBuildDependencies(dependencies, callback) { this.hooks.storeBuildDependencies.callAsync( dependencies, + // @ts-expect-error makeWebpackErrorCallback(callback, "Cache.hooks.storeBuildDependencies") ); } @@ -138,6 +146,7 @@ class Cache { */ endIdle(callback) { this.hooks.endIdle.callAsync( + // @ts-expect-error makeWebpackErrorCallback(callback, "Cache.hooks.endIdle") ); } @@ -148,6 +157,7 @@ class Cache { */ shutdown(callback) { this.hooks.shutdown.callAsync( + // @ts-expect-error makeWebpackErrorCallback(callback, "Cache.hooks.shutdown") ); } diff --git a/packages/rspack/src/lib/CacheFacade.js b/packages/rspack/src/lib/CacheFacade.js index 53449584ea98..0de99d53bcac 100644 --- a/packages/rspack/src/lib/CacheFacade.js +++ b/packages/rspack/src/lib/CacheFacade.js @@ -14,7 +14,8 @@ const mergeEtags = require("./cache/mergeEtags.js"); /** @typedef {import("./Cache").Etag} Etag */ /** @typedef {import("./WebpackError")} WebpackError */ /** @typedef {import("./cache/getLazyHashedEtag").HashableObject} HashableObject */ -/** @typedef {typeof import("./util/Hash")} HashConstructor */ +// /** @typedef {typeof import("./util/Hash")} HashConstructor */ +/** @typedef {any} HashConstructor */ /** * @template T @@ -47,6 +48,7 @@ class MultiItemCache { * @returns {void} */ get(callback) { + // @ts-expect-error forEachBail(this._items, (item, callback) => item.get(callback), callback); } @@ -55,6 +57,7 @@ class MultiItemCache { * @returns {Promise} promise with the data */ getPromise() { + // @ts-expect-error const next = i => { return this._items[i].getPromise().then(result => { if (result !== undefined) return result; diff --git a/packages/rspack/src/lib/EnvironmentPlugin.js b/packages/rspack/src/lib/EnvironmentPlugin.js index 82e161ecedc2..8db6c3243608 100644 --- a/packages/rspack/src/lib/EnvironmentPlugin.js +++ b/packages/rspack/src/lib/EnvironmentPlugin.js @@ -7,10 +7,13 @@ const WebpackError = require("./WebpackError"); -/** @typedef {import("./Compiler")} Compiler */ -/** @typedef {import("./DefinePlugin").CodeValue} CodeValue */ +// /** @typedef {import("./Compiler")} Compiler */ +// /** @typedef {import("./DefinePlugin").CodeValue} CodeValue */ +/** @typedef {any} Compiler */ +/** @typedef {any} CodeValue */ class EnvironmentPlugin { + // @ts-expect-error constructor(...keys) { if (keys.length === 1 && Array.isArray(keys[0])) { this.keys = keys[0]; @@ -39,6 +42,7 @@ class EnvironmentPlugin { : this.defaultValues[key]; if (value === undefined) { + // @ts-expect-error compiler.hooks.thisCompilation.tap("EnvironmentPlugin", compilation => { const error = new WebpackError( `EnvironmentPlugin - ${key} environment variable is undefined.\n\n` + diff --git a/packages/rspack/src/lib/HookWebpackError.js b/packages/rspack/src/lib/HookWebpackError.js index b5a796c3cd9f..ba0a9034f441 100644 --- a/packages/rspack/src/lib/HookWebpackError.js +++ b/packages/rspack/src/lib/HookWebpackError.js @@ -7,7 +7,8 @@ const WebpackError = require("./WebpackError.js"); -/** @typedef {import("./Module")} Module */ +// /** @typedef {import("./Module")} Module */ +/** @typedef {any} Module */ /** * @template T @@ -85,6 +86,7 @@ const tryRunOrWebpackError = (fn, hook) => { if (err instanceof WebpackError) { throw err; } + // @ts-expect-error throw new HookWebpackError(err, hook); } return r; diff --git a/packages/rspack/src/lib/LoaderOptionsPlugin.js b/packages/rspack/src/lib/LoaderOptionsPlugin.js index 6d62fd0df6b7..62be6c80f90b 100644 --- a/packages/rspack/src/lib/LoaderOptionsPlugin.js +++ b/packages/rspack/src/lib/LoaderOptionsPlugin.js @@ -9,11 +9,14 @@ const ModuleFilenameHelpers = require("./ModuleFilenameHelpers"); const { NormalModule } = require("../normalModule"); const createSchemaValidation = require("./util/create-schema-validation"); -/** @typedef {import("../declarations/plugins/LoaderOptionsPlugin").LoaderOptionsPluginOptions} LoaderOptionsPluginOptions */ -/** @typedef {import("./Compiler")} Compiler */ +// /** @typedef {import("../declarations/plugins/LoaderOptionsPlugin").LoaderOptionsPluginOptions} LoaderOptionsPluginOptions */ +// /** @typedef {import("./Compiler")} Compiler */ +/** @typedef {any} LoaderOptionsPluginOptions */ +/** @typedef {any} Compiler */ const validate = createSchemaValidation( require("../schemas/plugins/LoaderOptionsPlugin.check.js"), + // @ts-expect-error () => require("../schemas/plugins/LoaderOptionsPlugin.json"), { name: "Loader Options Plugin", @@ -42,9 +45,11 @@ class LoaderOptionsPlugin { */ apply(compiler) { const options = this.options; + // @ts-expect-error compiler.hooks.compilation.tap("LoaderOptionsPlugin", compilation => { NormalModule.getCompilationHooks(compilation).loader.tap( "LoaderOptionsPlugin", + // @ts-expect-error context => { const resource = context.resourcePath; if (!resource) return; diff --git a/packages/rspack/src/lib/ModuleFilenameHelpers.js b/packages/rspack/src/lib/ModuleFilenameHelpers.js index d204667ad057..ef37fc512101 100644 --- a/packages/rspack/src/lib/ModuleFilenameHelpers.js +++ b/packages/rspack/src/lib/ModuleFilenameHelpers.js @@ -5,13 +5,18 @@ "use strict"; -/** @typedef {import("./ChunkGraph")} ChunkGraph */ -/** @typedef {import("./Module")} Module */ -/** @typedef {import("./RequestShortener")} RequestShortener */ -/** @typedef {typeof import("./util/Hash")} Hash */ +// /** @typedef {import("./ChunkGraph")} ChunkGraph */ +// /** @typedef {import("./Module")} Module */ +// /** @typedef {import("./RequestShortener")} RequestShortener */ +// /** @typedef {typeof import("./util/Hash")} Hash */ +/** @typedef {any} ChunkGraph */ +/** @typedef {any} Module */ +/** @typedef {any} RequestShortener */ +/** @typedef {any} Hash */ const ModuleFilenameHelpers = exports; +// @ts-expect-error const asRegExp = test => { if (typeof test === "string") { test = new RegExp("^" + test.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")); @@ -19,6 +24,7 @@ const asRegExp = test => { return test; }; +// @ts-expect-error ModuleFilenameHelpers.matchPart = (str, test) => { if (!test) return true; test = asRegExp(test); @@ -29,6 +35,7 @@ ModuleFilenameHelpers.matchPart = (str, test) => { } }; +// @ts-expect-error ModuleFilenameHelpers.matchObject = (obj, str) => { if (obj.test) { if (!ModuleFilenameHelpers.matchPart(str, obj.test)) { diff --git a/packages/rspack/src/lib/Template.js b/packages/rspack/src/lib/Template.js index 35c17ec2b970..0d12ad8d26d3 100644 --- a/packages/rspack/src/lib/Template.js +++ b/packages/rspack/src/lib/Template.js @@ -8,20 +8,34 @@ const { ConcatSource, PrefixSource } = require("webpack-sources"); /** @typedef {import("webpack-sources").Source} Source */ -/** @typedef {import("../declarations/WebpackOptions").Output} OutputOptions */ -/** @typedef {import("./Chunk")} Chunk */ -/** @typedef {import("./ChunkGraph")} ChunkGraph */ -/** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */ -/** @typedef {import("./Compilation").AssetInfo} AssetInfo */ -/** @typedef {import("./Compilation").PathData} PathData */ -/** @typedef {import("./DependencyTemplates")} DependencyTemplates */ -/** @typedef {import("./Module")} Module */ -/** @typedef {import("./ModuleGraph")} ModuleGraph */ -/** @typedef {import("./ModuleTemplate")} ModuleTemplate */ -/** @typedef {import("./RuntimeModule")} RuntimeModule */ -/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */ -/** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */ -/** @typedef {import("./javascript/JavascriptModulesPlugin").RenderContext} RenderContext */ +// /** @typedef {import("../declarations/WebpackOptions").Output} OutputOptions */ +// /** @typedef {import("./Chunk")} Chunk */ +// /** @typedef {import("./ChunkGraph")} ChunkGraph */ +// /** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */ +// /** @typedef {import("./Compilation").AssetInfo} AssetInfo */ +// /** @typedef {import("./Compilation").PathData} PathData */ +// /** @typedef {import("./DependencyTemplates")} DependencyTemplates */ +// /** @typedef {import("./Module")} Module */ +// /** @typedef {import("./ModuleGraph")} ModuleGraph */ +// /** @typedef {import("./ModuleTemplate")} ModuleTemplate */ +// /** @typedef {import("./RuntimeModule")} RuntimeModule */ +// /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */ +// /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */ +// /** @typedef {import("./javascript/JavascriptModulesPlugin").RenderContext} RenderContext */ +/** @typedef {any} OutputOptions */ +/** @typedef {any} Chunk */ +/** @typedef {any} ChunkGraph */ +/** @typedef {any} CodeGenerationResults */ +/** @typedef {any} AssetInfo */ +/** @typedef {any} PathData */ +/** @typedef {any} DependencyTemplates */ +/** @typedef {any} Module */ +/** @typedef {any} ModuleGraph */ +/** @typedef {any} ModuleTemplate */ +/** @typedef {any} RuntimeModule */ +/** @typedef {any} RuntimeTemplate */ +/** @typedef {any} ChunkRenderContext */ +/** @typedef {any} RenderContext */ const START_LOWERCASE_ALPHABET_CODE = "a".charCodeAt(0); const START_UPPERCASE_ALPHABET_CODE = "A".charCodeAt(0); @@ -294,6 +308,7 @@ class Template { const { chunkGraph } = renderContext; var source = new ConcatSource(); if (modules.length === 0) { + // @ts-expect-error return null; } /** @type {{id: string|number, source: Source|string}[]} */ diff --git a/packages/rspack/src/lib/cache/getLazyHashedEtag.js b/packages/rspack/src/lib/cache/getLazyHashedEtag.js index dc9421dd370c..b69a0a0877cc 100644 --- a/packages/rspack/src/lib/cache/getLazyHashedEtag.js +++ b/packages/rspack/src/lib/cache/getLazyHashedEtag.js @@ -7,8 +7,10 @@ const createHash = require("../../util/createHash"); -/** @typedef {import("../util/Hash")} Hash */ -/** @typedef {typeof import("../util/Hash")} HashConstructor */ +// /** @typedef {import("../util/Hash")} Hash */ +// /** @typedef {typeof import("../util/Hash")} HashConstructor */ +/** @typedef {any} Hash */ +/** @typedef {any} HashConstructor */ /** * @typedef {Object} HashableObject @@ -31,6 +33,7 @@ class LazyHashedEtag { */ toString() { if (this._hash === undefined) { + // @ts-expect-error const hash = createHash(this._hashFunction); this._obj.updateHash(hash); this._hash = /** @type {string} */ (hash.digest("base64")); diff --git a/packages/rspack/src/lib/formatLocation.js b/packages/rspack/src/lib/formatLocation.js index f42eea2ded28..b864a05853e0 100644 --- a/packages/rspack/src/lib/formatLocation.js +++ b/packages/rspack/src/lib/formatLocation.js @@ -5,8 +5,10 @@ "use strict"; -/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */ -/** @typedef {import("./Dependency").SourcePosition} SourcePosition */ +// /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */ +// /** @typedef {import("./Dependency").SourcePosition} SourcePosition */ +/** @typedef {any} DependencyLocation */ +/** @typedef {any} SourcePosition */ /** * @param {SourcePosition} pos position diff --git a/packages/rspack/src/lib/util/create-schema-validation.js b/packages/rspack/src/lib/util/create-schema-validation.js index 290eaf47d651..d503e0a09555 100644 --- a/packages/rspack/src/lib/util/create-schema-validation.js +++ b/packages/rspack/src/lib/util/create-schema-validation.js @@ -9,8 +9,10 @@ const memoize = require("./memoize"); const getValidate = memoize(() => require("schema-utils").validate); +// @ts-expect-error const createSchemaValidation = (check, getSchema, options) => { getSchema = memoize(getSchema); + // @ts-expect-error return value => { if (check && !check(value)) { getValidate()(getSchema(), value, options); diff --git a/packages/rspack/src/lib/util/memoize.js b/packages/rspack/src/lib/util/memoize.js index 981b53188820..3a6b805be64a 100644 --- a/packages/rspack/src/lib/util/memoize.js +++ b/packages/rspack/src/lib/util/memoize.js @@ -14,6 +14,7 @@ const memoize = fn => { let cache = false; /** @type {T} */ + // @ts-expect-error let result = undefined; return () => { if (cache) { @@ -23,6 +24,7 @@ const memoize = fn => { cache = true; // Allow to clean up memory for fn // and all dependent resources + // @ts-expect-error fn = undefined; return result; } diff --git a/packages/rspack/src/loader-runner/loadLoader.js b/packages/rspack/src/loader-runner/loadLoader.js index bee72517ac2f..2103bd8c2de1 100644 --- a/packages/rspack/src/loader-runner/loadLoader.js +++ b/packages/rspack/src/loader-runner/loadLoader.js @@ -9,16 +9,21 @@ */ var LoaderLoadingError = require("./LoaderLoadingError"); +// @ts-expect-error var url; +// @ts-expect-error module.exports = function loadLoader(loader, callback) { if (loader.type === "module") { try { + // @ts-expect-error if (url === undefined) url = require("url"); + // @ts-expect-error var loaderUrl = url.pathToFileURL(loader.path); var modulePromise = eval( "import(" + JSON.stringify(loaderUrl.toString()) + ")" ); + // @ts-expect-error modulePromise.then(function (module) { handleResult(loader, module, callback); }, callback); @@ -32,7 +37,9 @@ module.exports = function loadLoader(loader, callback) { } catch (e) { // it is possible for node to choke on a require if the FD descriptor // limit has been reached. give it a chance to recover. + // @ts-expect-error if (e instanceof Error && e.code === "EMFILE") { + // @ts-expect-error var retry = loadLoader.bind(null, loader, callback); if (typeof setImmediate === "function") { // node >= 0.9.0 @@ -48,6 +55,7 @@ module.exports = function loadLoader(loader, callback) { } }; +// @ts-expect-error function handleResult(loader, module, callback) { if (typeof module !== "function" && typeof module !== "object") { return callback( diff --git a/packages/rspack/src/schemas/plugins/BannerPlugin.check.js b/packages/rspack/src/schemas/plugins/BannerPlugin.check.js index 7e5578b8bd1d..cd62c881878a 100644 --- a/packages/rspack/src/schemas/plugins/BannerPlugin.check.js +++ b/packages/rspack/src/schemas/plugins/BannerPlugin.check.js @@ -3,6 +3,8 @@ * DO NOT MODIFY BY HAND. * Run `yarn special-lint-fix` to update */ + +// @ts-nocheck "use strict"; function n( t, diff --git a/packages/rspack/src/schemas/plugins/LoaderOptionsPlugin.check.js b/packages/rspack/src/schemas/plugins/LoaderOptionsPlugin.check.js index d8cb9c6c3f1b..2253efb04b86 100644 --- a/packages/rspack/src/schemas/plugins/LoaderOptionsPlugin.check.js +++ b/packages/rspack/src/schemas/plugins/LoaderOptionsPlugin.check.js @@ -3,6 +3,7 @@ * DO NOT MODIFY BY HAND. * Run `yarn special-lint-fix` to update */ +// @ts-nocheck const r = /^(?:[A-Za-z]:[\\/]|\\\\|\/)/; function e( t, diff --git a/packages/rspack/src/util/cleverMerge.js b/packages/rspack/src/util/cleverMerge.js index a53b07bfd0d0..081cb40f6e39 100644 --- a/packages/rspack/src/util/cleverMerge.js +++ b/packages/rspack/src/util/cleverMerge.js @@ -44,9 +44,11 @@ const cachedCleverMerge = (first, second) => { mergeCache.set(first, innerCache); } const prevMerge = innerCache.get(second); + // @ts-expect-error if (prevMerge !== undefined) return prevMerge; const newMerge = _cleverMerge(first, second, true); innerCache.set(second, newMerge); + // @ts-expect-error return newMerge; }; @@ -74,6 +76,7 @@ const cachedSetProperty = (obj, property, value) => { let result = mapByValue.get(value); + // @ts-expect-error if (result) return result; result = { @@ -82,6 +85,7 @@ const cachedSetProperty = (obj, property, value) => { }; mapByValue.set(value, result); + // @ts-expect-error return result; }; @@ -120,6 +124,7 @@ const cachedParseObject = obj => { const parseObject = obj => { const info = new Map(); let dynamicInfo; + // @ts-expect-error const getInfo = p => { const entry = info.get(p); if (entry !== undefined) return entry; @@ -134,6 +139,7 @@ const parseObject = obj => { for (const key of Object.keys(obj)) { if (key.startsWith("by")) { const byProperty = key; + // @ts-expect-error const byObj = obj[byProperty]; if (typeof byObj === "object") { for (const byValue of Object.keys(byObj)) { @@ -170,10 +176,12 @@ const parseObject = obj => { } } else { const entry = getInfo(key); + // @ts-expect-error entry.base = obj[key]; } } else { const entry = getInfo(key); + // @ts-expect-error entry.base = obj[key]; } } @@ -193,6 +201,7 @@ const serializeObject = (info, dynamicInfo) => { // Setup byProperty structure for (const entry of info.values()) { if (entry.byProperty !== undefined) { + // @ts-expect-error const byObj = (obj[entry.byProperty] = obj[entry.byProperty] || {}); for (const byValue of entry.byValues.keys()) { byObj[byValue] = byObj[byValue] || {}; @@ -201,10 +210,12 @@ const serializeObject = (info, dynamicInfo) => { } for (const [key, entry] of info) { if (entry.base !== undefined) { + // @ts-expect-error obj[key] = entry.base; } // Fill byProperty structure if (entry.byProperty !== undefined) { + // @ts-expect-error const byObj = (obj[entry.byProperty] = obj[entry.byProperty] || {}); for (const byValue of Object.keys(byObj)) { const value = getFromByValues(entry.byValues, byValue); @@ -213,6 +224,7 @@ const serializeObject = (info, dynamicInfo) => { } } if (dynamicInfo !== undefined) { + // @ts-expect-error obj[dynamicInfo.byProperty] = dynamicInfo.fn; } return obj; @@ -262,6 +274,7 @@ const cleverMerge = (first, second) => { if (typeof second !== "object" || second === null) return second; if (typeof first !== "object" || first === null) return first; + // @ts-expect-error return _cleverMerge(first, second, false); }; @@ -281,6 +294,7 @@ const _cleverMerge = (first, second, internalCaching = false) => { // If the first argument has a dynamic part we modify the dynamic part to merge the second argument if (firstDynamicInfo !== undefined) { let { byProperty, fn } = firstDynamicInfo; + // @ts-expect-error const fnInfo = fn[DYNAMIC_INFO]; if (fnInfo) { second = internalCaching @@ -288,12 +302,14 @@ const _cleverMerge = (first, second, internalCaching = false) => { : cleverMerge(fnInfo[1], second); fn = fnInfo[0]; } + // @ts-expect-error const newFn = (...args) => { const fnResult = fn(...args); return internalCaching ? cachedCleverMerge(fnResult, second) : cleverMerge(fnResult, second); }; + // @ts-expect-error newFn[DYNAMIC_INFO] = [fn, second]; return serializeObject(firstObject.static, { byProperty, fn: newFn }); } @@ -478,6 +494,7 @@ const mergeSingleValue = (a, b, internalCaching) => { case VALUE_TYPE_UNDEFINED: return b; case VALUE_TYPE_DELETE: + // @ts-expect-error return b.filter(item => item !== "..."); case VALUE_TYPE_ARRAY_EXTEND: { const newArray = []; @@ -493,6 +510,7 @@ const mergeSingleValue = (a, b, internalCaching) => { return newArray; } case VALUE_TYPE_OBJECT: + // @ts-expect-error return b.map(item => (item === "..." ? a : item)); default: throw new Error("Not implemented"); @@ -509,7 +527,9 @@ const mergeSingleValue = (a, b, internalCaching) => { */ const removeOperations = obj => { const newObj = /** @type {T} */ ({}); + // @ts-expect-error for (const key of Object.keys(obj)) { + // @ts-expect-error const value = obj[key]; const type = getValueType(value); switch (type) { @@ -517,12 +537,15 @@ const removeOperations = obj => { case VALUE_TYPE_DELETE: break; case VALUE_TYPE_OBJECT: + // @ts-expect-error newObj[key] = removeOperations(value); break; case VALUE_TYPE_ARRAY_EXTEND: + // @ts-expect-error newObj[key] = value.filter(i => i !== "..."); break; default: + // @ts-expect-error newObj[key] = value; break; } @@ -536,7 +559,7 @@ const removeOperations = obj => { * @param {T} obj the object * @param {P} byProperty the by description * @param {...any} values values - * @returns {Omit} object with merged byProperty + * @returns {Omit|undefined} object with merged byProperty */ const resolveByProperty = (obj, byProperty, ...values) => { if (typeof obj !== "object" || obj === null || !(byProperty in obj)) { diff --git a/packages/rspack/src/util/hash/BatchedHash.js b/packages/rspack/src/util/hash/BatchedHash.js index 56da6e88648c..7ac14b726ad7 100644 --- a/packages/rspack/src/util/hash/BatchedHash.js +++ b/packages/rspack/src/util/hash/BatchedHash.js @@ -14,6 +14,7 @@ const Hash = require("."); const MAX_SHORT_STRING = require("./wasm-hash").MAX_SHORT_STRING; class BatchedHash extends Hash { + // @ts-expect-error constructor(hash) { super(); this.string = undefined; diff --git a/packages/rspack/src/util/hash/wasm-hash.js b/packages/rspack/src/util/hash/wasm-hash.js index 7fe0b187c7d0..7afc966db3c0 100644 --- a/packages/rspack/src/util/hash/wasm-hash.js +++ b/packages/rspack/src/util/hash/wasm-hash.js @@ -138,6 +138,7 @@ class WasmHash { } } + // @ts-expect-error digest(type) { const { exports, buffered, mem, digestSize } = this; exports.final(buffered); @@ -149,6 +150,7 @@ class WasmHash { } } +// @ts-expect-error const create = (wasmModule, instancesPool, chunkSize, digestSize) => { if (instancesPool.length > 0) { const old = instancesPool.pop(); diff --git a/packages/rspack/src/util/identifier.js b/packages/rspack/src/util/identifier.js index dd56ddf44711..7ffe4759d2d6 100644 --- a/packages/rspack/src/util/identifier.js +++ b/packages/rspack/src/util/identifier.js @@ -15,6 +15,7 @@ const WINDOWS_PATH_SEPARATOR_REGEXP = /\\/g; * @property {Map>=} relativePaths */ +// @ts-expect-error const relativePathToRequest = relativePath => { if (relativePath === "") return "./."; if (relativePath === "..") return "../."; @@ -81,10 +82,12 @@ const requestToAbsolute = (context, relativePath) => { return relativePath; }; +// @ts-expect-error const makeCacheable = realFn => { /** @type {WeakMap>} */ const cache = new WeakMap(); + // @ts-expect-error const getCache = associatedObjectForCache => { const entry = cache.get(associatedObjectForCache); if (entry !== undefined) return entry; @@ -109,8 +112,10 @@ const makeCacheable = realFn => { return result; }; + // @ts-expect-error fn.bindCache = associatedObjectForCache => { const cache = getCache(associatedObjectForCache); + // @ts-expect-error return str => { const entry = cache.get(str); if (entry !== undefined) return entry; @@ -123,6 +128,7 @@ const makeCacheable = realFn => { return fn; }; +// @ts-expect-error const makeCacheableWithContext = fn => { /** @type {WeakMap>>} */ const cache = new WeakMap(); @@ -164,6 +170,7 @@ const makeCacheableWithContext = fn => { * @returns {function(string, string): string} cached function */ cachedFn.bindCache = associatedObjectForCache => { + // @ts-expect-error let innerCache; if (associatedObjectForCache) { innerCache = cache.get(associatedObjectForCache); @@ -182,8 +189,10 @@ const makeCacheableWithContext = fn => { */ const boundFn = (context, identifier) => { let cachedResult; + // @ts-expect-error let innerSubCache = innerCache.get(context); if (innerSubCache === undefined) { + // @ts-expect-error innerCache.set(context, (innerSubCache = new Map())); } else { cachedResult = innerSubCache.get(identifier); @@ -207,6 +216,7 @@ const makeCacheableWithContext = fn => { * @returns {function(string): string} cached function */ cachedFn.bindContextCache = (context, associatedObjectForCache) => { + // @ts-expect-error let innerSubCache; if (associatedObjectForCache) { let innerCache = cache.get(associatedObjectForCache); @@ -228,11 +238,13 @@ const makeCacheableWithContext = fn => { * @returns {string} the returned relative path */ const boundFn = identifier => { + // @ts-expect-error const cachedResult = innerSubCache.get(identifier); if (cachedResult !== undefined) { return cachedResult; } else { const result = fn(context, identifier); + // @ts-expect-error innerSubCache.set(identifier, result); return result; } @@ -319,8 +331,11 @@ const _parseResource = str => { const match = PATH_QUERY_FRAGMENT_REGEXP.exec(str); return { resource: str, + // @ts-expect-error path: match[1].replace(/\0(.)/g, "$1"), + // @ts-expect-error query: match[2] ? match[2].replace(/\0(.)/g, "$1") : "", + // @ts-expect-error fragment: match[3] || "" }; }; @@ -335,7 +350,9 @@ const _parseResourceWithoutFragment = str => { const match = PATH_QUERY_REGEXP.exec(str); return { resource: str, + // @ts-expect-error path: match[1].replace(/\0(.)/g, "$1"), + // @ts-expect-error query: match[2] ? match[2].replace(/\0(.)/g, "$1") : "" }; }; diff --git a/packages/rspack/tsconfig.json b/packages/rspack/tsconfig.json index eab53b28b8f7..735ef93dc15b 100644 --- a/packages/rspack/tsconfig.json +++ b/packages/rspack/tsconfig.json @@ -1,9 +1,12 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", "outDir": "dist", "rootDir": "src", "allowJs": true, + "checkJs": true, "strict": true }, "include": ["src"],