nuxt-surrealdb
Version:
A Nuxt module aimed to simplify the use of SurrealDB
160 lines (159 loc) • 4.05 kB
JavaScript
import { toRef, toValue, useAsyncData, useSurreal } from "#imports";
export async function useSurrealAsyncData(cb, asyncDataOptions, _key) {
if (typeof asyncDataOptions === "string") {
_key = asyncDataOptions;
asyncDataOptions = void 0;
}
const {
data,
error,
pending,
status,
execute,
refresh,
clear
} = await useAsyncData(
_key,
async () => {
const client = await useSurreal();
return cb(client);
},
asyncDataOptions
);
return {
data,
error,
pending,
status,
execute,
refresh,
clear
};
}
export async function useSurrealAuth(asyncDataOptions, _key) {
if (typeof asyncDataOptions === "string") {
_key = asyncDataOptions;
asyncDataOptions = void 0;
}
return useSurrealAsyncData(
async (client) => {
return await client.auth().json();
},
asyncDataOptions,
_key
);
}
export async function useSurrealExport(expOptions, asyncDataOptions, _key) {
if (typeof expOptions === "string") {
_key = expOptions;
expOptions = void 0;
} else if (typeof asyncDataOptions === "string") {
_key = asyncDataOptions;
asyncDataOptions = void 0;
}
const expOptionsRef = toRef(expOptions);
return useSurrealAsyncData(
async (client) => {
return await client.export(expOptionsRef.value);
},
{
...asyncDataOptions,
watch: [...asyncDataOptions?.watch || [], expOptionsRef]
},
_key
);
}
export async function useSurrealImport(input, asyncDataOptions, _key) {
if (typeof asyncDataOptions === "string") {
_key = asyncDataOptions;
asyncDataOptions = void 0;
}
const inputRef = toRef(input);
return useSurrealAsyncData(
async (client) => {
await client.import(inputRef.value);
return true;
},
{
...asyncDataOptions,
watch: [...asyncDataOptions?.watch || [], inputRef]
},
_key
);
}
export async function useSurrealQuery(query, bindings, asyncDataOptions, _key) {
if (typeof asyncDataOptions === "string") {
_key = asyncDataOptions;
asyncDataOptions = void 0;
} else if (typeof bindings === "string") {
_key = bindings;
bindings = void 0;
}
const queryRef = toRef(query);
const bindingsRef = toRef(bindings);
return useSurrealAsyncData(
async (client) => {
return await client.query(queryRef.value, bindingsRef.value).json().collect();
},
{
...asyncDataOptions,
watch: [...asyncDataOptions?.watch || [], queryRef]
},
_key
);
}
export async function useSurrealRun(name, args, asyncDataOptions, _key) {
if (typeof asyncDataOptions === "string") {
_key = asyncDataOptions;
asyncDataOptions = void 0;
} else if (typeof args === "string") {
_key = args;
args = void 0;
}
const nameRef = toRef(name);
const argsRef = toRef(args);
return useSurrealAsyncData(
async (client) => {
return await client.run(nameRef.value, argsRef.value).json();
},
{
...asyncDataOptions,
watch: [...asyncDataOptions?.watch || [], nameRef, argsRef]
},
_key
);
}
export async function useSurrealSelect(tableOrRecord, select, asyncDataOptions, _key) {
if (typeof asyncDataOptions === "string") {
_key = asyncDataOptions;
asyncDataOptions = void 0;
} else if (typeof select === "string") {
_key = select;
select = void 0;
}
return useSurrealAsyncData(
async (client) => {
const builder = client.select(toValue(tableOrRecord));
const configured = select ? select(builder) : builder;
return await configured.json();
},
{
...asyncDataOptions,
watch: [...asyncDataOptions?.watch || [], toRef(tableOrRecord)]
},
_key
);
}
export async function useSurrealVersion(asyncDataOptions, _key) {
if (typeof asyncDataOptions === "string") {
_key = asyncDataOptions;
asyncDataOptions = void 0;
}
return useSurrealAsyncData(
async (client) => {
return await client.version();
},
asyncDataOptions,
_key
);
}