@etsoo/shared 1.1.18 → 1.1.21

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
@@ -68,6 +68,7 @@ Data type definitions and type safe functions
68
68
  |IdType|Number and string combination id type|
69
69
  |IdItem|Item with id or id generator|
70
70
  |IdLabelItem|Item with id and label|
71
+ |KeyCollection|Key collection, like { key1: {}, key2: {} }|
71
72
  |Simple|Basic or basic array type|
72
73
  |SimpleEnum|Simple type enum|
73
74
  |SimpleNames|Simple type names|
@@ -190,5 +191,6 @@ String and other related utilities
190
191
  |objectUpdated|Get the new object's updated fields contrast to the previous object|
191
192
  |parseString|Parse string (JSON) to specific type|
192
193
  |removeNonLetters|Remove non letters (0-9, a-z, A-Z)|
194
+ |replaceNullOrEmpty|Replace null or empty with default value|
193
195
  |setLabels|Set source with new labels|
194
196
  |snakeNameToWord|Snake name to works, 'snake_name' to 'Snake Name'|
@@ -126,6 +126,12 @@ test('Tests for removeNonLetters', () => {
126
126
  expect(input.removeNonLetters()).toBe(result);
127
127
  });
128
128
 
129
+ test('Tests for replaceNullOrEmpty', () => {
130
+ expect(Utils.replaceNullOrEmpty('a', 's')).toBe('a');
131
+ expect(Utils.replaceNullOrEmpty(null, 's')).toBe('s');
132
+ expect(Utils.replaceNullOrEmpty(' ', 's')).toBe('s');
133
+ });
134
+
129
135
  test('Tests for objectEqual', () => {
130
136
  const obj1 = { a: 1, b: 'abc', c: true, d: null, f: [1, 2] };
131
137
  const obj2 = { a: '1', b: 'abc', c: true, f: [1, 2] };
@@ -120,6 +120,12 @@ export declare namespace DataTypes {
120
120
  type AddOrEditType<T, Editing extends boolean> = (Editing extends true ? T : Partial<T>) & {
121
121
  changedFields?: string[];
122
122
  };
123
+ /**
124
+ * Key collection, like { key1: {}, key2: {} }
125
+ */
126
+ type KeyCollection<K extends readonly string[], I extends {}> = {
127
+ [index in K[number]]: I;
128
+ };
123
129
  /**
124
130
  * Enum value type
125
131
  */
@@ -177,7 +183,7 @@ export declare namespace DataTypes {
177
183
  /**
178
184
  * Culture definiton
179
185
  */
180
- type CultureDefinition = Readonly<{
186
+ type CultureDefinition<T extends {} = StringRecord> = Readonly<{
181
187
  /**
182
188
  * Name, like zh-CN
183
189
  */
@@ -189,7 +195,7 @@ export declare namespace DataTypes {
189
195
  /**
190
196
  * Resources
191
197
  */
192
- readonly resources: Readonly<StringRecord>;
198
+ readonly resources: Readonly<T>;
193
199
  /**
194
200
  * Compatible names
195
201
  */
@@ -54,10 +54,15 @@ export declare namespace DomUtils {
54
54
  * @param items Available cultures
55
55
  * @param culture Detected culture
56
56
  */
57
- const getCulture: (items: DataTypes.CultureDefinition[], culture: string) => Readonly<{
57
+ const getCulture: <T extends {}>(items: Readonly<{
58
58
  readonly name: string;
59
59
  readonly label: string;
60
- readonly resources: Readonly<DataTypes.StringRecord>;
60
+ readonly resources: Readonly<T>;
61
+ readonly compatibleName?: string[] | undefined;
62
+ }>[], culture: string) => Readonly<{
63
+ readonly name: string;
64
+ readonly label: string;
65
+ readonly resources: Readonly<T>;
61
66
  readonly compatibleName?: string[] | undefined;
62
67
  }> | undefined;
63
68
  /**
@@ -189,6 +189,13 @@ export declare namespace Utils {
189
189
  * @returns Result
190
190
  */
191
191
  const removeNonLetters: (input?: string | undefined) => string | undefined;
192
+ /**
193
+ * Replace null or empty with default value
194
+ * @param input Input string
195
+ * @param defaultValue Default value
196
+ * @returns Result
197
+ */
198
+ const replaceNullOrEmpty: (input: string | null | undefined, defaultValue: string) => string;
192
199
  /**
193
200
  * Set source with new labels
194
201
  * @param source Source
package/lib/cjs/Utils.js CHANGED
@@ -371,6 +371,17 @@ var Utils;
371
371
  Utils.removeNonLetters = (input) => {
372
372
  return input === null || input === void 0 ? void 0 : input.removeNonLetters();
373
373
  };
374
+ /**
375
+ * Replace null or empty with default value
376
+ * @param input Input string
377
+ * @param defaultValue Default value
378
+ * @returns Result
379
+ */
380
+ Utils.replaceNullOrEmpty = (input, defaultValue) => {
381
+ if (input == null || input.trim() === '')
382
+ return defaultValue;
383
+ return input;
384
+ };
374
385
  /**
375
386
  * Set source with new labels
376
387
  * @param source Source
@@ -120,6 +120,12 @@ export declare namespace DataTypes {
120
120
  type AddOrEditType<T, Editing extends boolean> = (Editing extends true ? T : Partial<T>) & {
121
121
  changedFields?: string[];
122
122
  };
123
+ /**
124
+ * Key collection, like { key1: {}, key2: {} }
125
+ */
126
+ type KeyCollection<K extends readonly string[], I extends {}> = {
127
+ [index in K[number]]: I;
128
+ };
123
129
  /**
124
130
  * Enum value type
125
131
  */
@@ -177,7 +183,7 @@ export declare namespace DataTypes {
177
183
  /**
178
184
  * Culture definiton
179
185
  */
180
- type CultureDefinition = Readonly<{
186
+ type CultureDefinition<T extends {} = StringRecord> = Readonly<{
181
187
  /**
182
188
  * Name, like zh-CN
183
189
  */
@@ -189,7 +195,7 @@ export declare namespace DataTypes {
189
195
  /**
190
196
  * Resources
191
197
  */
192
- readonly resources: Readonly<StringRecord>;
198
+ readonly resources: Readonly<T>;
193
199
  /**
194
200
  * Compatible names
195
201
  */
@@ -54,10 +54,15 @@ export declare namespace DomUtils {
54
54
  * @param items Available cultures
55
55
  * @param culture Detected culture
56
56
  */
57
- const getCulture: (items: DataTypes.CultureDefinition[], culture: string) => Readonly<{
57
+ const getCulture: <T extends {}>(items: Readonly<{
58
58
  readonly name: string;
59
59
  readonly label: string;
60
- readonly resources: Readonly<DataTypes.StringRecord>;
60
+ readonly resources: Readonly<T>;
61
+ readonly compatibleName?: string[] | undefined;
62
+ }>[], culture: string) => Readonly<{
63
+ readonly name: string;
64
+ readonly label: string;
65
+ readonly resources: Readonly<T>;
61
66
  readonly compatibleName?: string[] | undefined;
62
67
  }> | undefined;
63
68
  /**
@@ -189,6 +189,13 @@ export declare namespace Utils {
189
189
  * @returns Result
190
190
  */
191
191
  const removeNonLetters: (input?: string | undefined) => string | undefined;
192
+ /**
193
+ * Replace null or empty with default value
194
+ * @param input Input string
195
+ * @param defaultValue Default value
196
+ * @returns Result
197
+ */
198
+ const replaceNullOrEmpty: (input: string | null | undefined, defaultValue: string) => string;
192
199
  /**
193
200
  * Set source with new labels
194
201
  * @param source Source
package/lib/mjs/Utils.js CHANGED
@@ -368,6 +368,17 @@ export var Utils;
368
368
  Utils.removeNonLetters = (input) => {
369
369
  return input === null || input === void 0 ? void 0 : input.removeNonLetters();
370
370
  };
371
+ /**
372
+ * Replace null or empty with default value
373
+ * @param input Input string
374
+ * @param defaultValue Default value
375
+ * @returns Result
376
+ */
377
+ Utils.replaceNullOrEmpty = (input, defaultValue) => {
378
+ if (input == null || input.trim() === '')
379
+ return defaultValue;
380
+ return input;
381
+ };
371
382
  /**
372
383
  * Set source with new labels
373
384
  * @param source Source
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etsoo/shared",
3
- "version": "1.1.18",
3
+ "version": "1.1.21",
4
4
  "description": "TypeScript shared utilities and functions",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/mjs/index.js",
@@ -55,11 +55,11 @@
55
55
  "dependencies": {},
56
56
  "devDependencies": {
57
57
  "@types/jest": "^27.4.1",
58
- "@typescript-eslint/eslint-plugin": "^5.16.0",
59
- "@typescript-eslint/parser": "^5.16.0",
60
- "eslint": "^8.11.0",
58
+ "@typescript-eslint/eslint-plugin": "^5.20.0",
59
+ "@typescript-eslint/parser": "^5.20.0",
60
+ "eslint": "^8.14.0",
61
61
  "eslint-config-airbnb-base": "^15.0.0",
62
- "eslint-plugin-import": "^2.25.4",
62
+ "eslint-plugin-import": "^2.26.0",
63
63
  "jest": "^27.5.1",
64
64
  "ts-jest": "^27.1.4",
65
65
  "typescript": "^4.6.3"
package/src/DataTypes.ts CHANGED
@@ -156,6 +156,13 @@ export namespace DataTypes {
156
156
  Editing extends boolean
157
157
  > = (Editing extends true ? T : Partial<T>) & { changedFields?: string[] };
158
158
 
159
+ /**
160
+ * Key collection, like { key1: {}, key2: {} }
161
+ */
162
+ export type KeyCollection<K extends readonly string[], I extends {}> = {
163
+ [index in K[number]]: I;
164
+ };
165
+
159
166
  /**
160
167
  * Enum value type
161
168
  */
@@ -230,7 +237,7 @@ export namespace DataTypes {
230
237
  /**
231
238
  * Culture definiton
232
239
  */
233
- export type CultureDefinition = Readonly<{
240
+ export type CultureDefinition<T extends {} = StringRecord> = Readonly<{
234
241
  /**
235
242
  * Name, like zh-CN
236
243
  */
@@ -244,7 +251,7 @@ export namespace DataTypes {
244
251
  /**
245
252
  * Resources
246
253
  */
247
- readonly resources: Readonly<StringRecord>;
254
+ readonly resources: Readonly<T>;
248
255
 
249
256
  /**
250
257
  * Compatible names
package/src/DomUtils.ts CHANGED
@@ -281,8 +281,8 @@ export namespace DomUtils {
281
281
  * @param items Available cultures
282
282
  * @param culture Detected culture
283
283
  */
284
- export const getCulture = (
285
- items: DataTypes.CultureDefinition[],
284
+ export const getCulture = <T extends {}>(
285
+ items: DataTypes.CultureDefinition<T>[],
286
286
  culture: string
287
287
  ) => {
288
288
  if (items.length === 0) {
package/src/Utils.ts CHANGED
@@ -516,6 +516,20 @@ export namespace Utils {
516
516
  return input?.removeNonLetters();
517
517
  };
518
518
 
519
+ /**
520
+ * Replace null or empty with default value
521
+ * @param input Input string
522
+ * @param defaultValue Default value
523
+ * @returns Result
524
+ */
525
+ export const replaceNullOrEmpty = (
526
+ input: string | null | undefined,
527
+ defaultValue: string
528
+ ) => {
529
+ if (input == null || input.trim() === '') return defaultValue;
530
+ return input;
531
+ };
532
+
519
533
  /**
520
534
  * Set source with new labels
521
535
  * @param source Source