nestjs-r2-storage 1.2.5 → 1.2.6

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
@@ -389,6 +389,12 @@ R2StorageModule.forRootAsync({
389
389
 
390
390
  ## Changelog
391
391
 
392
+ ### v1.2.6 (2025-04-20)
393
+
394
+ - Refactored getNestedValue: access key first, then handle array segments
395
+ - Refactored setNestedValue: proper handling of empty brackets [] and indexed arrays [0]
396
+ - Robust parsing of paths: user.profile.image, gallery[].photo, variants[0].images[].url
397
+
392
398
  ### v1.2.5 (2025-04-20)
393
399
 
394
400
  - Rewrote parseFieldPath to split by dot then parse each segment (fixes regex state bugs)
@@ -15,11 +15,12 @@ function parseFieldPath(path) {
15
15
  const match = part.match(/^([^\[\]]+)(?:\[(\d*)\])?$/);
16
16
  if (!match)
17
17
  continue;
18
+ const key = match[1];
18
19
  const indexRaw = match[2];
19
20
  const hasIndex = indexRaw !== undefined && indexRaw !== "";
20
21
  const hasEmptyBrackets = indexRaw === "";
21
22
  segments.push({
22
- key: match[1],
23
+ key,
23
24
  isArray: hasIndex || hasEmptyBrackets,
24
25
  arrayIndex: hasIndex ? parseInt(indexRaw, 10) : undefined,
25
26
  });
@@ -27,111 +28,92 @@ function parseFieldPath(path) {
27
28
  return { segments };
28
29
  }
29
30
  function getNestedValue(obj, path) {
30
- if (!path || !obj) {
31
+ if (!path || !obj)
31
32
  return undefined;
32
- }
33
33
  const { segments } = parseFieldPath(path);
34
34
  let current = obj;
35
35
  for (let i = 0; i < segments.length; i++) {
36
36
  const segment = segments[i];
37
- if (current === null || current === undefined) {
37
+ if (current == null)
38
+ return undefined;
39
+ current = current[segment.key];
40
+ if (current == null)
38
41
  return undefined;
39
- }
40
42
  if (segment.isArray) {
41
- if (!Array.isArray(current)) {
43
+ if (!Array.isArray(current))
42
44
  return undefined;
43
- }
44
- if (i === segments.length - 1) {
45
- return current;
46
- }
47
- const nextSegment = segments[i + 1];
48
- if (nextSegment &&
49
- nextSegment.key &&
50
- !nextSegment.isArray &&
51
- nextSegment.arrayIndex === undefined) {
52
- return current;
53
- }
54
45
  if (segment.arrayIndex !== undefined) {
55
46
  current = current[segment.arrayIndex];
47
+ continue;
56
48
  }
57
- else {
49
+ if (i === segments.length - 1)
50
+ return current;
51
+ const next = segments[i + 1];
52
+ if (next && !next.isArray && next.arrayIndex === undefined) {
58
53
  return current;
59
54
  }
60
55
  }
61
- else {
62
- current = current[segment.key];
63
- }
64
56
  }
65
57
  return current;
66
58
  }
67
59
  function setNestedValue(obj, path, value) {
68
- if (!path) {
60
+ if (!path)
69
61
  return obj;
70
- }
71
62
  const { segments } = parseFieldPath(path);
72
63
  const result = { ...obj };
73
64
  let current = result;
74
- for (let i = 0; i < segments.length - 1; i++) {
65
+ for (let i = 0; i < segments.length; i++) {
75
66
  const segment = segments[i];
76
- const nextSegment = segments[i + 1];
77
- if (current[segment.key] === undefined) {
78
- current[segment.key] = nextSegment.isArray ? [] : {};
79
- }
80
- else if (segment.isArray) {
81
- current[segment.key] = [...current[segment.key]];
67
+ const isLast = i === segments.length - 1;
68
+ if (current[segment.key] == null) {
69
+ current[segment.key] = segment.isArray ? [] : {};
82
70
  }
83
- else {
84
- current[segment.key] = { ...current[segment.key] };
85
- }
86
- current = current[segment.key];
87
- if (segment.isArray && segment.arrayIndex !== undefined) {
88
- if (!Array.isArray(current)) {
89
- current = [];
71
+ if (segment.isArray) {
72
+ if (!Array.isArray(current[segment.key])) {
73
+ current[segment.key] = [];
90
74
  }
91
- if (current[segment.arrayIndex] === undefined) {
92
- current[segment.arrayIndex] = {};
75
+ const arr = current[segment.key];
76
+ if (segment.arrayIndex !== undefined) {
77
+ if (!arr[segment.arrayIndex]) {
78
+ arr[segment.arrayIndex] = {};
79
+ }
80
+ if (isLast) {
81
+ arr[segment.arrayIndex] = value;
82
+ }
83
+ else {
84
+ arr[segment.arrayIndex] = { ...arr[segment.arrayIndex] };
85
+ current = arr[segment.arrayIndex];
86
+ }
93
87
  }
94
88
  else {
95
- current[segment.arrayIndex] = { ...current[segment.arrayIndex] };
96
- }
97
- current = current[segment.arrayIndex];
98
- }
99
- else if (segment.isArray && nextSegment && nextSegment.isArray) {
100
- if (!Array.isArray(current)) {
101
- current = [];
89
+ if (isLast) {
90
+ arr.push(value);
91
+ }
92
+ else {
93
+ const newItem = {};
94
+ arr.push(newItem);
95
+ current = newItem;
96
+ }
102
97
  }
103
- current.push({});
104
- current = current[current.length - 1];
105
- }
106
- }
107
- const lastSegment = segments[segments.length - 1];
108
- if (lastSegment.isArray) {
109
- if (!Array.isArray(current)) {
110
- current = [];
111
- }
112
- if (lastSegment.arrayIndex !== undefined) {
113
- current[lastSegment.arrayIndex] = {
114
- ...current[lastSegment.arrayIndex],
115
- [lastSegment.key]: value,
116
- };
117
98
  }
118
99
  else {
119
- current.push(value);
100
+ if (isLast) {
101
+ current[segment.key] = value;
102
+ }
103
+ else {
104
+ current[segment.key] = { ...current[segment.key] };
105
+ current = current[segment.key];
106
+ }
120
107
  }
121
108
  }
122
- else {
123
- current[lastSegment.key] = value;
124
- }
125
109
  return result;
126
110
  }
127
111
  function collectNestedValues(obj, path) {
128
112
  const value = getNestedValue(obj, path);
129
- if (value === undefined) {
113
+ if (value === undefined)
130
114
  return [];
131
- }
132
- if (Array.isArray(value)) {
115
+ if (Array.isArray(value))
133
116
  return value;
134
- }
135
117
  return [value];
136
118
  }
137
119
  function isArrayPath(path) {
@@ -142,12 +124,12 @@ function getArrayBasePath(path) {
142
124
  return match ? match[1] : path;
143
125
  }
144
126
  function getArrayElementPath(path) {
145
- return path.replace('[]', '');
127
+ return path.replace("[]", "");
146
128
  }
147
129
  function getAllArrayItemPaths(path, arrayLength) {
148
130
  const basePath = getArrayBasePath(path);
149
131
  const elementPath = getArrayElementPath(path);
150
- const cleanElementPath = elementPath.replace(/^\./, '');
132
+ const cleanElementPath = elementPath.replace(/^\./, "");
151
133
  const paths = [];
152
134
  for (let i = 0; i < arrayLength; i++) {
153
135
  paths.push(`${basePath}[${i}].${cleanElementPath}`);
@@ -1 +1 @@
1
- {"version":3,"file":"nested-value.util.js","sourceRoot":"","sources":["../../../src/r2-storage/utils/nested-value.util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nested-value.util.js","sourceRoot":"","sources":["../../../src/r2-storage/utils/nested-value.util.ts"],"names":[],"mappings":"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"}