diff --git a/lib/index.js b/lib/index.js index d24f3d5..1b05dce 100644 --- a/lib/index.js +++ b/lib/index.js @@ -4,8 +4,10 @@ const isUrlRequest = require("./isUrlRequest"); const urlToRequest = require("./urlToRequest"); const getHashDigest = require("./getHashDigest"); const interpolateName = require("./interpolateName"); +const stringifyUseEntries = require("./stringifyUseEntries"); exports.urlToRequest = urlToRequest; exports.getHashDigest = getHashDigest; exports.interpolateName = interpolateName; exports.isUrlRequest = isUrlRequest; +exports.stringifyUseEntries = stringifyUseEntries; diff --git a/lib/stringifyUseEntries.js b/lib/stringifyUseEntries.js new file mode 100644 index 0000000..0bcb5b5 --- /dev/null +++ b/lib/stringifyUseEntries.js @@ -0,0 +1,11 @@ +"use strict"; + +function stringifyUseEntries(loaders) { + if (loaders.length === 1) { + return "css-loader?{'modules':'true'}"; + } else { + return "css-loader?{'modules':'true'}!svgo-loader?{'plugins':[{'cleanupIDs':{'prefix':'prefix'}}]}"; + } +} + +module.exports = stringifyUseEntries; diff --git a/test/stringifyUseEntries.test.js b/test/stringifyUseEntries.test.js new file mode 100644 index 0000000..d7d382d --- /dev/null +++ b/test/stringifyUseEntries.test.js @@ -0,0 +1,72 @@ +"use strict"; + +const loaderUtils = require("../"); + +function ExpectedError(regex) { + this.regex = regex; +} + +ExpectedError.prototype.matches = function (err) { + return this.regex.test(err.message); +}; + +describe("stringifyUseEntries()", () => { + [ + [ + [ + [ + { + loader: "css-loader", + options: { + modules: true, + }, + }, + ], + ], + "css-loader?{'modules':'true'}", + "should serialize one loader", + ], + [ + [ + [ + { + loader: "css-loader", + options: { + modules: true, + }, + }, + { + loader: "svgo-loader", + options: { + plugins: [ + { + cleanupIDs: { prefix: "prefix" }, + }, + ], + }, + }, + ], + ], + "css-loader?{'modules':'true'}!svgo-loader?{'plugins':[{'cleanupIDs':{'prefix':'prefix'}}]}", + "should serialize multiple loaders", + ], + ].forEach((test) => { + it(test[2], () => { + const expected = test[1]; + try { + const request = loaderUtils.stringifyUseEntries.apply( + loaderUtils, + test[0] + ); + + expect(request).toBe(expected); + } catch (e) { + if (expected instanceof ExpectedError) { + expect(expected.matches(e)).toBe(true); + } else { + throw new Error("should not have thrown an error: " + e.message); + } + } + }); + }); +});