Skip to content

Commit

Permalink
Op crate for Web APIs (denoland#6906)
Browse files Browse the repository at this point in the history
Co-authored-by: Ryan Dahl <[email protected]>
  • Loading branch information
bartlomieju and ry authored Aug 7, 2020
1 parent d7dcbab commit 41215eb
Show file tree
Hide file tree
Showing 19 changed files with 1,159 additions and 344 deletions.
9 changes: 9 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ members = [
"core",
"test_plugin",
"test_util",
"op_crates/web",
]
exclude = [
"std/hash/_wasm"
Expand Down
1 change: 1 addition & 0 deletions cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ path = "main.rs"

[build-dependencies]
deno_core = { path = "../core", version = "0.51.0" }
deno_web = { path = "../op_crates/web", version = "0.1.0" }

[target.'cfg(windows)'.build-dependencies]
winres = "0.1"
Expand Down
75 changes: 74 additions & 1 deletion cli/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ fn create_compiler_snapshot(
) {
let mut runtime_isolate = CoreIsolate::new(StartupData::None, true);
let mut custom_libs: HashMap<String, PathBuf> = HashMap::new();
let web_scripts = deno_web::get_scripts();
custom_libs.insert(
"lib.deno.web.d.ts".to_string(),
PathBuf::from(web_scripts.declaration),
);
custom_libs.insert(
"lib.deno.window.d.ts".to_string(),
cwd.join("dts/lib.deno.window.d.ts"),
Expand Down Expand Up @@ -80,6 +85,10 @@ fn main() {
// op_fetch_asset::trace_serializer();

println!("cargo:rustc-env=TS_VERSION={}", ts_version());
println!(
"cargo:rustc-env=DENO_WEB_LIB_PATH={}",
deno_web::get_scripts().declaration
);

println!(
"cargo:rustc-env=TARGET={}",
Expand All @@ -93,7 +102,7 @@ fn main() {
let runtime_snapshot_path = o.join("CLI_SNAPSHOT.bin");
let compiler_snapshot_path = o.join("COMPILER_SNAPSHOT.bin");

let js_files = get_js_files("rt");
let js_files = get_js_files_for_rt();
create_runtime_snapshot(&runtime_snapshot_path, js_files);

let js_files = get_js_files("tsc");
Expand Down Expand Up @@ -123,3 +132,67 @@ fn get_js_files(d: &str) -> Vec<String> {
js_files.sort();
js_files
}

fn get_js_files_for_rt() -> Vec<String> {
let web_scripts = deno_web::get_scripts();

let f = vec![
"rt/00_bootstrap_namespace.js",
&web_scripts.dom_exception,
"rt/01_build.js",
"rt/01_colors.js",
"rt/01_errors.js",
&web_scripts.event,
"rt/01_internals.js",
"rt/01_version.js",
"rt/01_web_util.js",
"rt/02_abort_signal.js",
"rt/02_console.js",
"rt/03_dom_iterable.js",
"rt/06_util.js",
&web_scripts.text_encoding,
"rt/10_dispatch_json.js",
"rt/10_dispatch_minimal.js",
"rt/11_crypto.js",
"rt/11_resources.js",
"rt/11_streams.js",
"rt/11_timers.js",
"rt/11_url.js",
"rt/11_workers.js",
"rt/12_io.js",
"rt/13_buffer.js",
"rt/20_blob.js",
"rt/20_headers.js",
"rt/20_streams_queuing_strategy.js",
"rt/21_dom_file.js",
"rt/22_form_data.js",
"rt/23_multipart.js",
"rt/24_body.js",
"rt/25_request.js",
"rt/26_fetch.js",
"rt/30_files.js",
"rt/30_fs.js",
"rt/30_metrics.js",
"rt/30_net.js",
"rt/30_os.js",
"rt/40_compiler_api.js",
"rt/40_diagnostics.js",
"rt/40_error_stack.js",
"rt/40_fs_events.js",
"rt/40_net_unstable.js",
"rt/40_performance.js",
"rt/40_permissions.js",
"rt/40_plugins.js",
"rt/40_process.js",
"rt/40_read_file.js",
"rt/40_repl.js",
"rt/40_signals.js",
"rt/40_testing.js",
"rt/40_tls.js",
"rt/40_tty.js",
"rt/40_write_file.js",
"rt/90_deno_ns.js",
"rt/99_main.js",
];
f.iter().map(|p| p.to_string()).collect()
}
184 changes: 1 addition & 183 deletions cli/dts/lib.deno.shared_globals.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

/// <reference no-default-lib="true" />
/// <reference lib="esnext" />
/// <reference lib="deno.web" />

// This follows the WebIDL at: https://webassembly.github.io/spec/js-api/
// and: https://webassembly.github.io/spec/web-api/
Expand Down Expand Up @@ -529,12 +530,6 @@ interface DOMStringList {
[index: number]: string;
}

declare class DOMException extends Error {
constructor(message?: string, name?: string);
readonly name: string;
readonly message: string;
}

type BufferSource = ArrayBufferView | ArrayBuffer;
type BlobPart = BufferSource | Blob | string;

Expand Down Expand Up @@ -1030,46 +1025,6 @@ declare function fetch(
init?: RequestInit,
): Promise<Response>;

/** Decodes a string of data which has been encoded using base-64 encoding.
*
* console.log(atob("aGVsbG8gd29ybGQ=")); // outputs 'hello world'
*/
declare function atob(s: string): string;

/** Creates a base-64 ASCII encoded string from the input string.
*
* console.log(btoa("hello world")); // outputs "aGVsbG8gd29ybGQ="
*/
declare function btoa(s: string): string;

declare class TextDecoder {
/** Returns encoding's name, lowercased. */
readonly encoding: string;
/** Returns `true` if error mode is "fatal", and `false` otherwise. */
readonly fatal: boolean;
/** Returns `true` if ignore BOM flag is set, and `false` otherwise. */
readonly ignoreBOM = false;
constructor(
label?: string,
options?: { fatal?: boolean; ignoreBOM?: boolean },
);
/** Returns the result of running encoding's decoder. */
decode(input?: BufferSource, options?: { stream?: false }): string;
readonly [Symbol.toStringTag]: string;
}

declare class TextEncoder {
/** Returns "utf-8". */
readonly encoding = "utf-8";
/** Returns the result of running UTF-8's encoder. */
encode(input?: string): Uint8Array;
encodeInto(
input: string,
dest: Uint8Array,
): { read: number; written: number };
readonly [Symbol.toStringTag]: string;
}

interface URLSearchParams {
/** Appends a specified key/value pair as a new search parameter.
*
Expand Down Expand Up @@ -1444,143 +1399,6 @@ declare class PerformanceMeasure extends PerformanceEntry {
readonly entryType: "measure";
}

interface EventInit {
bubbles?: boolean;
cancelable?: boolean;
composed?: boolean;
}

/** An event which takes place in the DOM. */
declare class Event {
constructor(type: string, eventInitDict?: EventInit);
/** Returns true or false depending on how event was initialized. True if
* event goes through its target's ancestors in reverse tree order, and
* false otherwise. */
readonly bubbles: boolean;
cancelBubble: boolean;
/** Returns true or false depending on how event was initialized. Its return
* value does not always carry meaning, but true can indicate that part of the
* operation during which event was dispatched, can be canceled by invoking
* the preventDefault() method. */
readonly cancelable: boolean;
/** Returns true or false depending on how event was initialized. True if
* event invokes listeners past a ShadowRoot node that is the root of its
* target, and false otherwise. */
readonly composed: boolean;
/** Returns the object whose event listener's callback is currently being
* invoked. */
readonly currentTarget: EventTarget | null;
/** Returns true if preventDefault() was invoked successfully to indicate
* cancellation, and false otherwise. */
readonly defaultPrevented: boolean;
/** Returns the event's phase, which is one of NONE, CAPTURING_PHASE,
* AT_TARGET, and BUBBLING_PHASE. */
readonly eventPhase: number;
/** Returns true if event was dispatched by the user agent, and false
* otherwise. */
readonly isTrusted: boolean;
/** Returns the object to which event is dispatched (its target). */
readonly target: EventTarget | null;
/** Returns the event's timestamp as the number of milliseconds measured
* relative to the time origin. */
readonly timeStamp: number;
/** Returns the type of event, e.g. "click", "hashchange", or "submit". */
readonly type: string;
/** Returns the invocation target objects of event's path (objects on which
* listeners will be invoked), except for any nodes in shadow trees of which
* the shadow root's mode is "closed" that are not reachable from event's
* currentTarget. */
composedPath(): EventTarget[];
/** If invoked when the cancelable attribute value is true, and while
* executing a listener for the event with passive set to false, signals to
* the operation that caused event to be dispatched that it needs to be
* canceled. */
preventDefault(): void;
/** Invoking this method prevents event from reaching any registered event
* listeners after the current one finishes running and, when dispatched in a
* tree, also prevents event from reaching any other objects. */
stopImmediatePropagation(): void;
/** When dispatched in a tree, invoking this method prevents event from
* reaching any objects other than the current object. */
stopPropagation(): void;
readonly AT_TARGET: number;
readonly BUBBLING_PHASE: number;
readonly CAPTURING_PHASE: number;
readonly NONE: number;
static readonly AT_TARGET: number;
static readonly BUBBLING_PHASE: number;
static readonly CAPTURING_PHASE: number;
static readonly NONE: number;
}

/**
* EventTarget is a DOM interface implemented by objects that can receive events
* and may have listeners for them.
*/
declare class EventTarget {
/** Appends an event listener for events whose type attribute value is type.
* The callback argument sets the callback that will be invoked when the event
* is dispatched.
*
* The options argument sets listener-specific options. For compatibility this
* can be a boolean, in which case the method behaves exactly as if the value
* was specified as options's capture.
*
* When set to true, options's capture prevents callback from being invoked
* when the event's eventPhase attribute value is BUBBLING_PHASE. When false
* (or not present), callback will not be invoked when event's eventPhase
* attribute value is CAPTURING_PHASE. Either way, callback will be invoked if
* event's eventPhase attribute value is AT_TARGET.
*
* When set to true, options's passive indicates that the callback will not
* cancel the event by invoking preventDefault(). This is used to enable
* performance optimizations described in § 2.8 Observing event listeners.
*
* When set to true, options's once indicates that the callback will only be
* invoked once after which the event listener will be removed.
*
* The event listener is appended to target's event listener list and is not
* appended if it has the same type, callback, and capture. */
addEventListener(
type: string,
listener: EventListenerOrEventListenerObject | null,
options?: boolean | AddEventListenerOptions,
): void;
/** Dispatches a synthetic event event to target and returns true if either
* event's cancelable attribute value is false or its preventDefault() method
* was not invoked, and false otherwise. */
dispatchEvent(event: Event): boolean;
/** Removes the event listener in target's event listener list with the same
* type, callback, and options. */
removeEventListener(
type: string,
callback: EventListenerOrEventListenerObject | null,
options?: EventListenerOptions | boolean,
): void;
[Symbol.toStringTag]: string;
}

interface EventListener {
(evt: Event): void | Promise<void>;
}

interface EventListenerObject {
handleEvent(evt: Event): void | Promise<void>;
}

declare type EventListenerOrEventListenerObject =
| EventListener
| EventListenerObject;

interface AddEventListenerOptions extends EventListenerOptions {
once?: boolean;
passive?: boolean;
}

interface EventListenerOptions {
capture?: boolean;
}

/** Events measuring progress of an underlying process, like an HTTP request
* (for an XMLHttpRequest, or the loading of the underlying resource of an
* <img>, <audio>, <video>, <style> or <link>). */
Expand Down
1 change: 1 addition & 0 deletions cli/js.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ pub static CLI_SNAPSHOT: &[u8] =
pub static COMPILER_SNAPSHOT: &[u8] =
include_bytes!(concat!(env!("OUT_DIR"), "/COMPILER_SNAPSHOT.bin"));
pub static DENO_NS_LIB: &str = include_str!("dts/lib.deno.ns.d.ts");
pub static DENO_WEB_LIB: &str = include_str!(env!("DENO_WEB_LIB_PATH"));
pub static SHARED_GLOBALS_LIB: &str =
include_str!("dts/lib.deno.shared_globals.d.ts");
pub static WINDOW_LIB: &str = include_str!("dts/lib.deno.window.d.ts");
Expand Down
3 changes: 2 additions & 1 deletion cli/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -287,8 +287,9 @@ async fn print_file_info(

fn get_types(unstable: bool) -> String {
let mut types = format!(
"{}\n{}\n{}",
"{}\n{}\n{}\n{}",
crate::js::DENO_NS_LIB,
crate::js::DENO_WEB_LIB,
crate::js::SHARED_GLOBALS_LIB,
crate::js::WINDOW_LIB,
);
Expand Down
Loading

0 comments on commit 41215eb

Please sign in to comment.