Skip to content

Commit 018a274

Browse files
authored
Generate TypeScript definition file for the ClpFfiJs module. (y-scope#4)
1 parent 2092c9f commit 018a274

File tree

4 files changed

+19
-8
lines changed

4 files changed

+19
-8
lines changed

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ FetchContent_MakeAvailable(Boost)
7171
message("Boost sources successfully fetched into ${boost_SOURCE_DIR}")
7272

7373
set(CLP_FFI_JS_BIN_NAME
74-
"ClpFfijs"
74+
"ClpFfiJs"
7575
CACHE STRING
7676
"Binary name for the generated .js and .wasm files."
7777
)
@@ -101,6 +101,7 @@ target_link_options(
101101
-sEXPORT_ES6
102102
-sMODULARIZE
103103
-sWASM_BIGINT
104+
--emit-tsd ${CLP_FFI_JS_BIN_NAME}.d.ts
104105
)
105106
target_link_libraries(${CLP_FFI_JS_BIN_NAME} PRIVATE embind)
106107

Taskfile.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ tasks:
4747
- "mkdir -p '{{.OUTPUT_DIR}}'"
4848
- |-
4949
cmake -S "{{.ROOT_DIR}}" -B "{{.OUTPUT_DIR}}" -G "Unix Makefiles"
50-
cmake --build "{{.OUTPUT_DIR}}" --parallel --target ClpFfijs
50+
cmake --build "{{.OUTPUT_DIR}}" --parallel --target ClpFfiJs
5151
# This command must be last
5252
- task: "utils:compute-checksum"
5353
vars:
@@ -73,6 +73,9 @@ tasks:
7373
cd "{{.G_EMSDK_DIR}}"
7474
./emsdk install latest
7575
./emsdk activate latest
76+
- |-
77+
cd "{{.G_EMSDK_DIR}}/upstream/emscripten"
78+
PATH=$(echo {{.G_EMSDK_DIR}}/node/*/bin):$PATH npm install
7679
# This command must be last
7780
- task: "utils:compute-checksum"
7881
vars:

src/clp_ffi_js/ir/StreamReader.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ using namespace std::literals::string_literals;
3232
using clp::ir::four_byte_encoded_variable_t;
3333

3434
namespace clp_ffi_js::ir {
35-
auto StreamReader::create(emscripten::val const& data_array) -> StreamReader {
35+
auto StreamReader::create(DataArrayTsType const& data_array) -> StreamReader {
3636
auto const length{data_array["length"].as<size_t>()};
3737
SPDLOG_INFO("StreamReader::create: got buffer of length={}", length);
3838

@@ -139,9 +139,9 @@ auto StreamReader::deserialize_range(size_t begin_idx, size_t end_idx) -> size_t
139139
return m_encoded_log_events.size();
140140
}
141141

142-
auto StreamReader::decode_range(size_t begin_idx, size_t end_idx) const -> emscripten::val {
142+
auto StreamReader::decode_range(size_t begin_idx, size_t end_idx) const -> DecodedResultsTsType {
143143
if (m_encoded_log_events.size() < end_idx || begin_idx >= end_idx) {
144-
return emscripten::val::null();
144+
return DecodedResultsTsType(emscripten::val::null());
145145
}
146146

147147
std::span const log_events_span{
@@ -192,7 +192,7 @@ auto StreamReader::decode_range(size_t begin_idx, size_t end_idx) const -> emscr
192192
++log_num;
193193
}
194194

195-
return results;
195+
return DecodedResultsTsType(results);
196196
}
197197

198198
StreamReader::StreamReader(
@@ -207,6 +207,10 @@ StreamReader::StreamReader(
207207

208208
namespace {
209209
EMSCRIPTEN_BINDINGS(ClpIrStreamReader) {
210+
emscripten::register_type<clp_ffi_js::ir::DataArrayTsType>("Uint8Array");
211+
emscripten::register_type<clp_ffi_js::ir::DecodedResultsTsType>(
212+
"Array<[string, number, number, number]>"
213+
);
210214
emscripten::class_<clp_ffi_js::ir::StreamReader>("ClpIrStreamReader")
211215
.constructor(
212216
&clp_ffi_js::ir::StreamReader::create,

src/clp_ffi_js/ir/StreamReader.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
#include <clp_ffi_js/ir/StreamReaderDataContext.hpp>
1515

1616
namespace clp_ffi_js::ir {
17+
EMSCRIPTEN_DECLARE_VAL_TYPE(DataArrayTsType);
18+
EMSCRIPTEN_DECLARE_VAL_TYPE(DecodedResultsTsType);
19+
1720
/**
1821
* Class to deserialize and decode Zstandard-compressed CLP IR streams as well as format decoded
1922
* log events.
@@ -27,7 +30,7 @@ class StreamReader {
2730
* @return The created instance.
2831
* @throw ClpFfiJsException if any error occurs.
2932
*/
30-
[[nodiscard]] static auto create(emscripten::val const& data_array) -> StreamReader;
33+
[[nodiscard]] static auto create(DataArrayTsType const& data_array) -> StreamReader;
3134

3235
// Destructor
3336
~StreamReader() = default;
@@ -72,7 +75,7 @@ class StreamReader {
7275
* @return null if any log event in the range doesn't exist (e.g., the range exceeds the number
7376
* of log events in the file).
7477
*/
75-
[[nodiscard]] auto decode_range(size_t begin_idx, size_t end_idx) const -> emscripten::val;
78+
[[nodiscard]] auto decode_range(size_t begin_idx, size_t end_idx) const -> DecodedResultsTsType;
7679

7780
private:
7881
// Constructor

0 commit comments

Comments
 (0)