UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

79 lines (78 loc) 2.67 kB
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 };