Store pologue information in bundle info

This commit is contained in:
Sheetal Nandi
2019-02-04 15:00:17 -08:00
parent e3eb7bc4b7
commit 00917a4649
16 changed files with 773 additions and 33 deletions
+30 -4
View File
@@ -571,13 +571,13 @@ namespace ts {
}
if (bundleFileInfo) {
bundleFileInfo.sections.push({ pos, end: writer.getTextPos(), kind: BundleFileSectionKind.Text });
// Source file metadata if needed later on
// Store prologues
const prologues = getPrologueDirectivesFromBundledSourceFiles(bundle);
if (prologues) bundleFileInfo.sources.prologues = prologues;
// Store helpes
const helpers = getHelpersFromBundledSourceFiles(bundle);
if (helpers) {
bundleFileInfo.sources.helpers = helpers;
}
if (helpers) bundleFileInfo.sources.helpers = helpers;
}
reset();
@@ -3105,6 +3105,32 @@ namespace ts {
}
}
function getPrologueDirectivesFromBundledSourceFiles(bundle: Bundle): SourceFilePrologueInfo[] | undefined {
const seenPrologueDirectives = createMap<true>();
let prologues: SourceFilePrologueInfo[] | undefined;
for (const sourceFile of bundle.sourceFiles) {
let directives: SourceFilePrologueDirective[] | undefined;
let end = 0;
for (const statement of sourceFile.statements) {
if (!isPrologueDirective(statement)) break;
if (seenPrologueDirectives.has(statement.expression.text)) continue;
seenPrologueDirectives.set(statement.expression.text, true);
(directives || (directives = [])).push({
pos: statement.pos,
end: statement.end,
expression: {
pos: statement.expression.pos,
end: statement.expression.end,
text: statement.expression.text
}
});
end = end < statement.end ? statement.end : end;
}
if (directives) (prologues || (prologues = [])).push({ file: sourceFile.fileName, text: sourceFile.text.substring(0, end), directives });
}
return prologues;
}
function emitShebangIfNeeded(sourceFileOrBundle: Bundle | SourceFile | UnparsedSource) {
if (isSourceFile(sourceFileOrBundle) || isUnparsedSource(sourceFileOrBundle)) {
const shebang = getShebang(sourceFileOrBundle.text);
+18
View File
@@ -5527,10 +5527,28 @@ namespace ts {
BundleFileHasNoDefaultLib | BundleFileReference | BundleFilePrepend |
BundleFileText | BundleFileSourceMapUrl;
/*@internal*/
export interface SourceFilePrologueDirectiveExpression extends TextRange {
text: string;
}
/*@internal*/
export interface SourceFilePrologueDirective extends TextRange {
expression: SourceFilePrologueDirectiveExpression;
}
/*@internal*/
export interface SourceFilePrologueInfo {
file: string;
text: string;
directives: SourceFilePrologueDirective[];
}
/*@internal*/
export interface SourceFileInfo {
// List of helpers in own source files emitted if no prepend is present
helpers?: string[];
prologues?: SourceFilePrologueInfo[];
}
/*@internal*/
@@ -37,7 +37,34 @@
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "\"myPrologue\"",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 12,
"expression": {
"pos": 0,
"end": 12,
"text": "myPrologue"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.d.ts]
@@ -447,7 +474,43 @@ console.log(s);
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "\"myPrologue3\";\n\"myPrologue\";",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 14,
"expression": {
"pos": 0,
"end": 13,
"text": "myPrologue3"
}
},
{
"pos": 14,
"end": 28,
"expression": {
"pos": 14,
"end": 27,
"text": "myPrologue"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.d.ts]
@@ -31,7 +31,25 @@
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.d.ts]
@@ -419,7 +437,25 @@ console.log(s);
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.d.ts]
@@ -31,7 +31,25 @@
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.d.ts]
@@ -407,7 +425,25 @@ console.log(s);
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.d.ts]
@@ -37,7 +37,34 @@
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "\"myPrologue\"",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 12,
"expression": {
"pos": 0,
"end": 12,
"text": "myPrologue"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.js]
@@ -331,7 +358,43 @@ console.log(s);
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "\"myPrologue3\";\n\"myPrologue\";",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 14,
"expression": {
"pos": 0,
"end": 13,
"text": "myPrologue3"
}
},
{
"pos": 14,
"end": 28,
"expression": {
"pos": 14,
"end": 27,
"text": "myPrologue"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.js]
@@ -31,7 +31,25 @@
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.js]
@@ -304,7 +322,25 @@ console.log(s);
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.js]
@@ -31,7 +31,25 @@
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.js]
@@ -292,7 +310,25 @@ console.log(s);
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.js]
@@ -43,7 +43,43 @@
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "\"myPrologue5\"\n\"myPrologue\"",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 13,
"expression": {
"pos": 0,
"end": 13,
"text": "myPrologue5"
}
},
{
"pos": 13,
"end": 26,
"expression": {
"pos": 13,
"end": 26,
"text": "myPrologue"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.d.ts.map]
@@ -463,7 +499,43 @@ console.log(s);
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "\"myPrologue3\";\n\"myPrologue\";",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 14,
"expression": {
"pos": 0,
"end": 13,
"text": "myPrologue3"
}
},
{
"pos": 14,
"end": 28,
"expression": {
"pos": 14,
"end": 27,
"text": "myPrologue"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.d.ts.map]
@@ -37,7 +37,34 @@
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "\"myPrologue5\"",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 13,
"expression": {
"pos": 0,
"end": 13,
"text": "myPrologue5"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.d.ts.map]
@@ -436,7 +463,25 @@ console.log(s);
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.d.ts.map]
@@ -37,7 +37,34 @@
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "\"myPrologue\"",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 12,
"expression": {
"pos": 0,
"end": 12,
"text": "myPrologue"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.d.ts.map]
@@ -424,7 +451,25 @@ console.log(s);
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.d.ts.map]
@@ -31,7 +31,25 @@
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "\"myPrologue\"",
"directives": [
{
"pos": 0,
"end": 12,
"expression": {
"pos": 0,
"end": 12,
"text": "myPrologue"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.d.ts.map]
@@ -43,7 +43,49 @@
}
],
"commonSourceDirectory": "/src/second/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/second/second_part1.ts",
"text": "\"myPrologue\"",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 12,
"expression": {
"pos": 0,
"end": 12,
"text": "myPrologue"
}
}
]
},
{
"file": "/src/second/second_part2.ts",
"text": "\"myPrologue2\";",
"directives": [
{
"pos": 0,
"end": 14,
"expression": {
"pos": 0,
"end": 13,
"text": "myPrologue2"
}
}
]
}
]
}
}
//// [/src/2/second-output.d.ts]
@@ -509,7 +551,34 @@ sourceFile:../second/second_part2.ts
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "\"myPrologue\"",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 12,
"expression": {
"pos": 0,
"end": 12,
"text": "myPrologue"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.d.ts]
@@ -983,7 +1052,43 @@ class C {
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "\"myPrologue3\";\n\"myPrologue\";",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
},
{
"pos": 0,
"end": 14,
"expression": {
"pos": 0,
"end": 13,
"text": "myPrologue3"
}
},
{
"pos": 14,
"end": 28,
"expression": {
"pos": 14,
"end": 27,
"text": "myPrologue"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.d.ts]
@@ -37,7 +37,40 @@
}
],
"commonSourceDirectory": "/src/second/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/second/second_part1.ts",
"text": "\"myPrologue\"",
"directives": [
{
"pos": 0,
"end": 12,
"expression": {
"pos": 0,
"end": 12,
"text": "myPrologue"
}
}
]
},
{
"file": "/src/second/second_part2.ts",
"text": "\"myPrologue2\";",
"directives": [
{
"pos": 0,
"end": 14,
"expression": {
"pos": 0,
"end": 13,
"text": "myPrologue2"
}
}
]
}
]
}
}
//// [/src/2/second-output.d.ts]
@@ -495,7 +528,25 @@ sourceFile:../second/second_part2.ts
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.d.ts]
@@ -915,7 +966,25 @@ class C {
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.d.ts]
@@ -31,7 +31,25 @@
}
],
"commonSourceDirectory": "/src/second/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/second/second_part1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/2/second-output.d.ts]
@@ -454,7 +472,25 @@ sourceFile:../second/second_part2.ts
}
],
"commonSourceDirectory": "/src/first/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/first/first_PART1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/first/bin/first-output.d.ts]
@@ -856,7 +892,25 @@ sourceFile:../first_part3.ts
}
],
"commonSourceDirectory": "/src/third/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/third/third_part1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/third/thirdjs/output/third-output.d.ts]
@@ -31,7 +31,25 @@
}
],
"commonSourceDirectory": "/src/second/",
"sources": {}
"sources": {
"prologues": [
{
"file": "/src/second/second_part1.ts",
"text": "",
"directives": [
{
"pos": -1,
"end": -1,
"expression": {
"pos": -1,
"end": -1,
"text": "use strict"
}
}
]
}
]
}
}
//// [/src/2/second-output.d.ts]