@etsoo/shared 1.1.55 → 1.1.57
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.
- package/README.md +5 -1
- package/__tests__/Utils.ts +18 -0
- package/lib/cjs/DataTypes.d.ts +6 -0
- package/lib/cjs/Utils.d.ts +21 -0
- package/lib/cjs/Utils.js +34 -0
- package/lib/mjs/DataTypes.d.ts +6 -0
- package/lib/mjs/Utils.d.ts +21 -0
- package/lib/mjs/Utils.js +34 -0
- package/package.json +6 -6
- package/src/DataTypes.ts +12 -0
- package/src/Utils.ts +39 -0
package/README.md
CHANGED
|
@@ -103,6 +103,7 @@ Data type definitions and type safe functions. ListItemType and ListItemType1 ar
|
|
|
103
103
|
|KeyCollection|Key collection, like { key1: {}, key2: {} }|
|
|
104
104
|
|Keys|Get specific type keys|
|
|
105
105
|
|ObjType|Generic object type|
|
|
106
|
+
|RequireAtLeastOne|Require at least one property of the keys|
|
|
106
107
|
|Simple|Basic or basic array type|
|
|
107
108
|
|SimpleEnum|Simple type enum|
|
|
108
109
|
|SimpleNames|Simple type names|
|
|
@@ -232,4 +233,7 @@ String and other related utilities
|
|
|
232
233
|
|removeNonLetters|Remove non letters (0-9, a-z, A-Z)|
|
|
233
234
|
|replaceNullOrEmpty|Replace null or empty with default value|
|
|
234
235
|
|setLabels|Set source with new labels|
|
|
235
|
-
|snakeNameToWord|Snake name to works, 'snake_name' to 'Snake Name'|
|
|
236
|
+
|snakeNameToWord|Snake name to works, 'snake_name' to 'Snake Name'|
|
|
237
|
+
|trim|Trim chars|
|
|
238
|
+
|trimEnd|Trim end chars|
|
|
239
|
+
|trimStart|Trim start chars|
|
package/__tests__/Utils.ts
CHANGED
|
@@ -197,3 +197,21 @@ test('Tests for getResult', () => {
|
|
|
197
197
|
const valueResult = Utils.getResult(inputNumber);
|
|
198
198
|
expect(valueResult).toBe(5);
|
|
199
199
|
});
|
|
200
|
+
|
|
201
|
+
test('Tests for trim', () => {
|
|
202
|
+
expect(Utils.trim('//a/', '/')).toBe('a');
|
|
203
|
+
expect(Utils.trim('/*/a/', ...['/', '*'])).toBe('a');
|
|
204
|
+
expect(Utils.trim('abc', ...['/', '*'])).toBe('abc');
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
test('Tests for trimStart', () => {
|
|
208
|
+
expect(Utils.trimStart('//a/', '/')).toBe('a/');
|
|
209
|
+
expect(Utils.trimStart('/*/a/', ...['/', '*'])).toBe('a/');
|
|
210
|
+
expect(Utils.trimStart('abc', ...['/', '*'])).toBe('abc');
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
test('Tests for trimEnd', () => {
|
|
214
|
+
expect(Utils.trimEnd('//a/', '/')).toBe('//a');
|
|
215
|
+
expect(Utils.trimEnd('/*/a*/', ...['/', '*'])).toBe('/*/a');
|
|
216
|
+
expect(Utils.trimEnd('abc', ...['/', '*'])).toBe('abc');
|
|
217
|
+
});
|
package/lib/cjs/DataTypes.d.ts
CHANGED
|
@@ -183,6 +183,12 @@ export declare namespace DataTypes {
|
|
|
183
183
|
type Keys<T extends object, R = string | number> = {
|
|
184
184
|
[k in keyof T]: T[k] extends R ? k : never;
|
|
185
185
|
}[keyof T];
|
|
186
|
+
/**
|
|
187
|
+
* Require at least one property of the keys
|
|
188
|
+
*/
|
|
189
|
+
type RequireAtLeastOne<T, Keys extends keyof T> = Pick<T, Exclude<keyof T, Keys>> & {
|
|
190
|
+
[K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
|
|
191
|
+
}[Keys];
|
|
186
192
|
/**
|
|
187
193
|
* Culture definiton
|
|
188
194
|
*/
|
package/lib/cjs/Utils.d.ts
CHANGED
|
@@ -209,4 +209,25 @@ export declare namespace Utils {
|
|
|
209
209
|
* @param firstOnly Only convert the first word to upper case
|
|
210
210
|
*/
|
|
211
211
|
const snakeNameToWord: (name: string, firstOnly?: boolean) => string;
|
|
212
|
+
/**
|
|
213
|
+
* Trim chars
|
|
214
|
+
* @param input Input string
|
|
215
|
+
* @param chars Trim chars
|
|
216
|
+
* @returns Result
|
|
217
|
+
*/
|
|
218
|
+
const trim: (input: string, ...chars: string[]) => string;
|
|
219
|
+
/**
|
|
220
|
+
* Trim end chars
|
|
221
|
+
* @param input Input string
|
|
222
|
+
* @param chars Trim chars
|
|
223
|
+
* @returns Result
|
|
224
|
+
*/
|
|
225
|
+
const trimEnd: (input: string, ...chars: string[]) => string;
|
|
226
|
+
/**
|
|
227
|
+
* Trim start chars
|
|
228
|
+
* @param input Input string
|
|
229
|
+
* @param chars Trim chars
|
|
230
|
+
* @returns Result
|
|
231
|
+
*/
|
|
232
|
+
const trimStart: (input: string, ...chars: string[]) => string;
|
|
212
233
|
}
|
package/lib/cjs/Utils.js
CHANGED
|
@@ -414,4 +414,38 @@ var Utils;
|
|
|
414
414
|
}
|
|
415
415
|
return items.map((part) => part.formatInitial(true)).join(' ');
|
|
416
416
|
};
|
|
417
|
+
/**
|
|
418
|
+
* Trim chars
|
|
419
|
+
* @param input Input string
|
|
420
|
+
* @param chars Trim chars
|
|
421
|
+
* @returns Result
|
|
422
|
+
*/
|
|
423
|
+
Utils.trim = (input, ...chars) => {
|
|
424
|
+
return Utils.trimEnd(Utils.trimStart(input, ...chars), ...chars);
|
|
425
|
+
};
|
|
426
|
+
/**
|
|
427
|
+
* Trim end chars
|
|
428
|
+
* @param input Input string
|
|
429
|
+
* @param chars Trim chars
|
|
430
|
+
* @returns Result
|
|
431
|
+
*/
|
|
432
|
+
Utils.trimEnd = (input, ...chars) => {
|
|
433
|
+
let start = input.length - 1;
|
|
434
|
+
while (start >= 0 && chars.indexOf(input[start]) >= 0)
|
|
435
|
+
--start;
|
|
436
|
+
return input.substring(0, start + 1);
|
|
437
|
+
};
|
|
438
|
+
/**
|
|
439
|
+
* Trim start chars
|
|
440
|
+
* @param input Input string
|
|
441
|
+
* @param chars Trim chars
|
|
442
|
+
* @returns Result
|
|
443
|
+
*/
|
|
444
|
+
Utils.trimStart = (input, ...chars) => {
|
|
445
|
+
let start = 0;
|
|
446
|
+
const end = input.length;
|
|
447
|
+
while (start < end && chars.indexOf(input[start]) >= 0)
|
|
448
|
+
++start;
|
|
449
|
+
return input.substring(start);
|
|
450
|
+
};
|
|
417
451
|
})(Utils = exports.Utils || (exports.Utils = {}));
|
package/lib/mjs/DataTypes.d.ts
CHANGED
|
@@ -183,6 +183,12 @@ export declare namespace DataTypes {
|
|
|
183
183
|
type Keys<T extends object, R = string | number> = {
|
|
184
184
|
[k in keyof T]: T[k] extends R ? k : never;
|
|
185
185
|
}[keyof T];
|
|
186
|
+
/**
|
|
187
|
+
* Require at least one property of the keys
|
|
188
|
+
*/
|
|
189
|
+
type RequireAtLeastOne<T, Keys extends keyof T> = Pick<T, Exclude<keyof T, Keys>> & {
|
|
190
|
+
[K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
|
|
191
|
+
}[Keys];
|
|
186
192
|
/**
|
|
187
193
|
* Culture definiton
|
|
188
194
|
*/
|
package/lib/mjs/Utils.d.ts
CHANGED
|
@@ -209,4 +209,25 @@ export declare namespace Utils {
|
|
|
209
209
|
* @param firstOnly Only convert the first word to upper case
|
|
210
210
|
*/
|
|
211
211
|
const snakeNameToWord: (name: string, firstOnly?: boolean) => string;
|
|
212
|
+
/**
|
|
213
|
+
* Trim chars
|
|
214
|
+
* @param input Input string
|
|
215
|
+
* @param chars Trim chars
|
|
216
|
+
* @returns Result
|
|
217
|
+
*/
|
|
218
|
+
const trim: (input: string, ...chars: string[]) => string;
|
|
219
|
+
/**
|
|
220
|
+
* Trim end chars
|
|
221
|
+
* @param input Input string
|
|
222
|
+
* @param chars Trim chars
|
|
223
|
+
* @returns Result
|
|
224
|
+
*/
|
|
225
|
+
const trimEnd: (input: string, ...chars: string[]) => string;
|
|
226
|
+
/**
|
|
227
|
+
* Trim start chars
|
|
228
|
+
* @param input Input string
|
|
229
|
+
* @param chars Trim chars
|
|
230
|
+
* @returns Result
|
|
231
|
+
*/
|
|
232
|
+
const trimStart: (input: string, ...chars: string[]) => string;
|
|
212
233
|
}
|
package/lib/mjs/Utils.js
CHANGED
|
@@ -411,4 +411,38 @@ export var Utils;
|
|
|
411
411
|
}
|
|
412
412
|
return items.map((part) => part.formatInitial(true)).join(' ');
|
|
413
413
|
};
|
|
414
|
+
/**
|
|
415
|
+
* Trim chars
|
|
416
|
+
* @param input Input string
|
|
417
|
+
* @param chars Trim chars
|
|
418
|
+
* @returns Result
|
|
419
|
+
*/
|
|
420
|
+
Utils.trim = (input, ...chars) => {
|
|
421
|
+
return Utils.trimEnd(Utils.trimStart(input, ...chars), ...chars);
|
|
422
|
+
};
|
|
423
|
+
/**
|
|
424
|
+
* Trim end chars
|
|
425
|
+
* @param input Input string
|
|
426
|
+
* @param chars Trim chars
|
|
427
|
+
* @returns Result
|
|
428
|
+
*/
|
|
429
|
+
Utils.trimEnd = (input, ...chars) => {
|
|
430
|
+
let start = input.length - 1;
|
|
431
|
+
while (start >= 0 && chars.indexOf(input[start]) >= 0)
|
|
432
|
+
--start;
|
|
433
|
+
return input.substring(0, start + 1);
|
|
434
|
+
};
|
|
435
|
+
/**
|
|
436
|
+
* Trim start chars
|
|
437
|
+
* @param input Input string
|
|
438
|
+
* @param chars Trim chars
|
|
439
|
+
* @returns Result
|
|
440
|
+
*/
|
|
441
|
+
Utils.trimStart = (input, ...chars) => {
|
|
442
|
+
let start = 0;
|
|
443
|
+
const end = input.length;
|
|
444
|
+
while (start < end && chars.indexOf(input[start]) >= 0)
|
|
445
|
+
++start;
|
|
446
|
+
return input.substring(start);
|
|
447
|
+
};
|
|
414
448
|
})(Utils || (Utils = {}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@etsoo/shared",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.57",
|
|
4
4
|
"description": "TypeScript shared utilities and functions",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/mjs/index.js",
|
|
@@ -54,15 +54,15 @@
|
|
|
54
54
|
},
|
|
55
55
|
"homepage": "https://github.com/ETSOO/Shared#readme",
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@types/jest": "^29.0.
|
|
58
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
59
|
-
"@typescript-eslint/parser": "^5.
|
|
60
|
-
"eslint": "^8.23.
|
|
57
|
+
"@types/jest": "^29.0.3",
|
|
58
|
+
"@typescript-eslint/eslint-plugin": "^5.37.0",
|
|
59
|
+
"@typescript-eslint/parser": "^5.37.0",
|
|
60
|
+
"eslint": "^8.23.1",
|
|
61
61
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
62
62
|
"eslint-plugin-import": "^2.26.0",
|
|
63
63
|
"jest": "^29.0.3",
|
|
64
64
|
"jest-environment-jsdom": "^29.0.3",
|
|
65
|
-
"ts-jest": "^29.0.
|
|
65
|
+
"ts-jest": "^29.0.1",
|
|
66
66
|
"typescript": "^4.8.3"
|
|
67
67
|
}
|
|
68
68
|
}
|
package/src/DataTypes.ts
CHANGED
|
@@ -235,6 +235,18 @@ export namespace DataTypes {
|
|
|
235
235
|
[k in keyof T]: T[k] extends R ? k : never;
|
|
236
236
|
}[keyof T];
|
|
237
237
|
|
|
238
|
+
/**
|
|
239
|
+
* Require at least one property of the keys
|
|
240
|
+
*/
|
|
241
|
+
export type RequireAtLeastOne<T, Keys extends keyof T> = Pick<
|
|
242
|
+
T,
|
|
243
|
+
Exclude<keyof T, Keys>
|
|
244
|
+
> &
|
|
245
|
+
{
|
|
246
|
+
[K in Keys]-?: Required<Pick<T, K>> &
|
|
247
|
+
Partial<Pick<T, Exclude<Keys, K>>>;
|
|
248
|
+
}[Keys];
|
|
249
|
+
|
|
238
250
|
/**
|
|
239
251
|
* Culture definiton
|
|
240
252
|
*/
|
package/src/Utils.ts
CHANGED
|
@@ -572,4 +572,43 @@ export namespace Utils {
|
|
|
572
572
|
|
|
573
573
|
return items.map((part) => part.formatInitial(true)).join(' ');
|
|
574
574
|
};
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* Trim chars
|
|
578
|
+
* @param input Input string
|
|
579
|
+
* @param chars Trim chars
|
|
580
|
+
* @returns Result
|
|
581
|
+
*/
|
|
582
|
+
export const trim = (input: string, ...chars: string[]) => {
|
|
583
|
+
return trimEnd(trimStart(input, ...chars), ...chars);
|
|
584
|
+
};
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* Trim end chars
|
|
588
|
+
* @param input Input string
|
|
589
|
+
* @param chars Trim chars
|
|
590
|
+
* @returns Result
|
|
591
|
+
*/
|
|
592
|
+
export const trimEnd = (input: string, ...chars: string[]) => {
|
|
593
|
+
let start = input.length - 1;
|
|
594
|
+
|
|
595
|
+
while (start >= 0 && chars.indexOf(input[start]) >= 0) --start;
|
|
596
|
+
|
|
597
|
+
return input.substring(0, start + 1);
|
|
598
|
+
};
|
|
599
|
+
|
|
600
|
+
/**
|
|
601
|
+
* Trim start chars
|
|
602
|
+
* @param input Input string
|
|
603
|
+
* @param chars Trim chars
|
|
604
|
+
* @returns Result
|
|
605
|
+
*/
|
|
606
|
+
export const trimStart = (input: string, ...chars: string[]) => {
|
|
607
|
+
let start = 0;
|
|
608
|
+
const end = input.length;
|
|
609
|
+
|
|
610
|
+
while (start < end && chars.indexOf(input[start]) >= 0) ++start;
|
|
611
|
+
|
|
612
|
+
return input.substring(start);
|
|
613
|
+
};
|
|
575
614
|
}
|