From e6c349af9f7260c2c4ec713bd231fe554240721e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 14 Aug 2019 17:03:02 +0200 Subject: split up ops.rs (#2753) Note cli/dispatch_minimal.rs ops are not yet included in cli/ops. This is part of work towards #2730 --- cli/ops/errors.rs | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 cli/ops/errors.rs (limited to 'cli/ops/errors.rs') diff --git a/cli/ops/errors.rs b/cli/ops/errors.rs new file mode 100644 index 000000000..16dfc34fd --- /dev/null +++ b/cli/ops/errors.rs @@ -0,0 +1,89 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +use crate::deno_error; +use crate::fmt_errors::JSError; +use crate::msg; +use crate::ops::ok_buf; +use crate::ops::serialize_response; +use crate::ops::CliOpResult; +use crate::source_maps::get_orig_position; +use crate::source_maps::CachedMaps; +use crate::state::ThreadSafeState; +use deno::*; +use flatbuffers::FlatBufferBuilder; +use std::collections::HashMap; + +pub fn op_format_error( + state: &ThreadSafeState, + base: &msg::Base<'_>, + data: Option, +) -> CliOpResult { + assert!(data.is_none()); + let inner = base.inner_as_format_error().unwrap(); + let json_str = inner.error().unwrap(); + let error = JSError::from_json(json_str, &state.ts_compiler); + let error_string = error.to_string(); + + let mut builder = FlatBufferBuilder::new(); + let new_error = builder.create_string(&error_string); + + let inner = msg::FormatErrorRes::create( + &mut builder, + &msg::FormatErrorResArgs { + error: Some(new_error), + }, + ); + + let response_buf = serialize_response( + base.cmd_id(), + &mut builder, + msg::BaseArgs { + inner_type: msg::Any::FormatErrorRes, + inner: Some(inner.as_union_value()), + ..Default::default() + }, + ); + + ok_buf(response_buf) +} + +pub fn op_apply_source_map( + state: &ThreadSafeState, + base: &msg::Base<'_>, + data: Option, +) -> CliOpResult { + if !base.sync() { + return Err(deno_error::no_async_support()); + } + assert!(data.is_none()); + let inner = base.inner_as_apply_source_map().unwrap(); + let cmd_id = base.cmd_id(); + let filename = inner.filename().unwrap(); + let line = inner.line(); + let column = inner.column(); + + let mut mappings_map: CachedMaps = HashMap::new(); + let (orig_filename, orig_line, orig_column) = get_orig_position( + filename.to_owned(), + line.into(), + column.into(), + &mut mappings_map, + &state.ts_compiler, + ); + + let builder = &mut FlatBufferBuilder::new(); + let msg_args = msg::ApplySourceMapArgs { + filename: Some(builder.create_string(&orig_filename)), + line: orig_line as i32, + column: orig_column as i32, + }; + let res_inner = msg::ApplySourceMap::create(builder, &msg_args); + ok_buf(serialize_response( + cmd_id, + builder, + msg::BaseArgs { + inner: Some(res_inner.as_union_value()), + inner_type: msg::Any::ApplySourceMap, + ..Default::default() + }, + )) +} -- cgit v1.2.3