forked from webpack/webpack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJsonGenerator.js
More file actions
35 lines (31 loc) · 1.14 KB
/
Copy pathJsonGenerator.js
File metadata and controls
35 lines (31 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
const ConcatSource = require("webpack-sources").ConcatSource;
const stringifySafe = data => JSON.stringify(data)
.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(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];
}
}
source.add(`${module.moduleArgument}.exports = ${stringifySafe(reducedJson)};`);
} else {
source.add(`${module.moduleArgument}.exports = ${stringifySafe(data)};`);
}
return source;
}
}
module.exports = JsonGenerator;