@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
JavaScript
;
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