astro-ghostcms/.pnpm-store/v3/files/96/2f950dee509635fbb97bae950a5...

90 lines
2.5 KiB
Plaintext

import os from "node:os";
import path from "node:path";
import process from "node:process";
import { fileURLToPath } from "node:url";
import dget from "dlv";
import { DEFAULT_PREFERENCES } from "./defaults.js";
import { PreferenceStore } from "./store.js";
function isValidKey(key) {
return dget(DEFAULT_PREFERENCES, key) !== void 0;
}
function coerce(key, value) {
const type = typeof dget(DEFAULT_PREFERENCES, key);
switch (type) {
case "string":
return value;
case "number":
return Number(value);
case "boolean": {
if (value === "true" || value === 1)
return true;
if (value === "false" || value === 0)
return false;
}
}
return value;
}
function createPreferences(config) {
const global = new PreferenceStore(getGlobalPreferenceDir());
const project = new PreferenceStore(fileURLToPath(new URL("./.astro/", config.root)));
const stores = { global, project };
return {
async get(key, { location } = {}) {
if (!location)
return project.get(key) ?? global.get(key) ?? dget(DEFAULT_PREFERENCES, key);
return stores[location].get(key);
},
async set(key, value, { location = "project" } = {}) {
stores[location].set(key, value);
},
async getAll() {
return Object.assign(
{},
DEFAULT_PREFERENCES,
stores["global"].getAll(),
stores["project"].getAll()
);
},
async list() {
return {
global: stores["global"].getAll(),
project: stores["project"].getAll(),
fromAstroConfig: mapFrom(DEFAULT_PREFERENCES, config),
defaults: DEFAULT_PREFERENCES
};
function mapFrom(defaults, astroConfig) {
return Object.fromEntries(
Object.entries(defaults).map(([key, _]) => [key, astroConfig[key]])
);
}
}
};
}
function getGlobalPreferenceDir() {
const name = "astro";
const homedir = os.homedir();
const macos = () => path.join(homedir, "Library", "Preferences", name);
const win = () => {
const { APPDATA = path.join(homedir, "AppData", "Roaming") } = process.env;
return path.join(APPDATA, name, "Config");
};
const linux = () => {
const { XDG_CONFIG_HOME = path.join(homedir, ".config") } = process.env;
return path.join(XDG_CONFIG_HOME, name);
};
switch (process.platform) {
case "darwin":
return macos();
case "win32":
return win();
default:
return linux();
}
}
export {
coerce,
createPreferences as default,
getGlobalPreferenceDir,
isValidKey
};