UNPKG

@future-widget-lab/ui-keys

Version:

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

67 lines (62 loc) 1.62 kB
'use strict'; var flatted = require('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 "@" + flatted.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 flatted.parse(segment.slice(1)); } catch (_unused) { return segment; } } return segment; }); }; exports.createUiKey = createUiKey; exports.parseUiKey = parseUiKey; //# sourceMappingURL=ui-keys.cjs.development.js.map