summaryrefslogtreecommitdiff
path: root/tools/ts_library_builder
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ts_library_builder')
-rw-r--r--tools/ts_library_builder/ast_util.ts26
-rw-r--r--tools/ts_library_builder/build_library.ts24
-rw-r--r--tools/ts_library_builder/main.ts7
-rw-r--r--tools/ts_library_builder/test.ts22
-rw-r--r--tools/ts_library_builder/testdata/lib.extra.d.ts7
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;
+ }
+}