From 36fa1cea4a6c7c4ae5ac93974843fcdcd4557fef Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Fri, 27 Jul 2018 16:51:19 +1000 Subject: [PATCH] Upgrade TypeScript (3.0.1) Update runtime to use lib.deno.d.ts Add proper console declaration Upgrade prettier (There was an issue formatting lib.deno.d.ts) --- BUILD.gn | 1 + README.md | 2 +- js/assets.ts | 40 ++++++++++++++++++++++++++++------------ js/lib.deno.d.ts | 34 ++++++++++++++++++++++++++++++++++ js/runtime.ts | 5 ++--- package.json | 4 ++-- rollup.config.js | 9 +++++++-- third_party | 2 +- tsconfig.json | 2 +- yarn.lock | 12 ++++++------ 10 files changed, 83 insertions(+), 28 deletions(-) create mode 100644 js/lib.deno.d.ts diff --git a/BUILD.gn b/BUILD.gn index bb81db4ba9..c3dbbaf740 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -199,6 +199,7 @@ run_node("bundle") { "js/deno.d.ts", "js/dispatch.ts", "js/globals.ts", + "js/lib.deno.d.ts", "js/main.ts", "js/os.ts", "js/runtime.ts", diff --git a/README.md b/README.md index bd09c63b0d..b9bc4000d7 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## A secure TypeScript runtime built on V8 -* Supports TypeScript 2.8 out of the box. Uses V8 6.9.297. That is, it's +* Supports TypeScript 3.0.1 out of the box. Uses V8 6.9.297. That is, it's very modern JavaScript. * No `package.json`. No npm. Not explicitly compatible with Node. diff --git a/js/assets.ts b/js/assets.ts index 2eabbc5f9d..598b4cc6ba 100644 --- a/js/assets.ts +++ b/js/assets.ts @@ -6,8 +6,11 @@ // There is a rollup plugin that will inline any module ending with `!string` // tslint:disable:max-line-length import denoDts from "/js/deno.d.ts!string"; -import libDts from "/third_party/node_modules/typescript/lib/lib.d.ts!string"; -import libDomIterableDts from "/third_party/node_modules/typescript/lib/lib.dom.iterable.d.ts!string"; +// import libDts from "/third_party/node_modules/typescript/lib/lib.d.ts!string"; +import libDenoDts from "/js/lib.deno.d.ts!string"; +// import libDomD qts from "/third_party/node_modules/typescript/lib/lib.dom.d.ts!string"; +// import libDomIterableDts from "/third_party/node_modules/typescript/lib/lib.dom.iterable.d.ts!string"; +import libEs2015Dts from "/third_party/node_modules/typescript/lib/lib.es2015.d.ts!string"; import libEs2015CollectionDts from "/third_party/node_modules/typescript/lib/lib.es2015.collection.d.ts!string"; import libEs2015CoreDts from "/third_party/node_modules/typescript/lib/lib.es2015.core.d.ts!string"; import libEs2015GeneratorDts from "/third_party/node_modules/typescript/lib/lib.es2015.generator.d.ts!string"; @@ -17,29 +20,38 @@ import libEs2015ProxyDts from "/third_party/node_modules/typescript/lib/lib.es20 import libEs2015ReflectDts from "/third_party/node_modules/typescript/lib/lib.es2015.reflect.d.ts!string"; import libEs2015SymbolDts from "/third_party/node_modules/typescript/lib/lib.es2015.symbol.d.ts!string"; import libEs2015SymbolWellknownDts from "/third_party/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts!string"; +import libEs2016Dts from "/third_party/node_modules/typescript/lib/lib.es2016.d.ts!string"; import libEs2016ArrayIncludeDts from "/third_party/node_modules/typescript/lib/lib.es2016.array.include.d.ts!string"; +import libEs2017Dts from "/third_party/node_modules/typescript/lib/lib.es2017.d.ts!string"; import libEs2017IntlDts from "/third_party/node_modules/typescript/lib/lib.es2017.intl.d.ts!string"; import libEs2017ObjectDts from "/third_party/node_modules/typescript/lib/lib.es2017.object.d.ts!string"; import libEs2017SharedmemoryDts from "/third_party/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts!string"; import libEs2017StringDts from "/third_party/node_modules/typescript/lib/lib.es2017.string.d.ts!string"; import libEs2017TypedarraysDts from "/third_party/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts!string"; import libEs2018Dts from "/third_party/node_modules/typescript/lib/lib.es2018.d.ts!string"; +import libEs2018IntlDts from "/third_party/node_modules/typescript/lib/lib.es2018.intl.d.ts!string"; import libEs2018PromiseDts from "/third_party/node_modules/typescript/lib/lib.es2018.promise.d.ts!string"; import libEs2018RegexpDts from "/third_party/node_modules/typescript/lib/lib.es2018.regexp.d.ts!string"; +import libEs5Dts from "/third_party/node_modules/typescript/lib/lib.es5.d.ts!string"; import libEsnextArrayDts from "/third_party/node_modules/typescript/lib/lib.esnext.array.d.ts!string"; import libEsnextAsynciterablesDts from "/third_party/node_modules/typescript/lib/lib.esnext.asynciterable.d.ts!string"; import libEsnextDts from "/third_party/node_modules/typescript/lib/lib.esnext.d.ts!string"; +import libEsnextIntlDts from "/third_party/node_modules/typescript/lib/lib.esnext.intl.d.ts!string"; +import libEsnextSymbolDts from "/third_party/node_modules/typescript/lib/lib.esnext.symbol.d.ts!string"; +// import libScripthost from "/third_party/node_modules/typescript/lib/lib.scripthost.d.ts!string"; +// import libWebworkerImportscripts from "/third_party/node_modules/typescript/lib/lib.webworker.importscripts.d.ts!string"; import typescriptDts from "/third_party/node_modules/typescript/lib/typescript.d.ts!string"; // prettier-ignore export const assetSourceCode: { [key: string]: string } = { "deno.d.ts": denoDts, - "lib.d.ts": libDts, - //"lib.dom.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.dom.d.ts", "utf8"), - "lib.dom.iterable.d.ts": libDomIterableDts, + // "lib.d.ts": libDts, + "lib.deno.d.ts": libDenoDts, + // "lib.dom.d.ts": libDomDts, + // "lib.dom.iterable.d.ts": libDomIterableDts, "lib.es2015.collection.d.ts": libEs2015CollectionDts, "lib.es2015.core.d.ts": libEs2015CoreDts, - //"lib.es2015.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.es2015.d.ts", "utf8"), + "lib.es2015.d.ts": libEs2015Dts, "lib.es2015.generator.d.ts": libEs2015GeneratorDts, "lib.es2015.iterable.d.ts": libEs2015IterableDts, "lib.es2015.promise.d.ts": libEs2015PromiseDts, @@ -48,9 +60,9 @@ export const assetSourceCode: { [key: string]: string } = { "lib.es2015.symbol.d.ts": libEs2015SymbolDts, "lib.es2015.symbol.wellknown.d.ts": libEs2015SymbolWellknownDts, "lib.es2016.array.include.d.ts": libEs2016ArrayIncludeDts, - //"lib.es2016.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.es2016.d.ts", "utf8"), + "lib.es2016.d.ts": libEs2016Dts, //"lib.es2016.full.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.es2016.full.d.ts", "utf8"), - //"lib.es2017.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.es2017.d.ts", "utf8"), + "lib.es2017.d.ts": libEs2017Dts, //"lib.es2017.full.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.es2017.full.d.ts", "utf8"), "lib.es2017.intl.d.ts": libEs2017IntlDts, "lib.es2017.object.d.ts": libEs2017ObjectDts, @@ -59,16 +71,20 @@ export const assetSourceCode: { [key: string]: string } = { "lib.es2017.typedarrays.d.ts": libEs2017TypedarraysDts, "lib.es2018.d.ts": libEs2018Dts, //"lib.es2018.full.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.es2018.full.d.ts", "utf8"), + "lib.es2018.intl.d.ts": libEs2018IntlDts, "lib.es2018.promise.d.ts": libEs2018PromiseDts, "lib.es2018.regexp.d.ts": libEs2018RegexpDts, - //"lib.es5.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.es5.d.ts", "utf8"), + "lib.es5.d.ts": libEs5Dts, //"lib.es6.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.es6.d.ts", "utf8"), + "lib.esnext.d.ts": libEsnextDts, "lib.esnext.array.d.ts": libEsnextArrayDts, "lib.esnext.asynciterable.d.ts": libEsnextAsynciterablesDts, - "lib.esnext.d.ts": libEsnextDts, + "lib.esnext.intl.d.ts": libEsnextIntlDts, + "lib.esnext.symbol.d.ts": libEsnextSymbolDts, //"lib.esnext.full.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.esnext.full.d.ts", "utf8"), - //"lib.scripthost.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.scripthost.d.ts", "utf8"), - //"lib.webworker.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/lib.webworker.d.ts", "utf8"), + // "lib.scripthost.d.ts": libScripthost, + // "lib.webworker.d.ts": libWebworker, + // "lib.webworker.importscripts.d.ts": libWebworkerImportscripts, //"protocol.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/protocol.d.ts", "utf8"), //"tsserverlibrary.d.ts": readFileSync(__dirname + "/../third_party/node_modules/typescript/lib/tsserverlibrary.d.ts", "utf8"), "typescript.d.ts": typescriptDts, diff --git a/js/lib.deno.d.ts b/js/lib.deno.d.ts new file mode 100644 index 0000000000..fd337abb0b --- /dev/null +++ b/js/lib.deno.d.ts @@ -0,0 +1,34 @@ +// Copyright 2018 the Deno authors. All rights reserved. MIT license. + +// This file contains the default TypeScript libraries for the runtime + +/// + +/// + +// TODO generate `console.d.ts` and inline it in `assets.ts` and remove +// declaration of `Console` +// import { Console } from 'gen/console'; + +declare class Console { + // tslint:disable-next-line:no-any + log(...args: any[]): void; + // tslint:disable-next-line:no-any + debug(...args: any[]): void; + // tslint:disable-next-line:no-any + info(...args: any[]): void; + // tslint:disable-next-line:no-any + warn(...args: any[]): void; + // tslint:disable-next-line:no-any + error(...args: any[]): void; + // tslint:disable-next-line:no-any + assert(condition: boolean, ...args: any[]): void; +} + +interface Window { + console: Console; +} + +// Globals in the runtime environment +declare let console: Console; +declare const window: Window; diff --git a/js/runtime.ts b/js/runtime.ts index 6f20072684..79f4637593 100644 --- a/js/runtime.ts +++ b/js/runtime.ts @@ -214,9 +214,8 @@ class Compiler { module: ts.ModuleKind.AMD, outDir: "$deno$", inlineSourceMap: true, - lib: ["es2017"], inlineSources: true, - target: ts.ScriptTarget.ES2017 + target: ts.ScriptTarget.ESNext }; /* allowJs: true, @@ -317,7 +316,7 @@ class TypeScriptHost implements ts.LanguageServiceHost { } getDefaultLibFileName(options: ts.CompilerOptions): string { - const fn = "lib.d.ts"; // ts.getDefaultLibFileName(options); + const fn = "lib.deno.d.ts"; // ts.getDefaultLibFileName(options); util.log("getDefaultLibFileName", fn); const m = resolveModule(fn, "/$asset$/"); return m.fileName; diff --git a/package.json b/package.json index d4d314515e..bdf09059ce 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@types/flatbuffers": "^1.9.0", "@types/source-map-support": "^0.4.1", "flatbuffers": "^1.9.0", - "prettier": "^1.13.7", + "prettier": "^1.14.0", "rollup": "^0.63.2", "rollup-pluginutils": "^2.3.0", "rollup-plugin-alias": "^1.4.0", @@ -18,6 +18,6 @@ "tslint": "^5.10.0", "tslint-eslint-rules": "^5.3.1", "tslint-no-circular-imports": "^0.5.0", - "typescript": "2.8.3" + "typescript": "3.0.1" } } diff --git a/rollup.config.js b/rollup.config.js index 5bf5018e10..66be825c65 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -4,8 +4,9 @@ import { plugin as analyze } from "rollup-plugin-analyzer"; import commonjs from "rollup-plugin-commonjs"; import globals from "rollup-plugin-node-globals"; import nodeResolve from "rollup-plugin-node-resolve"; -import typescript from "rollup-plugin-typescript2"; +import typescriptPlugin from "rollup-plugin-typescript2"; import { createFilter } from "rollup-pluginutils"; +import typescript from "typescript"; const mockPath = path.join(__dirname, "js", "mock_builtin"); const tsconfig = path.join(__dirname, "tsconfig.json"); @@ -122,13 +123,17 @@ export default function makeConfig(commandOptions) { } }), - typescript({ + typescriptPlugin({ // The build script is invoked from `out/:target` so passing an absolute file path is needed tsconfig, // This provides any overrides to the `tsconfig.json` that are needed to bundle tsconfigOverride, + // This provides the locally configured version of TypeScript instead of the plugins + // default version + typescript, + // By default, the include path only includes the cwd and below, need to include the root of the project // and build path to be passed to this plugin. This is different front tsconfig.json include include: ["*.ts", `${__dirname}/**/*.ts`, `${process.cwd()}/**/*.ts`], diff --git a/third_party b/third_party index 142a1b0911..ba730b48a1 160000 --- a/third_party +++ b/third_party @@ -1 +1 @@ -Subproject commit 142a1b091123804afa92d03381094db521bb08bb +Subproject commit ba730b48a1565ee19ebd336615a50e21dc2eb98d diff --git a/tsconfig.json b/tsconfig.json index dacdc2e2a0..516868d3ee 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,7 @@ "sourceMap": true, "removeComments": true, "preserveConstEnums": true, - "target": "es2017", + "target": "esnext", "moduleResolution": "node", "noImplicitReturns": true, "pretty": true, diff --git a/yarn.lock b/yarn.lock index 2c3826ee6f..ba50c48acc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -448,9 +448,9 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@^1.13.7: - version "1.13.7" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" +prettier@^1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.0.tgz#847c235522035fd988100f1f43cf20a7d24f9372" process-es6@^0.11.6: version "0.11.6" @@ -650,9 +650,9 @@ tsutils@^2.12.1: dependencies: tslib "^1.8.1" -typescript@2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.3.tgz#5d817f9b6f31bb871835f4edf0089f21abe6c170" +typescript@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.1.tgz#43738f29585d3a87575520a4b93ab6026ef11fdb" universalify@^0.1.0: version "0.1.2"