summaryrefslogtreecommitdiff
path: root/deno_typescript
diff options
context:
space:
mode:
Diffstat (limited to 'deno_typescript')
-rw-r--r--deno_typescript/compiler_main.js11
-rw-r--r--deno_typescript/lib.rs47
-rw-r--r--deno_typescript/ops.rs10
3 files changed, 47 insertions, 21 deletions
diff --git a/deno_typescript/compiler_main.js b/deno_typescript/compiler_main.js
index 013d6e157..0f8c5cc14 100644
--- a/deno_typescript/compiler_main.js
+++ b/deno_typescript/compiler_main.js
@@ -46,7 +46,7 @@ function main(configText, rootNames) {
handleDiagnostics(host, emitResult.diagnostics);
dispatch(
- "setEmitResult",
+ "op_set_emit_result",
Object.assign(emitResult, { tsVersion: ts.version })
);
}
@@ -98,7 +98,6 @@ function encode(str) {
return ui8;
}
-//
/** **Warning!** Op ids must be acquired from Rust using `Deno.core.ops()`
* before dispatching any action.
* @type {Record<string, number>}
@@ -184,7 +183,7 @@ class Host {
fileName = moduleMap.get(fileName);
}
- const { sourceCode, moduleName } = dispatch("loadModule", {
+ const { sourceCode, moduleName } = dispatch("op_load_module", {
moduleUrl: fileName,
languageVersion,
shouldCreateNewSourceFile
@@ -228,7 +227,7 @@ class Host {
return;
}
const moduleName = sourceFiles[sourceFiles.length - 1].moduleName;
- return dispatch("writeFile", { fileName, moduleName, data });
+ return dispatch("op_write_file", { fileName, moduleName, data });
}
/**
@@ -272,7 +271,7 @@ class Host {
? moduleMap.get(containingFile)
: containingFile;
/** @type {string[]} */
- const resolvedNames = dispatch("resolveModuleNames", {
+ const resolvedNames = dispatch("op_resolve_module_names", {
moduleNames,
containingFile
});
@@ -332,7 +331,7 @@ function dispatch(opName, obj) {
* @param {number} code
*/
function exit(code) {
- dispatch("exit", { code });
+ dispatch("op_exit2", { code });
return unreachable();
}
diff --git a/deno_typescript/lib.rs b/deno_typescript/lib.rs
index c825277e3..b2e2166be 100644
--- a/deno_typescript/lib.rs
+++ b/deno_typescript/lib.rs
@@ -85,22 +85,24 @@ impl TSIsolate {
}));
isolate.register_op(
- "loadModule",
- compiler_op(state.clone(), ops::json_op(ops::load_module)),
+ "op_load_module",
+ compiler_op(state.clone(), ops::json_op(ops::op_load_module)),
);
- isolate
- .register_op("exit", compiler_op(state.clone(), ops::json_op(ops::exit)));
isolate.register_op(
- "writeFile",
- compiler_op(state.clone(), ops::json_op(ops::write_file)),
+ "op_exit2",
+ compiler_op(state.clone(), ops::json_op(ops::op_exit2)),
);
isolate.register_op(
- "resolveModuleNames",
- compiler_op(state.clone(), ops::json_op(ops::resolve_module_names)),
+ "op_write_file",
+ compiler_op(state.clone(), ops::json_op(ops::op_write_file)),
);
isolate.register_op(
- "setEmitResult",
- compiler_op(state.clone(), ops::json_op(ops::set_emit_result)),
+ "op_resolve_module_names",
+ compiler_op(state.clone(), ops::json_op(ops::op_resolve_module_names)),
+ );
+ isolate.register_op(
+ "op_set_emit_result",
+ compiler_op(state.clone(), ops::json_op(ops::op_set_emit_result)),
);
TSIsolate { isolate, state }
@@ -317,3 +319,28 @@ pub fn trace_serializer() {
]);
assert_eq!(r, vec![dummy]);
}
+
+/// Warning: Returns a non-JSON op dispatcher. Must be manually attached to
+/// Isolate.
+pub fn op_fetch_asset<S: ::std::hash::BuildHasher>(
+ custom_assets: HashMap<String, PathBuf, S>,
+) -> impl Fn(&[u8], Option<ZeroCopyBuf>) -> CoreOp {
+ move |control: &[u8], zero_copy_buf: Option<ZeroCopyBuf>| -> CoreOp {
+ assert!(zero_copy_buf.is_none()); // zero_copy_buf unused in this op.
+ let name = std::str::from_utf8(control).unwrap();
+
+ let asset_code = if let Some(source_code) = get_asset(name) {
+ source_code.to_string()
+ } else if let Some(asset_path) = custom_assets.get(name) {
+ let source_code_vec =
+ std::fs::read(&asset_path).expect("Asset not found");
+ let source_code = std::str::from_utf8(&source_code_vec).unwrap();
+ source_code.to_string()
+ } else {
+ panic!("fetch_asset bad asset {}", name)
+ };
+
+ let vec = asset_code.into_bytes();
+ deno_core::Op::Sync(vec.into_boxed_slice())
+ }
+}
diff --git a/deno_typescript/ops.rs b/deno_typescript/ops.rs
index f9b244397..022eee00e 100644
--- a/deno_typescript/ops.rs
+++ b/deno_typescript/ops.rs
@@ -41,7 +41,7 @@ struct LoadModule {
should_create_new_source_file: bool,
}
-pub fn load_module(s: &mut TSState, v: Value) -> Result<Value, ErrBox> {
+pub fn op_load_module(s: &mut TSState, v: Value) -> Result<Value, ErrBox> {
let v: LoadModule = serde_json::from_value(v)?;
let (module_name, source_code) = if v.module_url.starts_with("$asset$/") {
let asset = v.module_url.replace("$asset$/", "");
@@ -98,7 +98,7 @@ struct WriteFile {
module_name: String,
}
-pub fn write_file(s: &mut TSState, v: Value) -> Result<Value, ErrBox> {
+pub fn op_write_file(s: &mut TSState, v: Value) -> Result<Value, ErrBox> {
let v: WriteFile = serde_json::from_value(v)?;
let module_specifier = ModuleSpecifier::resolve_url_or_path(&v.file_name)?;
if s.bundle {
@@ -119,7 +119,7 @@ struct ResolveModuleNames {
containing_file: String,
}
-pub fn resolve_module_names(
+pub fn op_resolve_module_names(
_s: &mut TSState,
v: Value,
) -> Result<Value, ErrBox> {
@@ -143,7 +143,7 @@ struct Exit {
code: i32,
}
-pub fn exit(s: &mut TSState, v: Value) -> Result<Value, ErrBox> {
+pub fn op_exit2(s: &mut TSState, v: Value) -> Result<Value, ErrBox> {
let v: Exit = serde_json::from_value(v)?;
s.exit_code = v.code;
std::process::exit(v.code)
@@ -157,7 +157,7 @@ pub struct EmitResult {
pub emitted_files: Vec<String>,
}
-pub fn set_emit_result(s: &mut TSState, v: Value) -> Result<Value, ErrBox> {
+pub fn op_set_emit_result(s: &mut TSState, v: Value) -> Result<Value, ErrBox> {
let v: EmitResult = serde_json::from_value(v)?;
s.emit_result = Some(v);
Ok(json!(true))