diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/format.ts | 13 | ||||
-rw-r--r-- | tools/permission_prompt_test.ts | 2 | ||||
-rw-r--r-- | tools/repl_test.py | 6 | ||||
-rw-r--r-- | tools/ts_library_builder/build_library.ts | 98 | ||||
-rw-r--r-- | tools/ts_library_builder/test.ts | 40 | ||||
-rw-r--r-- | tools/util.ts | 3 | ||||
-rw-r--r-- | tools/util_test.ts | 3 |
7 files changed, 115 insertions, 50 deletions
diff --git a/tools/format.ts b/tools/format.ts index 8f86ea979..33241162b 100755 --- a/tools/format.ts +++ b/tools/format.ts @@ -1,27 +1,26 @@ #!/usr/bin/env deno --allow-read --allow-run // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. -import * as deno from "deno"; import { join } from "../js/deps/https/deno.land/x/std/fs/path.ts"; import { findFiles, lookupDenoPath } from "./util.ts"; const clangFormat = join("third_party", "depot_tools", "clang-format"); const gn = join("third_party", "depot_tools", "gn"); const yapf = join("third_party", "python_packages", "bin", "yapf"); -const rustfmt = join("third_party", "rustfmt", deno.platform.os, "rustfmt"); +const rustfmt = join("third_party", "rustfmt", Deno.platform.os, "rustfmt"); const rustfmtConfig = ".rustfmt.toml"; const decoder = new TextDecoder(); async function run(...args: string[]): Promise<void> { - if (deno.platform.os === "win") { + if (Deno.platform.os === "win") { args = ["cmd.exe", "/c", ...args]; } - const p = deno.run({ args, stdout: "piped", stderr: "piped" }); + const p = Deno.run({ args, stdout: "piped", stderr: "piped" }); const { code } = await p.status(); if (code !== 0) { - console.log(decoder.decode(await deno.readAll(p.stderr))); - console.log(decoder.decode(await deno.readAll(p.stdout))); - deno.exit(code); + console.log(decoder.decode(await Deno.readAll(p.stderr))); + console.log(decoder.decode(await Deno.readAll(p.stdout))); + Deno.exit(code); } } diff --git a/tools/permission_prompt_test.ts b/tools/permission_prompt_test.ts index 7e8bfee3d..0d5b86451 100644 --- a/tools/permission_prompt_test.ts +++ b/tools/permission_prompt_test.ts @@ -1,5 +1,5 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. -import { args, listen, env, exit, makeTempDirSync, readFile, run } from "deno"; +const { args, listen, env, exit, makeTempDirSync, readFile, run } = Deno; const name = args[1]; const test = { diff --git a/tools/repl_test.py b/tools/repl_test.py index 0958c18d0..3eb0858cd 100644 --- a/tools/repl_test.py +++ b/tools/repl_test.py @@ -28,7 +28,7 @@ class Repl(object): p.stdin.flush() time.sleep(sleep_) if exit_: - p.stdin.write(b'deno.exit(0)\n') + p.stdin.write(b'Deno.exit(0)\n') else: time.sleep(1) # wait to be killed by js out, err = p.communicate() @@ -73,7 +73,7 @@ class Repl(object): assertEqual(code, 0) def test_function(self): - out, err, code = self.input("deno.writeFileSync") + out, err, code = self.input("Deno.writeFileSync") assertEqual(out, '[Function: writeFileSync]\n') assertEqual(err, '') assertEqual(code, 0) @@ -99,7 +99,7 @@ class Repl(object): def test_set_timeout(self): out, err, code = self.input( - "setTimeout(() => { console.log('b'); deno.exit(0); }, 10)", + "setTimeout(() => { console.log('b'); Deno.exit(0); }, 10)", "'a'", exit=False) assertEqual(out, '1\na\nb\n') diff --git a/tools/ts_library_builder/build_library.ts b/tools/ts_library_builder/build_library.ts index 93d2da661..98a51f63f 100644 --- a/tools/ts_library_builder/build_library.ts +++ b/tools/ts_library_builder/build_library.ts @@ -98,7 +98,9 @@ interface FlattenOptions { filePath: string; debug?: boolean; declarationProject: Project; - namespaceName: string; + globalInterfaceName?: string; + moduleName?: string; + namespaceName?: string; targetSourceFile: SourceFile; } @@ -109,10 +111,12 @@ export function flatten({ filePath, debug, declarationProject, + globalInterfaceName, + moduleName, namespaceName, targetSourceFile }: FlattenOptions): void { - // Flatten the source file into a single module declaration + // Flatten the source file into a single set of statements const statements = flattenNamespace({ sourceFile: declarationProject.getSourceFileOrThrow(filePath), rootPath: basePath, @@ -120,15 +124,42 @@ export function flatten({ debug }); - // Create the module in the target file - const namespace = targetSourceFile.addNamespace({ - name: namespaceName, - hasDeclareKeyword: true, - declarationKind: NamespaceDeclarationKind.Module - }); + // If a module name is specified create the module in the target file + if (moduleName) { + const namespace = targetSourceFile.addNamespace({ + name: moduleName, + hasDeclareKeyword: true, + declarationKind: NamespaceDeclarationKind.Module + }); + + // Add the output of the flattening to the namespace + namespace.addStatements(statements); + } + + if (namespaceName) { + const namespace = targetSourceFile.insertNamespace(0, { + name: namespaceName, + hasDeclareKeyword: true, + declarationKind: NamespaceDeclarationKind.Namespace + }); + + // Add the output of the flattening to the namespace + namespace.addStatements(statements); + + if (globalInterfaceName) { + // Retrieve the global interface + const interfaceDeclaration = targetSourceFile.getInterfaceOrThrow( + globalInterfaceName + ); - // Add the output of the flattening to the namespace - namespace.addStatements(statements); + // Add the namespace to the global interface + addInterfaceProperty( + interfaceDeclaration, + namespaceName, + `typeof ${namespaceName}` + ); + } + } } interface MergeGlobalOptions { @@ -137,6 +168,7 @@ interface MergeGlobalOptions { declarationProject: Project; filePath: string; globalVarName: string; + ignore?: string[]; inputProject: Project; interfaceName: string; targetSourceFile: SourceFile; @@ -149,6 +181,7 @@ export function mergeGlobal({ declarationProject, filePath, globalVarName, + ignore, inputProject, interfaceName, targetSourceFile @@ -214,16 +247,18 @@ export function mergeGlobal({ // Create a global variable and add the property to the `Window` interface // for each mutation of the `window` variable we observed in `globals.ts` for (const [property, info] of globalVariables) { - const type = info.type.getText(info.node); - const typeSymbol = info.type.getSymbol(); - if (typeSymbol) { - const valueDeclaration = typeSymbol.getValueDeclaration(); - if (valueDeclaration) { - dependentSourceFiles.add(valueDeclaration.getSourceFile()); + if (!(ignore && ignore.includes(property))) { + const type = info.type.getText(info.node); + const typeSymbol = info.type.getSymbol(); + if (typeSymbol) { + const valueDeclaration = typeSymbol.getValueDeclaration(); + if (valueDeclaration) { + dependentSourceFiles.add(valueDeclaration.getSourceFile()); + } } + addVariableDeclaration(targetSourceFile, property, type, true); + addInterfaceProperty(interfaceDeclaration, property, type); } - addVariableDeclaration(targetSourceFile, property, type, true); - addInterfaceProperty(interfaceDeclaration, property, type); } // We need to copy over any type aliases @@ -288,7 +323,7 @@ export function main({ debug, outFile, silent -}: BuildLibraryOptions) { +}: BuildLibraryOptions): void { if (!silent) { console.log("-----"); console.log("build_lib"); @@ -415,33 +450,36 @@ export function main({ }${msgGeneratedDtsText}\n` }; - flatten({ + mergeGlobal({ basePath, - customSources, debug, declarationProject, - filePath: `${basePath}/js/deno.d.ts`, - namespaceName: `"deno"`, + filePath: `${basePath}/js/globals.ts`, + globalVarName: "window", + inputProject, + ignore: ["Deno"], + interfaceName: "Window", targetSourceFile: libDTs }); if (!silent) { - console.log(`Created module "deno".`); + console.log(`Merged "globals" into global scope.`); } - mergeGlobal({ + flatten({ basePath, + customSources, debug, declarationProject, - filePath: `${basePath}/js/globals.ts`, - globalVarName: "window", - inputProject, - interfaceName: "Window", + filePath: `${basePath}/js/deno.d.ts`, + globalInterfaceName: "Window", + moduleName: `"deno"`, + namespaceName: "Deno", targetSourceFile: libDTs }); if (!silent) { - console.log(`Merged "globals" into global scope.`); + console.log(`Created module "deno" and namespace Deno.`); } // Inline any files that were passed in, to be used to add additional libs diff --git a/tools/ts_library_builder/test.ts b/tools/ts_library_builder/test.ts index acc2c43db..d8cbec62b 100644 --- a/tools/ts_library_builder/test.ts +++ b/tools/ts_library_builder/test.ts @@ -79,14 +79,16 @@ test(function buildLibraryFlatten() { debug, declarationProject, filePath: `${buildPath}/api.d.ts`, - namespaceName: `"api"`, + moduleName: `"api"`, + namespaceName: "Api", targetSourceFile }); assert(targetSourceFile.getNamespace(`"api"`) != null); - assertEqual(targetSourceFile.getNamespaces().length, 1); - const namespaceApi = targetSourceFile.getNamespaceOrThrow(`"api"`); - const functions = namespaceApi.getFunctions(); + assert(targetSourceFile.getNamespace("Api") != null); + assertEqual(targetSourceFile.getNamespaces().length, 2); + const moduleApi = targetSourceFile.getNamespaceOrThrow(`"api"`); + const functions = moduleApi.getFunctions(); assertEqual(functions[0].getName(), "foo"); assertEqual( functions[0] @@ -104,12 +106,38 @@ test(function buildLibraryFlatten() { "" ); assertEqual(functions.length, 2); - const classes = namespaceApi.getClasses(); + const classes = moduleApi.getClasses(); assertEqual(classes[0].getName(), "Foo"); assertEqual(classes.length, 1); - const variableDeclarations = namespaceApi.getVariableDeclarations(); + const variableDeclarations = moduleApi.getVariableDeclarations(); assertEqual(variableDeclarations[0].getName(), "arr"); assertEqual(variableDeclarations.length, 1); + + const namespaceApi = targetSourceFile.getNamespaceOrThrow(`"api"`); + const functionsNs = namespaceApi.getFunctions(); + assertEqual(functionsNs[0].getName(), "foo"); + assertEqual( + functionsNs[0] + .getJsDocs() + .map(jsdoc => jsdoc.getInnerText()) + .join("\n"), + "jsdoc for foo" + ); + assertEqual(functionsNs[1].getName(), "bar"); + assertEqual( + functionsNs[1] + .getJsDocs() + .map(jsdoc => jsdoc.getInnerText()) + .join("\n"), + "" + ); + assertEqual(functionsNs.length, 2); + const classesNs = namespaceApi.getClasses(); + assertEqual(classesNs[0].getName(), "Foo"); + assertEqual(classesNs.length, 1); + const variableDeclarationsNs = namespaceApi.getVariableDeclarations(); + assertEqual(variableDeclarationsNs[0].getName(), "arr"); + assertEqual(variableDeclarationsNs.length, 1); }); test(function buildLibraryMerge() { diff --git a/tools/util.ts b/tools/util.ts index c055959fe..9d8ad0f1f 100644 --- a/tools/util.ts +++ b/tools/util.ts @@ -1,7 +1,8 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. -import { platform, lstatSync, readDirSync } from "deno"; import { join } from "../js/deps/https/deno.land/x/std/fs/path/mod.ts"; +const { platform, lstatSync, readDirSync } = Deno; + export interface FindOptions { skip?: string[]; depth?: number; diff --git a/tools/util_test.ts b/tools/util_test.ts index 5a1d33617..95def4aeb 100644 --- a/tools/util_test.ts +++ b/tools/util_test.ts @@ -1,5 +1,4 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. -import * as deno from "deno"; import { assert, testPerm, assertEqual } from "../js/test_util.ts"; import { findFiles } from "./util.ts"; @@ -55,7 +54,7 @@ testPerm({ read: false }, function testFindFilesPerm() { const files = findFiles([testDir], [".ts", ".md"]); } catch (e) { caughtError = true; - assertEqual(e.kind, deno.ErrorKind.PermissionDenied); + assertEqual(e.kind, Deno.ErrorKind.PermissionDenied); assertEqual(e.name, "PermissionDenied"); } assert(caughtError); |