nuxt-surrealdb
Version:
A Nuxt module aimed to simplify the use of SurrealDB
64 lines (63 loc) • 1.7 kB
JavaScript
import { ofetch } from "ofetch";
import {
setRequestHeaders,
surrealFetchOptionsOverride
} from "#surrealdb/utils/overrides";
import {
createError,
useSurrealPreset
} from "#imports";
export function useSurrealFetch(...args) {
if (typeof args[0] === "string") {
args.unshift(void 0);
}
let [event, req, options] = args;
const { database, token, ...opts } = options;
const _database = useSurrealPreset(event, { database, token });
const { baseURL, headers } = surrealFetchOptionsOverride(_database);
if (!baseURL) {
createError({
statusCode: 500,
message: "Missing SurrealDB URL"
});
}
const surrealFetch = ofetch.create({
baseURL,
onRequest(ctx) {
ctx.options.baseURL ||= baseURL;
ctx.options.headers ||= setRequestHeaders(ctx.options.headers, headers);
}
});
return surrealFetch(req, {
...opts
});
}
export function useSurrealRPC(...args) {
if (!("node" in args[0]) && !("method" in args[1])) {
args.unshift(void 0);
}
let [event, req, overrides] = args;
let id = 0;
let _args = [event, "rpc"];
if (typeof _args[0] === "undefined") {
_args.shift();
}
return useSurrealFetch(..._args, {
...surrealFetchOptionsOverride(useSurrealPreset(event, overrides)),
onResponse({ response }) {
if (response.status === 200 && response._data.error) {
throw createError({
statusCode: response._data.error.code,
message: response._data.error.message
});
} else if (response.status === 200 && response._data.result) {
response._data = response._data.result;
}
},
method: "POST",
body: {
id: id++,
...req
}
});
}