@hyperfrontend/list-utils 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,211 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.HyperfrontendListUtils = {}));
5
+ })(this, (function (exports) { 'use strict';
6
+
7
+ const registeredClasses = [];
8
+
9
+ /**
10
+ * Returns the data type of the target.
11
+ * Uses native `typeof` operator, however, makes distinction between `null`, `array`, and `object`.
12
+ * Also, when classes are registered via `registerClass`, it checks if objects are instance of any known registered class.
13
+ *
14
+ * @param target - The target to get the data type of.
15
+ * @returns The data type of the target.
16
+ */
17
+ const getType = (target) => {
18
+ if (target === null)
19
+ return 'null';
20
+ const nativeDataType = typeof target;
21
+ if (nativeDataType === 'object') {
22
+ if (Array.isArray(target))
23
+ return 'array';
24
+ for (const registeredClass of registeredClasses) {
25
+ if (target instanceof registeredClass)
26
+ return registeredClass.name;
27
+ }
28
+ }
29
+ return nativeDataType;
30
+ };
31
+
32
+ /**
33
+ * Creates a FIFO (First-In-First-Out) list.
34
+ *
35
+ * @template T The type of elements in the list, must be an object.
36
+ * @returns {FifoList<T>} A FIFO list with methods to manipulate and query the list.
37
+ */
38
+ function createFifoList() {
39
+ const list = new Set();
40
+ const push = (item) => {
41
+ if (getType(item) !== 'object') {
42
+ throw new Error('A fifo list only non-primitive values');
43
+ }
44
+ if (list.has(item)) {
45
+ throw new Error('Cannot a item that already exists');
46
+ }
47
+ list.add(item);
48
+ };
49
+ const pull = () => {
50
+ const value = list.values().next().value;
51
+ list.delete(value);
52
+ return value;
53
+ };
54
+ const map = (callback) => {
55
+ return Array.from(list.values()).map(callback);
56
+ };
57
+ const forEach = (callback) => {
58
+ list.forEach(callback);
59
+ };
60
+ const remove = (item) => list.delete(item);
61
+ const has = (item) => list.has(item);
62
+ const size = () => list.size;
63
+ const clear = () => list.clear();
64
+ const result = {
65
+ push,
66
+ pull,
67
+ map,
68
+ forEach,
69
+ remove,
70
+ has,
71
+ size,
72
+ clear,
73
+ };
74
+ return Object.freeze(result);
75
+ }
76
+
77
+ /**
78
+ * Creates a LIFO (Last-In-First-Out) list.
79
+ *
80
+ * @template T The type of elements in the list, must be an object.
81
+ * @returns {LifoList<T>} A LIFO list with methods to manipulate and query the list.
82
+ */
83
+ function createLifoList() {
84
+ const list = new Set();
85
+ const push = (item) => {
86
+ if (getType(item) !== 'object') {
87
+ throw new Error('A lifo list only supports non-primitive values');
88
+ }
89
+ list.add(item);
90
+ };
91
+ const pull = () => {
92
+ const lastItem = Array.from(list).pop();
93
+ if (lastItem) {
94
+ list.delete(lastItem);
95
+ }
96
+ return lastItem;
97
+ };
98
+ const map = (callback) => {
99
+ return Array.from(list).map(callback);
100
+ };
101
+ const forEach = (callback) => {
102
+ list.forEach(callback);
103
+ };
104
+ const remove = (item) => list.delete(item);
105
+ const has = (item) => list.has(item);
106
+ const size = () => list.size;
107
+ const clear = () => {
108
+ list.clear();
109
+ };
110
+ const result = {
111
+ push,
112
+ pull,
113
+ map,
114
+ forEach,
115
+ remove,
116
+ has,
117
+ size,
118
+ clear,
119
+ };
120
+ return Object.freeze(result);
121
+ }
122
+
123
+ /**
124
+ * Creates an array of numbers within a specified range (inclusive).
125
+ *
126
+ * @param start - The starting number of the range
127
+ * @param end - The ending number of the range (inclusive)
128
+ * @returns An array containing all numbers from start to end
129
+ */
130
+ function createRange(start, end) {
131
+ const range = [];
132
+ for (let i = start; i <= end; i += 1) {
133
+ range.push(i);
134
+ }
135
+ return range;
136
+ }
137
+
138
+ /**
139
+ * Creates a value picker that cycles through a list of string values.
140
+ *
141
+ * @param values - The array of string values to cycle through
142
+ * @returns A ValuePicker instance with current and next methods
143
+ */
144
+ function createValuePicker(values) {
145
+ if (!values || !values.length) {
146
+ throw new Error('Expected values not to be an empty list.');
147
+ }
148
+ let index = -1;
149
+ /**
150
+ * Returns the current value without advancing the picker.
151
+ *
152
+ * @returns The current value in the list
153
+ */
154
+ function current() {
155
+ if (index < 0)
156
+ index = 0;
157
+ return values[index];
158
+ }
159
+ /**
160
+ * Advances to and returns the next value, cycling back to the start when reaching the end.
161
+ *
162
+ * @returns The next value in the list
163
+ */
164
+ function next() {
165
+ if (index < 0)
166
+ return current();
167
+ index = ++index < values.length ? index : 0;
168
+ return values[index];
169
+ }
170
+ return {
171
+ current: current,
172
+ next: next,
173
+ };
174
+ }
175
+
176
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
177
+ const getLastKeyInMap = (map) => {
178
+ const items = [...map.keys()];
179
+ return items[items.length - 1];
180
+ };
181
+
182
+ /**
183
+ * Filters out empty, null, undefined, and whitespace-only strings from an array.
184
+ *
185
+ * @param values - The array of strings to filter
186
+ * @returns A new array containing only non-empty strings with content
187
+ */
188
+ function nonEmptyStrings(values) {
189
+ return values.filter((value) => ![undefined, null, ''].includes(value) && value.trim() !== '');
190
+ }
191
+
192
+ /**
193
+ * Removes duplicate strings from an array, preserving insertion order.
194
+ *
195
+ * @param values - The array of strings to deduplicate
196
+ * @returns A new array containing only unique strings
197
+ */
198
+ function uniqueStrings(values) {
199
+ return Array.from(new Set(values));
200
+ }
201
+
202
+ exports.createFifoList = createFifoList;
203
+ exports.createLifoList = createLifoList;
204
+ exports.createRange = createRange;
205
+ exports.createValuePicker = createValuePicker;
206
+ exports.getLastKeyInMap = getLastKeyInMap;
207
+ exports.nonEmptyStrings = nonEmptyStrings;
208
+ exports.uniqueStrings = uniqueStrings;
209
+
210
+ }));
211
+ //# sourceMappingURL=index.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../../../../../../../../../../libs/utils/data/src/shared/consts.ts","../../../../../../../../../../libs/utils/data/src/get-type.ts","../../../../../../../../../../libs/utils/list/src/create-fifo-list.ts","../../../../../../../../../../libs/utils/list/src/create-lifo-list.ts","../../../../../../../../../../libs/utils/list/src/create-range.ts","../../../../../../../../../../libs/utils/list/src/create-value-picker.ts","../../../../../../../../../../libs/utils/list/src/get-last-key-in-map.ts","../../../../../../../../../../libs/utils/list/src/non-empty-strings.ts","../../../../../../../../../../libs/utils/list/src/unique-strings.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).HyperfrontendListUtils={})}(this,function(e){"use strict";const t=[],r=e=>{if(null===e)return"null";const r=typeof e;if("object"===r){if(Array.isArray(e))return"array";for(const r of t)if(e instanceof r)return r.name}return r};e.createFifoList=function(){const e=new Set,t={push:t=>{if("object"!==r(t))throw new Error("A fifo list only non-primitive values");if(e.has(t))throw new Error("Cannot a item that already exists");e.add(t)},pull:()=>{const t=e.values().next().value;return e.delete(t),t},map:t=>Array.from(e.values()).map(t),forEach:t=>{e.forEach(t)},remove:t=>e.delete(t),has:t=>e.has(t),size:()=>e.size,clear:()=>e.clear()};return Object.freeze(t)},e.createLifoList=function(){const e=new Set,t={push:t=>{if("object"!==r(t))throw new Error("A lifo list only supports non-primitive values");e.add(t)},pull:()=>{const t=Array.from(e).pop();return t&&e.delete(t),t},map:t=>Array.from(e).map(t),forEach:t=>{e.forEach(t)},remove:t=>e.delete(t),has:t=>e.has(t),size:()=>e.size,clear:()=>{e.clear()}};return Object.freeze(t)},e.createRange=function(e,t){const r=[];for(let n=e;n<=t;n+=1)r.push(n);return r},e.createValuePicker=function(e){if(!e||!e.length)throw new Error("Expected values not to be an empty list.");let t=-1;function r(){return t<0&&(t=0),e[t]}return{current:r,next:function(){return t<0?r():(t=++t<e.length?t:0,e[t])}}},e.getLastKeyInMap=e=>{const t=[...e.keys()];return t[t.length-1]},e.nonEmptyStrings=function(e){return e.filter(e=>![void 0,null,""].includes(e)&&""!==e.trim())},e.uniqueStrings=function(e){return Array.from(new Set(e))}});
2
+ //# sourceMappingURL=index.umd.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.min.js","sources":["../../../../../../../../../../libs/utils/data/src/shared/consts.ts","../../../../../../../../../../libs/utils/data/src/get-type.ts","../../../../../../../../../../libs/utils/list/src/create-fifo-list.ts","../../../../../../../../../../libs/utils/list/src/create-lifo-list.ts","../../../../../../../../../../libs/utils/list/src/create-range.ts","../../../../../../../../../../libs/utils/list/src/create-value-picker.ts","../../../../../../../../../../libs/utils/list/src/get-last-key-in-map.ts","../../../../../../../../../../libs/utils/list/src/non-empty-strings.ts","../../../../../../../../../../libs/utils/list/src/unique-strings.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["registeredClasses","getType","target","nativeDataType","Array","isArray","registeredClass","name","list","Set","result","push","item","Error","has","add","pull","value","values","next","delete","map","callback","from","forEach","remove","size","clear","Object","freeze","lastItem","pop","start","end","range","i","length","index","current","items","keys","filter","undefined","includes","trim"],"mappings":"6PAGO,MAAMA,EAAoC,GCQpCC,EAAwCC,IACnD,GAAe,OAAXA,EAAiB,MAAU,OAC/B,MAAMC,SAAwBD,EAC9B,GAAuB,WAAnBC,EAA6B,CAC/B,GAAIC,MAAMC,QAAQH,GAAS,MAAU,QACrC,IAAK,MAAMI,KAAmBN,EAC5B,GAAIE,aAAkBI,EAAiB,OAAUA,EAAgBC,IAErE,CACA,OAAUJ,+BCAV,MAAMK,EAAe,IAAIC,IAkCnBC,EAAsB,CAC1BC,KAjCYC,IACZ,GAAsB,WAAlBX,EAAQW,GACV,MAAM,IAAIC,MAAM,yCAElB,GAAIL,EAAKM,IAAIF,GACX,MAAM,IAAIC,MAAM,qCAElBL,EAAKO,IAAIH,IA2BTI,KAxBW,KACX,MAAMC,EAAQT,EAAKU,SAASC,OAAOF,MAEnC,OADAT,EAAKY,OAAUH,GACLA,GAsBVI,IAnBcC,GACPlB,MAAMmB,KAAKf,EAAKU,UAAUG,IAAIC,GAmBrCE,QAhBeF,IACfd,EAAKgB,QAAQF,IAgBbG,OAbcb,GAAqBJ,EAAKY,OAAOR,GAc/CE,IAZWF,GAAqBJ,EAAKM,IAAIF,GAazCc,KAXW,IAAMlB,EAAKkB,KAYtBC,MAVY,IAAMnB,EAAKmB,SAazB,OAAOC,OAAOC,OAAOnB,EACvB,8BC9CE,MAAMF,EAAe,IAAIC,IAmCnBC,EAAsB,CAC1BC,KAlCYC,IACZ,GAAsB,WAAlBX,EAAQW,GACV,MAAM,IAAIC,MAAM,kDAElBL,EAAKO,IAAIH,IA+BTI,KA5BW,KACX,MAAMc,EAAW1B,MAAMmB,KAAKf,GAAMuB,MAIlC,OAHID,GACFtB,EAAKY,OAAOU,GAEPA,GAwBPT,IArBcC,GACPlB,MAAMmB,KAAKf,GAAMa,IAAIC,GAqB5BE,QAlBeF,IACfd,EAAKgB,QAAQF,IAkBbG,OAfcb,GAAqBJ,EAAKY,OAAOR,GAgB/CE,IAdWF,GAAqBJ,EAAKM,IAAIF,GAezCc,KAbW,IAAclB,EAAKkB,KAc9BC,MAZY,KACZnB,EAAKmB,UAcP,OAAOC,OAAOC,OAAOnB,EACvB,gBC5DM,SAAsBsB,EAAeC,GACzC,MAAMC,EAAkB,GACxB,IAAK,IAAIC,EAAIH,EAAOG,GAAKF,EAAKE,GAAK,EACjCD,EAAMvB,KAAKwB,GAEb,OAAOD,CACT,sBCFM,SAA4BhB,GAChC,IAAKA,IAAWA,EAAOkB,OACrB,MAAM,IAAIvB,MAAM,4CAElB,IAAIwB,GAAQ,EAMZ,SAASC,IAEP,OADID,EAAQ,IAAGA,EAAQ,GAChBnB,EAAOmB,EAChB,CAWA,MAAO,CACLC,QAASA,EACTnB,KAPF,WACE,OAAIkB,EAAQ,EAAUC,KACtBD,IAAUA,EAAQnB,EAAOkB,OAASC,EAAQ,EACnCnB,EAAOmB,GAChB,EAKF,oBCtCyChB,IACvC,MAAMkB,EAAQ,IAAIlB,EAAImB,QACtB,OAAOD,EAAMA,EAAMH,OAAS,sBCGxB,SAA0BlB,GAC9B,OAAOA,EAAOuB,OAAQxB,IAAW,MAACyB,EAAW,KAAM,IAAIC,SAAS1B,IAA2B,KAAjBA,EAAM2B,OAClF,kBCFM,SAAwB1B,GAC5B,OAAOd,MAAMmB,KAAK,IAAId,IAAIS,GAC5B"}
@@ -0,0 +1,18 @@
1
+ export interface FifoList<T extends object> {
2
+ push(item: T): void;
3
+ pull(): T;
4
+ map<U>(callback: (item: T) => U): U[];
5
+ forEach(callback: (item: T) => void): void;
6
+ remove(item: T): boolean;
7
+ has(item: T): boolean;
8
+ size(): number;
9
+ clear(): void;
10
+ }
11
+ /**
12
+ * Creates a FIFO (First-In-First-Out) list.
13
+ *
14
+ * @template T The type of elements in the list, must be an object.
15
+ * @returns {FifoList<T>} A FIFO list with methods to manipulate and query the list.
16
+ */
17
+ export declare function createFifoList<T extends object>(): FifoList<T>;
18
+ //# sourceMappingURL=create-fifo-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-fifo-list.d.ts","sourceRoot":"","sources":["../../../../libs/utils/list/src/create-fifo-list.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACnB,IAAI,IAAI,CAAC,CAAA;IACT,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;IACrC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;IAC1C,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAA;IACxB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAA;IACrB,IAAI,IAAI,MAAM,CAAA;IACd,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CA+C9D"}
@@ -0,0 +1,18 @@
1
+ export interface LifoList<T extends object> {
2
+ push(item: T): void;
3
+ pull(): T | undefined;
4
+ map<U>(callback: (item: T) => U): U[];
5
+ forEach(callback: (item: T) => void): void;
6
+ remove(item: T): boolean;
7
+ has(item: T): boolean;
8
+ size(): number;
9
+ clear(): void;
10
+ }
11
+ /**
12
+ * Creates a LIFO (Last-In-First-Out) list.
13
+ *
14
+ * @template T The type of elements in the list, must be an object.
15
+ * @returns {LifoList<T>} A LIFO list with methods to manipulate and query the list.
16
+ */
17
+ export declare function createLifoList<T extends object>(): LifoList<T>;
18
+ //# sourceMappingURL=create-lifo-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-lifo-list.d.ts","sourceRoot":"","sources":["../../../../libs/utils/list/src/create-lifo-list.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACnB,IAAI,IAAI,CAAC,GAAG,SAAS,CAAA;IACrB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;IACrC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;IAC1C,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAA;IACxB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAA;IACrB,IAAI,IAAI,MAAM,CAAA;IACd,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAgD9D"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Creates an array of numbers within a specified range (inclusive).
3
+ *
4
+ * @param start - The starting number of the range
5
+ * @param end - The ending number of the range (inclusive)
6
+ * @returns An array containing all numbers from start to end
7
+ */
8
+ export declare function createRange(start: number, end: number): number[];
9
+ //# sourceMappingURL=create-range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-range.d.ts","sourceRoot":"","sources":["../../../../libs/utils/list/src/create-range.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAMhE"}
@@ -0,0 +1,12 @@
1
+ export interface ValuePicker {
2
+ current: () => string;
3
+ next: () => string;
4
+ }
5
+ /**
6
+ * Creates a value picker that cycles through a list of string values.
7
+ *
8
+ * @param values - The array of string values to cycle through
9
+ * @returns A ValuePicker instance with current and next methods
10
+ */
11
+ export declare function createValuePicker(values: string[]): ValuePicker;
12
+ //# sourceMappingURL=create-value-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-value-picker.d.ts","sourceRoot":"","sources":["../../../../libs/utils/list/src/create-value-picker.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,MAAM,CAAA;IACrB,IAAI,EAAE,MAAM,MAAM,CAAA;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CA4B/D"}
@@ -0,0 +1,2 @@
1
+ export declare const getLastKeyInMap: <K = any>(map: Map<K, any>) => K;
2
+ //# sourceMappingURL=get-last-key-in-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-last-key-in-map.d.ts","sourceRoot":"","sources":["../../../../libs/utils/list/src/get-last-key-in-map.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,GAAI,CAAC,GAAG,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAG,CAG3D,CAAA"}
package/index.cjs.js ADDED
@@ -0,0 +1,182 @@
1
+ 'use strict';
2
+
3
+ var dataUtils = require('@hyperfrontend/data-utils');
4
+
5
+ /**
6
+ * Creates a FIFO (First-In-First-Out) list.
7
+ *
8
+ * @template T The type of elements in the list, must be an object.
9
+ * @returns {FifoList<T>} A FIFO list with methods to manipulate and query the list.
10
+ */
11
+ function createFifoList() {
12
+ const list = new Set();
13
+ const push = (item) => {
14
+ if (dataUtils.getType(item) !== 'object') {
15
+ throw new Error('A fifo list only non-primitive values');
16
+ }
17
+ if (list.has(item)) {
18
+ throw new Error('Cannot a item that already exists');
19
+ }
20
+ list.add(item);
21
+ };
22
+ const pull = () => {
23
+ const value = list.values().next().value;
24
+ list.delete(value);
25
+ return value;
26
+ };
27
+ const map = (callback) => {
28
+ return Array.from(list.values()).map(callback);
29
+ };
30
+ const forEach = (callback) => {
31
+ list.forEach(callback);
32
+ };
33
+ const remove = (item) => list.delete(item);
34
+ const has = (item) => list.has(item);
35
+ const size = () => list.size;
36
+ const clear = () => list.clear();
37
+ const result = {
38
+ push,
39
+ pull,
40
+ map,
41
+ forEach,
42
+ remove,
43
+ has,
44
+ size,
45
+ clear,
46
+ };
47
+ return Object.freeze(result);
48
+ }
49
+
50
+ /**
51
+ * Creates a LIFO (Last-In-First-Out) list.
52
+ *
53
+ * @template T The type of elements in the list, must be an object.
54
+ * @returns {LifoList<T>} A LIFO list with methods to manipulate and query the list.
55
+ */
56
+ function createLifoList() {
57
+ const list = new Set();
58
+ const push = (item) => {
59
+ if (dataUtils.getType(item) !== 'object') {
60
+ throw new Error('A lifo list only supports non-primitive values');
61
+ }
62
+ list.add(item);
63
+ };
64
+ const pull = () => {
65
+ const lastItem = Array.from(list).pop();
66
+ if (lastItem) {
67
+ list.delete(lastItem);
68
+ }
69
+ return lastItem;
70
+ };
71
+ const map = (callback) => {
72
+ return Array.from(list).map(callback);
73
+ };
74
+ const forEach = (callback) => {
75
+ list.forEach(callback);
76
+ };
77
+ const remove = (item) => list.delete(item);
78
+ const has = (item) => list.has(item);
79
+ const size = () => list.size;
80
+ const clear = () => {
81
+ list.clear();
82
+ };
83
+ const result = {
84
+ push,
85
+ pull,
86
+ map,
87
+ forEach,
88
+ remove,
89
+ has,
90
+ size,
91
+ clear,
92
+ };
93
+ return Object.freeze(result);
94
+ }
95
+
96
+ /**
97
+ * Creates an array of numbers within a specified range (inclusive).
98
+ *
99
+ * @param start - The starting number of the range
100
+ * @param end - The ending number of the range (inclusive)
101
+ * @returns An array containing all numbers from start to end
102
+ */
103
+ function createRange(start, end) {
104
+ const range = [];
105
+ for (let i = start; i <= end; i += 1) {
106
+ range.push(i);
107
+ }
108
+ return range;
109
+ }
110
+
111
+ /**
112
+ * Creates a value picker that cycles through a list of string values.
113
+ *
114
+ * @param values - The array of string values to cycle through
115
+ * @returns A ValuePicker instance with current and next methods
116
+ */
117
+ function createValuePicker(values) {
118
+ if (!values || !values.length) {
119
+ throw new Error('Expected values not to be an empty list.');
120
+ }
121
+ let index = -1;
122
+ /**
123
+ * Returns the current value without advancing the picker.
124
+ *
125
+ * @returns The current value in the list
126
+ */
127
+ function current() {
128
+ if (index < 0)
129
+ index = 0;
130
+ return values[index];
131
+ }
132
+ /**
133
+ * Advances to and returns the next value, cycling back to the start when reaching the end.
134
+ *
135
+ * @returns The next value in the list
136
+ */
137
+ function next() {
138
+ if (index < 0)
139
+ return current();
140
+ index = ++index < values.length ? index : 0;
141
+ return values[index];
142
+ }
143
+ return {
144
+ current: current,
145
+ next: next,
146
+ };
147
+ }
148
+
149
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
150
+ const getLastKeyInMap = (map) => {
151
+ const items = [...map.keys()];
152
+ return items[items.length - 1];
153
+ };
154
+
155
+ /**
156
+ * Filters out empty, null, undefined, and whitespace-only strings from an array.
157
+ *
158
+ * @param values - The array of strings to filter
159
+ * @returns A new array containing only non-empty strings with content
160
+ */
161
+ function nonEmptyStrings(values) {
162
+ return values.filter((value) => ![undefined, null, ''].includes(value) && value.trim() !== '');
163
+ }
164
+
165
+ /**
166
+ * Removes duplicate strings from an array, preserving insertion order.
167
+ *
168
+ * @param values - The array of strings to deduplicate
169
+ * @returns A new array containing only unique strings
170
+ */
171
+ function uniqueStrings(values) {
172
+ return Array.from(new Set(values));
173
+ }
174
+
175
+ exports.createFifoList = createFifoList;
176
+ exports.createLifoList = createLifoList;
177
+ exports.createRange = createRange;
178
+ exports.createValuePicker = createValuePicker;
179
+ exports.getLastKeyInMap = getLastKeyInMap;
180
+ exports.nonEmptyStrings = nonEmptyStrings;
181
+ exports.uniqueStrings = uniqueStrings;
182
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../libs/utils/list/src/create-fifo-list.ts","../../../../libs/utils/list/src/create-lifo-list.ts","../../../../libs/utils/list/src/create-range.ts","../../../../libs/utils/list/src/create-value-picker.ts","../../../../libs/utils/list/src/get-last-key-in-map.ts","../../../../libs/utils/list/src/non-empty-strings.ts","../../../../libs/utils/list/src/unique-strings.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["getType"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export * from './create-fifo-list';
2
+ export * from './create-lifo-list';
3
+ export * from './create-range';
4
+ export * from './create-value-picker';
5
+ export * from './get-last-key-in-map';
6
+ export * from './non-empty-strings';
7
+ export * from './unique-strings';
8
+ //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/utils/list/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA"}