Skip to content

Commit 8d63b65

Browse files
committed
Deduplicate module sources in cache
1 parent 3ce0165 commit 8d63b65

File tree

1 file changed

+39
-7
lines changed

1 file changed

+39
-7
lines changed

packages/app/src/sandbox/eval/transpiled-module.js

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,26 @@ class ModuleSource {
3232
fileName: string;
3333
compiledCode: string;
3434
sourceMap: ?SourceMap;
35+
sourceEqualsCompiled: boolean;
3536

36-
constructor(fileName: string, compiledCode: string, sourceMap: ?SourceMap) {
37+
constructor(
38+
fileName: string,
39+
compiledCode: string,
40+
sourceMap: ?SourceMap,
41+
sourceEqualsCompiled = false
42+
) {
3743
this.fileName = fileName;
3844
this.compiledCode = compiledCode;
3945
this.sourceMap = sourceMap;
46+
this.sourceEqualsCompiled = sourceEqualsCompiled;
4047
}
4148
}
4249

4350
export type SerializedTranspiledModule = {
4451
module: Module,
4552
query: string,
4653
source: ?ModuleSource,
54+
sourceEqualsCompiled: boolean,
4755
assets: {
4856
[name: string]: ModuleSource,
4957
},
@@ -594,13 +602,21 @@ export default class TranspiledModule {
594602
}
595603
}
596604

597-
// Add the source of the file by default, this is important for source mapping
598-
// errors back to their origin
599-
code = `${code}\n//# sourceURL=${location.origin}${this.module.path}${
605+
const sourceEqualsCompiled = code === this.module.code;
606+
const sourceURL = `//# sourceURL=${location.origin}${this.module.path}${
600607
this.query ? `?${this.hash}` : ''
601608
}`;
602609

603-
this.source = new ModuleSource(this.module.path, code, finalSourceMap);
610+
// Add the source of the file by default, this is important for source mapping
611+
// errors back to their origin
612+
code = `${code}\n${sourceURL}`;
613+
614+
this.source = new ModuleSource(
615+
this.module.path,
616+
code,
617+
finalSourceMap,
618+
sourceEqualsCompiled
619+
);
604620

605621
if (
606622
this.previousSource &&
@@ -902,13 +918,19 @@ export default class TranspiledModule {
902918
serialize(): SerializedTranspiledModule {
903919
const serializableObject = {};
904920

921+
const sourceEqualsCompiled =
922+
this.source && this.source.sourceEqualsCompiled;
923+
905924
serializableObject.query = this.query;
906925
serializableObject.assets = this.assets;
907926
serializableObject.module = this.module;
908927
serializableObject.emittedAssets = this.emittedAssets;
909928
serializableObject.isEntry = this.isEntry;
910929
serializableObject.isTestFile = this.isTestFile;
911-
serializableObject.source = this.source;
930+
if (!sourceEqualsCompiled) {
931+
serializableObject.source = this.source;
932+
}
933+
serializableObject.sourceEqualsCompiled = sourceEqualsCompiled;
912934
serializableObject.childModules = this.childModules.map(m => m.getId());
913935
serializableObject.dependencies = Array.from(this.dependencies).map(m =>
914936
m.getId()
@@ -946,7 +968,17 @@ export default class TranspiledModule {
946968
this.emittedAssets = data.emittedAssets;
947969
this.isEntry = data.isEntry;
948970
this.isTestFile = data.isTestFile;
949-
this.source = data.source;
971+
972+
if (data.sourceEqualsCompiled) {
973+
this.source = new ModuleSource(
974+
this.module.path,
975+
this.module.code,
976+
null,
977+
true
978+
);
979+
} else {
980+
this.source = data.source;
981+
}
950982

951983
const loadModule = (
952984
depId: string,

0 commit comments

Comments
 (0)