@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 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|
@@ -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')).toBe('true');
96
- expect(DataTypes.getValue(data, 'unknown')).toBeNull();
112
+ expect(DataTypes.getValue(data, 'flag')).toBeTruthy();
113
+ expect(DataTypes.getValue(data, 'unknown')).toBeUndefined();
97
114
  });
98
115
 
99
116
  test('Tests for getIdValue', () => {
@@ -133,7 +133,7 @@ export declare namespace DataTypes {
133
133
  /**
134
134
  * Enum base type
135
135
  */
136
- type EnumBase<T extends EnumValue = EnumValue> = Record<string, T>;
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 | string): IdType | undefined | null;
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 | null;
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
@@ -290,14 +290,10 @@ var DataTypes;
290
290
  * @returns Value
291
291
  */
292
292
  function getValue(data, key) {
293
- if (data == null)
294
- return null;
295
- const value = typeof key === 'string' ? Reflect.get(data, key) : data[key];
296
- if (value == null)
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 (typeof value === 'number')
322
- return value.toString();
323
- return value;
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
  /**
@@ -133,7 +133,7 @@ export declare namespace DataTypes {
133
133
  /**
134
134
  * Enum base type
135
135
  */
136
- type EnumBase<T extends EnumValue = EnumValue> = Record<string, T>;
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 | string): IdType | undefined | null;
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 | null;
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
@@ -287,14 +287,10 @@ export var DataTypes;
287
287
  * @returns Value
288
288
  */
289
289
  function getValue(data, key) {
290
- if (data == null)
291
- return null;
292
- const value = typeof key === 'string' ? Reflect.get(data, key) : data[key];
293
- if (value == null)
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 (typeof value === 'number')
319
- return value.toString();
320
- return value;
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.44",
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.6",
59
- "@typescript-eslint/eslint-plugin": "^5.33.0",
60
- "@typescript-eslint/parser": "^5.33.0",
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.7",
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<T extends EnumValue = EnumValue> = Record<string, T>;
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: keyof T | string
510
- ): IdType | undefined | null {
511
- if (data == null) return null;
512
- const value =
513
- typeof key === 'string' ? Reflect.get(data, key) : data[key];
514
- if (value == null) return null;
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 | null {
574
+ ): string | undefined {
542
575
  const value = getValue(data, key);
543
- if (typeof value === 'number') return value.toString();
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
  /**