From f269fc01fe619c5a98388017770040dae6263928 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Fri, 9 Jun 2023 20:54:07 +0300 Subject: [PATCH] fix: pass all Node.js globals to templates (#1796) --- index.js | 52 ++++++++++++++++++++++++++++++++-- package.json | 2 +- spec/fixtures/templateParam.js | 18 ++++++++++++ 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index de9a6294..e3a77ea9 100644 --- a/index.js +++ b/index.js @@ -132,8 +132,56 @@ class HtmlWebpackPlugin { HTML_WEBPACK_PLUGIN: true, require: require, htmlWebpackPluginPublicPath: publicPath, - URL: require('url').URL, - __filename: templateWithoutLoaders + __filename: templateWithoutLoaders, + __dirname: path.dirname(templateWithoutLoaders), + AbortController: global.AbortController, + AbortSignal: global.AbortSignal, + Blob: global.Blob, + Buffer: global.Buffer, + ByteLengthQueuingStrategy: global.ByteLengthQueuingStrategy, + BroadcastChannel: global.BroadcastChannel, + CompressionStream: global.CompressionStream, + CountQueuingStrategy: global.CountQueuingStrategy, + Crypto: global.Crypto, + CryptoKey: global.CryptoKey, + CustomEvent: global.CustomEvent, + DecompressionStream: global.DecompressionStream, + Event: global.Event, + EventTarget: global.EventTarget, + File: global.File, + FormData: global.FormData, + Headers: global.Headers, + MessageChannel: global.MessageChannel, + MessageEvent: global.MessageEvent, + MessagePort: global.MessagePort, + PerformanceEntry: global.PerformanceEntry, + PerformanceMark: global.PerformanceMark, + PerformanceMeasure: global.PerformanceMeasure, + PerformanceObserver: global.PerformanceObserver, + PerformanceObserverEntryList: global.PerformanceObserverEntryList, + PerformanceResourceTiming: global.PerformanceResourceTiming, + ReadableByteStreamController: global.ReadableByteStreamController, + ReadableStream: global.ReadableStream, + ReadableStreamBYOBReader: global.ReadableStreamBYOBReader, + ReadableStreamBYOBRequest: global.ReadableStreamBYOBRequest, + ReadableStreamDefaultController: global.ReadableStreamDefaultController, + ReadableStreamDefaultReader: global.ReadableStreamDefaultReader, + Response: global.Response, + Request: global.Request, + SubtleCrypto: global.SubtleCrypto, + DOMException: global.DOMException, + TextDecoder: global.TextDecoder, + TextDecoderStream: global.TextDecoderStream, + TextEncoder: global.TextEncoder, + TextEncoderStream: global.TextEncoderStream, + TransformStream: global.TransformStream, + TransformStreamDefaultController: global.TransformStreamDefaultController, + URL: global.URL, + URLSearchParams: global.URLSearchParams, + WebAssembly: global.WebAssembly, + WritableStream: global.WritableStream, + WritableStreamDefaultController: global.WritableStreamDefaultController, + WritableStreamDefaultWriter: global.WritableStreamDefaultWriter }); const vmScript = new vm.Script(source, { filename: templateWithoutLoaders }); // Evaluate code and cast to string diff --git a/package.json b/package.json index 360b2f32..830a992c 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ ] }, "devDependencies": { - "@types/node": "11.13.9", + "@types/node": "^20.2.5", "commitizen": "^4.2.4", "css-loader": "5.0.1", "cz-conventional-changelog": "2.1.0", diff --git a/spec/fixtures/templateParam.js b/spec/fixtures/templateParam.js index 6580c457..32135ecb 100644 --- a/spec/fixtures/templateParam.js +++ b/spec/fixtures/templateParam.js @@ -1,3 +1,21 @@ module.exports = function (templateParams) { + const version = parseInt(process.version.match(/^v(\d+)/)[1]); + + if (typeof URL !== 'function') { + throw new Error('Error'); + } + + if (typeof URLSearchParams !== 'function') { + throw new Error('Error'); + } + + if (version >= 11 && typeof TextEncoder !== 'function') { + throw new Error('Error'); + } + + if (version >= 11 && typeof TextDecoder !== 'function') { + throw new Error('Error'); + } + return 'templateParams keys: "' + Object.keys(templateParams).join(',') + '"'; };