nuxt-surrealdb
Version:
A Nuxt module aimed to simplify the use of SurrealDB
67 lines (66 loc) • 2.1 kB
JavaScript
import { textToBase64 } from "undio";
import { createDefu, defu } from "defu";
export function authTokenFn(authToken) {
if (!authToken) return void 0;
if (typeof authToken === "string") {
return `Bearer ${authToken}`;
} else {
return `Basic ${textToBase64(`${authToken.user}:${authToken.pass}`, { dataURL: false })}`;
}
}
export function getDatabasePreset(options) {
const {
authDatabase,
databases,
overrides,
userToken
} = options;
const getAuthToken = (basePreset2, overrideToken) => {
if (typeof overrideToken === "boolean") {
return overrideToken ? basePreset2.auth : void 0;
}
return overrideToken || basePreset2.auth;
};
const getPresetWithAuth = (preset, token2) => ({
...preset,
auth: getAuthToken(preset, token2)
});
if (!overrides) {
return authDatabase === "default" ? getPresetWithAuth(databases["default"], userToken) : databases["default"];
}
const { database, token } = overrides;
if (typeof database === "string" || typeof database === "number" || typeof database === "symbol") {
const preset = databases[database];
const authToken = authDatabase === database ? token ?? userToken : token;
return getPresetWithAuth(preset, authToken);
}
const basePreset = defu(database, databases["default"]);
return getPresetWithAuth(basePreset, token);
}
export function surrealFetchOptionsOverride(databasePreset) {
const authorization = authTokenFn(databasePreset.auth);
return {
baseURL: databasePreset.host,
headers: {
...authorization ? { Authorization: authorization } : {},
"surreal-NS": databasePreset.NS,
"surreal-DB": databasePreset.DB,
"Content-Type": "application/json",
"Accept": "application/json"
}
};
}
export const defuDbs = createDefu((obj, key, value) => {
if (value) {
obj[key] = value;
return true;
}
return true;
});
export function setRequestHeaders(headers, append) {
if (!append) return headers;
for (const [key, value] of Object.entries(append)) {
headers.set(key, value);
}
return headers;
}