diff options
Diffstat (limited to 'tools/ts_library_builder')
-rw-r--r-- | tools/ts_library_builder/ast_util.ts | 26 | ||||
-rw-r--r-- | tools/ts_library_builder/build_library.ts | 24 | ||||
-rw-r--r-- | tools/ts_library_builder/main.ts | 7 | ||||
-rw-r--r-- | tools/ts_library_builder/test.ts | 22 | ||||
-rw-r--r-- | tools/ts_library_builder/testdata/lib.extra.d.ts | 7 |
5 files changed, 85 insertions, 1 deletions
diff --git a/tools/ts_library_builder/ast_util.ts b/tools/ts_library_builder/ast_util.ts index 9bb7e8edc..58aa7fb9c 100644 --- a/tools/ts_library_builder/ast_util.ts +++ b/tools/ts_library_builder/ast_util.ts @@ -243,6 +243,32 @@ export function getSourceComment( return `\n// @url ${relative(rootPath, sourceFile.getFilePath())}\n\n`; } +interface InlineFilesOptions { + basePath: string; + debug?: boolean; + inline: string[]; + targetSourceFile: SourceFile; +} + +/** Inline files into the target source file. */ +export function inlineFiles({ + basePath, + debug, + inline, + targetSourceFile +}: InlineFilesOptions) { + for (const filename of inline) { + const text = readFileSync(filename, { + encoding: "utf8" + }); + targetSourceFile.addStatements( + debug + ? `\n// @url ${relative(basePath, filename)}\n\n${text}` + : `\n${text}` + ); + } +} + /** * Load and write to a virtual file system all the default libs needed to * resolve types on project. diff --git a/tools/ts_library_builder/build_library.ts b/tools/ts_library_builder/build_library.ts index 286d13d11..93d2da661 100644 --- a/tools/ts_library_builder/build_library.ts +++ b/tools/ts_library_builder/build_library.ts @@ -16,6 +16,7 @@ import { checkDiagnostics, flattenNamespace, getSourceComment, + inlineFiles, loadDtsFiles, loadFiles, logDiagnostics, @@ -42,6 +43,11 @@ export interface BuildLibraryOptions { debug?: boolean; /** + * An array of files that should be inlined into the library + */ + inline?: string[]; + + /** * The path to the output library */ outFile: string; @@ -278,6 +284,7 @@ export function mergeGlobal({ export function main({ basePath, buildPath, + inline, debug, outFile, silent @@ -288,6 +295,12 @@ export function main({ console.log(); console.log(`basePath: "${basePath}"`); console.log(`buildPath: "${buildPath}"`); + if (inline && inline.length) { + console.log(`inline:`); + for (const filename of inline) { + console.log(` "${filename}"`); + } + } console.log(`debug: ${!!debug}`); console.log(`outFile: "${outFile}"`); console.log(); @@ -431,6 +444,17 @@ export function main({ console.log(`Merged "globals" into global scope.`); } + // Inline any files that were passed in, to be used to add additional libs + // which are not part of TypeScript. + if (inline && inline.length) { + inlineFiles({ + basePath, + debug, + inline, + targetSourceFile: libDTs + }); + } + // Add the preamble libDTs.insertStatements(0, libPreamble); diff --git a/tools/ts_library_builder/main.ts b/tools/ts_library_builder/main.ts index 8dc6cfabe..c3192a753 100644 --- a/tools/ts_library_builder/main.ts +++ b/tools/ts_library_builder/main.ts @@ -7,6 +7,7 @@ import { main as buildRuntimeLib } from "./build_library"; let basePath = process.cwd(); let buildPath = path.join(basePath, "out", "debug"); let outFile = path.join(buildPath, "gen", "lib", "lib.d.ts"); +let inline: string[] = []; let debug = false; let silent = false; @@ -19,6 +20,11 @@ process.argv.forEach((arg, i, argv) => { case "--buildPath": buildPath = path.resolve(argv[i + 1]); break; + case "--inline": + inline = argv[i + 1].split(",").map(filename => { + return path.resolve(filename); + }); + break; case "--outFile": outFile = path.resolve(argv[i + 1]); break; @@ -35,6 +41,7 @@ buildRuntimeLib({ basePath, buildPath, debug, + inline, outFile, silent }); diff --git a/tools/ts_library_builder/test.ts b/tools/ts_library_builder/test.ts index a60c7cb05..acc2c43db 100644 --- a/tools/ts_library_builder/test.ts +++ b/tools/ts_library_builder/test.ts @@ -11,7 +11,7 @@ import { test } from "../../js/deps/https/deno.land/x/std/testing/mod"; import { flatten, mergeGlobal } from "./build_library"; -import { loadDtsFiles } from "./ast_util"; +import { inlineFiles, loadDtsFiles } from "./ast_util"; const { ModuleKind, ModuleResolutionKind, ScriptTarget } = ts; @@ -167,6 +167,26 @@ test(function buildLibraryMerge() { assertEqual(typeAliases.length, 1); }); +test(function testInlineFiles() { + const { + basePath, + buildPath, + debug, + outputSourceFile: targetSourceFile + } = setupFixtures(); + + inlineFiles({ + basePath, + debug, + inline: [`${buildPath}/lib.extra.d.ts`], + targetSourceFile + }); + + assert(targetSourceFile.getNamespace("Qat") != null); + const qatNamespace = targetSourceFile.getNamespaceOrThrow("Qat"); + assert(qatNamespace.getClass("Foo") != null); +}); + // TODO author unit tests for `ast_util.ts` runTests(); diff --git a/tools/ts_library_builder/testdata/lib.extra.d.ts b/tools/ts_library_builder/testdata/lib.extra.d.ts new file mode 100644 index 000000000..8dc197334 --- /dev/null +++ b/tools/ts_library_builder/testdata/lib.extra.d.ts @@ -0,0 +1,7 @@ +// comment + +declare namespace Qat { + class Foo { + bar: string; + } +} |