cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
79 lines (78 loc) • 2.67 kB
JavaScript
import { camelToSnake, isTrue } from "./primitives.mjs";
/*
* vuensee
* @author Anders Evenrud <andersevenrud@gmail.com>
* @link https://github.com/andersevenrud/vuensee
* @license MIT
*/
const env = { ...{ "BASE_URL": "./", "MODE": "production", "DEV": false, "PROD": true } };
const params = Object.fromEntries(new URLSearchParams(
window.location.search.substring(1)
));
const fromEnv = (k) => env[`VITE_${camelToSnake(k)}`];
const fromFeatureEnv = (k) => env[`VITE_ENABLE_${camelToSnake(k)}`];
const fromSettingsEnv = (k) => env[`VITE_SETTINGS_${camelToSnake(k)}`];
const hasUrlParameter = (k) => params[k] !== void 0;
const parseOrDefault = (fn, defaultV = void 0) => (v) => typeof v === "string" ? fn(v) : defaultV;
const featureCheck = parseOrDefault(isTrue, true);
const parseBoolean = parseOrDefault(isTrue);
const parseNumber = parseOrDefault((v) => parseInt(v, 10));
const parseString = parseOrDefault((v) => v.trim());
const readWrapper = (cb) => (dict) => Object.fromEntries(
dict.map(cb).filter(([, v]) => v !== void 0)
);
const readSettings = readWrapper(
([k, fn]) => [k, fn(fromSettingsEnv(k))]
);
const readUrlSettings = readWrapper(
([k, fn]) => [k, fn(params[k])]
);
const readFeatures = readWrapper(
(k) => [k, featureCheck(fromFeatureEnv(k))]
);
const readNavigatorLanguages = (languageMap) => (navigator.languages || []).map((name) => name.split(/-|_/)[0]).map((name) => languageMap[name] || name);
const localStorageSettings = (() => {
const context = "vuensee-settings";
const enabled = window.localStorage !== void 0 && featureCheck(fromFeatureEnv("urlSettings"));
let debouncer;
let current = {};
const load = () => {
const contents = enabled ? localStorage.getItem(context) : void 0;
if (contents) {
try {
current = JSON.parse(contents);
} catch (e) {
console.warn("Failed to load localStorage contents", e);
}
}
return current;
};
const clear = () => {
if (enabled) {
localStorage.removeItem(context);
current = {};
}
return current;
};
const save = () => {
if (enabled) {
clearTimeout(debouncer);
debouncer = setTimeout(() => {
localStorage.setItem(context, JSON.stringify(current));
}, 250);
}
};
const assign = (o, s = true) => {
Object.assign(current, o);
if (s) {
save();
}
};
return {
assign,
save,
load,
clear
};
})();
export { featureCheck, fromEnv, fromFeatureEnv, fromSettingsEnv, hasUrlParameter, localStorageSettings, parseBoolean, parseNumber, parseOrDefault, parseString, readFeatures, readNavigatorLanguages, readSettings, readUrlSettings };