diff --git a/Cargo.lock b/Cargo.lock index c199cf560f..e657bd019e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -552,6 +552,13 @@ dependencies = [ "winres", ] +[[package]] +name = "deno_console" +version = "0.1.0" +dependencies = [ + "deno_core", +] + [[package]] name = "deno_core" version = "0.80.2" @@ -632,6 +639,7 @@ name = "deno_runtime" version = "0.9.3" dependencies = [ "atty", + "deno_console", "deno_core", "deno_crypto", "deno_fetch", diff --git a/cli/build.rs b/cli/build.rs index 3f97a71b74..6606242e2c 100644 --- a/cli/build.rs +++ b/cli/build.rs @@ -8,6 +8,7 @@ use deno_core::serde_json::json; use deno_core::serde_json::Value; use deno_core::JsRuntime; use deno_core::RuntimeOptions; +use deno_runtime::deno_console; use deno_runtime::deno_crypto; use deno_runtime::deno_fetch; use deno_runtime::deno_url; @@ -62,6 +63,7 @@ fn create_compiler_snapshot( ) { // libs that are being provided by op crates. let mut op_crate_libs = HashMap::new(); + op_crate_libs.insert("deno.console", deno_console::get_declaration()); op_crate_libs.insert("deno.url", deno_url::get_declaration()); op_crate_libs.insert("deno.web", deno_web::get_declaration()); op_crate_libs.insert("deno.fetch", deno_fetch::get_declaration()); @@ -256,6 +258,10 @@ fn main() { println!("cargo:rustc-env=TS_VERSION={}", ts_version()); println!("cargo:rustc-env=GIT_COMMIT_HASH={}", git_commit_hash()); + println!( + "cargo:rustc-env=DENO_CONSOLE_LIB_PATH={}", + deno_console::get_declaration().display() + ); println!( "cargo:rustc-env=DENO_URL_LIB_PATH={}", deno_url::get_declaration().display() diff --git a/cli/dts/lib.deno.shared_globals.d.ts b/cli/dts/lib.deno.shared_globals.d.ts index 206cafdc30..84272caeb3 100644 --- a/cli/dts/lib.deno.shared_globals.d.ts +++ b/cli/dts/lib.deno.shared_globals.d.ts @@ -5,6 +5,7 @@ /// /// +/// /// /// /// @@ -391,29 +392,6 @@ interface DOMStringList { type BufferSource = ArrayBufferView | ArrayBuffer; -declare interface Console { - assert(condition?: boolean, ...data: any[]): void; - clear(): void; - count(label?: string): void; - countReset(label?: string): void; - debug(...data: any[]): void; - dir(item?: any, options?: any): void; - dirxml(...data: any[]): void; - error(...data: any[]): void; - group(...data: any[]): void; - groupCollapsed(...data: any[]): void; - groupEnd(): void; - info(...data: any[]): void; - log(...data: any[]): void; - table(tabularData?: any, properties?: string[]): void; - time(label?: string): void; - timeEnd(label?: string): void; - timeLog(label?: string, ...data: any[]): void; - timeStamp(label?: string): void; - trace(...data: any[]): void; - warn(...data: any[]): void; -} - declare var console: Console; interface MessageEventInit extends EventInit { diff --git a/cli/main.rs b/cli/main.rs index 8d685c6dbe..1931c62dbe 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -278,8 +278,9 @@ fn print_cache_info( pub fn get_types(unstable: bool) -> String { let mut types = format!( - "{}\n{}\n{}\n{}\n{}\n{}\n{}\n{}", + "{}\n{}\n{}\n{}\n{}\n{}\n{}\n{}\n{}", crate::tsc::DENO_NS_LIB, + crate::tsc::DENO_CONSOLE_LIB, crate::tsc::DENO_URL_LIB, crate::tsc::DENO_WEB_LIB, crate::tsc::DENO_FETCH_LIB, diff --git a/cli/tests/unit/dom_iterable_test.ts b/cli/tests/unit/dom_iterable_test.ts index 259d2d4409..4e94cfdba2 100644 --- a/cli/tests/unit/dom_iterable_test.ts +++ b/cli/tests/unit/dom_iterable_test.ts @@ -1,7 +1,6 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -/* TODO https://github.com/denoland/deno/issues/7540 -import { unitTest, assert, assertEquals } from "./test_util.ts"; +import { assert, assertEquals, unitTest } from "./test_util.ts"; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type function setup() { @@ -27,7 +26,6 @@ function setup() { }; } - unitTest(function testDomIterable(): void { const { DomIterable, Base } = setup(); @@ -88,4 +86,3 @@ unitTest(function testDomIterableScope(): void { checkScope(null, window); checkScope(undefined, window); }); -*/ diff --git a/cli/tsc.rs b/cli/tsc.rs index 6bf8546509..78a472dfa3 100644 --- a/cli/tsc.rs +++ b/cli/tsc.rs @@ -29,6 +29,7 @@ use std::sync::Mutex; // Declaration files pub static DENO_NS_LIB: &str = include_str!("dts/lib.deno.ns.d.ts"); +pub static DENO_CONSOLE_LIB: &str = include_str!(env!("DENO_CONSOLE_LIB_PATH")); pub static DENO_URL_LIB: &str = include_str!(env!("DENO_URL_LIB_PATH")); pub static DENO_WEB_LIB: &str = include_str!(env!("DENO_WEB_LIB_PATH")); pub static DENO_FETCH_LIB: &str = include_str!(env!("DENO_FETCH_LIB_PATH")); diff --git a/runtime/js/01_colors.js b/op_crates/console/01_colors.js similarity index 99% rename from runtime/js/01_colors.js rename to op_crates/console/01_colors.js index 62a2b711f0..66dcb6e23d 100644 --- a/runtime/js/01_colors.js +++ b/op_crates/console/01_colors.js @@ -1,4 +1,5 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. + "use strict"; ((window) => { diff --git a/runtime/js/02_console.js b/op_crates/console/02_console.js similarity index 99% rename from runtime/js/02_console.js rename to op_crates/console/02_console.js index 5d174ece40..0077571a6e 100644 --- a/runtime/js/02_console.js +++ b/op_crates/console/02_console.js @@ -3,7 +3,6 @@ ((window) => { const core = window.Deno.core; - const exposeForTest = window.__bootstrap.internals.exposeForTest; const colors = window.__bootstrap.colors; function isInvalidDate(x) { @@ -1762,11 +1761,14 @@ } // Expose these fields to internalObject for tests. - exposeForTest("Console", Console); - exposeForTest("cssToAnsi", cssToAnsi); - exposeForTest("inspectArgs", inspectArgs); - exposeForTest("parseCss", parseCss); - exposeForTest("parseCssColor", parseCssColor); + window.__bootstrap.internals = { + ...window.__bootstrap.internals ?? {}, + Console, + cssToAnsi, + inspectArgs, + parseCss, + parseCssColor, + }; window.__bootstrap.console = { CSI, diff --git a/op_crates/console/Cargo.toml b/op_crates/console/Cargo.toml new file mode 100644 index 0000000000..1218f5989d --- /dev/null +++ b/op_crates/console/Cargo.toml @@ -0,0 +1,17 @@ +# Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. + +[package] +name = "deno_console" +version = "0.1.0" +edition = "2018" +description = "Implementation of Console API for Deno" +authors = ["the Deno authors"] +license = "MIT" +readme = "README.md" +repository = "https://github.com/denoland/deno" + +[lib] +path = "lib.rs" + +[dependencies] +deno_core = { version = "0.80.2", path = "../../core" } diff --git a/op_crates/console/README.md b/op_crates/console/README.md new file mode 100644 index 0000000000..2f8fb448ac --- /dev/null +++ b/op_crates/console/README.md @@ -0,0 +1,5 @@ +# deno_console + +This crate implements the Console API. + +Spec: https://console.spec.whatwg.org/ diff --git a/op_crates/console/lib.deno_console.d.ts b/op_crates/console/lib.deno_console.d.ts new file mode 100644 index 0000000000..d6cb1e99b2 --- /dev/null +++ b/op_crates/console/lib.deno_console.d.ts @@ -0,0 +1,29 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. + +// deno-lint-ignore-file no-explicit-any + +/// +/// + +declare interface Console { + assert(condition?: boolean, ...data: any[]): void; + clear(): void; + count(label?: string): void; + countReset(label?: string): void; + debug(...data: any[]): void; + dir(item?: any, options?: any): void; + dirxml(...data: any[]): void; + error(...data: any[]): void; + group(...data: any[]): void; + groupCollapsed(...data: any[]): void; + groupEnd(): void; + info(...data: any[]): void; + log(...data: any[]): void; + table(tabularData?: any, properties?: string[]): void; + time(label?: string): void; + timeEnd(label?: string): void; + timeLog(label?: string, ...data: any[]): void; + timeStamp(label?: string): void; + trace(...data: any[]): void; + warn(...data: any[]): void; +} diff --git a/op_crates/console/lib.rs b/op_crates/console/lib.rs new file mode 100644 index 0000000000..a972f62129 --- /dev/null +++ b/op_crates/console/lib.rs @@ -0,0 +1,25 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. + +use deno_core::JsRuntime; +use std::path::PathBuf; + +/// Load and execute the javascript code. +pub fn init(isolate: &mut JsRuntime) { + let files = vec![ + ( + "deno:op_crates/console/01_colors.js", + include_str!("01_colors.js"), + ), + ( + "deno:op_crates/console/02_console.js", + include_str!("02_console.js"), + ), + ]; + for (url, source_code) in files { + isolate.execute(url, source_code).unwrap(); + } +} + +pub fn get_declaration() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("lib.deno_console.d.ts") +} diff --git a/op_crates/fetch/03_dom_iterable.js b/op_crates/fetch/03_dom_iterable.js index 2e9f6d3ea9..2a3c72fba0 100644 --- a/op_crates/fetch/03_dom_iterable.js +++ b/op_crates/fetch/03_dom_iterable.js @@ -3,7 +3,6 @@ ((window) => { const { requiredArguments } = window.__bootstrap.fetchUtil; - // const { exposeForTest } = window.__bootstrap.internals; function DomIterableMixin( Base, @@ -70,7 +69,10 @@ return DomIterable; } - // exposeForTest("DomIterableMixin", DomIterableMixin); + window.__bootstrap.internals = { + ...window.__bootstrap.internals ?? {}, + DomIterableMixin, + }; window.__bootstrap.domIterable = { DomIterableMixin, diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index f654e015c0..db42f93262 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -19,6 +19,7 @@ path = "examples/hello_runtime.rs" [build-dependencies] deno_core = { path = "../core", version = "0.80.2" } +deno_console = { path = "../op_crates/console", version = "0.1.0" } deno_crypto = { path = "../op_crates/crypto", version = "0.14.1" } deno_fetch = { path = "../op_crates/fetch", version = "0.22.3" } deno_web = { path = "../op_crates/web", version = "0.30.3" } @@ -33,6 +34,7 @@ winapi = "0.3.9" [dependencies] deno_core = { path = "../core", version = "0.80.2" } +deno_console = { path = "../op_crates/console", version = "0.1.0" } deno_crypto = { path = "../op_crates/crypto", version = "0.14.1" } deno_fetch = { path = "../op_crates/fetch", version = "0.22.3" } deno_web = { path = "../op_crates/web", version = "0.30.3" } diff --git a/runtime/build.rs b/runtime/build.rs index 67f80c8672..9172816d82 100644 --- a/runtime/build.rs +++ b/runtime/build.rs @@ -14,6 +14,7 @@ fn create_snapshot( files: Vec, ) { deno_webidl::init(&mut js_runtime); + deno_console::init(&mut js_runtime); deno_url::init(&mut js_runtime); deno_web::init(&mut js_runtime); deno_fetch::init(&mut js_runtime); diff --git a/runtime/js/01_internals.js b/runtime/js/01_internals.js deleted file mode 100644 index 4843bf3da2..0000000000 --- a/runtime/js/01_internals.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -"use strict"; - -((window) => { - const internalSymbol = Symbol("Deno.internal"); - - // The object where all the internal fields for testing will be living. - const internalObject = {}; - - // Register a field to internalObject for test access, - // through Deno[Deno.internal][name]. - function exposeForTest(name, value) { - Object.defineProperty(internalObject, name, { - value, - enumerable: false, - }); - } - - window.__bootstrap.internals = { - internalSymbol, - internalObject, - exposeForTest, - }; -})(this); diff --git a/runtime/js/06_util.js b/runtime/js/06_util.js index 7ceb411020..9df9ac88aa 100644 --- a/runtime/js/06_util.js +++ b/runtime/js/06_util.js @@ -3,7 +3,6 @@ ((window) => { const { build } = window.__bootstrap.build; - const internals = window.__bootstrap.internals; let logDebug = false; let logSource = "JS"; @@ -100,7 +99,10 @@ return pathOrUrl; } - internals.exposeForTest("pathFromURL", pathFromURL); + window.__bootstrap.internals = { + ...window.__bootstrap.internals ?? {}, + pathFromURL, + }; function writable(value) { return { diff --git a/runtime/js/40_testing.js b/runtime/js/40_testing.js index eec75f1338..7666fa050a 100644 --- a/runtime/js/40_testing.js +++ b/runtime/js/40_testing.js @@ -7,7 +7,6 @@ const { setExitHandler, exit } = window.__bootstrap.os; const { Console, inspectArgs } = window.__bootstrap.console; const { stdout } = window.__bootstrap.files; - const { exposeForTest } = window.__bootstrap.internals; const { metrics } = window.__bootstrap.metrics; const { assert } = window.__bootstrap.util; @@ -227,8 +226,6 @@ finishing test case.`; } } - exposeForTest("reportToConsole", reportToConsole); - // TODO(bartlomieju): already implements AsyncGenerator, but add as "implements to class" // TODO(bartlomieju): implements PromiseLike class TestRunner { @@ -327,8 +324,6 @@ finishing test case.`; }; } - exposeForTest("createFilterFn", createFilterFn); - async function runTests({ exitOnFail = true, failFast = false, @@ -372,7 +367,12 @@ finishing test case.`; return endMsg; } - exposeForTest("runTests", runTests); + window.__bootstrap.internals = { + ...window.__bootstrap.internals ?? {}, + reportToConsole, + createFilterFn, + runTests, + }; window.__bootstrap.testing = { test, diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index 2c4decd32b..d96aaaaae5 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -20,7 +20,7 @@ delete Object.prototype.__proto__; const Console = window.__bootstrap.console.Console; const worker = window.__bootstrap.worker; const signals = window.__bootstrap.signals; - const { internalSymbol, internalObject } = window.__bootstrap.internals; + const internals = window.__bootstrap.internals; const performance = window.__bootstrap.performance; const crypto = window.__bootstrap.crypto; const url = window.__bootstrap.url; @@ -429,10 +429,12 @@ delete Object.prototype.__proto__; registerErrors(); + const internalSymbol = Symbol("Deno.internal"); + const finalDenoNs = { core, internal: internalSymbol, - [internalSymbol]: internalObject, + [internalSymbol]: internals, resources: core.resources, close: core.close, ...denoNs, @@ -491,10 +493,12 @@ delete Object.prototype.__proto__; fetch.setBaseUrl(locationHref); registerErrors(); + const internalSymbol = Symbol("Deno.internal"); + const finalDenoNs = { core, internal: internalSymbol, - [internalSymbol]: internalObject, + [internalSymbol]: internals, resources: core.resources, close: core.close, ...denoNs, diff --git a/runtime/lib.rs b/runtime/lib.rs index 1406372616..f4cf559d25 100644 --- a/runtime/lib.rs +++ b/runtime/lib.rs @@ -7,6 +7,7 @@ extern crate lazy_static; #[macro_use] extern crate log; +pub use deno_console; pub use deno_crypto; pub use deno_fetch; pub use deno_url;