UNPKG

@future-widget-lab/ui-keys

Version:

A helper for creating render-friendly keys, useful for uniquely identifying resources, caching, testing, and rendering.

64 lines (60 loc) 1.56 kB
import { stringify, parse } from 'flatted'; /** * @description * Use this helper to generate a structured key from the provided arguments. */ var createUiKey = function createUiKey() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var key = args.flatMap(function (arg) { return arg; }).map(function (arg) { switch (true) { case typeof arg === 'string': { return arg; } case typeof arg === 'number' && !Number.isNaN(arg) || typeof arg === 'boolean': { return arg.toString(); } case Array.isArray(arg) || typeof arg === 'object' && arg !== null: { return "@" + stringify(arg); } default: { return 'unknown'; } } }).join('::'); return key; }; /** * @description * Use this helper to parse the generated UI key back into its original components. */ var parseUiKey = function parseUiKey(key) { return key.split('::').map(function (segment) { if (segment === 'unknown') { return null; } if (!isNaN(Number(segment))) { return Number(segment); } if (segment === 'true' || segment === 'false') { return segment === 'true'; } if (segment.startsWith('@')) { try { return parse(segment.slice(1)); } catch (_unused) { return segment; } } return segment; }); }; export { createUiKey, parseUiKey }; //# sourceMappingURL=ui-keys.esm.js.map