@etsoo/shared 1.2.40 → 1.2.41

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.
@@ -306,6 +306,16 @@ test('Tests for setNestedValue', () => {
306
306
  expect(Reflect.get((obj.jsonData as any).newProperty, 'value')).toBe(125);
307
307
  });
308
308
 
309
+ test('Tests for setNestedValue removal', () => {
310
+ const obj = { jsonData: { photoSize: [200, 100], supportResizing: true } };
311
+
312
+ Utils.setNestedValue(obj, 'jsonData.photoSize', undefined);
313
+ expect(obj.jsonData.photoSize).toBeUndefined();
314
+
315
+ Utils.setNestedValue(obj, 'jsonData.supportResizing', undefined);
316
+ expect(obj.jsonData.supportResizing).toBeUndefined();
317
+ });
318
+
309
319
  test('Tests for sortByFavor', () => {
310
320
  const items = [1, 2, 3, 4, 5, 6, 7];
311
321
  expect(Utils.sortByFavor(items, [5, 1, 3])).toStrictEqual([
@@ -267,8 +267,9 @@ export declare namespace Utils {
267
267
  * @param data Data
268
268
  * @param name Field name, support property chain like 'jsonData.logSize'
269
269
  * @param value Value
270
+ * @param keepNull Keep null value or not
270
271
  */
271
- function setNestedValue(data: object, name: string, value: unknown): void;
272
+ function setNestedValue(data: object, name: string, value: unknown, keepNull?: boolean): void;
272
273
  /**
273
274
  * Parse path similar with node.js path.parse
274
275
  * @param path Input path
package/lib/cjs/Utils.js CHANGED
@@ -541,18 +541,26 @@ var Utils;
541
541
  * @param data Data
542
542
  * @param name Field name, support property chain like 'jsonData.logSize'
543
543
  * @param value Value
544
+ * @param keepNull Keep null value or not
544
545
  */
545
- function setNestedValue(data, name, value) {
546
+ function setNestedValue(data, name, value, keepNull) {
546
547
  const properties = name.split('.');
547
548
  const len = properties.length;
548
- if (len === 1)
549
- Reflect.set(data, name, value);
549
+ if (len === 1) {
550
+ if (value == null && keepNull !== true) {
551
+ Reflect.deleteProperty(data, name);
552
+ }
553
+ else {
554
+ Reflect.set(data, name, value);
555
+ }
556
+ }
550
557
  else {
551
558
  let curr = data;
552
559
  for (let i = 0; i < len; i++) {
553
560
  const property = properties[i];
554
561
  if (i + 1 === len) {
555
- Reflect.set(curr, property, value);
562
+ setNestedValue(curr, property, value, keepNull);
563
+ // Reflect.set(curr, property, value);
556
564
  }
557
565
  else {
558
566
  let p = Reflect.get(curr, property);
@@ -267,8 +267,9 @@ export declare namespace Utils {
267
267
  * @param data Data
268
268
  * @param name Field name, support property chain like 'jsonData.logSize'
269
269
  * @param value Value
270
+ * @param keepNull Keep null value or not
270
271
  */
271
- function setNestedValue(data: object, name: string, value: unknown): void;
272
+ function setNestedValue(data: object, name: string, value: unknown, keepNull?: boolean): void;
272
273
  /**
273
274
  * Parse path similar with node.js path.parse
274
275
  * @param path Input path
package/lib/mjs/Utils.js CHANGED
@@ -535,18 +535,26 @@ export var Utils;
535
535
  * @param data Data
536
536
  * @param name Field name, support property chain like 'jsonData.logSize'
537
537
  * @param value Value
538
+ * @param keepNull Keep null value or not
538
539
  */
539
- function setNestedValue(data, name, value) {
540
+ function setNestedValue(data, name, value, keepNull) {
540
541
  const properties = name.split('.');
541
542
  const len = properties.length;
542
- if (len === 1)
543
- Reflect.set(data, name, value);
543
+ if (len === 1) {
544
+ if (value == null && keepNull !== true) {
545
+ Reflect.deleteProperty(data, name);
546
+ }
547
+ else {
548
+ Reflect.set(data, name, value);
549
+ }
550
+ }
544
551
  else {
545
552
  let curr = data;
546
553
  for (let i = 0; i < len; i++) {
547
554
  const property = properties[i];
548
555
  if (i + 1 === len) {
549
- Reflect.set(curr, property, value);
556
+ setNestedValue(curr, property, value, keepNull);
557
+ // Reflect.set(curr, property, value);
550
558
  }
551
559
  else {
552
560
  let p = Reflect.get(curr, property);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etsoo/shared",
3
- "version": "1.2.40",
3
+ "version": "1.2.41",
4
4
  "description": "TypeScript shared utilities and functions",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/mjs/index.js",
@@ -58,7 +58,7 @@
58
58
  "@types/lodash.isequal": "^4.5.8",
59
59
  "jest": "^29.7.0",
60
60
  "jest-environment-jsdom": "^29.7.0",
61
- "ts-jest": "^29.1.2",
61
+ "ts-jest": "^29.1.4",
62
62
  "typescript": "^5.4.5"
63
63
  },
64
64
  "dependencies": {
package/src/Utils.ts CHANGED
@@ -735,18 +735,30 @@ export namespace Utils {
735
735
  * @param data Data
736
736
  * @param name Field name, support property chain like 'jsonData.logSize'
737
737
  * @param value Value
738
+ * @param keepNull Keep null value or not
738
739
  */
739
- export function setNestedValue(data: object, name: string, value: unknown) {
740
+ export function setNestedValue(
741
+ data: object,
742
+ name: string,
743
+ value: unknown,
744
+ keepNull?: boolean
745
+ ) {
740
746
  const properties = name.split('.');
741
747
  const len = properties.length;
742
- if (len === 1) Reflect.set(data, name, value);
743
- else {
748
+ if (len === 1) {
749
+ if (value == null && keepNull !== true) {
750
+ Reflect.deleteProperty(data, name);
751
+ } else {
752
+ Reflect.set(data, name, value);
753
+ }
754
+ } else {
744
755
  let curr = data;
745
756
  for (let i = 0; i < len; i++) {
746
757
  const property = properties[i];
747
758
 
748
759
  if (i + 1 === len) {
749
- Reflect.set(curr, property, value);
760
+ setNestedValue(curr, property, value, keepNull);
761
+ // Reflect.set(curr, property, value);
750
762
  } else {
751
763
  let p = Reflect.get(curr, property);
752
764
  if (p == null) {