@etsoo/shared 1.1.44 → 1.1.47
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 +4 -0
- package/__tests__/DataTypes.ts +19 -2
- package/lib/cjs/DataTypes.d.ts +26 -3
- package/lib/cjs/DataTypes.js +24 -11
- package/lib/mjs/DataTypes.d.ts +26 -3
- package/lib/mjs/DataTypes.js +24 -11
- package/package.json +5 -5
- package/src/DataTypes.ts +47 -13
package/README.md
CHANGED
|
@@ -88,6 +88,8 @@ Data type definitions and type safe functions
|
|
|
88
88
|
|BasicTemplateType|Basic template type|
|
|
89
89
|
|CombinedEnum|Combined type enum|
|
|
90
90
|
|CultureDefinition|Culture definition|
|
|
91
|
+
|DI|Dynamic interface with multiple properties|
|
|
92
|
+
|DIS|Dynamic interface with single property|
|
|
91
93
|
|EnumBase|Enum base type|
|
|
92
94
|
|EnumValue|Enum value type|
|
|
93
95
|
|ExtendedEnum|Extended type enum|
|
|
@@ -97,6 +99,7 @@ Data type definitions and type safe functions
|
|
|
97
99
|
|IdType|Number and string combination id type|
|
|
98
100
|
|IdItem|Item with id or id generator|
|
|
99
101
|
|IdLabelItem|Item with id and label|
|
|
102
|
+
|IdLabelType|Item with id and label dynamic type|
|
|
100
103
|
|KeyCollection|Key collection, like { key1: {}, key2: {} }|
|
|
101
104
|
|Keys|Get specific type keys|
|
|
102
105
|
|Simple|Basic or basic array type|
|
|
@@ -118,6 +121,7 @@ Data type definitions and type safe functions
|
|
|
118
121
|
|getEnumKey|Get enum string literal type value|
|
|
119
122
|
|getEnumKeys|Get Enum keys|
|
|
120
123
|
|getIdValue|Get object id field value|
|
|
124
|
+
|getIdValue1|Get object id field value 1|
|
|
121
125
|
|getResult|Get input function or value result|
|
|
122
126
|
|getStringValue|Get object string field value|
|
|
123
127
|
|getValue|Get object field value|
|
package/__tests__/DataTypes.ts
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import { DataTypes } from '../src/DataTypes';
|
|
2
2
|
|
|
3
|
+
test('Tests for DI', () => {
|
|
4
|
+
const item: DataTypes.DIS<'id', number> & DataTypes.DIS<'label', string> = {
|
|
5
|
+
id: 1,
|
|
6
|
+
label: 'Etsoo'
|
|
7
|
+
};
|
|
8
|
+
expect(item.id).toBe(1);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('Tests for IdLabelType', () => {
|
|
12
|
+
const item: DataTypes.IdLabelItem = {
|
|
13
|
+
id: 1,
|
|
14
|
+
label: 'Etsoo'
|
|
15
|
+
};
|
|
16
|
+
const itemCopy: DataTypes.IdLabelType<'id', 'label'> = { ...item };
|
|
17
|
+
expect(item).toEqual(itemCopy);
|
|
18
|
+
});
|
|
19
|
+
|
|
3
20
|
test('Tests for convert', () => {
|
|
4
21
|
expect(DataTypes.convert('5', 0)).toStrictEqual(5);
|
|
5
22
|
expect(
|
|
@@ -92,8 +109,8 @@ test('Tests for IdLabelItem', () => {
|
|
|
92
109
|
test('Tests for getValue', () => {
|
|
93
110
|
const data = { id: 1, flag: true };
|
|
94
111
|
expect(DataTypes.getValue(data, 'id')).toBe(1);
|
|
95
|
-
expect(DataTypes.getValue(data, 'flag')).
|
|
96
|
-
expect(DataTypes.getValue(data, 'unknown')).
|
|
112
|
+
expect(DataTypes.getValue(data, 'flag')).toBeTruthy();
|
|
113
|
+
expect(DataTypes.getValue(data, 'unknown')).toBeUndefined();
|
|
97
114
|
});
|
|
98
115
|
|
|
99
116
|
test('Tests for getIdValue', () => {
|
package/lib/cjs/DataTypes.d.ts
CHANGED
|
@@ -133,7 +133,7 @@ export declare namespace DataTypes {
|
|
|
133
133
|
/**
|
|
134
134
|
* Enum base type
|
|
135
135
|
*/
|
|
136
|
-
type EnumBase
|
|
136
|
+
type EnumBase = Record<string, EnumValue>;
|
|
137
137
|
/**
|
|
138
138
|
* Function type
|
|
139
139
|
*/
|
|
@@ -168,6 +168,10 @@ export declare namespace DataTypes {
|
|
|
168
168
|
*/
|
|
169
169
|
label: string;
|
|
170
170
|
};
|
|
171
|
+
/**
|
|
172
|
+
* Item with id and label dynamic type
|
|
173
|
+
*/
|
|
174
|
+
type IdLabelType<I extends string, L extends string, D extends IdType = number> = DIS<I, D> & DIS<L, string>;
|
|
171
175
|
/**
|
|
172
176
|
* Get specific type keys
|
|
173
177
|
*/
|
|
@@ -195,6 +199,18 @@ export declare namespace DataTypes {
|
|
|
195
199
|
*/
|
|
196
200
|
compatibleName?: string[];
|
|
197
201
|
}>;
|
|
202
|
+
/**
|
|
203
|
+
* Dynamic interface with multiple properties
|
|
204
|
+
*/
|
|
205
|
+
type DI<K extends readonly string[], T> = {
|
|
206
|
+
[P in K[number]]: T;
|
|
207
|
+
};
|
|
208
|
+
/**
|
|
209
|
+
* Dynamic interface with single property
|
|
210
|
+
*/
|
|
211
|
+
type DIS<K extends string, T> = {
|
|
212
|
+
[P in K]: T;
|
|
213
|
+
};
|
|
198
214
|
/**
|
|
199
215
|
* Convert value to target type
|
|
200
216
|
* @param input Input value
|
|
@@ -262,7 +278,7 @@ export declare namespace DataTypes {
|
|
|
262
278
|
* @param key Property name
|
|
263
279
|
* @returns Value
|
|
264
280
|
*/
|
|
265
|
-
function getValue<T extends {}>(data: T | undefined | null, key: keyof T
|
|
281
|
+
function getValue<T extends {}, K extends keyof T | string>(data: T | undefined | null, key: K): K extends keyof T ? T[K] : undefined;
|
|
266
282
|
/**
|
|
267
283
|
* Get object id field value
|
|
268
284
|
* @param data Data
|
|
@@ -270,13 +286,20 @@ export declare namespace DataTypes {
|
|
|
270
286
|
* @returns Id value
|
|
271
287
|
*/
|
|
272
288
|
function getIdValue<T extends {}, K extends Keys<T, string | number>>(data: T, key: K): T[K];
|
|
289
|
+
/**
|
|
290
|
+
* Get object id field value 1
|
|
291
|
+
* @param data Data
|
|
292
|
+
* @param key Property name
|
|
293
|
+
* @returns Id value
|
|
294
|
+
*/
|
|
295
|
+
function getIdValue1<T extends {}, K extends keyof T | string>(data: T | undefined | null, key: K): K extends keyof T ? (T[K] extends number ? number : string) : undefined;
|
|
273
296
|
/**
|
|
274
297
|
* Get object string field value
|
|
275
298
|
* @param data Data
|
|
276
299
|
* @param key Property name
|
|
277
300
|
* @returns String value
|
|
278
301
|
*/
|
|
279
|
-
function getStringValue<T extends {}>(data: T | undefined | null, key: keyof T | string): string | undefined
|
|
302
|
+
function getStringValue<T extends {}>(data: T | undefined | null, key: keyof T | string): string | undefined;
|
|
280
303
|
/**
|
|
281
304
|
* Check the type is a basic type or not (type guard)
|
|
282
305
|
* @param name Type name
|
package/lib/cjs/DataTypes.js
CHANGED
|
@@ -290,14 +290,10 @@ var DataTypes;
|
|
|
290
290
|
* @returns Value
|
|
291
291
|
*/
|
|
292
292
|
function getValue(data, key) {
|
|
293
|
-
if (data
|
|
294
|
-
return
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
return null;
|
|
298
|
-
if (typeof value === 'number')
|
|
299
|
-
return value;
|
|
300
|
-
return convert(value, 'string');
|
|
293
|
+
if (data != null && typeof key === 'string' && key in data) {
|
|
294
|
+
return Reflect.get(data, key);
|
|
295
|
+
}
|
|
296
|
+
return undefined;
|
|
301
297
|
}
|
|
302
298
|
DataTypes.getValue = getValue;
|
|
303
299
|
/**
|
|
@@ -310,6 +306,21 @@ var DataTypes;
|
|
|
310
306
|
return data[key];
|
|
311
307
|
}
|
|
312
308
|
DataTypes.getIdValue = getIdValue;
|
|
309
|
+
/**
|
|
310
|
+
* Get object id field value 1
|
|
311
|
+
* @param data Data
|
|
312
|
+
* @param key Property name
|
|
313
|
+
* @returns Id value
|
|
314
|
+
*/
|
|
315
|
+
function getIdValue1(data, key) {
|
|
316
|
+
const value = getValue(data, key);
|
|
317
|
+
if (value == null)
|
|
318
|
+
return undefined;
|
|
319
|
+
if (typeof value === 'number')
|
|
320
|
+
return value;
|
|
321
|
+
return `${value}`;
|
|
322
|
+
}
|
|
323
|
+
DataTypes.getIdValue1 = getIdValue1;
|
|
313
324
|
/**
|
|
314
325
|
* Get object string field value
|
|
315
326
|
* @param data Data
|
|
@@ -318,9 +329,11 @@ var DataTypes;
|
|
|
318
329
|
*/
|
|
319
330
|
function getStringValue(data, key) {
|
|
320
331
|
const value = getValue(data, key);
|
|
321
|
-
if (
|
|
322
|
-
return
|
|
323
|
-
|
|
332
|
+
if (value == null)
|
|
333
|
+
return undefined;
|
|
334
|
+
if (typeof value === 'string')
|
|
335
|
+
return value;
|
|
336
|
+
return `${value}`;
|
|
324
337
|
}
|
|
325
338
|
DataTypes.getStringValue = getStringValue;
|
|
326
339
|
/**
|
package/lib/mjs/DataTypes.d.ts
CHANGED
|
@@ -133,7 +133,7 @@ export declare namespace DataTypes {
|
|
|
133
133
|
/**
|
|
134
134
|
* Enum base type
|
|
135
135
|
*/
|
|
136
|
-
type EnumBase
|
|
136
|
+
type EnumBase = Record<string, EnumValue>;
|
|
137
137
|
/**
|
|
138
138
|
* Function type
|
|
139
139
|
*/
|
|
@@ -168,6 +168,10 @@ export declare namespace DataTypes {
|
|
|
168
168
|
*/
|
|
169
169
|
label: string;
|
|
170
170
|
};
|
|
171
|
+
/**
|
|
172
|
+
* Item with id and label dynamic type
|
|
173
|
+
*/
|
|
174
|
+
type IdLabelType<I extends string, L extends string, D extends IdType = number> = DIS<I, D> & DIS<L, string>;
|
|
171
175
|
/**
|
|
172
176
|
* Get specific type keys
|
|
173
177
|
*/
|
|
@@ -195,6 +199,18 @@ export declare namespace DataTypes {
|
|
|
195
199
|
*/
|
|
196
200
|
compatibleName?: string[];
|
|
197
201
|
}>;
|
|
202
|
+
/**
|
|
203
|
+
* Dynamic interface with multiple properties
|
|
204
|
+
*/
|
|
205
|
+
type DI<K extends readonly string[], T> = {
|
|
206
|
+
[P in K[number]]: T;
|
|
207
|
+
};
|
|
208
|
+
/**
|
|
209
|
+
* Dynamic interface with single property
|
|
210
|
+
*/
|
|
211
|
+
type DIS<K extends string, T> = {
|
|
212
|
+
[P in K]: T;
|
|
213
|
+
};
|
|
198
214
|
/**
|
|
199
215
|
* Convert value to target type
|
|
200
216
|
* @param input Input value
|
|
@@ -262,7 +278,7 @@ export declare namespace DataTypes {
|
|
|
262
278
|
* @param key Property name
|
|
263
279
|
* @returns Value
|
|
264
280
|
*/
|
|
265
|
-
function getValue<T extends {}>(data: T | undefined | null, key: keyof T
|
|
281
|
+
function getValue<T extends {}, K extends keyof T | string>(data: T | undefined | null, key: K): K extends keyof T ? T[K] : undefined;
|
|
266
282
|
/**
|
|
267
283
|
* Get object id field value
|
|
268
284
|
* @param data Data
|
|
@@ -270,13 +286,20 @@ export declare namespace DataTypes {
|
|
|
270
286
|
* @returns Id value
|
|
271
287
|
*/
|
|
272
288
|
function getIdValue<T extends {}, K extends Keys<T, string | number>>(data: T, key: K): T[K];
|
|
289
|
+
/**
|
|
290
|
+
* Get object id field value 1
|
|
291
|
+
* @param data Data
|
|
292
|
+
* @param key Property name
|
|
293
|
+
* @returns Id value
|
|
294
|
+
*/
|
|
295
|
+
function getIdValue1<T extends {}, K extends keyof T | string>(data: T | undefined | null, key: K): K extends keyof T ? (T[K] extends number ? number : string) : undefined;
|
|
273
296
|
/**
|
|
274
297
|
* Get object string field value
|
|
275
298
|
* @param data Data
|
|
276
299
|
* @param key Property name
|
|
277
300
|
* @returns String value
|
|
278
301
|
*/
|
|
279
|
-
function getStringValue<T extends {}>(data: T | undefined | null, key: keyof T | string): string | undefined
|
|
302
|
+
function getStringValue<T extends {}>(data: T | undefined | null, key: keyof T | string): string | undefined;
|
|
280
303
|
/**
|
|
281
304
|
* Check the type is a basic type or not (type guard)
|
|
282
305
|
* @param name Type name
|
package/lib/mjs/DataTypes.js
CHANGED
|
@@ -287,14 +287,10 @@ export var DataTypes;
|
|
|
287
287
|
* @returns Value
|
|
288
288
|
*/
|
|
289
289
|
function getValue(data, key) {
|
|
290
|
-
if (data
|
|
291
|
-
return
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
return null;
|
|
295
|
-
if (typeof value === 'number')
|
|
296
|
-
return value;
|
|
297
|
-
return convert(value, 'string');
|
|
290
|
+
if (data != null && typeof key === 'string' && key in data) {
|
|
291
|
+
return Reflect.get(data, key);
|
|
292
|
+
}
|
|
293
|
+
return undefined;
|
|
298
294
|
}
|
|
299
295
|
DataTypes.getValue = getValue;
|
|
300
296
|
/**
|
|
@@ -307,6 +303,21 @@ export var DataTypes;
|
|
|
307
303
|
return data[key];
|
|
308
304
|
}
|
|
309
305
|
DataTypes.getIdValue = getIdValue;
|
|
306
|
+
/**
|
|
307
|
+
* Get object id field value 1
|
|
308
|
+
* @param data Data
|
|
309
|
+
* @param key Property name
|
|
310
|
+
* @returns Id value
|
|
311
|
+
*/
|
|
312
|
+
function getIdValue1(data, key) {
|
|
313
|
+
const value = getValue(data, key);
|
|
314
|
+
if (value == null)
|
|
315
|
+
return undefined;
|
|
316
|
+
if (typeof value === 'number')
|
|
317
|
+
return value;
|
|
318
|
+
return `${value}`;
|
|
319
|
+
}
|
|
320
|
+
DataTypes.getIdValue1 = getIdValue1;
|
|
310
321
|
/**
|
|
311
322
|
* Get object string field value
|
|
312
323
|
* @param data Data
|
|
@@ -315,9 +326,11 @@ export var DataTypes;
|
|
|
315
326
|
*/
|
|
316
327
|
function getStringValue(data, key) {
|
|
317
328
|
const value = getValue(data, key);
|
|
318
|
-
if (
|
|
319
|
-
return
|
|
320
|
-
|
|
329
|
+
if (value == null)
|
|
330
|
+
return undefined;
|
|
331
|
+
if (typeof value === 'string')
|
|
332
|
+
return value;
|
|
333
|
+
return `${value}`;
|
|
321
334
|
}
|
|
322
335
|
DataTypes.getStringValue = getStringValue;
|
|
323
336
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@etsoo/shared",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.47",
|
|
4
4
|
"description": "TypeScript shared utilities and functions",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/mjs/index.js",
|
|
@@ -55,15 +55,15 @@
|
|
|
55
55
|
"homepage": "https://github.com/ETSOO/Shared#readme",
|
|
56
56
|
"dependencies": {},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@types/jest": "^28.1.
|
|
59
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
60
|
-
"@typescript-eslint/parser": "^5.
|
|
58
|
+
"@types/jest": "^28.1.7",
|
|
59
|
+
"@typescript-eslint/eslint-plugin": "^5.34.0",
|
|
60
|
+
"@typescript-eslint/parser": "^5.34.0",
|
|
61
61
|
"eslint": "^8.22.0",
|
|
62
62
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
63
63
|
"eslint-plugin-import": "^2.26.0",
|
|
64
64
|
"jest": "^28.1.3",
|
|
65
65
|
"jest-environment-jsdom": "^28.1.3",
|
|
66
|
-
"ts-jest": "^28.0.
|
|
66
|
+
"ts-jest": "^28.0.8",
|
|
67
67
|
"typescript": "^4.7.4"
|
|
68
68
|
}
|
|
69
69
|
}
|
package/src/DataTypes.ts
CHANGED
|
@@ -171,7 +171,7 @@ export namespace DataTypes {
|
|
|
171
171
|
/**
|
|
172
172
|
* Enum base type
|
|
173
173
|
*/
|
|
174
|
-
export type EnumBase
|
|
174
|
+
export type EnumBase = Record<string, EnumValue>;
|
|
175
175
|
|
|
176
176
|
/**
|
|
177
177
|
* Function type
|
|
@@ -213,6 +213,15 @@ export namespace DataTypes {
|
|
|
213
213
|
label: string;
|
|
214
214
|
};
|
|
215
215
|
|
|
216
|
+
/**
|
|
217
|
+
* Item with id and label dynamic type
|
|
218
|
+
*/
|
|
219
|
+
export type IdLabelType<
|
|
220
|
+
I extends string,
|
|
221
|
+
L extends string,
|
|
222
|
+
D extends IdType = number
|
|
223
|
+
> = DIS<I, D> & DIS<L, string>;
|
|
224
|
+
|
|
216
225
|
/**
|
|
217
226
|
* Get specific type keys
|
|
218
227
|
*/
|
|
@@ -245,6 +254,16 @@ export namespace DataTypes {
|
|
|
245
254
|
compatibleName?: string[];
|
|
246
255
|
}>;
|
|
247
256
|
|
|
257
|
+
/**
|
|
258
|
+
* Dynamic interface with multiple properties
|
|
259
|
+
*/
|
|
260
|
+
export type DI<K extends readonly string[], T> = { [P in K[number]]: T };
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Dynamic interface with single property
|
|
264
|
+
*/
|
|
265
|
+
export type DIS<K extends string, T> = { [P in K]: T };
|
|
266
|
+
|
|
248
267
|
/**
|
|
249
268
|
* Convert value to target type
|
|
250
269
|
* @param input Input value
|
|
@@ -504,16 +523,14 @@ export namespace DataTypes {
|
|
|
504
523
|
* @param key Property name
|
|
505
524
|
* @returns Value
|
|
506
525
|
*/
|
|
507
|
-
export function getValue<T extends {}>(
|
|
526
|
+
export function getValue<T extends {}, K extends keyof T | string>(
|
|
508
527
|
data: T | undefined | null,
|
|
509
|
-
key:
|
|
510
|
-
):
|
|
511
|
-
if (data
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
if (typeof value === 'number') return value;
|
|
516
|
-
return convert(value, 'string');
|
|
528
|
+
key: K
|
|
529
|
+
): K extends keyof T ? T[K] : undefined {
|
|
530
|
+
if (data != null && typeof key === 'string' && key in data) {
|
|
531
|
+
return Reflect.get(data, key);
|
|
532
|
+
}
|
|
533
|
+
return undefined as any;
|
|
517
534
|
}
|
|
518
535
|
|
|
519
536
|
/**
|
|
@@ -529,6 +546,22 @@ export namespace DataTypes {
|
|
|
529
546
|
return data[key];
|
|
530
547
|
}
|
|
531
548
|
|
|
549
|
+
/**
|
|
550
|
+
* Get object id field value 1
|
|
551
|
+
* @param data Data
|
|
552
|
+
* @param key Property name
|
|
553
|
+
* @returns Id value
|
|
554
|
+
*/
|
|
555
|
+
export function getIdValue1<T extends {}, K extends keyof T | string>(
|
|
556
|
+
data: T | undefined | null,
|
|
557
|
+
key: K
|
|
558
|
+
): K extends keyof T ? (T[K] extends number ? number : string) : undefined {
|
|
559
|
+
const value = getValue(data, key);
|
|
560
|
+
if (value == null) return undefined as any;
|
|
561
|
+
if (typeof value === 'number') return value as any;
|
|
562
|
+
return `${value}` as any;
|
|
563
|
+
}
|
|
564
|
+
|
|
532
565
|
/**
|
|
533
566
|
* Get object string field value
|
|
534
567
|
* @param data Data
|
|
@@ -538,10 +571,11 @@ export namespace DataTypes {
|
|
|
538
571
|
export function getStringValue<T extends {}>(
|
|
539
572
|
data: T | undefined | null,
|
|
540
573
|
key: keyof T | string
|
|
541
|
-
): string | undefined
|
|
574
|
+
): string | undefined {
|
|
542
575
|
const value = getValue(data, key);
|
|
543
|
-
if (
|
|
544
|
-
return value;
|
|
576
|
+
if (value == null) return undefined;
|
|
577
|
+
if (typeof value === 'string') return value;
|
|
578
|
+
return `${value}`;
|
|
545
579
|
}
|
|
546
580
|
|
|
547
581
|
/**
|