UNPKG

957 BJavaScriptView Raw
1/**
2 * generates a UID factory
3 * @internal
4 * @example
5 * const uid = generateUID();
6 * uid(object) = 1;
7 * uid(object) = 1;
8 * uid(anotherObject) = 2;
9 */
10export const generateUID = () => {
11 let counter = 1;
12 const map = new WeakMap();
13 /**
14 * @borrows {uid}
15 */
16 const uid = (item, index) => {
17 if (typeof item === 'number' || typeof item === 'string') {
18 return index ? `idx-${index}` : `val-${item}`;
19 }
20 if (!map.has(item)) {
21 map.set(item, counter++);
22 return uid(item);
23 }
24 return 'uid' + map.get(item);
25 };
26 return uid;
27};
28/**
29 * @name uid
30 * returns an UID associated with {item}
31 * @param {Object} item - object to generate UID for
32 * @param {Number} index, a fallback index
33 * @example
34 * uid(object) == 1;
35 * uid(object) == 1;
36 * uid(anotherObject) == 2;
37 * uid("not object", 42) == 42
38 *
39 * @see {@link useUID}
40 */
41export const uid = generateUID();