From 0590aad0722e6efaa8070a827cf67efad2a117f6 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Sun, 23 Dec 2018 12:32:56 +0530 Subject: [PATCH 1/5] Add files via upload --- index.d.ts | 24 +++++++++++++ index.js | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++ index.js.map | 1 + 3 files changed, 124 insertions(+) create mode 100644 index.d.ts create mode 100644 index.js create mode 100644 index.js.map diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..5f07593 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,24 @@ +import { Compiler } from 'webpack'; +interface ReplaceConfig { + position?: 'before' | 'after'; + removeTarget?: boolean; + target: string; +} +interface Config { + filter?(fileName: string): boolean; + replace?: ReplaceConfig; +} +export default class Plugin { + private readonly config; + static addStyle(html: string, style: string, replaceConfig: ReplaceConfig): string; + static removeLinkTag(html: string, cssFileName: string): string; + static cleanUp(html: string, replaceConfig: ReplaceConfig): string; + private css; + private html; + constructor(config?: Config); + private filter; + private prepare; + private process; + apply(compiler: Compiler): void; +} +export {}; diff --git a/index.js b/index.js new file mode 100644 index 0000000..307f65f --- /dev/null +++ b/index.js @@ -0,0 +1,99 @@ +(function (factory) { + if (typeof module === "object" && typeof module.exports === "object") { + var v = factory(require, exports); + if (v !== undefined) module.exports = v; + } + else if (typeof define === "function" && define.amd) { + define(["require", "exports"], factory); + } +})(function (require, exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var DEFAULT_REPLACE_CONFIG = { + target: '' + }; + var Plugin = /** @class */ (function () { + function Plugin(config) { + if (config === void 0) { config = {}; } + this.config = config; + this.css = {}; + this.html = {}; + } + Plugin.addStyle = function (html, style, replaceConfig) { + var styleString = ""; + var replaceValues = [styleString, replaceConfig.target]; + if (replaceConfig.position === 'after') { + replaceValues.reverse(); + } + return html.replace(replaceConfig.target, replaceValues.join('')); + }; + Plugin.removeLinkTag = function (html, cssFileName) { + return html.replace(new RegExp("]+href=['\"]" + cssFileName + "['\"][^>]+(>|/>|>)"), ''); + }; + Plugin.cleanUp = function (html, replaceConfig) { + return replaceConfig.removeTarget + ? html.replace(replaceConfig.target, '') + : html; + }; + Plugin.prototype.filter = function (fileName) { + if (typeof this.config.filter === 'function') { + return this.config.filter(fileName); + } + else { + return true; + } + }; + Plugin.prototype.prepare = function (_a) { + var _this = this; + var assets = _a.assets; + var isCSS = is('css'); + var isHTML = is('html'); + Object.keys(assets).forEach(function (fileName) { + if (isCSS(fileName)) { + var isCurrentFileNeedsToBeInlined = _this.filter(fileName); + if (isCurrentFileNeedsToBeInlined) { + _this.css[fileName] = assets[fileName].source(); + delete assets[fileName]; + } + } + else if (isHTML(fileName)) { + _this.html[fileName] = assets[fileName].source(); + } + }); + }; + Plugin.prototype.process = function (_a, _b) { + var _this = this; + var assets = _a.assets; + var output = _b.output; + var publicPath = (output && output.publicPath) || ''; + var _c = this.config.replace, replaceConfig = _c === void 0 ? DEFAULT_REPLACE_CONFIG : _c; + Object.keys(this.html).forEach(function (htmlFileName) { + var html = _this.html[htmlFileName]; + Object.keys(_this.css).forEach(function (key) { + html = Plugin.addStyle(html, _this.css[key], replaceConfig); + html = Plugin.removeLinkTag(html, publicPath + key); + }); + html = Plugin.cleanUp(html, replaceConfig); + assets[htmlFileName] = { + source: function () { return html; }, + size: function () { return html.length; }, + }; + }); + }; + Plugin.prototype.apply = function (compiler) { + var _this = this; + compiler.hooks.emit.tapAsync('html-inline-css-webpack-plugin', function (compilation, callback) { + _this.prepare(compilation); + _this.process(compilation, compiler.options); + callback(); + }); + }; + return Plugin; + }()); + exports.default = Plugin; + function is(filenameExtension) { + var reg = new RegExp("." + filenameExtension + "$"); + return function (fileName) { return reg.test(fileName); }; + } +}); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/index.js.map b/index.js.map new file mode 100644 index 0000000..0d2bde9 --- /dev/null +++ b/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file From c18db3dcaa466dc31638776a746d211c89f53b24 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Sun, 23 Dec 2018 12:35:29 +0530 Subject: [PATCH 2/5] Update index.js --- index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 307f65f..bf58588 100644 --- a/index.js +++ b/index.js @@ -28,7 +28,8 @@ return html.replace(replaceConfig.target, replaceValues.join('')); }; Plugin.removeLinkTag = function (html, cssFileName) { - return html.replace(new RegExp("]+href=['\"]" + cssFileName + "['\"][^>]+(>|/>|>)"), ''); + return html.replace(new RegExp(`]+href=['"]${cssFileName}['"][^>]+(>|\/>|><\/link>)`), +, ''); }; Plugin.cleanUp = function (html, replaceConfig) { return replaceConfig.removeTarget @@ -96,4 +97,4 @@ return function (fileName) { return reg.test(fileName); }; } }); -//# sourceMappingURL=index.js.map \ No newline at end of file +//# sourceMappingURL=index.js.map From f18cbf1256089e4ef942b7e89dd5b0851fdf6e56 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Sun, 23 Dec 2018 12:36:04 +0530 Subject: [PATCH 3/5] Update package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2023b9b..dad9878 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,8 @@ "name": "html-inline-css-webpack-plugin", "version": "1.3.2", "description": "☄️ A webpack plugin for convert external stylesheet to embedded stylesheet, aka document stylesheet", - "main": "./build/index.js", - "types": "./build/index.d.ts", + "main": "./index.js", + "types": "./index.d.ts", "scripts": { "build": "rm -rf ./build && tsc" }, From 7798b4895e9f81695915712de4f4735997884751 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Sun, 23 Dec 2018 12:42:01 +0530 Subject: [PATCH 4/5] Update index.js --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index bf58588..ebd1690 100644 --- a/index.js +++ b/index.js @@ -28,7 +28,7 @@ return html.replace(replaceConfig.target, replaceValues.join('')); }; Plugin.removeLinkTag = function (html, cssFileName) { - return html.replace(new RegExp(`]+href=['"]${cssFileName}['"][^>]+(>|\/>|><\/link>)`), + return html.replace(new RegExp(''), , ''); }; Plugin.cleanUp = function (html, replaceConfig) { From 8b962aae3b1b4aeea2741b61c231fe88fc88cf54 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Sun, 23 Dec 2018 12:43:17 +0530 Subject: [PATCH 5/5] Update index.js --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index ebd1690..c5c3b9f 100644 --- a/index.js +++ b/index.js @@ -28,7 +28,7 @@ return html.replace(replaceConfig.target, replaceValues.join('')); }; Plugin.removeLinkTag = function (html, cssFileName) { - return html.replace(new RegExp(''), + return html.replace(new RegExp('') , ''); }; Plugin.cleanUp = function (html, replaceConfig) {