Current section
Files
Jump to
Current section
Files
src/gossamer/json.ffi.mjs
// src/gossamer/json.ffi.ts
import * as $json from "./json.mjs";
import * as $dict from "../../gleam_stdlib/gleam/dict.mjs";
// src/utils/dict.ts
import * as dict$ from "../../gleam_stdlib/gleam/dict.mjs";
function toObjectWithMap(dict, map) {
const acc = {};
dict$.each(dict, (key, value) => {
acc[key] = map(value);
});
return acc;
}
// src/utils/list.ts
import {
List$Empty,
List$isNonEmpty,
List$NonEmpty,
List$NonEmpty$first,
List$NonEmpty$rest
} from "../../prelude.mjs";
function fromArray(array) {
let list = List$Empty();
for (let i = array.length - 1; i >= 0; --i) {
list = List$NonEmpty(array[i], list);
}
return list;
}
function toArray(list) {
const array = [];
let current = list;
while (List$isNonEmpty(current)) {
array.push(List$NonEmpty$first(current));
current = List$NonEmpty$rest(current);
}
return array;
}
// src/utils/result.ts
import { Result$Error, Result$Ok } from "../../prelude.mjs";
function toResult(value) {
return value === null || value === void 0 ? Result$Error(void 0) : Result$Ok(value);
}
toResult.fromThrows = function(throws) {
try {
return Result$Ok(throws());
} catch (error) {
return Result$Error(
error instanceof Error ? error.message : String(error)
);
}
};
toResult.fromPromise = function(promise) {
return promise.then(
(value) => Result$Ok(value),
(error) => Result$Error(error instanceof Error ? error.message : String(error))
);
};
// src/gossamer/json.ffi.ts
function gleamJsonReviver(_key, value) {
if (value === null) {
return $json.Json$Null();
}
if (typeof value === "boolean") {
return $json.Json$Boolean(value);
}
if (typeof value === "number") {
return $json.Json$Number(value);
}
if (typeof value === "string") {
return $json.Json$String(value);
}
if (Array.isArray(value)) {
return $json.Json$Array(fromArray(value));
}
if (typeof value === "object") {
const entries = Object.entries(value);
return $json.Json$Object($dict.from_list(fromArray(entries)));
}
}
var parse = (text) => {
return toResult.fromThrows(() => JSON.parse(text, gleamJsonReviver));
};
function jsonToObject(json) {
if ($json.Json$isNull(json)) {
return null;
}
if ($json.Json$isBoolean(json)) {
return $json.Json$Boolean$0(json);
}
if ($json.Json$isNumber(json)) {
return $json.Json$Number$0(json);
}
if ($json.Json$isString(json)) {
return $json.Json$String$0(json);
}
if ($json.Json$isArray(json)) {
return toArray($json.Json$Array$0(json)).map(
(child) => jsonToObject(child)
);
}
if ($json.Json$isObject(json)) {
return toObjectWithMap($json.Json$Object$0(json), jsonToObject);
}
throw new Error("unknown Gleam Json instance");
}
var stringify = (json) => {
return JSON.stringify(jsonToObject(json));
};
export {
parse,
stringify
};