| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const { ConcatSource, RawSource } = require("webpack-sources");const stringifySafe = data => {	const stringified = JSON.stringify(data);	if (!stringified) {		return undefined; // Invalid JSON	}	return stringified.replace(/\u2028|\u2029/g, str =>		str === "\u2029" ? "\\u2029" : "\\u2028"	); // invalid in JavaScript but valid JSON};class JsonGenerator {	generate(module, dependencyTemplates, runtimeTemplate) {		const source = new ConcatSource();		const data = module.buildInfo.jsonData;		if (data === undefined) {			return new RawSource(				runtimeTemplate.missingModuleStatement({					request: module.rawRequest				})			);		}		let finalJson;		if (			Array.isArray(module.buildMeta.providedExports) &&			!module.isUsed("default")		) {			// Only some exports are used: We can optimize here, by only generating a part of the JSON			const reducedJson = {};			for (const exportName of module.buildMeta.providedExports) {				if (exportName === "default") continue;				const used = module.isUsed(exportName);				if (used) {					reducedJson[used] = data[exportName];				}			}			finalJson = reducedJson;		} else {			finalJson = data;		}		// Use JSON because JSON.parse() is much faster than JavaScript evaluation		const jsonSource = JSON.stringify(stringifySafe(finalJson));		const jsonExpr = `JSON.parse(${jsonSource})`;		source.add(`${module.moduleArgument}.exports = ${jsonExpr};`);		return source;	}}module.exports = JsonGenerator;
 |