UNPKG

@ztl-uwu/nuxt-content

Version:

Write your content inside your Nuxt app

66 lines (65 loc) 2.35 kB
export const get = (obj, path) => path.split(".").reduce((acc, part) => acc && acc[part], obj); const _pick = (obj, condition) => Object.keys(obj).filter(condition).reduce((newObj, key) => Object.assign(newObj, { [key]: obj[key] }), {}); export const pick = (keys) => (obj) => keys && keys.length ? _pick(obj, (key) => keys.includes(key)) : obj; export const omit = (keys) => (obj) => keys && keys.length ? _pick(obj, (key) => !keys.includes(key)) : obj; export const apply = (fn) => (data) => Array.isArray(data) ? data.map((item) => fn(item)) : fn(data); export const detectProperties = (keys) => { const prefixes = []; const properties = []; for (const key of keys) { if (["$", "_"].includes(key)) { prefixes.push(key); } else { properties.push(key); } } return { prefixes, properties }; }; export const withoutKeys = (keys = []) => (obj) => { if (keys.length === 0 || !obj) { return obj; } const { prefixes, properties } = detectProperties(keys); return _pick(obj, (key) => !properties.includes(key) && !prefixes.includes(key[0])); }; export const withKeys = (keys = []) => (obj) => { if (keys.length === 0 || !obj) { return obj; } const { prefixes, properties } = detectProperties(keys); return _pick(obj, (key) => properties.includes(key) || prefixes.includes(key[0])); }; export const sortList = (data, params) => { const comperable = new Intl.Collator(params.$locale, { numeric: params.$numeric, caseFirst: params.$caseFirst, sensitivity: params.$sensitivity }); const keys = Object.keys(params).filter((key) => !key.startsWith("$")); for (const key of keys) { data = data.sort((a, b) => { const values = [get(a, key), get(b, key)].map((value) => { if (value === null) { return void 0; } if (value instanceof Date) { return value.toISOString(); } return value; }); if (params[key] === -1) { values.reverse(); } return comperable.compare(values[0], values[1]); }); } return data; }; export const assertArray = (value, message = "Expected an array") => { if (!Array.isArray(value)) { throw new TypeError(message); } }; export const ensureArray = (value) => { return Array.isArray(value) ? value : [void 0, null].includes(value) ? [] : [value]; };