Packages
oaspec
0.67.0
0.68.0
0.67.0
0.66.0
0.65.0
0.64.0
0.63.0
0.62.0
0.61.0
0.60.0
0.59.0
0.58.1
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.3
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.1.3
Generate Gleam code from OpenAPI 3.x specifications
Current section
Files
Jump to
Current section
Files
src/oaspec_ffi.mjs
// JavaScript-target counterparts for the helpers exposed in
// oaspec_ffi.erl. Only functions actually called from cross-target
// Gleam modules need a JS implementation; the BEAM-only CLI helpers
// (find_executable, run_executable, is_stdout_tty, no_color_set) are
// not declared with a JS @external and therefore do not need a JS
// version here.
export function monotonic_ms() {
// performance.now() is monotonic (unaffected by system clock changes)
// and available in modern Node (>= 16) and all browsers. Fall back to
// Date.now() if performance is somehow unavailable; the elapsed-time
// semantics tolerate the slight loss of monotonicity for the brief
// intervals oaspec actually measures.
const ms =
typeof performance !== "undefined" &&
typeof performance.now === "function"
? performance.now()
: Date.now();
return Math.trunc(ms);
}
// Format an integer as a decimal string. Mirrors `erlang:integer_to_binary/1`
// for cross-target use in places where `gleam/int.to_string` is not in
// scope (e.g. inside diagnostic constructors).
export function integer_to_string(n) {
return String(n);
}
// Run a thunk and report (panicked, message) to the caller. Mirrors
// the BEAM implementation in `oaspec_ffi.erl`. Used by tests that
// exercise functions which intentionally panic on invalid input.
export function capture_panic(thunk) {
try {
thunk();
return [false, ""];
} catch (error) {
let message;
if (error && typeof error === "object" && error.message) {
message = error.message;
} else {
message = String(error);
}
return [true, message];
}
}