svelte-settings
Version:
> [!WARNING] > This project is a work in progress. Do not use it in any of your projects yet.
49 lines (48 loc) • 1.4 kB
JavaScript
import { setDeep } from '../deep.js';
export function get(settings, path) {
let part = settings;
for (const key of path) {
if (typeof part !== 'object' || part === null || !(key in part)) {
return undefined;
}
part = part[key];
}
return part;
}
export function write(settings, path, value) {
setDeep(settings, path, value);
return settings;
}
export function writeNew(settings, path, value) {
const currentValue = get(settings, path);
if (currentValue !== undefined) {
console.debug(`Path ${path} already has a defined value, skipping write!`);
return;
}
setDeep(settings, path, value);
return settings;
}
export function copy(settings, fromPath, toPath) {
const valueFrom = asArray(get(settings, fromPath));
writeNew(settings, toPath, valueFrom);
return settings;
}
export function asBoolean(v) {
if (typeof v === 'boolean')
return v;
return undefined;
}
export function asArray(v) {
return Array.isArray(v) ? v : [];
}
export function asObject(v) {
return typeof v === 'object' && v !== null ? v : {};
}
export function renameArrayEntry(settings, path, oldEntry, newEntry) {
const setting = asArray(get(settings, path));
if (setting.includes(oldEntry)) {
const i = setting.indexOf(oldEntry);
setting[i] = newEntry;
}
return settings;
}