Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
39 lines
1.8 KiB
Plaintext
39 lines
1.8 KiB
Plaintext
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
|
|
// We need to be careful not to inject anything before any `"use strict";`s or "use client"s or really any other directive.
|
|
// As an additional complication directives may come after any number of comments.
|
|
// This regex is shamelessly stolen from: https://github.com/getsentry/sentry-javascript-bundler-plugins/blob/7f984482c73e4284e8b12a08dfedf23b5a82f0af/packages/bundler-plugin-core/src/index.ts#L535-L539
|
|
const SKIP_COMMENT_AND_DIRECTIVE_REGEX =
|
|
// Note: CodeQL complains that this regex potentially has n^2 runtime. This likely won't affect realistic files.
|
|
new RegExp('^(?:\\s*|/\\*(?:.|\\r|\\n)*?\\*/|//.*[\\n\\r])*(?:"[^"]*";?|\'[^\']*\';?)?');
|
|
|
|
/**
|
|
* Set values on the global/window object at the start of a module.
|
|
*
|
|
* Options:
|
|
* - `values`: An object where the keys correspond to the keys of the global values to set and the values
|
|
* correspond to the values of the values on the global object. Values must be JSON serializable.
|
|
*/
|
|
function valueInjectionLoader( userCode) {
|
|
// We know one or the other will be defined, depending on the version of webpack being used
|
|
const { values } = 'getOptions' in this ? this.getOptions() : this.query;
|
|
|
|
// We do not want to cache injected values across builds
|
|
this.cacheable(false);
|
|
|
|
// Not putting any newlines in the generated code will decrease the likelihood of sourcemaps breaking
|
|
const injectedCode =
|
|
// eslint-disable-next-line prefer-template
|
|
';' +
|
|
Object.entries(values)
|
|
.map(([key, value]) => `globalThis["${key}"] = ${JSON.stringify(value)};`)
|
|
.join('');
|
|
|
|
return userCode.replace(SKIP_COMMENT_AND_DIRECTIVE_REGEX, match => {
|
|
return match + injectedCode;
|
|
});
|
|
}
|
|
|
|
exports.default = valueInjectionLoader;
|
|
//# sourceMappingURL=valueInjectionLoader.js.map
|