Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ language: node_js
node_js:
- 12
script:
- npm run test:coverage
- npm run test:coverage -- --verbose
after_script:
- echo "------------------------------"
- cat coverage/coverage-final.json
- echo "------------------------------"
- npm run coveralls
71 changes: 1 addition & 70 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,74 +1,5 @@
"use strict";

const { sources, Compilation } = require("webpack");
const colors = require("colors/safe");

const RemoveSourceMapURLWebpackPlugin = function (opts) {
this.options = opts || {};
this.options.test = this.options.test || /\.js($|\?)/i;
};

RemoveSourceMapURLWebpackPlugin.prototype.testFile = function (file) {
if (this.options.test instanceof RegExp) {
return this.options.test.test(file);
}

if (typeof this.options.test === "string") {
return this.options.test === file;
}

if (typeof this.options.test === "function") {
return this.options.test(file);
}

throw new Error(
`remove-source-map-url: Invalid "test" option. May be a RegExp (tested against asset key), a string containing the key, a function(key): bool`
);
};

RemoveSourceMapURLWebpackPlugin.prototype.processAssets = function (assets) {
return Object.keys(assets)
.filter((file) => this.testFile(file))
.map((file) => {
const asset = assets[file];
const source = asset
.source()
.replace(/# sourceMappingURL=(.+?\.map)/g, "# $1");

return {
file,
source: new sources.RawSource(source),
};
});
};

RemoveSourceMapURLWebpackPlugin.prototype.apply = function (compiler) {
compiler.hooks.compilation.tap("after-compile", (compilation) => {
compilation.hooks.processAssets.tap(
{
name: "RemoveSourceMapURLWebpackPlugin",
stage: Compilation.PROCESS_ASSETS_STAGE_DERIVED,
},
(assets) => {
// process assets
const count = this.processAssets(assets).reduce(
(count, { file, source }) => {
// update asset for the current compilation
compilation.updateAsset(file, source);
return count + 1;
},
0
);
console.log(
colors.green(
`remove-source-map-url: ${count}/${
Object.keys(assets).length
} asset(s) processed and updated`
)
);
}
);
});
};
const RemoveSourceMapURLWebpackPlugin = require("./src/plugin");

module.exports = RemoveSourceMapURLWebpackPlugin;
74 changes: 74 additions & 0 deletions src/plugin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
"use strict";

const { sources, Compilation } = require("webpack");
const colors = require("colors/safe");

const RemoveSourceMapURLWebpackPlugin = function (opts) {
this.options = opts || {};
this.options.test = this.options.test || /\.js($|\?)/i;
};

RemoveSourceMapURLWebpackPlugin.prototype.testFile = function (file) {
if (this.options.test instanceof RegExp) {
return this.options.test.test(file);
}

if (typeof this.options.test === "string") {
return this.options.test === file;
}

if (typeof this.options.test === "function") {
return this.options.test(file);
}

throw new Error(
`remove-source-map-url: Invalid "test" option. May be a RegExp (tested against asset key), a string containing the key, a function(key): bool`
);
};

RemoveSourceMapURLWebpackPlugin.prototype.processAssets = function (assets) {
return Object.keys(assets)
.filter((file) => this.testFile(file))
.map((file) => {
const asset = assets[file];
const source = asset
.source()
.replace(/# sourceMappingURL=(.+?\.map)/g, "# $1");

return {
file,
source: new sources.RawSource(source),
};
});
};

RemoveSourceMapURLWebpackPlugin.prototype.apply = function (compiler) {
compiler.hooks.compilation.tap("after-compile", (compilation) => {
compilation.hooks.processAssets.tap(
{
name: "RemoveSourceMapURLWebpackPlugin",
stage: Compilation.PROCESS_ASSETS_STAGE_DERIVED,
},
(assets) => {
// process assets
const count = this.processAssets(assets).reduce(
(count, { file, source }) => {
// update asset for the current compilation
compilation.updateAsset(file, source);
return count + 1;
},
0
);
console.log(
colors.green(
`remove-source-map-url: ${count}/${
Object.keys(assets).length
} asset(s) processed and updated`
)
);
}
);
});
};

module.exports = RemoveSourceMapURLWebpackPlugin;
32 changes: 32 additions & 0 deletions src/plugin.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
const RemoveSourceMapURLWebpackPlugin = require("../index");

describe("RemoveSourceMapURLWebpackPlugin#testFile", () => {
it("should throw if user's test option is invalid", () => {
const plugin = new RemoveSourceMapURLWebpackPlugin({ test: 333 });
expect(() => plugin.testFile("do-not-matter")).toThrow();
});

it(`should return true for file that must be processed`, () => {
const files = ["main.js", "foo.js", "bar.js", "john.svg"];
const cases = [
[undefined, ["main.js", "foo.js", "bar.js"]],
[{ test: /\.svg($|\?)/i }, ["john.svg"]],
[{ test: "main.js" }, ["main.js"]],
[
{
test: (file) => {
return file === "main.js" || file === "bar.js";
},
},
["main.js", "bar.js"],
],
];
cases.forEach(([options, expectedToMatch]) => {
const plugin = new RemoveSourceMapURLWebpackPlugin(options);
const matched = files.filter((file) => plugin.testFile(file));

expect(matched.length).toEqual(expectedToMatch.length);
expect(matched).toEqual(expectedToMatch);
});
});
});