You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mohemmionic5/Mohem/node_modules_/webpack-subresource-integrity/jmtp.js

85 lines
2.3 KiB
JavaScript

/**
* Copyright (c) 2015-present, Waysact Pty Ltd
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var Template = require('webpack/lib/Template');
var util = require('./util');
function WebIntegrityJsonpMainTemplatePlugin(sriPlugin, compilation) {
this.sriPlugin = sriPlugin;
this.compilation = compilation;
}
function addSriHashes(plugin, chunk, source) {
var allChunks = util.findChunks(chunk);
if (allChunks.size > 0) {
return (Template.asString || plugin.asString)([
source,
'var sriHashes = ' +
JSON.stringify(
Array.from(allChunks).reduce(function chunkIdReducer(
sriHashes,
depChunk
) {
if (chunk !== depChunk) {
// eslint-disable-next-line no-param-reassign
sriHashes[depChunk.id] = util.makePlaceholder(depChunk.id);
}
return sriHashes;
},
{})
) +
';'
]);
}
return source;
}
WebIntegrityJsonpMainTemplatePlugin.prototype.apply = function apply(
mainTemplate
) {
var self = this;
/*
* Patch jsonp-script code to add the integrity attribute.
*/
function jsonpScriptPlugin(source) {
if (!mainTemplate.outputOptions.crossOriginLoading) {
self.sriPlugin.error(
self.compilation,
'webpack option output.crossOriginLoading not set, code splitting will not work!'
);
}
return (Template.asString || this.asString)([
source,
'script.integrity = sriHashes[chunkId];',
'script.crossOrigin = ' + JSON.stringify(mainTemplate.outputOptions.crossOriginLoading) + ';',
]);
}
/*
* Patch local-vars code to add a mapping from chunk ID to SRIs.
* Since SRIs haven't been computed at this point, we're using
* magic placeholders for SRI values and going to replace them
* later.
*/
function localVarsPlugin(source, chunk) {
return addSriHashes(this, chunk, source);
}
if (mainTemplate.hooks) {
mainTemplate.hooks.jsonpScript.tap('SriPlugin', jsonpScriptPlugin);
mainTemplate.hooks.localVars.tap('SriPlugin', localVarsPlugin);
} else {
mainTemplate.plugin('jsonp-script', jsonpScriptPlugin);
mainTemplate.plugin('local-vars', localVarsPlugin);
}
};
module.exports = WebIntegrityJsonpMainTemplatePlugin;