diff --git a/declarations/LoaderContext.d.ts b/declarations/LoaderContext.d.ts index 3e9341423a7..bf561717064 100644 --- a/declarations/LoaderContext.d.ts +++ b/declarations/LoaderContext.d.ts @@ -187,6 +187,7 @@ export interface LoaderRunnerLoaderContext { data: object | undefined; pitchExecuted: boolean; normalExecuted: boolean; + type?: "commonjs" | "module" | undefined; }[]; /** diff --git a/test/cases/loaders/package-type/index.js b/test/cases/loaders/package-type/index.js new file mode 100644 index 00000000000..ccdd3dcaa9b --- /dev/null +++ b/test/cases/loaders/package-type/index.js @@ -0,0 +1,17 @@ +it("should pass package.json type to loader", function (done) { + expect(require("cjs/loader.js!")).toBe("commonjs"); + expect(require("esm/loader.js!")).toBe("module"); + expect(require("./loader.js!")).toBe("undefined"); +}); + +it("should pass 'commonjs' type to loader for .cjs", function () { + expect(require("cjs/loader.cjs!")).toBe("commonjs"); + expect(require("esm/loader.cjs!")).toBe("commonjs"); + expect(require("./loader.cjs!")).toBe("commonjs"); +}); + +it("should pass 'module' type to loader for .mjs", function () { + expect(require("cjs/loader.mjs!")).toBe("module"); + expect(require("esm/loader.mjs!")).toBe("module"); + expect(require("./loader.mjs!")).toBe("module"); +}); diff --git a/test/cases/loaders/package-type/loader.cjs b/test/cases/loaders/package-type/loader.cjs new file mode 100644 index 00000000000..94974dcfad5 --- /dev/null +++ b/test/cases/loaders/package-type/loader.cjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function loader() { + return `module.exports = "${this.loaders[this.loaderIndex].type}";`; +}; diff --git a/test/cases/loaders/package-type/loader.js b/test/cases/loaders/package-type/loader.js new file mode 100644 index 00000000000..94974dcfad5 --- /dev/null +++ b/test/cases/loaders/package-type/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function loader() { + return `module.exports = "${this.loaders[this.loaderIndex].type}";`; +}; diff --git a/test/cases/loaders/package-type/loader.mjs b/test/cases/loaders/package-type/loader.mjs new file mode 100644 index 00000000000..58914cd70e5 --- /dev/null +++ b/test/cases/loaders/package-type/loader.mjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +export default function loader() { + return `export default "${this.loaders[this.loaderIndex].type}";`; +} diff --git a/test/cases/loaders/package-type/node_modules/cjs/loader.cjs b/test/cases/loaders/package-type/node_modules/cjs/loader.cjs new file mode 100644 index 00000000000..b47e68eb16c --- /dev/null +++ b/test/cases/loaders/package-type/node_modules/cjs/loader.cjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +module.exports = function loader() { + return `module.exports = "${this.loaders[this.loaderIndex].type}";`; +}; diff --git a/test/cases/loaders/package-type/node_modules/cjs/loader.js b/test/cases/loaders/package-type/node_modules/cjs/loader.js new file mode 100644 index 00000000000..b47e68eb16c --- /dev/null +++ b/test/cases/loaders/package-type/node_modules/cjs/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +module.exports = function loader() { + return `module.exports = "${this.loaders[this.loaderIndex].type}";`; +}; diff --git a/test/cases/loaders/package-type/node_modules/cjs/loader.mjs b/test/cases/loaders/package-type/node_modules/cjs/loader.mjs new file mode 100644 index 00000000000..35c1f17332d --- /dev/null +++ b/test/cases/loaders/package-type/node_modules/cjs/loader.mjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +export default function loader() { + return `export default "${this.loaders[this.loaderIndex].type}";`; +} diff --git a/test/cases/loaders/package-type/node_modules/cjs/package.json b/test/cases/loaders/package-type/node_modules/cjs/package.json new file mode 100644 index 00000000000..5b56c70baa3 --- /dev/null +++ b/test/cases/loaders/package-type/node_modules/cjs/package.json @@ -0,0 +1,4 @@ +{ + "name": "cjs-package", + "type": "commonjs" +} diff --git a/test/cases/loaders/package-type/node_modules/esm/loader.cjs b/test/cases/loaders/package-type/node_modules/esm/loader.cjs new file mode 100644 index 00000000000..b47e68eb16c --- /dev/null +++ b/test/cases/loaders/package-type/node_modules/esm/loader.cjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +module.exports = function loader() { + return `module.exports = "${this.loaders[this.loaderIndex].type}";`; +}; diff --git a/test/cases/loaders/package-type/node_modules/esm/loader.js b/test/cases/loaders/package-type/node_modules/esm/loader.js new file mode 100644 index 00000000000..35c1f17332d --- /dev/null +++ b/test/cases/loaders/package-type/node_modules/esm/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +export default function loader() { + return `export default "${this.loaders[this.loaderIndex].type}";`; +} diff --git a/test/cases/loaders/package-type/node_modules/esm/loader.mjs b/test/cases/loaders/package-type/node_modules/esm/loader.mjs new file mode 100644 index 00000000000..35c1f17332d --- /dev/null +++ b/test/cases/loaders/package-type/node_modules/esm/loader.mjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +export default function loader() { + return `export default "${this.loaders[this.loaderIndex].type}";`; +} diff --git a/test/cases/loaders/package-type/node_modules/esm/package.json b/test/cases/loaders/package-type/node_modules/esm/package.json new file mode 100644 index 00000000000..64069d2b941 --- /dev/null +++ b/test/cases/loaders/package-type/node_modules/esm/package.json @@ -0,0 +1,4 @@ +{ + "name": "esm-package", + "type": "module" +} diff --git a/types.d.ts b/types.d.ts index 41f1c334e9c..e2d4723a6f5 100644 --- a/types.d.ts +++ b/types.d.ts @@ -6297,6 +6297,7 @@ declare interface LoaderRunnerLoaderContext { data?: object; pitchExecuted: boolean; normalExecuted: boolean; + type?: "module" | "commonjs"; }[]; /**