@enhanced-dom/webpack 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +11 -0
- package/compiler.helpers.d.ts +3 -3
- package/compiler.helpers.js +10 -19
- package/configs/index.d.ts +38 -2
- package/configs/index.js +9 -16
- package/index.d.ts +5 -5
- package/index.js +6 -40
- package/loaders/WebcomponentStyleLoader.d.ts +12 -5
- package/loaders/WebcomponentStyleLoader.js +77 -41
- package/loaders/index.d.ts +51 -10
- package/loaders/index.js +34 -35
- package/loaders/resolveWebcomponentStyleLoaderPath.cjs +9 -0
- package/loaders/resolveWebcomponentStyleLoaderPath.d.cts +2 -0
- package/package.json +13 -12
- package/plugins/DefineEnvPlugin.d.ts +7 -0
- package/plugins/DefineEnvPlugin.js +17 -0
- package/plugins/HtmlInlineSourcePlugin.d.ts +22 -0
- package/plugins/HtmlInlineSourcePlugin.js +236 -0
- package/plugins/SelfDecompressingHtmlPlugin.d.ts +10 -0
- package/plugins/SelfDecompressingHtmlPlugin.js +119 -0
- package/plugins/formatThirdPartyNotices.d.ts +5 -0
- package/plugins/formatThirdPartyNotices.js +11 -0
- package/plugins/index.d.ts +17 -5
- package/plugins/index.js +63 -34
- package/compiler.helpers.js.map +0 -1
- package/configs/index.js.map +0 -1
- package/index.js.map +0 -1
- package/loaders/WebcomponentStyleLoader.js.map +0 -1
- package/loaders/index.js.map +0 -1
- package/plugins/HtmlWebpackInlineSourcePlugin.d.ts +0 -2
- package/plugins/HtmlWebpackInlineSourcePlugin.js +0 -55
- package/plugins/HtmlWebpackInlineSourcePlugin.js.map +0 -1
- package/plugins/index.js.map +0 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
|
2
|
+
import zlib from 'zlib';
|
|
3
|
+
const gzip = (text) => new Promise((resolve, reject) => zlib.gzip(text, (err, buf) => (err ? reject(err) : resolve(buf))));
|
|
4
|
+
const bodyRegExp = /<body([^>]*)>([\s\S]*)<\/body>/i;
|
|
5
|
+
// Shown in place of the real body while it decompresses - a body this size can take a visible
|
|
6
|
+
// moment to inflate, so leaving it blank would look broken. Overridable via the plugin's
|
|
7
|
+
// `loadingMarkup` option; this default covers both the transient styling and the spinner markup
|
|
8
|
+
// in one block, since neither has any meaning outside the other.
|
|
9
|
+
const defaultLoadingMarkup = `<style>
|
|
10
|
+
:root { color-scheme: light dark; }
|
|
11
|
+
html, body { height: 100%; margin: 0; }
|
|
12
|
+
body {
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
background: #fff;
|
|
17
|
+
color: #111;
|
|
18
|
+
}
|
|
19
|
+
@media (prefers-color-scheme: dark) {
|
|
20
|
+
body { background: #111; color: #eee; }
|
|
21
|
+
}
|
|
22
|
+
.spinner {
|
|
23
|
+
width: 2.5rem;
|
|
24
|
+
height: 2.5rem;
|
|
25
|
+
border: 3px solid rgba(128, 128, 128, 0.3);
|
|
26
|
+
border-top-color: currentColor;
|
|
27
|
+
border-radius: 50%;
|
|
28
|
+
animation: spin 0.8s linear infinite;
|
|
29
|
+
}
|
|
30
|
+
@keyframes spin {
|
|
31
|
+
to { transform: rotate(360deg); }
|
|
32
|
+
}
|
|
33
|
+
</style>
|
|
34
|
+
<div class="spinner"></div>`;
|
|
35
|
+
// Inflates the gzipped, base64-encoded original body back into the page once it's ready, then
|
|
36
|
+
// swaps it in for the loading markup above. Rebuilds any <script> nodes via createElement/
|
|
37
|
+
// appendChild rather than assigning innerHTML/appendChild-ing template.content's parsed nodes
|
|
38
|
+
// directly - browsers deliberately don't execute a <script> that arrives either way, only one
|
|
39
|
+
// actually inserted via the DOM API, and the real body's inlined app bundle <script> has to run.
|
|
40
|
+
const bootstrapScript = (base64) => `<script>
|
|
41
|
+
(async () => {
|
|
42
|
+
try {
|
|
43
|
+
const bytes = Uint8Array.from(atob(${JSON.stringify(base64)}), (c) => c.charCodeAt(0))
|
|
44
|
+
const stream = new Blob([bytes]).stream().pipeThrough(new DecompressionStream('gzip'))
|
|
45
|
+
const bodyHtml = await new Response(stream).text()
|
|
46
|
+
const template = document.createElement('template')
|
|
47
|
+
template.innerHTML = bodyHtml
|
|
48
|
+
document.body.textContent = ''
|
|
49
|
+
Array.from(template.content.childNodes).forEach((node) => {
|
|
50
|
+
if (node.nodeName === 'SCRIPT') {
|
|
51
|
+
const script = document.createElement('script')
|
|
52
|
+
for (const attr of node.attributes) script.setAttribute(attr.name, attr.value)
|
|
53
|
+
script.textContent = node.textContent
|
|
54
|
+
document.body.appendChild(script)
|
|
55
|
+
} else {
|
|
56
|
+
document.body.appendChild(node)
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
} catch (err) {
|
|
60
|
+
document.body.textContent = 'Failed to decompress this page: ' + err.message
|
|
61
|
+
}
|
|
62
|
+
})()
|
|
63
|
+
</script>`;
|
|
64
|
+
// Gzips an HTML asset's <body> content and replaces it with a small loading placeholder plus a
|
|
65
|
+
// script that inflates and reinstates the original body client-side, via the browser's native
|
|
66
|
+
// DecompressionStream - <head> (title, meta tags, favicon, any inlined <style>/<link>) is left
|
|
67
|
+
// completely untouched, since html-webpack-plugin/htmlConfigFactory already built that correctly
|
|
68
|
+
// and there's no reason to reconstruct it. Unlike a build-time-only gzip step (e.g. a .gz sidecar
|
|
69
|
+
// file), this needs no server/Content-Encoding support to pay off - decompression happens
|
|
70
|
+
// entirely client-side in the loaded page - so it works for content served statically or opened
|
|
71
|
+
// directly from disk. Only replaces the body when the wrapped version actually comes out
|
|
72
|
+
// smaller, since gzip + base64's ~33% overhead can lose against a small/already-dense body.
|
|
73
|
+
class SelfDecompressingHtmlPlugin {
|
|
74
|
+
htmlAssetName;
|
|
75
|
+
loadingMarkup;
|
|
76
|
+
constructor({ loadingMarkup = defaultLoadingMarkup } = {}) {
|
|
77
|
+
this.loadingMarkup = loadingMarkup;
|
|
78
|
+
}
|
|
79
|
+
apply(compiler) {
|
|
80
|
+
compiler.hooks.compilation.tap('self-decompressing-html-plugin', (compilation) => {
|
|
81
|
+
// Capture the exact asset this plugin should act on - the one page the paired
|
|
82
|
+
// HtmlWebpackPlugin instance in this same htmlConfigFactory() call produced - the same way
|
|
83
|
+
// HtmlInlineSourcePlugin does. A pattern matched against all of compilation.assets (as an
|
|
84
|
+
// earlier version of this plugin did) would misfire in a multi-page build with several
|
|
85
|
+
// HtmlWebpackPlugin instances, touching pages this plugin instance has nothing to do with.
|
|
86
|
+
HtmlWebpackPlugin.getHooks(compilation).afterTemplateExecution.tap('self-decompressing-html-plugin', (htmlPluginData) => {
|
|
87
|
+
this.htmlAssetName = htmlPluginData.outputName;
|
|
88
|
+
return htmlPluginData;
|
|
89
|
+
});
|
|
90
|
+
// PROCESS_ASSETS_STAGE_REPORT is the last named processAssets stage - tapping a further
|
|
91
|
+
// 1000 past it, rather than at that same stage, guarantees this always runs after any
|
|
92
|
+
// other plugin's REPORT-stage work (e.g. an html-inlining plugin still rewriting the html
|
|
93
|
+
// asset at that same stage) regardless of plugin registration order, since this asset must
|
|
94
|
+
// be genuinely final before its body is gzipped.
|
|
95
|
+
compilation.hooks.processAssets.tapPromise({ name: 'self-decompressing-html-plugin', stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT + 1000 }, async () => {
|
|
96
|
+
if (!this.htmlAssetName)
|
|
97
|
+
return;
|
|
98
|
+
const htmlAsset = compilation.assets[this.htmlAssetName];
|
|
99
|
+
if (!htmlAsset)
|
|
100
|
+
return;
|
|
101
|
+
const html = htmlAsset.source().toString();
|
|
102
|
+
const match = html.match(bodyRegExp);
|
|
103
|
+
if (!match)
|
|
104
|
+
return;
|
|
105
|
+
const [fullMatch, bodyAttrs, bodyContent] = match;
|
|
106
|
+
if (bodyContent === undefined)
|
|
107
|
+
return;
|
|
108
|
+
const gzipped = await gzip(bodyContent);
|
|
109
|
+
const newBody = `<body${bodyAttrs}>${this.loadingMarkup}${bootstrapScript(gzipped.toString('base64'))}</body>`;
|
|
110
|
+
const wrapped = html.slice(0, match.index) + newBody + html.slice(match.index + fullMatch.length);
|
|
111
|
+
if (wrapped.length >= html.length)
|
|
112
|
+
return;
|
|
113
|
+
compilation.updateAsset(this.htmlAssetName, new compiler.webpack.sources.RawSource(wrapped));
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export default SelfDecompressingHtmlPlugin;
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZkRlY29tcHJlc3NpbmdIdG1sUGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbnMvU2VsZkRlY29tcHJlc3NpbmdIdG1sUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUJBQWlCLE1BQU0scUJBQXFCLENBQUE7QUFFbkQsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBRXZCLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBWSxFQUFtQixFQUFFLENBQzdDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFckcsTUFBTSxVQUFVLEdBQUcsaUNBQWlDLENBQUE7QUFFcEQsOEZBQThGO0FBQzlGLHlGQUF5RjtBQUN6RixnR0FBZ0c7QUFDaEcsaUVBQWlFO0FBQ2pFLE1BQU0sb0JBQW9CLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBeUJELENBQUE7QUFFNUIsOEZBQThGO0FBQzlGLDJGQUEyRjtBQUMzRiw4RkFBOEY7QUFDOUYsOEZBQThGO0FBQzlGLGlHQUFpRztBQUNqRyxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUM7Ozt5Q0FHSCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUFvQnJELENBQUE7QUFFViwrRkFBK0Y7QUFDL0YsOEZBQThGO0FBQzlGLCtGQUErRjtBQUMvRixpR0FBaUc7QUFDakcsa0dBQWtHO0FBQ2xHLDBGQUEwRjtBQUMxRixnR0FBZ0c7QUFDaEcseUZBQXlGO0FBQ3pGLDRGQUE0RjtBQUM1RixNQUFNLDJCQUEyQjtJQUMvQixhQUFhLENBQVM7SUFDdEIsYUFBYSxDQUFRO0lBRXJCLFlBQVksRUFBRSxhQUFhLEdBQUcsb0JBQW9CLEtBQWlDLEVBQUU7UUFDbkYsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFrQjtRQUN0QixRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxXQUF3QixFQUFFLEVBQUU7WUFDNUYsOEVBQThFO1lBQzlFLDJGQUEyRjtZQUMzRiwwRkFBMEY7WUFDMUYsdUZBQXVGO1lBQ3ZGLDJGQUEyRjtZQUMzRixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQ3RILElBQUksQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQTtnQkFDOUMsT0FBTyxjQUFjLENBQUE7WUFDdkIsQ0FBQyxDQUFDLENBQUE7WUFFRix3RkFBd0Y7WUFDeEYsc0ZBQXNGO1lBQ3RGLDBGQUEwRjtZQUMxRiwyRkFBMkY7WUFDM0YsaURBQWlEO1lBQ2pELFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FDeEMsRUFBRSxJQUFJLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLDJCQUEyQixHQUFHLElBQUksRUFBRSxFQUNsSCxLQUFLLElBQUksRUFBRTtnQkFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7b0JBQUUsT0FBTTtnQkFDL0IsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7Z0JBQ3hELElBQUksQ0FBQyxTQUFTO29CQUFFLE9BQU07Z0JBRXRCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtnQkFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtnQkFDcEMsSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTTtnQkFFbEIsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFBO2dCQUNqRCxJQUFJLFdBQVcsS0FBSyxTQUFTO29CQUFFLE9BQU07Z0JBQ3JDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUN2QyxNQUFNLE9BQU8sR0FBRyxRQUFRLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtnQkFDOUcsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUNsRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTTtnQkFFekMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7WUFDOUYsQ0FBQyxDQUNGLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQUVELGVBQWUsMkJBQTJCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSHRtbFdlYnBhY2tQbHVnaW4gZnJvbSAnaHRtbC13ZWJwYWNrLXBsdWdpbidcbmltcG9ydCB7IHR5cGUgQ29tcGlsYXRpb24sIHR5cGUgQ29tcGlsZXIsIHR5cGUgV2VicGFja1BsdWdpbkluc3RhbmNlIH0gZnJvbSAnd2VicGFjaydcbmltcG9ydCB6bGliIGZyb20gJ3psaWInXG5cbmNvbnN0IGd6aXAgPSAodGV4dDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHpsaWIuZ3ppcCh0ZXh0LCAoZXJyLCBidWYpID0+IChlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoYnVmKSkpKVxuXG5jb25zdCBib2R5UmVnRXhwID0gLzxib2R5KFtePl0qKT4oW1xcc1xcU10qKTxcXC9ib2R5Pi9pXG5cbi8vIFNob3duIGluIHBsYWNlIG9mIHRoZSByZWFsIGJvZHkgd2hpbGUgaXQgZGVjb21wcmVzc2VzIC0gYSBib2R5IHRoaXMgc2l6ZSBjYW4gdGFrZSBhIHZpc2libGVcbi8vIG1vbWVudCB0byBpbmZsYXRlLCBzbyBsZWF2aW5nIGl0IGJsYW5rIHdvdWxkIGxvb2sgYnJva2VuLiBPdmVycmlkYWJsZSB2aWEgdGhlIHBsdWdpbidzXG4vLyBgbG9hZGluZ01hcmt1cGAgb3B0aW9uOyB0aGlzIGRlZmF1bHQgY292ZXJzIGJvdGggdGhlIHRyYW5zaWVudCBzdHlsaW5nIGFuZCB0aGUgc3Bpbm5lciBtYXJrdXBcbi8vIGluIG9uZSBibG9jaywgc2luY2UgbmVpdGhlciBoYXMgYW55IG1lYW5pbmcgb3V0c2lkZSB0aGUgb3RoZXIuXG5jb25zdCBkZWZhdWx0TG9hZGluZ01hcmt1cCA9IGA8c3R5bGU+XG4gIDpyb290IHsgY29sb3Itc2NoZW1lOiBsaWdodCBkYXJrOyB9XG4gIGh0bWwsIGJvZHkgeyBoZWlnaHQ6IDEwMCU7IG1hcmdpbjogMDsgfVxuICBib2R5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBjb2xvcjogIzExMTtcbiAgfVxuICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgYm9keSB7IGJhY2tncm91bmQ6ICMxMTE7IGNvbG9yOiAjZWVlOyB9XG4gIH1cbiAgLnNwaW5uZXIge1xuICAgIHdpZHRoOiAyLjVyZW07XG4gICAgaGVpZ2h0OiAyLjVyZW07XG4gICAgYm9yZGVyOiAzcHggc29saWQgcmdiYSgxMjgsIDEyOCwgMTI4LCAwLjMpO1xuICAgIGJvcmRlci10b3AtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYW5pbWF0aW9uOiBzcGluIDAuOHMgbGluZWFyIGluZmluaXRlO1xuICB9XG4gIEBrZXlmcmFtZXMgc3BpbiB7XG4gICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XG4gIH1cbjwvc3R5bGU+XG48ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PmBcblxuLy8gSW5mbGF0ZXMgdGhlIGd6aXBwZWQsIGJhc2U2NC1lbmNvZGVkIG9yaWdpbmFsIGJvZHkgYmFjayBpbnRvIHRoZSBwYWdlIG9uY2UgaXQncyByZWFkeSwgdGhlblxuLy8gc3dhcHMgaXQgaW4gZm9yIHRoZSBsb2FkaW5nIG1hcmt1cCBhYm92ZS4gUmVidWlsZHMgYW55IDxzY3JpcHQ+IG5vZGVzIHZpYSBjcmVhdGVFbGVtZW50L1xuLy8gYXBwZW5kQ2hpbGQgcmF0aGVyIHRoYW4gYXNzaWduaW5nIGlubmVySFRNTC9hcHBlbmRDaGlsZC1pbmcgdGVtcGxhdGUuY29udGVudCdzIHBhcnNlZCBub2Rlc1xuLy8gZGlyZWN0bHkgLSBicm93c2VycyBkZWxpYmVyYXRlbHkgZG9uJ3QgZXhlY3V0ZSBhIDxzY3JpcHQ+IHRoYXQgYXJyaXZlcyBlaXRoZXIgd2F5LCBvbmx5IG9uZVxuLy8gYWN0dWFsbHkgaW5zZXJ0ZWQgdmlhIHRoZSBET00gQVBJLCBhbmQgdGhlIHJlYWwgYm9keSdzIGlubGluZWQgYXBwIGJ1bmRsZSA8c2NyaXB0PiBoYXMgdG8gcnVuLlxuY29uc3QgYm9vdHN0cmFwU2NyaXB0ID0gKGJhc2U2NDogc3RyaW5nKSA9PiBgPHNjcmlwdD5cbihhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYnl0ZXMgPSBVaW50OEFycmF5LmZyb20oYXRvYigke0pTT04uc3RyaW5naWZ5KGJhc2U2NCl9KSwgKGMpID0+IGMuY2hhckNvZGVBdCgwKSlcbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgQmxvYihbYnl0ZXNdKS5zdHJlYW0oKS5waXBlVGhyb3VnaChuZXcgRGVjb21wcmVzc2lvblN0cmVhbSgnZ3ppcCcpKVxuICAgIGNvbnN0IGJvZHlIdG1sID0gYXdhaXQgbmV3IFJlc3BvbnNlKHN0cmVhbSkudGV4dCgpXG4gICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpXG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYm9keUh0bWxcbiAgICBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50ID0gJydcbiAgICBBcnJheS5mcm9tKHRlbXBsYXRlLmNvbnRlbnQuY2hpbGROb2RlcykuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09ICdTQ1JJUFQnKSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpXG4gICAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBub2RlLmF0dHJpYnV0ZXMpIHNjcmlwdC5zZXRBdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKVxuICAgICAgICBzY3JpcHQudGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChub2RlKVxuICAgICAgfVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQgPSAnRmFpbGVkIHRvIGRlY29tcHJlc3MgdGhpcyBwYWdlOiAnICsgZXJyLm1lc3NhZ2VcbiAgfVxufSkoKVxuPC9zY3JpcHQ+YFxuXG4vLyBHemlwcyBhbiBIVE1MIGFzc2V0J3MgPGJvZHk+IGNvbnRlbnQgYW5kIHJlcGxhY2VzIGl0IHdpdGggYSBzbWFsbCBsb2FkaW5nIHBsYWNlaG9sZGVyIHBsdXMgYVxuLy8gc2NyaXB0IHRoYXQgaW5mbGF0ZXMgYW5kIHJlaW5zdGF0ZXMgdGhlIG9yaWdpbmFsIGJvZHkgY2xpZW50LXNpZGUsIHZpYSB0aGUgYnJvd3NlcidzIG5hdGl2ZVxuLy8gRGVjb21wcmVzc2lvblN0cmVhbSAtIDxoZWFkPiAodGl0bGUsIG1ldGEgdGFncywgZmF2aWNvbiwgYW55IGlubGluZWQgPHN0eWxlPi88bGluaz4pIGlzIGxlZnRcbi8vIGNvbXBsZXRlbHkgdW50b3VjaGVkLCBzaW5jZSBodG1sLXdlYnBhY2stcGx1Z2luL2h0bWxDb25maWdGYWN0b3J5IGFscmVhZHkgYnVpbHQgdGhhdCBjb3JyZWN0bHlcbi8vIGFuZCB0aGVyZSdzIG5vIHJlYXNvbiB0byByZWNvbnN0cnVjdCBpdC4gVW5saWtlIGEgYnVpbGQtdGltZS1vbmx5IGd6aXAgc3RlcCAoZS5nLiBhIC5neiBzaWRlY2FyXG4vLyBmaWxlKSwgdGhpcyBuZWVkcyBubyBzZXJ2ZXIvQ29udGVudC1FbmNvZGluZyBzdXBwb3J0IHRvIHBheSBvZmYgLSBkZWNvbXByZXNzaW9uIGhhcHBlbnNcbi8vIGVudGlyZWx5IGNsaWVudC1zaWRlIGluIHRoZSBsb2FkZWQgcGFnZSAtIHNvIGl0IHdvcmtzIGZvciBjb250ZW50IHNlcnZlZCBzdGF0aWNhbGx5IG9yIG9wZW5lZFxuLy8gZGlyZWN0bHkgZnJvbSBkaXNrLiBPbmx5IHJlcGxhY2VzIHRoZSBib2R5IHdoZW4gdGhlIHdyYXBwZWQgdmVyc2lvbiBhY3R1YWxseSBjb21lcyBvdXRcbi8vIHNtYWxsZXIsIHNpbmNlIGd6aXAgKyBiYXNlNjQncyB+MzMlIG92ZXJoZWFkIGNhbiBsb3NlIGFnYWluc3QgYSBzbWFsbC9hbHJlYWR5LWRlbnNlIGJvZHkuXG5jbGFzcyBTZWxmRGVjb21wcmVzc2luZ0h0bWxQbHVnaW4gaW1wbGVtZW50cyBXZWJwYWNrUGx1Z2luSW5zdGFuY2Uge1xuICBodG1sQXNzZXROYW1lPzogc3RyaW5nXG4gIGxvYWRpbmdNYXJrdXA6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHsgbG9hZGluZ01hcmt1cCA9IGRlZmF1bHRMb2FkaW5nTWFya3VwIH06IHsgbG9hZGluZ01hcmt1cD86IHN0cmluZyB9ID0ge30pIHtcbiAgICB0aGlzLmxvYWRpbmdNYXJrdXAgPSBsb2FkaW5nTWFya3VwXG4gIH1cblxuICBhcHBseShjb21waWxlcjogQ29tcGlsZXIpIHtcbiAgICBjb21waWxlci5ob29rcy5jb21waWxhdGlvbi50YXAoJ3NlbGYtZGVjb21wcmVzc2luZy1odG1sLXBsdWdpbicsIChjb21waWxhdGlvbjogQ29tcGlsYXRpb24pID0+IHtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGV4YWN0IGFzc2V0IHRoaXMgcGx1Z2luIHNob3VsZCBhY3Qgb24gLSB0aGUgb25lIHBhZ2UgdGhlIHBhaXJlZFxuICAgICAgLy8gSHRtbFdlYnBhY2tQbHVnaW4gaW5zdGFuY2UgaW4gdGhpcyBzYW1lIGh0bWxDb25maWdGYWN0b3J5KCkgY2FsbCBwcm9kdWNlZCAtIHRoZSBzYW1lIHdheVxuICAgICAgLy8gSHRtbElubGluZVNvdXJjZVBsdWdpbiBkb2VzLiBBIHBhdHRlcm4gbWF0Y2hlZCBhZ2FpbnN0IGFsbCBvZiBjb21waWxhdGlvbi5hc3NldHMgKGFzIGFuXG4gICAgICAvLyBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBwbHVnaW4gZGlkKSB3b3VsZCBtaXNmaXJlIGluIGEgbXVsdGktcGFnZSBidWlsZCB3aXRoIHNldmVyYWxcbiAgICAgIC8vIEh0bWxXZWJwYWNrUGx1Z2luIGluc3RhbmNlcywgdG91Y2hpbmcgcGFnZXMgdGhpcyBwbHVnaW4gaW5zdGFuY2UgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aC5cbiAgICAgIEh0bWxXZWJwYWNrUGx1Z2luLmdldEhvb2tzKGNvbXBpbGF0aW9uKS5hZnRlclRlbXBsYXRlRXhlY3V0aW9uLnRhcCgnc2VsZi1kZWNvbXByZXNzaW5nLWh0bWwtcGx1Z2luJywgKGh0bWxQbHVnaW5EYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuaHRtbEFzc2V0TmFtZSA9IGh0bWxQbHVnaW5EYXRhLm91dHB1dE5hbWVcbiAgICAgICAgcmV0dXJuIGh0bWxQbHVnaW5EYXRhXG4gICAgICB9KVxuXG4gICAgICAvLyBQUk9DRVNTX0FTU0VUU19TVEFHRV9SRVBPUlQgaXMgdGhlIGxhc3QgbmFtZWQgcHJvY2Vzc0Fzc2V0cyBzdGFnZSAtIHRhcHBpbmcgYSBmdXJ0aGVyXG4gICAgICAvLyAxMDAwIHBhc3QgaXQsIHJhdGhlciB0aGFuIGF0IHRoYXQgc2FtZSBzdGFnZSwgZ3VhcmFudGVlcyB0aGlzIGFsd2F5cyBydW5zIGFmdGVyIGFueVxuICAgICAgLy8gb3RoZXIgcGx1Z2luJ3MgUkVQT1JULXN0YWdlIHdvcmsgKGUuZy4gYW4gaHRtbC1pbmxpbmluZyBwbHVnaW4gc3RpbGwgcmV3cml0aW5nIHRoZSBodG1sXG4gICAgICAvLyBhc3NldCBhdCB0aGF0IHNhbWUgc3RhZ2UpIHJlZ2FyZGxlc3Mgb2YgcGx1Z2luIHJlZ2lzdHJhdGlvbiBvcmRlciwgc2luY2UgdGhpcyBhc3NldCBtdXN0XG4gICAgICAvLyBiZSBnZW51aW5lbHkgZmluYWwgYmVmb3JlIGl0cyBib2R5IGlzIGd6aXBwZWQuXG4gICAgICBjb21waWxhdGlvbi5ob29rcy5wcm9jZXNzQXNzZXRzLnRhcFByb21pc2UoXG4gICAgICAgIHsgbmFtZTogJ3NlbGYtZGVjb21wcmVzc2luZy1odG1sLXBsdWdpbicsIHN0YWdlOiBjb21waWxlci53ZWJwYWNrLkNvbXBpbGF0aW9uLlBST0NFU1NfQVNTRVRTX1NUQUdFX1JFUE9SVCArIDEwMDAgfSxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5odG1sQXNzZXROYW1lKSByZXR1cm5cbiAgICAgICAgICBjb25zdCBodG1sQXNzZXQgPSBjb21waWxhdGlvbi5hc3NldHNbdGhpcy5odG1sQXNzZXROYW1lXVxuICAgICAgICAgIGlmICghaHRtbEFzc2V0KSByZXR1cm5cblxuICAgICAgICAgIGNvbnN0IGh0bWwgPSBodG1sQXNzZXQuc291cmNlKCkudG9TdHJpbmcoKVxuICAgICAgICAgIGNvbnN0IG1hdGNoID0gaHRtbC5tYXRjaChib2R5UmVnRXhwKVxuICAgICAgICAgIGlmICghbWF0Y2gpIHJldHVyblxuXG4gICAgICAgICAgY29uc3QgW2Z1bGxNYXRjaCwgYm9keUF0dHJzLCBib2R5Q29udGVudF0gPSBtYXRjaFxuICAgICAgICAgIGlmIChib2R5Q29udGVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm5cbiAgICAgICAgICBjb25zdCBnemlwcGVkID0gYXdhaXQgZ3ppcChib2R5Q29udGVudClcbiAgICAgICAgICBjb25zdCBuZXdCb2R5ID0gYDxib2R5JHtib2R5QXR0cnN9PiR7dGhpcy5sb2FkaW5nTWFya3VwfSR7Ym9vdHN0cmFwU2NyaXB0KGd6aXBwZWQudG9TdHJpbmcoJ2Jhc2U2NCcpKX08L2JvZHk+YFxuICAgICAgICAgIGNvbnN0IHdyYXBwZWQgPSBodG1sLnNsaWNlKDAsIG1hdGNoLmluZGV4KSArIG5ld0JvZHkgKyBodG1sLnNsaWNlKG1hdGNoLmluZGV4ISArIGZ1bGxNYXRjaC5sZW5ndGgpXG4gICAgICAgICAgaWYgKHdyYXBwZWQubGVuZ3RoID49IGh0bWwubGVuZ3RoKSByZXR1cm5cblxuICAgICAgICAgIGNvbXBpbGF0aW9uLnVwZGF0ZUFzc2V0KHRoaXMuaHRtbEFzc2V0TmFtZSwgbmV3IGNvbXBpbGVyLndlYnBhY2suc291cmNlcy5SYXdTb3VyY2Uod3JhcHBlZCkpXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxmRGVjb21wcmVzc2luZ0h0bWxQbHVnaW5cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type LicensePlugin from 'webpack-license-plugin';
|
|
2
|
+
type AdditionalFilesConfigType = NonNullable<NonNullable<ConstructorParameters<typeof LicensePlugin>[0]>['additionalFiles']>;
|
|
3
|
+
type PackageLicenseMetaType = Parameters<AdditionalFilesConfigType[string]>[0][number];
|
|
4
|
+
declare const formatThirdPartyNotices: (packages: PackageLicenseMetaType[]) => string;
|
|
5
|
+
export default formatThirdPartyNotices;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const formatThirdPartyNotices = (packages) => packages
|
|
2
|
+
.slice()
|
|
3
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
4
|
+
.map(({ name, version, license, author, repository, licenseText }) => {
|
|
5
|
+
const header = `${name}@${version} — ${license}${author ? ` — ${author}` : ''}${repository ? ` — ${repository}` : ''}`;
|
|
6
|
+
const body = (licenseText || '(license text unavailable)').trim();
|
|
7
|
+
return `${header}\n${'='.repeat(header.length)}\n\n${body}`;
|
|
8
|
+
})
|
|
9
|
+
.join('\n\n\n');
|
|
10
|
+
export default formatThirdPartyNotices;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0VGhpcmRQYXJ0eU5vdGljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGx1Z2lucy9mb3JtYXRUaGlyZFBhcnR5Tm90aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLHVCQUF1QixHQUFHLENBQUMsUUFBa0MsRUFBRSxFQUFFLENBQ3JFLFFBQVE7S0FDTCxLQUFLLEVBQUU7S0FDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDNUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUU7SUFDbkUsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksT0FBTyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFBO0lBQ3RILE1BQU0sSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLDRCQUE0QixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDakUsT0FBTyxHQUFHLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQTtBQUM3RCxDQUFDLENBQUM7S0FDRCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7QUFFbkIsZUFBZSx1QkFBdUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIExpY2Vuc2VQbHVnaW4gZnJvbSAnd2VicGFjay1saWNlbnNlLXBsdWdpbidcblxudHlwZSBBZGRpdGlvbmFsRmlsZXNDb25maWdUeXBlID0gTm9uTnVsbGFibGU8Tm9uTnVsbGFibGU8Q29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBMaWNlbnNlUGx1Z2luPlswXT5bJ2FkZGl0aW9uYWxGaWxlcyddPlxudHlwZSBQYWNrYWdlTGljZW5zZU1ldGFUeXBlID0gUGFyYW1ldGVyczxBZGRpdGlvbmFsRmlsZXNDb25maWdUeXBlW3N0cmluZ10+WzBdW251bWJlcl1cblxuY29uc3QgZm9ybWF0VGhpcmRQYXJ0eU5vdGljZXMgPSAocGFja2FnZXM6IFBhY2thZ2VMaWNlbnNlTWV0YVR5cGVbXSkgPT5cbiAgcGFja2FnZXNcbiAgICAuc2xpY2UoKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKVxuICAgIC5tYXAoKHsgbmFtZSwgdmVyc2lvbiwgbGljZW5zZSwgYXV0aG9yLCByZXBvc2l0b3J5LCBsaWNlbnNlVGV4dCB9KSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBgJHtuYW1lfUAke3ZlcnNpb259IOKAlCAke2xpY2Vuc2V9JHthdXRob3IgPyBgIOKAlCAke2F1dGhvcn1gIDogJyd9JHtyZXBvc2l0b3J5ID8gYCDigJQgJHtyZXBvc2l0b3J5fWAgOiAnJ31gXG4gICAgICBjb25zdCBib2R5ID0gKGxpY2Vuc2VUZXh0IHx8ICcobGljZW5zZSB0ZXh0IHVuYXZhaWxhYmxlKScpLnRyaW0oKVxuICAgICAgcmV0dXJuIGAke2hlYWRlcn1cXG4keyc9Jy5yZXBlYXQoaGVhZGVyLmxlbmd0aCl9XFxuXFxuJHtib2R5fWBcbiAgICB9KVxuICAgIC5qb2luKCdcXG5cXG5cXG4nKVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXRUaGlyZFBhcnR5Tm90aWNlc1xuIl19
|
package/plugins/index.d.ts
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
|
|
2
|
+
import LicensePlugin from 'webpack-license-plugin';
|
|
2
3
|
import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
|
|
3
4
|
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
|
|
4
5
|
import TerserPlugin from 'terser-webpack-plugin';
|
|
5
6
|
import { MinifyOptions } from 'terser';
|
|
6
7
|
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
|
7
8
|
import { type WebpackPluginInstance } from 'webpack';
|
|
9
|
+
import DefineEnvPlugin from './DefineEnvPlugin.js';
|
|
10
|
+
import HtmlInlineSourcePlugin from './HtmlInlineSourcePlugin.js';
|
|
11
|
+
import SelfDecompressingHtmlPlugin from './SelfDecompressingHtmlPlugin.js';
|
|
8
12
|
export declare const cssConfigFactory: ({ filename, cssnanoOptions, }?: {
|
|
9
13
|
filename?: string;
|
|
10
14
|
cssnanoOptions?: any;
|
|
11
15
|
}) => (MiniCssExtractPlugin | CssMinimizerPlugin<CssMinimizerPlugin.CssNanoOptionsExtended>)[];
|
|
12
16
|
export declare const bundleAnalyzerConfigFactory: (extraConfig?: BundleAnalyzerPlugin.Options) => BundleAnalyzerPlugin[];
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
type HtmlInlineSourceAdditionalAssetsType = NonNullable<InstanceType<typeof HtmlInlineSourcePlugin>['additionalAssets']>;
|
|
18
|
+
type SelfDecompressingHtmlOptionsType = ConstructorParameters<typeof SelfDecompressingHtmlPlugin>[0];
|
|
19
|
+
export declare const htmlConfigFactory: ({ html, embed, compress, }?: {
|
|
20
|
+
embed?: boolean | {
|
|
21
|
+
additionalAssets?: HtmlInlineSourceAdditionalAssetsType;
|
|
22
|
+
};
|
|
23
|
+
compress?: boolean | SelfDecompressingHtmlOptionsType;
|
|
15
24
|
html?: Partial<HtmlWebpackPlugin.Options>;
|
|
16
25
|
}) => WebpackPluginInstance[];
|
|
17
26
|
export declare const terserConfigFactory: ({ enableSourcemaps, terserOptions, embed }?: {
|
|
18
|
-
enableSourcemaps?: boolean;
|
|
19
|
-
terserOptions?: MinifyOptions;
|
|
20
|
-
embed?: boolean;
|
|
27
|
+
enableSourcemaps?: boolean | undefined;
|
|
28
|
+
terserOptions?: MinifyOptions | undefined;
|
|
29
|
+
embed?: boolean | undefined;
|
|
21
30
|
}) => TerserPlugin<{
|
|
22
31
|
compress: boolean | import("terser").CompressOptions;
|
|
23
32
|
ecma?: import("terser").ECMA;
|
|
@@ -35,3 +44,6 @@ export declare const terserConfigFactory: ({ enableSourcemaps, terserOptions, em
|
|
|
35
44
|
sourceMap: boolean | import("terser").SourceMapOptions;
|
|
36
45
|
toplevel?: boolean;
|
|
37
46
|
}>[];
|
|
47
|
+
export declare const defineEnvConfigFactory: (envVarNames: string[]) => DefineEnvPlugin[];
|
|
48
|
+
export declare const licenseConfigFactory: ({ outputFilename, includeNoticeText, additionalFiles, ...extraConfig }?: Partial<ConstructorParameters<typeof LicensePlugin>[0]>) => LicensePlugin[];
|
|
49
|
+
export {};
|
package/plugins/index.js
CHANGED
|
@@ -1,36 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const HtmlWebpackInlineSourcePlugin_1 = __importDefault(require("./HtmlWebpackInlineSourcePlugin"));
|
|
15
|
-
const cssConfigFactory = ({ filename = '[name]-[chunkhash].css', cssnanoOptions = {}, } = {}) => {
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
|
|
3
|
+
import LicensePlugin from 'webpack-license-plugin';
|
|
4
|
+
import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
|
|
5
|
+
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
|
|
6
|
+
import TerserPlugin from 'terser-webpack-plugin';
|
|
7
|
+
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
|
8
|
+
import fs from 'fs';
|
|
9
|
+
import DefineEnvPlugin from './DefineEnvPlugin.js';
|
|
10
|
+
import HtmlInlineSourcePlugin from './HtmlInlineSourcePlugin.js';
|
|
11
|
+
import SelfDecompressingHtmlPlugin from './SelfDecompressingHtmlPlugin.js';
|
|
12
|
+
import formatThirdPartyNotices from './formatThirdPartyNotices.js';
|
|
13
|
+
export const cssConfigFactory = ({ filename = '[name]-[chunkhash].css', cssnanoOptions = {}, } = {}) => {
|
|
16
14
|
return [
|
|
17
|
-
new
|
|
15
|
+
new MiniCssExtractPlugin({
|
|
18
16
|
filename,
|
|
19
17
|
}),
|
|
20
|
-
new
|
|
18
|
+
new CssMinimizerPlugin({
|
|
21
19
|
test: /\.css$/g,
|
|
22
20
|
minimizerOptions: {
|
|
23
21
|
preset: ['advanced'],
|
|
24
22
|
...cssnanoOptions,
|
|
25
23
|
},
|
|
26
|
-
minify:
|
|
24
|
+
minify: CssMinimizerPlugin.cssnanoMinify,
|
|
27
25
|
}),
|
|
28
26
|
];
|
|
29
27
|
};
|
|
30
|
-
|
|
31
|
-
const bundleAnalyzerConfigFactory = (extraConfig = {}) => {
|
|
28
|
+
export const bundleAnalyzerConfigFactory = (extraConfig = {}) => {
|
|
32
29
|
return [
|
|
33
|
-
new
|
|
30
|
+
new BundleAnalyzerPlugin({
|
|
34
31
|
analyzerMode: 'static',
|
|
35
32
|
reportFilename: './reports/bundle-analysis.html',
|
|
36
33
|
openAnalyzer: false,
|
|
@@ -38,23 +35,26 @@ const bundleAnalyzerConfigFactory = (extraConfig = {}) => {
|
|
|
38
35
|
}),
|
|
39
36
|
];
|
|
40
37
|
};
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
export const htmlConfigFactory = ({ html = {}, embed, compress, } = {}) => {
|
|
39
|
+
const template = html.template ?? path.join(process.cwd(), 'template.html');
|
|
40
|
+
const templateExists = fs.existsSync(template);
|
|
41
|
+
// Interpolated directly here rather than left as an EJS placeholder (e.g.
|
|
42
|
+
// `<%= htmlWebpackPlugin.options.title %>`, the mechanism a real `template` file can use) -
|
|
43
|
+
// html-webpack-plugin only runs templateContent strings through its EJS child-compilation when
|
|
44
|
+
// they came from a file; a plain string option like this one is used completely as-is.
|
|
46
45
|
const templateContent = `<!DOCTYPE html>
|
|
47
46
|
<html>
|
|
48
47
|
<head>
|
|
49
48
|
<meta charset="UTF-8" />
|
|
49
|
+
${html.title ? `<title>${html.title}</title>` : ''}
|
|
50
50
|
</head>
|
|
51
51
|
<body>
|
|
52
52
|
<div id="root"></div>
|
|
53
53
|
</body>
|
|
54
54
|
</html>`;
|
|
55
|
-
const favicon = html.favicon ? (
|
|
55
|
+
const favicon = html.favicon ? (path.isAbsolute(html.favicon) ? html.favicon : path.join(process.cwd(), html.favicon)) : undefined;
|
|
56
56
|
const plugins = [
|
|
57
|
-
new
|
|
57
|
+
new HtmlWebpackPlugin({
|
|
58
58
|
inject: 'body',
|
|
59
59
|
lang: 'en-US',
|
|
60
60
|
...(templateExists ? { template } : { templateContent }),
|
|
@@ -63,14 +63,23 @@ const htmlConfigFactory = ({ html = {}, embed } = {}) => {
|
|
|
63
63
|
}),
|
|
64
64
|
];
|
|
65
65
|
if (embed) {
|
|
66
|
-
|
|
66
|
+
const inlineSourcePlugin = new HtmlInlineSourcePlugin();
|
|
67
|
+
if (typeof embed === 'object') {
|
|
68
|
+
inlineSourcePlugin.additionalAssets = embed.additionalAssets;
|
|
69
|
+
}
|
|
70
|
+
plugins.push(inlineSourcePlugin);
|
|
71
|
+
}
|
|
72
|
+
// Runs its own processAssets tap well after HtmlInlineSourcePlugin's (see that plugin's
|
|
73
|
+
// comment on its stage choice), so it always gzips the fully embedded/finished body regardless
|
|
74
|
+
// of push order here.
|
|
75
|
+
if (compress) {
|
|
76
|
+
plugins.push(new SelfDecompressingHtmlPlugin(typeof compress === 'object' ? compress : {}));
|
|
67
77
|
}
|
|
68
78
|
return plugins;
|
|
69
79
|
};
|
|
70
|
-
|
|
71
|
-
const terserConfigFactory = ({ enableSourcemaps = true, terserOptions = {}, embed = false } = {}) => [
|
|
80
|
+
export const terserConfigFactory = ({ enableSourcemaps = true, terserOptions = {}, embed = false } = {}) => [
|
|
72
81
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
73
|
-
new
|
|
82
|
+
new TerserPlugin({
|
|
74
83
|
parallel: true,
|
|
75
84
|
extractComments: !embed,
|
|
76
85
|
terserOptions: {
|
|
@@ -89,5 +98,25 @@ const terserConfigFactory = ({ enableSourcemaps = true, terserOptions = {}, embe
|
|
|
89
98
|
},
|
|
90
99
|
}),
|
|
91
100
|
];
|
|
92
|
-
|
|
93
|
-
|
|
101
|
+
// Defines process.env.<name> for each listed env var as its (JSON-stringified) current value at
|
|
102
|
+
// build time - the DefinePlugin equivalent of dotenv-loading into the bundle. Values not set in
|
|
103
|
+
// the running process become the string "undefined" (JSON.stringify(undefined) === undefined,
|
|
104
|
+
// which DefinePlugin then coerces to that literal), same as an un-set process.env access already
|
|
105
|
+
// behaves at runtime.
|
|
106
|
+
export const defineEnvConfigFactory = (envVarNames) => {
|
|
107
|
+
return [new DefineEnvPlugin(envVarNames)];
|
|
108
|
+
};
|
|
109
|
+
export const licenseConfigFactory = ({ outputFilename = 'THIRD-PARTY-NOTICES.json', includeNoticeText = true, additionalFiles, ...extraConfig } = {}) => {
|
|
110
|
+
return [
|
|
111
|
+
new LicensePlugin({
|
|
112
|
+
outputFilename,
|
|
113
|
+
includeNoticeText,
|
|
114
|
+
additionalFiles: {
|
|
115
|
+
'THIRD-PARTY-NOTICES.txt': formatThirdPartyNotices,
|
|
116
|
+
...additionalFiles,
|
|
117
|
+
},
|
|
118
|
+
...extraConfig,
|
|
119
|
+
}),
|
|
120
|
+
];
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGx1Z2lucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDOUQsT0FBTyxhQUFhLE1BQU0sd0JBQXdCLENBQUE7QUFDbEQsT0FBTyxrQkFBa0IsTUFBTSw4QkFBOEIsQ0FBQTtBQUM3RCxPQUFPLG9CQUFvQixNQUFNLHlCQUF5QixDQUFBO0FBQzFELE9BQU8sWUFBWSxNQUFNLHVCQUF1QixDQUFBO0FBRWhELE9BQU8saUJBQWlCLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBR25CLE9BQU8sZUFBZSxNQUFNLG1CQUFtQixDQUFBO0FBQy9DLE9BQU8sc0JBQXNCLE1BQU0sMEJBQTBCLENBQUE7QUFDN0QsT0FBTywyQkFBMkIsTUFBTSwrQkFBK0IsQ0FBQTtBQUN2RSxPQUFPLHVCQUF1QixNQUFNLDJCQUEyQixDQUFBO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFDL0IsUUFBUSxHQUFHLHdCQUF3QixFQUNuQyxjQUFjLEdBQUcsRUFBRSxNQUM0QixFQUFFLEVBQUUsRUFBRTtJQUNyRCxPQUFPO1FBQ0wsSUFBSSxvQkFBb0IsQ0FBQztZQUN2QixRQUFRO1NBQ1QsQ0FBQztRQUNGLElBQUksa0JBQWtCLENBQUM7WUFDckIsSUFBSSxFQUFFLFNBQVM7WUFDZixnQkFBZ0IsRUFBRTtnQkFDaEIsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDO2dCQUNwQixHQUFHLGNBQWM7YUFDbEI7WUFDRCxNQUFNLEVBQUUsa0JBQWtCLENBQUMsYUFBYTtTQUN6QyxDQUFDO0tBQ0gsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENB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QUFLO2FBQ2hCO1lBQ0QsV0FBVyxFQUFFLElBQUk7WUFDakIsZUFBZSxFQUFFLElBQUk7WUFDckIsTUFBTSxFQUFFO2dCQUNOLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixlQUFlLEVBQUUsSUFBSTthQUN0QjtZQUNELEdBQUcsYUFBYTtTQUNqQjtLQUNGLENBQUM7Q0FDSCxDQUFBO0FBRUQsZ0dBQWdHO0FBQ2hHLGdHQUFnRztBQUNoRyw4RkFBOEY7QUFDOUYsaUdBQWlHO0FBQ2pHLHNCQUFzQjtBQUN0QixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFdBQXFCLEVBQUUsRUFBRTtJQUM5RCxPQUFPLENBQUMsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtBQUMzQyxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEVBQ25DLGNBQWMsR0FBRywwQkFBMEIsRUFDM0MsaUJBQWlCLEdBQUcsSUFBSSxFQUN4QixlQUFlLEVBQ2YsR0FBRyxXQUFXLEtBQzZDLEVBQUUsRUFBRSxFQUFFO0lBQ2pFLE9BQU87UUFDTCxJQUFJLGFBQWEsQ0FBQztZQUNoQixjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLGVBQWUsRUFBRTtnQkFDZix5QkFBeUIsRUFBRSx1QkFBdUI7Z0JBQ2xELEdBQUcsZUFBZTthQUNuQjtZQUNELEdBQUcsV0FBVztTQUNmLENBQUM7S0FDSCxDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IEJ1bmRsZUFuYWx5emVyUGx1Z2luIH0gZnJvbSAnd2VicGFjay1idW5kbGUtYW5hbHl6ZXInXG5pbXBvcnQgTGljZW5zZVBsdWdpbiBmcm9tICd3ZWJwYWNrLWxpY2Vuc2UtcGx1Z2luJ1xuaW1wb3J0IENzc01pbmltaXplclBsdWdpbiBmcm9tICdjc3MtbWluaW1pemVyLXdlYnBhY2stcGx1Z2luJ1xuaW1wb3J0IE1pbmlDc3NFeHRyYWN0UGx1Z2luIGZyb20gJ21pbmktY3NzLWV4dHJhY3QtcGx1Z2luJ1xuaW1wb3J0IFRlcnNlclBsdWdpbiBmcm9tICd0ZXJzZXItd2VicGFjay1wbHVnaW4nXG5pbXBvcnQgeyBNaW5pZnlPcHRpb25zIH0gZnJvbSAndGVyc2VyJ1xuaW1wb3J0IEh0bWxXZWJwYWNrUGx1Z2luIGZyb20gJ2h0bWwtd2VicGFjay1wbHVnaW4nXG5pbXBvcnQgZnMgZnJvbSAnZnMnXG5pbXBvcnQgeyB0eXBlIFdlYnBhY2tQbHVnaW5JbnN0YW5jZSB9IGZyb20gJ3dlYnBhY2snXG5cbmltcG9ydCBEZWZpbmVFbnZQbHVnaW4gZnJvbSAnLi9EZWZpbmVFbnZQbHVnaW4nXG5pbXBvcnQgSHRtbElubGluZVNvdXJjZVBsdWdpbiBmcm9tICcuL0h0bWxJbmxpbmVTb3VyY2VQbHVnaW4nXG5pbXBvcnQgU2VsZkRlY29tcHJlc3NpbmdIdG1sUGx1Z2luIGZyb20gJy4vU2VsZkRlY29tcHJlc3NpbmdIdG1sUGx1Z2luJ1xuaW1wb3J0IGZvcm1hdFRoaXJkUGFydHlOb3RpY2VzIGZyb20gJy4vZm9ybWF0VGhpcmRQYXJ0eU5vdGljZXMnXG5cbmV4cG9ydCBjb25zdCBjc3NDb25maWdGYWN0b3J5ID0gKHtcbiAgZmlsZW5hbWUgPSAnW25hbWVdLVtjaHVua2hhc2hdLmNzcycsXG4gIGNzc25hbm9PcHRpb25zID0ge30sXG59OiB7IGZpbGVuYW1lPzogc3RyaW5nOyBjc3NuYW5vT3B0aW9ucz86IGFueSB9ID0ge30pID0+IHtcbiAgcmV0dXJuIFtcbiAgICBuZXcgTWluaUNzc0V4dHJhY3RQbHVnaW4oe1xuICAgICAgZmlsZW5hbWUsXG4gICAgfSksXG4gICAgbmV3IENzc01pbmltaXplclBsdWdpbih7XG4gICAgICB0ZXN0OiAvXFwuY3NzJC9nLFxuICAgICAgbWluaW1pemVyT3B0aW9uczoge1xuICAgICAgICBwcmVzZXQ6IFsnYWR2YW5jZWQnXSxcbiAgICAgICAgLi4uY3NzbmFub09wdGlvbnMsXG4gICAgICB9LFxuICAgICAgbWluaWZ5OiBDc3NNaW5pbWl6ZXJQbHVnaW4uY3NzbmFub01pbmlmeSxcbiAgICB9KSxcbiAgXVxufVxuXG5leHBvcnQgY29uc3QgYnVuZGxlQW5hbHl6ZXJDb25maWdGYWN0b3J5ID0gKGV4dHJhQ29uZmlnOiBCdW5kbGVBbmFseXplclBsdWdpbi5PcHRpb25zID0ge30pID0+IHtcbiAgcmV0dXJuIFtcbiAgICBuZXcgQnVuZGxlQW5hbHl6ZXJQbHVnaW4oe1xuICAgICAgYW5hbHl6ZXJNb2RlOiAnc3RhdGljJyxcbiAgICAgIHJlcG9ydEZpbGVuYW1lOiAnLi9yZXBvcnRzL2J1bmRsZS1hbmFseXNpcy5odG1sJyxcbiAgICAgIG9wZW5BbmFseXplcjogZmFsc2UsXG4gICAgICAuLi5leHRyYUNvbmZpZyxcbiAgICB9KSxcbiAgXVxufVxuXG50eXBlIEh0bWxJbmxpbmVTb3VyY2VBZGRpdGlvbmFsQXNzZXRzVHlwZSA9IE5vbk51bGxhYmxlPEluc3RhbmNlVHlwZTx0eXBlb2YgSHRtbElubGluZVNvdXJjZVBsdWdpbj5bJ2FkZGl0aW9uYWxBc3NldHMnXT5cbnR5cGUgU2VsZkRlY29tcHJlc3NpbmdIdG1sT3B0aW9uc1R5cGUgPSBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFNlbGZEZWNvbXByZXNzaW5nSHRtbFBsdWdpbj5bMF1cblxuZXhwb3J0IGNvbnN0IGh0bWxDb25maWdGYWN0b3J5ID0gKHtcbiAgaHRtbCA9IHt9LFxuICBlbWJlZCxcbiAgY29tcHJlc3MsXG59OiB7XG4gIGVtYmVkPzogYm9vbGVhbiB8IHsgYWRkaXRpb25hbEFzc2V0cz86IEh0bWxJbmxpbmVTb3VyY2VBZGRpdGlvbmFsQXNzZXRzVHlwZSB9XG4gIGNvbXByZXNzPzogYm9vbGVhbiB8IFNlbGZEZWNvbXByZXNzaW5nSHRtbE9wdGlvbnNUeXBlXG4gIGh0bWw/OiBQYXJ0aWFsPEh0bWxXZWJwYWNrUGx1Z2luLk9wdGlvbnM+XG59ID0ge30pID0+IHtcbiAgY29uc3QgdGVtcGxhdGUgPSBodG1sLnRlbXBsYXRlID8/IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAndGVtcGxhdGUuaHRtbCcpXG4gIGNvbnN0IHRlbXBsYXRlRXhpc3RzID0gZnMuZXhpc3RzU3luYyh0ZW1wbGF0ZSlcbiAgLy8gSW50ZXJwb2xhdGVkIGRpcmVjdGx5IGhlcmUgcmF0aGVyIHRoYW4gbGVmdCBhcyBhbiBFSlMgcGxhY2Vob2xkZXIgKGUuZy5cbiAgLy8gYDwlPSBodG1sV2VicGFja1BsdWdpbi5vcHRpb25zLnRpdGxlICU+YCwgdGhlIG1lY2hhbmlzbSBhIHJlYWwgYHRlbXBsYXRlYCBmaWxlIGNhbiB1c2UpIC1cbiAgLy8gaHRtbC13ZWJwYWNrLXBsdWdpbiBvbmx5IHJ1bnMgdGVtcGxhdGVDb250ZW50IHN0cmluZ3MgdGhyb3VnaCBpdHMgRUpTIGNoaWxkLWNvbXBpbGF0aW9uIHdoZW5cbiAgLy8gdGhleSBjYW1lIGZyb20gYSBmaWxlOyBhIHBsYWluIHN0cmluZyBvcHRpb24gbGlrZSB0aGlzIG9uZSBpcyB1c2VkIGNvbXBsZXRlbHkgYXMtaXMuXG4gIGNvbnN0IHRlbXBsYXRlQ29udGVudCA9IGA8IURPQ1RZUEUgaHRtbD5cbiAgPGh0bWw+XG4gIDxoZWFkPlxuICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiIC8+XG4gICAgJHtodG1sLnRpdGxlID8gYDx0aXRsZT4ke2h0bWwudGl0bGV9PC90aXRsZT5gIDogJyd9XG4gIDwvaGVhZD5cbiAgPGJvZHk+XG4gICAgPGRpdiBpZD1cInJvb3RcIj48L2Rpdj5cbiAgPC9ib2R5PlxuICA8L2h0bWw+YFxuICBjb25zdCBmYXZpY29uID0gaHRtbC5mYXZpY29uID8gKHBhdGguaXNBYnNvbHV0ZShodG1sLmZhdmljb24pID8gaHRtbC5mYXZpY29uIDogcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGh0bWwuZmF2aWNvbikpIDogdW5kZWZpbmVkXG4gIGNvbnN0IHBsdWdpbnM6IFdlYnBhY2tQbHVnaW5JbnN0YW5jZVtdID0gW1xuICAgIG5ldyBIdG1sV2VicGFja1BsdWdpbih7XG4gICAgICBpbmplY3Q6ICdib2R5JyxcbiAgICAgIGxhbmc6ICdlbi1VUycsXG4gICAgICAuLi4odGVtcGxhdGVFeGlzdHMgPyB7IHRlbXBsYXRlIH0gOiB7IHRlbXBsYXRlQ29udGVudCB9KSxcbiAgICAgIC4uLmh0bWwsXG4gICAgICBmYXZpY29uLFxuICAgIH0pLFxuICBdXG5cbiAgaWYgKGVtYmVkKSB7XG4gICAgY29uc3QgaW5saW5lU291cmNlUGx1Z2luID0gbmV3IEh0bWxJbmxpbmVTb3VyY2VQbHVnaW4oKVxuICAgIGlmICh0eXBlb2YgZW1iZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpbmxpbmVTb3VyY2VQbHVnaW4uYWRkaXRpb25hbEFzc2V0cyA9IGVtYmVkLmFkZGl0aW9uYWxBc3NldHNcbiAgICB9XG4gICAgcGx1Z2lucy5wdXNoKGlubGluZVNvdXJjZVBsdWdpbilcbiAgfVxuXG4gIC8vIFJ1bnMgaXRzIG93biBwcm9jZXNzQXNzZXRzIHRhcCB3ZWxsIGFmdGVyIEh0bWxJbmxpbmVTb3VyY2VQbHVnaW4ncyAoc2VlIHRoYXQgcGx1Z2luJ3NcbiAgLy8gY29tbWVudCBvbiBpdHMgc3RhZ2UgY2hvaWNlKSwgc28gaXQgYWx3YXlzIGd6aXBzIHRoZSBmdWxseSBlbWJlZGRlZC9maW5pc2hlZCBib2R5IHJlZ2FyZGxlc3NcbiAgLy8gb2YgcHVzaCBvcmRlciBoZXJlLlxuICBpZiAoY29tcHJlc3MpIHtcbiAgICBwbHVnaW5zLnB1c2gobmV3IFNlbGZEZWNvbXByZXNzaW5nSHRtbFBsdWdpbih0eXBlb2YgY29tcHJlc3MgPT09ICdvYmplY3QnID8gY29tcHJlc3MgOiB7fSkpXG4gIH1cblxuICByZXR1cm4gcGx1Z2luc1xufVxuXG5leHBvcnQgY29uc3QgdGVyc2VyQ29uZmlnRmFjdG9yeSA9ICh7IGVuYWJsZVNvdXJjZW1hcHMgPSB0cnVlLCB0ZXJzZXJPcHRpb25zID0ge30gYXMgTWluaWZ5T3B0aW9ucywgZW1iZWQgPSBmYWxzZSB9ID0ge30pID0+IFtcbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG4gIG5ldyBUZXJzZXJQbHVnaW4oe1xuICAgIHBhcmFsbGVsOiB0cnVlLFxuICAgIGV4dHJhY3RDb21tZW50czogIWVtYmVkLFxuICAgIHRlcnNlck9wdGlvbnM6IHtcbiAgICAgIGllODogZmFsc2UsXG4gICAgICBzb3VyY2VNYXA6IGVuYWJsZVNvdXJjZW1hcHMsXG4gICAgICBjb21wcmVzczoge1xuICAgICAgICBldmFsdWF0ZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAga2VlcF9mbmFtZXM6IHRydWUsXG4gICAgICBrZWVwX2NsYXNzbmFtZXM6IHRydWUsXG4gICAgICBtYW5nbGU6IHtcbiAgICAgICAga2VlcF9mbmFtZXM6IHRydWUsXG4gICAgICAgIGtlZXBfY2xhc3NuYW1lczogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICAuLi50ZXJzZXJPcHRpb25zLFxuICAgIH0sXG4gIH0pLFxuXVxuXG4vLyBEZWZpbmVzIHByb2Nlc3MuZW52LjxuYW1lPiBmb3IgZWFjaCBsaXN0ZWQgZW52IHZhciBhcyBpdHMgKEpTT04tc3RyaW5naWZpZWQpIGN1cnJlbnQgdmFsdWUgYXRcbi8vIGJ1aWxkIHRpbWUgLSB0aGUgRGVmaW5lUGx1Z2luIGVxdWl2YWxlbnQgb2YgZG90ZW52LWxvYWRpbmcgaW50byB0aGUgYnVuZGxlLiBWYWx1ZXMgbm90IHNldCBpblxuLy8gdGhlIHJ1bm5pbmcgcHJvY2VzcyBiZWNvbWUgdGhlIHN0cmluZyBcInVuZGVmaW5lZFwiIChKU09OLnN0cmluZ2lmeSh1bmRlZmluZWQpID09PSB1bmRlZmluZWQsXG4vLyB3aGljaCBEZWZpbmVQbHVnaW4gdGhlbiBjb2VyY2VzIHRvIHRoYXQgbGl0ZXJhbCksIHNhbWUgYXMgYW4gdW4tc2V0IHByb2Nlc3MuZW52IGFjY2VzcyBhbHJlYWR5XG4vLyBiZWhhdmVzIGF0IHJ1bnRpbWUuXG5leHBvcnQgY29uc3QgZGVmaW5lRW52Q29uZmlnRmFjdG9yeSA9IChlbnZWYXJOYW1lczogc3RyaW5nW10pID0+IHtcbiAgcmV0dXJuIFtuZXcgRGVmaW5lRW52UGx1Z2luKGVudlZhck5hbWVzKV1cbn1cblxuZXhwb3J0IGNvbnN0IGxpY2Vuc2VDb25maWdGYWN0b3J5ID0gKHtcbiAgb3V0cHV0RmlsZW5hbWUgPSAnVEhJUkQtUEFSVFktTk9USUNFUy5qc29uJyxcbiAgaW5jbHVkZU5vdGljZVRleHQgPSB0cnVlLFxuICBhZGRpdGlvbmFsRmlsZXMsXG4gIC4uLmV4dHJhQ29uZmlnXG59OiBQYXJ0aWFsPENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgTGljZW5zZVBsdWdpbj5bMF0+ID0ge30pID0+IHtcbiAgcmV0dXJuIFtcbiAgICBuZXcgTGljZW5zZVBsdWdpbih7XG4gICAgICBvdXRwdXRGaWxlbmFtZSxcbiAgICAgIGluY2x1ZGVOb3RpY2VUZXh0LFxuICAgICAgYWRkaXRpb25hbEZpbGVzOiB7XG4gICAgICAgICdUSElSRC1QQVJUWS1OT1RJQ0VTLnR4dCc6IGZvcm1hdFRoaXJkUGFydHlOb3RpY2VzLFxuICAgICAgICAuLi5hZGRpdGlvbmFsRmlsZXMsXG4gICAgICB9LFxuICAgICAgLi4uZXh0cmFDb25maWcsXG4gICAgfSksXG4gIF1cbn1cbiJdfQ==
|
package/compiler.helpers.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.helpers.js","sourceRoot":"./","sources":["compiler.helpers.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAoE;AACpE,0DAAgC;AAEzB,MAAM,eAAe,GAAG,CAAC,kBAA+C,EAAE,EAAE;IACjF,8HAA8H;IAC9H,MAAM,KAAK,GAAG,IAAI,mBAAQ,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/C,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE;QAC5B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAU,EAAE,MAAW,EAAE,EAAE;YAC7C,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAC9C,CAAC;YACD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IACD,KAAK,CAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE;QAChC,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAU,EAAE,MAAW,EAAE,EAAE;YACjD,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAClD,CAAC;YACD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAvBY,QAAA,eAAe,mBAuB3B;AAEM,MAAM,uBAAuB,GAAG,CAAC,gBAA0B,EAAE,UAAU,GAAG,IAAI,EAAE,EAAE;IACvF,MAAM,mBAAmB,GAAG,gBAG3B,CAAA;IACD,mBAAmB,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,IAAA,uBAAe,EAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,mBAAQ,EAAE,CAAA;IACrH,mBAAmB,CAAC,gBAAgB,GAAG,IAAI,mBAAQ,EAAE,CAAA;IAErD,OAAO,mBAAmB,CAAA;AAC5B,CAAC,CAAA;AATY,QAAA,uBAAuB,2BASnC;AAEM,MAAM,mBAAmB,GAAG,CAAC,aAA4B,EAAE,UAAU,GAAG,IAAI,EAAE,EAAE;IACrF,OAAO,IAAA,+BAAuB,EAAC,IAAA,iBAAO,EAAC,aAAa,CAAC,EAAE,UAAU,CAAC,CAAA;AACpE,CAAC,CAAA;AAFY,QAAA,mBAAmB,uBAE/B","sourcesContent":["import { type Compiler, type Configuration, webpack } from 'webpack'\nimport MemoryFS from 'memory-fs'\n\nexport const proxyFilesystem = (originalFilesystem: Compiler['inputFileSystem']) => {\n // Inspired by: https://stackoverflow.com/questions/38779924/compiling-webpack-in-memory-but-resolving-to-node-modules-on-disk\n const memFs = new MemoryFS()\n const statOrig = memFs.stat.bind(memFs)\n const readFileOrig = memFs.readFile.bind(memFs)\n memFs.stat = (filePath, cb) => {\n statOrig(filePath, (err: Error, result: any) => {\n if (err) {\n return originalFilesystem.stat(filePath, cb)\n }\n return cb(err, result)\n })\n }\n memFs.readFile = (filePath, cb) => {\n readFileOrig(filePath, (err: Error, result: any) => {\n if (err) {\n return originalFilesystem.readFile(filePath, cb)\n }\n return cb(err, result)\n })\n }\n\n return memFs\n}\n\nexport const patchCompilerFileSystem = (originalCompiler: Compiler, allowProxy = true) => {\n const transformedCompiler = originalCompiler as unknown as Omit<Compiler, 'inputFileSystem' | 'outputFileSystem'> & {\n inputFileSystem: MemoryFS\n outputFileSystem: MemoryFS\n }\n transformedCompiler.inputFileSystem = allowProxy ? proxyFilesystem(originalCompiler.inputFileSystem) : new MemoryFS()\n transformedCompiler.outputFileSystem = new MemoryFS()\n\n return transformedCompiler\n}\n\nexport const getInMemoryCompiler = (webpackConfig: Configuration, allowProxy = true) => {\n return patchCompilerFileSystem(webpack(webpackConfig), allowProxy)\n}\n"]}
|
package/configs/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"./","sources":["configs/index.ts"],"names":[],"mappings":";;;;;;AAAA,4FAAgE;AAChE,gDAAuB;AAEvB,wCAA+C;AAExC,MAAM,wBAAwB,GAAG,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAA+D,EAAE,EAAE;IACtI,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAC/B,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,MAAM,CAAC,OAAO,CAAC,CAC7G,CAAA;IACD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;QAC5B,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;QACrD,MAAM,EAAE;YACN,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,eAAe;oBACrB,GAAG,EAAE,IAAA,4BAAkB,EAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;iBAC9F;gBACD;oBACE,IAAI,EAAE,gBAAgB;oBACtB,GAAG,EAAE,IAAA,4BAAkB,EAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;iBACnG;aACF;SACF;QACD,OAAO,EAAE,CAAC,IAAI,oCAAuB,CAAC,WAAW,CAAC,CAAC;KACpD,CAAA;AACH,CAAC,CAAA;AAvBY,QAAA,wBAAwB,4BAuBpC","sourcesContent":["import IgnoreEmitWebpackPlugin from 'ignore-emit-webpack-plugin'\nimport path from 'path'\n\nimport { styleConfigFactory } from '../loaders'\n\nexport const typedStylesConfigFactory = ({ raw, filePaths, outputPath }: { raw?: boolean; filePaths: string[]; outputPath?: string }) => {\n const fileRegexes = filePaths.map(\n (filePath) => new RegExp(`^((?!${path.basename(filePath).replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')}).)*$`),\n )\n return {\n mode: 'development',\n entry: { bundle: filePaths },\n devtool: false,\n output: outputPath ? { path: outputPath } : undefined,\n module: {\n rules: [\n {\n test: /\\.(pcss|css)$/,\n use: styleConfigFactory({ raw, typedStyles: true, parser: 'postcss', extract: !!outputPath }),\n },\n {\n test: /\\.(scss|sass)$/,\n use: styleConfigFactory({ raw, typedStyles: true, parser: 'postcss-scss', extract: !!outputPath }),\n },\n ],\n },\n plugins: [new IgnoreEmitWebpackPlugin(fileRegexes)],\n }\n}\n"]}
|
package/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"./","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAoC;AACpC,mDAAoC;AACpC,mDAAoC;AACpC,6DAA8C;AAC9C,iBAAS;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;CACT,CAAA","sourcesContent":["import * as loaders from './loaders'\nimport * as plugins from './plugins'\nimport * as configs from './configs'\nimport * as compiler from './compiler.helpers'\nexport = {\n loaders,\n plugins,\n configs,\n compiler,\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WebcomponentStyleLoader.js","sourceRoot":"./","sources":["loaders/WebcomponentStyleLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path'\nimport fs from 'fs'\nimport { validate } from 'schema-utils'\nimport { type JSONSchema7 } from 'json-schema' // eslint-disable-line import/no-unresolved\n\nconst schema: JSONSchema7 = {\n type: 'object',\n properties: {\n pathPrefix: {\n type: 'string',\n },\n emit: {\n type: 'boolean',\n },\n typings: {\n type: 'boolean',\n },\n raw: {\n type: 'boolean',\n },\n named: {\n type: 'boolean',\n },\n },\n additionalProperties: false,\n}\n\nconst loader = function (content: string) {\n const options = this.getOptions()\n validate(schema, options, { name: 'webcomponent-styles' })\n\n if (options.emit) {\n const pathPrefix = options.pathPrefix ?? path.join(process.cwd(), 'src')\n const transformedAssetPath = path\n .join(path.dirname(this.resourcePath), `${path.basename(this.resourcePath)}.js`)\n .replace(pathPrefix, '')\n const transformedCode = Object.entries(this.data)\n .map(([exportName, exportValue]: [string, string]) => `export const ${exportName} = ${exportValue}`)\n .join('\\n')\n this.emitFile(transformedAssetPath, transformedCode)\n if (options.typings) {\n const transformedDtsPath = path\n .join(path.dirname(this.resourcePath), `${path.basename(this.resourcePath)}.d.ts`)\n .replace(pathPrefix, '')\n const typingsCode = [...Object.keys(this.data).map((exportName) => `export const ${exportName}: string;`)].join('\\n')\n this.emitFile(transformedDtsPath, typingsCode)\n }\n }\n if (options.typings) {\n const dtsPath = path.join(path.dirname(this.resourcePath), `${path.basename(this.resourcePath)}.d.ts`)\n const typingsCode = [...Object.keys(this.data).map((exportName) => `export const ${exportName}: string;`)].join('\\n')\n if (!fs.existsSync(dtsPath) || fs.readFileSync(dtsPath, 'utf-8') != typingsCode) {\n fs.writeFileSync(dtsPath, typingsCode, 'utf8')\n }\n }\n\n return options.raw ? content + `export var css = ${this.data.css};\\n` : content\n}\n\nloader.pitch = async function (request: string) {\n const options = this.getOptions()\n validate(schema, options, { name: 'webcomponent-styles' })\n const result = await this.importModule(this.resourcePath + '.webpack[javascript/auto]' + '!=!' + request)\n const { default: defaultExport, ...otherExports } = result\n if (options.raw) {\n this.data.css = `\\`${defaultExport.toString()}\\``\n }\n Object.entries(otherExports).forEach(\n ([exportName, exportValue]: [string, string]) => (this.data[exportName] = `'${exportValue.replace(/^[\"|'](.+)[\"|']$/, '$1')}'`),\n )\n}\n\nexport = loader\n"]}
|
package/loaders/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"./","sources":["loaders/index.ts"],"names":[],"mappings":"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","sourcesContent":["import MiniCssExtractPlugin from 'mini-css-extract-plugin'\nimport createResolver from 'postcss-import-webpack-resolver'\nconst WebcomponentStyleLoader = require.resolve('./WebcomponentStyleLoader')\nimport codeImport from 'remark-code-import'\nimport imageUnwrap from 'rehype-unwrap-images'\nimport imageImport from 'remark-embed-images'\n\nexport const styleConfigFactory = ({\n raw = false,\n extract = false,\n sourceMap = false,\n typedStyles = false,\n modules = undefined as\n | { localIdentName?: string; mappings?: { filter: string; transform: (p: string) => string }[] }\n | (boolean & { localIdentName?: never; mappings?: never }),\n parser = undefined as 'postcss' | 'postcss-scss',\n aliases = {} as Record<string, string>,\n} = {}) => {\n const loaders = []\n\n if (raw) {\n loaders.push({\n loader: WebcomponentStyleLoader,\n options: {\n raw: true,\n emit: extract,\n typings: typedStyles,\n },\n })\n } else {\n if (extract) {\n loaders.push({\n loader: MiniCssExtractPlugin.loader,\n options: {\n publicPath: './',\n },\n })\n } else {\n loaders.push({ loader: 'style-loader' })\n }\n\n if (typedStyles) {\n loaders.push({\n loader: WebcomponentStyleLoader,\n options: {\n raw: false,\n emit: false,\n typings: true,\n },\n })\n }\n }\n\n const cssLoader = {\n loader: 'css-loader',\n options: {\n sourceMap,\n ...(modules || typedStyles\n ? {\n esModule: true,\n modules: {\n localIdentName: modules?.localIdentName ?? '[local]_[hash:base64:5]',\n getLocalIdent: (loaderContext: { resourcePath: string }, _: any, localName: string) => {\n const { resourcePath } = loaderContext\n const mappings = modules?.mappings ?? []\n const mapping = mappings.find(({ filter }) => resourcePath.includes(filter))\n if (!mapping) {\n return undefined // this will trigger the default css-loader getLocalIdent function\n }\n return mapping.transform(localName)\n },\n exportLocalsConvention: 'camelCaseOnly',\n namedExport: true,\n },\n sourceMap,\n }\n : { modules: false }),\n },\n }\n\n loaders.push(cssLoader)\n\n const resolveUrlLoader = {\n loader: 'resolve-url-loader',\n }\n\n loaders.push(resolveUrlLoader)\n\n const postcssLoader = {\n loader: 'postcss-loader',\n options: {\n sourceMap: true,\n postcssOptions: {\n parser,\n plugins: [\n 'postcss-normalize-whitespace',\n 'postcss-discard-comments',\n [\n 'postcss-import',\n {\n resolve: createResolver({\n alias: aliases,\n }),\n modules: ['./node_modules', 'node_modules'],\n },\n ],\n 'postcss-nested',\n // 'autoprefixer',\n [\n 'postcss-preset-env',\n {\n stage: 3,\n },\n ],\n ],\n },\n },\n }\n\n loaders.push(postcssLoader)\n\n return loaders\n}\n\nexport const nullConfigFactory = ({ rules = [] as RegExp[] } = {}) => {\n return rules.map((rule) => ({\n test: rule,\n use: 'null-loader',\n enforce: 'post',\n }))\n}\n\nexport const fontExtensions = ['ttf', 'eot', 'woff', 'woff2']\nexport const imageExtensions = ['png', 'jpg', 'jpeg', 'gif', 'svg', 'ico']\nexport const assetExtensions = (extensions = [...imageExtensions, ...fontExtensions] as string[]) =>\n new RegExp(`\\\\.(${extensions.join('|')})(\\\\?.*$|$)?$`)\n\nexport const babelConfigFactory = ({ babel = undefined as any }) => {\n const loaders = [{ loader: 'babel-loader', options: babel }]\n return loaders\n}\n\nexport const markdownConfigFactory = ({\n babel,\n remark = [],\n rehype = [],\n useProvider = false,\n}: { babel?: any; remark?: any[]; rehype?: any[]; useProvider?: boolean } = {}) => {\n const loaders = []\n\n if (babel) {\n loaders.push(...babelConfigFactory({ babel }))\n loaders.push({\n loader: '@mdx-js/loader',\n options: {\n remarkPlugins: [codeImport, imageImport, imageUnwrap, ...remark],\n rehypePlugins: rehype,\n providerImportSource: useProvider ? '@mdx-js/react' : undefined,\n },\n })\n } else {\n loaders.push(\n {\n loader: 'html-loader',\n },\n {\n loader: 'markdown-loader',\n },\n )\n }\n return loaders\n}\n"]}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
/* eslint-disable @typescript-eslint/no-this-alias */
|
|
7
|
-
const html_webpack_plugin_1 = __importDefault(require("html-webpack-plugin"));
|
|
8
|
-
const html_webpack_inline_source_plugin_1 = __importDefault(require("html-webpack-inline-source-plugin"));
|
|
9
|
-
const fs_1 = __importDefault(require("fs"));
|
|
10
|
-
const path_1 = __importDefault(require("path"));
|
|
11
|
-
html_webpack_inline_source_plugin_1.default.prototype.processTags = function (compilation, pluginData) {
|
|
12
|
-
const self = this;
|
|
13
|
-
const headTags = [];
|
|
14
|
-
const bodyTags = [];
|
|
15
|
-
pluginData.headTags.forEach((tag) => {
|
|
16
|
-
headTags.push(self.processTag(compilation, self.assetsRegExp, tag));
|
|
17
|
-
});
|
|
18
|
-
pluginData.bodyTags.forEach((tag) => {
|
|
19
|
-
bodyTags.push(self.processTag(compilation, self.assetsRegExp, tag));
|
|
20
|
-
});
|
|
21
|
-
return { ...pluginData, headTags, bodyTags };
|
|
22
|
-
};
|
|
23
|
-
html_webpack_inline_source_plugin_1.default.prototype.apply = function (compiler) {
|
|
24
|
-
const self = this;
|
|
25
|
-
self.assetsRegExp = undefined;
|
|
26
|
-
self.faviconPath = undefined;
|
|
27
|
-
compiler.hooks.compilation.tap('html-webpack-inline-source-plugin', (compilation) => {
|
|
28
|
-
html_webpack_plugin_1.default.getHooks(compilation).afterTemplateExecution.tapAsync('html-webpack-inline-source-plugin', (htmlPluginData, callback) => {
|
|
29
|
-
self.assetsRegExp = new RegExp('.(js|css)$');
|
|
30
|
-
const result = self.processTags(compilation, htmlPluginData);
|
|
31
|
-
const favicon = htmlPluginData.plugin.options.favicon;
|
|
32
|
-
if (!favicon || !fs_1.default.existsSync(favicon)) {
|
|
33
|
-
return callback(null, result);
|
|
34
|
-
}
|
|
35
|
-
const faviconTag = result.headTags.find((tag) => tag.tagName === 'link' && tag.attributes.rel === 'icon');
|
|
36
|
-
if (faviconTag) {
|
|
37
|
-
self.faviconPath = faviconTag.attributes.href;
|
|
38
|
-
faviconTag.attributes.href = `data:image/x-icon;base64, ${fs_1.default.readFileSync(favicon, 'base64')}`;
|
|
39
|
-
}
|
|
40
|
-
callback(null, result);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
compiler.hooks.emit.tap('html-webpack-inline-source-plugin', (compilation) => {
|
|
44
|
-
if (self.assetsRegExp) {
|
|
45
|
-
Object.keys(compilation.assets).forEach(function (file) {
|
|
46
|
-
var _a, _b;
|
|
47
|
-
if (file.match(self.assetsRegExp) || file === ((_b = (_a = self.faviconPath) === null || _a === void 0 ? void 0 : _a.split(path_1.default.sep)) === null || _b === void 0 ? void 0 : _b.pop())) {
|
|
48
|
-
delete compilation.assets[file];
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
};
|
|
54
|
-
exports.default = html_webpack_inline_source_plugin_1.default;
|
|
55
|
-
//# sourceMappingURL=HtmlWebpackInlineSourcePlugin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HtmlWebpackInlineSourcePlugin.js","sourceRoot":"./","sources":["plugins/HtmlWebpackInlineSourcePlugin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-this-alias */\nimport HtmlWebpackPlugin, { Hooks } from 'html-webpack-plugin'\nimport HtmlWebpackInlineSourcePlugin from 'html-webpack-inline-source-plugin'\nimport { type Compilation, type Compiler } from 'webpack'\nimport { AsyncSeriesWaterfallHook } from 'tapable'\nimport fs from 'fs'\nimport path from 'path'\n\ntype AsyncSeriesWaterfallHookDataType<T> = T extends AsyncSeriesWaterfallHook<infer R> ? R : never\n\nHtmlWebpackInlineSourcePlugin.prototype.processTags = function (\n compilation: Compilation,\n pluginData: AsyncSeriesWaterfallHookDataType<Hooks['afterTemplateExecution']>,\n) {\n const self = this\n\n const headTags = []\n const bodyTags = []\n\n pluginData.headTags.forEach((tag) => {\n headTags.push(self.processTag(compilation, self.assetsRegExp, tag))\n })\n\n pluginData.bodyTags.forEach((tag) => {\n bodyTags.push(self.processTag(compilation, self.assetsRegExp, tag))\n })\n\n return { ...pluginData, headTags, bodyTags }\n}\n\nHtmlWebpackInlineSourcePlugin.prototype.apply = function (compiler: Compiler) {\n const self = this\n self.assetsRegExp = undefined\n self.faviconPath = undefined\n\n compiler.hooks.compilation.tap('html-webpack-inline-source-plugin', (compilation) => {\n HtmlWebpackPlugin.getHooks(compilation).afterTemplateExecution.tapAsync(\n 'html-webpack-inline-source-plugin',\n (htmlPluginData, callback) => {\n self.assetsRegExp = new RegExp('.(js|css)$')\n const result = self.processTags(compilation, htmlPluginData) as typeof htmlPluginData\n const favicon = htmlPluginData.plugin.options.favicon\n if (!favicon || !fs.existsSync(favicon)) {\n return callback(null, result)\n }\n const faviconTag = result.headTags.find((tag) => tag.tagName === 'link' && tag.attributes.rel === 'icon')\n if (faviconTag) {\n self.faviconPath = faviconTag.attributes.href as string\n faviconTag.attributes.href = `data:image/x-icon;base64, ${fs.readFileSync(favicon, 'base64')}`\n }\n callback(null, result)\n },\n )\n })\n\n compiler.hooks.emit.tap('html-webpack-inline-source-plugin', (compilation) => {\n if (self.assetsRegExp) {\n Object.keys(compilation.assets).forEach(function (file) {\n if (file.match(self.assetsRegExp) || file === self.faviconPath?.split(path.sep)?.pop()) {\n delete compilation.assets[file]\n }\n })\n }\n })\n}\n\nexport default HtmlWebpackInlineSourcePlugin\n"]}
|
package/plugins/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"./","sources":["plugins/index.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path'\nimport { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'\nimport CssMinimizerPlugin from 'css-minimizer-webpack-plugin'\nimport MiniCssExtractPlugin from 'mini-css-extract-plugin'\nimport TerserPlugin from 'terser-webpack-plugin'\nimport { MinifyOptions } from 'terser'\nimport HtmlWebpackPlugin from 'html-webpack-plugin'\nimport fs from 'fs'\nimport { type WebpackPluginInstance } from 'webpack'\n\nimport HtmlInlineSourcePlugin from './HtmlWebpackInlineSourcePlugin'\n\nexport const cssConfigFactory = ({\n filename = '[name]-[chunkhash].css',\n cssnanoOptions = {},\n}: { filename?: string; cssnanoOptions?: any } = {}) => {\n return [\n new MiniCssExtractPlugin({\n filename,\n }),\n new CssMinimizerPlugin({\n test: /\\.css$/g,\n minimizerOptions: {\n preset: ['advanced'],\n ...cssnanoOptions,\n },\n minify: CssMinimizerPlugin.cssnanoMinify,\n }),\n ]\n}\n\nexport const bundleAnalyzerConfigFactory = (extraConfig: BundleAnalyzerPlugin.Options = {}) => {\n return [\n new BundleAnalyzerPlugin({\n analyzerMode: 'static',\n reportFilename: './reports/bundle-analysis.html',\n openAnalyzer: false,\n ...extraConfig,\n }),\n ]\n}\n\nexport const htmlConfigFactory = ({ html = {}, embed }: { embed?: boolean; html?: Partial<HtmlWebpackPlugin.Options> } = {}) => {\n const template = html.template ?? path.join(process.cwd(), 'template.html')\n const templateExists = fs.existsSync(template)\n const templateContent = `<!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"UTF-8\" />\n </head>\n <body>\n <div id=\"root\"></div>\n </body>\n </html>`\n const favicon = html.favicon ? (path.isAbsolute(html.favicon) ? html.favicon : path.join(process.cwd(), html.favicon)) : undefined\n const plugins: WebpackPluginInstance[] = [\n new HtmlWebpackPlugin({\n inject: 'body',\n lang: 'en-US',\n ...(templateExists ? { template } : { templateContent }),\n ...html,\n favicon,\n }),\n ]\n\n if (embed) {\n plugins.push(new HtmlInlineSourcePlugin())\n }\n\n return plugins\n}\n\nexport const terserConfigFactory = ({ enableSourcemaps = true, terserOptions = {} as MinifyOptions, embed = false } = {}) => [\n /* eslint-disable @typescript-eslint/naming-convention */\n new TerserPlugin({\n parallel: true,\n extractComments: !embed,\n terserOptions: {\n ie8: false,\n sourceMap: enableSourcemaps,\n compress: {\n evaluate: false,\n },\n keep_fnames: true,\n keep_classnames: true,\n mangle: {\n keep_fnames: true,\n keep_classnames: true,\n },\n ...terserOptions,\n },\n }),\n]\n"]}
|