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
|
|
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
|
|
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
|
-
|
|
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
|
|
65
|
+
for (let i = 0; i < segments.length; i++) {
|
|
75
66
|
const segment = segments[i];
|
|
76
|
-
const
|
|
77
|
-
if (current[segment.key]
|
|
78
|
-
current[segment.key] =
|
|
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
|
-
|
|
84
|
-
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
|
-
|
|
92
|
-
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"nested-value.util.js","sourceRoot":"","sources":["../../../src/r2-storage/utils/nested-value.util.ts"],"names":[],"mappings":"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"}
|