firetender 0.10.1 → 0.10.2
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/dist/proxies.js +31 -16
- package/dist/proxies.js.map +1 -1
- package/package.json +1 -1
- package/src/proxies.ts +32 -19
package/dist/proxies.js
CHANGED
|
@@ -130,27 +130,35 @@ function watchArrayForChanges(arrayPath, array, fieldSchema, field, addToUpdateL
|
|
|
130
130
|
// data, and mark the entire top-level array as needing to be written.
|
|
131
131
|
const propertySchema = getPropertySchema(field, fieldSchema, propertyKey);
|
|
132
132
|
processedValue = propertySchema.parse(processedValue);
|
|
133
|
-
|
|
133
|
+
let result = true;
|
|
134
|
+
if (processedValue === undefined) {
|
|
135
|
+
result = Reflect.deleteProperty(target, propertyKey);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
result = Reflect.set(target, propertyKey, processedValue);
|
|
139
|
+
}
|
|
134
140
|
addToUpdateList(arrayPath, array);
|
|
135
141
|
return result;
|
|
136
142
|
},
|
|
137
143
|
deleteProperty(target, propertyKey) {
|
|
138
144
|
(0, ts_helpers_1.assertKeyIsString)(propertyKey);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
addToUpdateList(arrayPath, (0, firestore_deps_1.arrayRemove)(removedValues[0]));
|
|
145
|
+
let result = true;
|
|
146
|
+
if (target instanceof Array) {
|
|
147
|
+
// Calling Reflect.deleteProperty on an array item sets it to undefined,
|
|
148
|
+
// which causes Firestore writes to fail if ignoreUndefinedProperties is
|
|
149
|
+
// not set, and which is generally not what we want. Hence splice.
|
|
150
|
+
const index = Number(propertyKey);
|
|
151
|
+
if (target.splice(index, 1).length !== 1) {
|
|
152
|
+
throw RangeError(`Failed to delete array item with index ${propertyKey}. Out of bounds?`);
|
|
153
|
+
}
|
|
149
154
|
}
|
|
150
155
|
else {
|
|
151
|
-
|
|
156
|
+
result = Reflect.deleteProperty(target, propertyKey);
|
|
152
157
|
}
|
|
153
|
-
|
|
158
|
+
// Firestore's arrayRemove() deletes all matching entries, which is not
|
|
159
|
+
// desired. So we have to rewrite the full array.
|
|
160
|
+
addToUpdateList(arrayPath, array);
|
|
161
|
+
return result;
|
|
154
162
|
},
|
|
155
163
|
});
|
|
156
164
|
}
|
|
@@ -224,11 +232,18 @@ function watchFieldForChanges(fieldPath, fieldSchema, field, addToUpdateList) {
|
|
|
224
232
|
}
|
|
225
233
|
// A property of this object is being set to a new value. Parse the new
|
|
226
234
|
// value with the appropriate schema, set it in the local data, and mark
|
|
227
|
-
// the entire top-level array as needing to be written.
|
|
235
|
+
// the entire top-level array as needing to be written. If the new value
|
|
236
|
+
// is undefined, delete the property.
|
|
228
237
|
const propertySchema = getPropertySchema(field, fieldSchema, propertyKey);
|
|
229
238
|
processedValue = propertySchema.parse(processedValue);
|
|
230
|
-
|
|
231
|
-
|
|
239
|
+
if (processedValue === undefined) {
|
|
240
|
+
addToUpdateList([...fieldPath, propertyKey], (0, firestore_deps_1.deleteField)());
|
|
241
|
+
return Reflect.deleteProperty(target, propertyKey);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
addToUpdateList([...fieldPath, propertyKey], processedValue);
|
|
245
|
+
return Reflect.set(target, propertyKey, processedValue);
|
|
246
|
+
}
|
|
232
247
|
},
|
|
233
248
|
deleteProperty(target, propertyKey) {
|
|
234
249
|
(0, ts_helpers_1.assertKeyIsString)(propertyKey);
|
package/dist/proxies.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxies.js","sourceRoot":"","sources":["../src/proxies.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,
|
|
1
|
+
{"version":3,"file":"proxies.js","sourceRoot":"","sources":["../src/proxies.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "firetender",
|
|
3
3
|
"displayName": "Firetender",
|
|
4
4
|
"description": "Typescript wrapper for Firestore documents",
|
|
5
|
-
"version": "0.10.
|
|
5
|
+
"version": "0.10.2",
|
|
6
6
|
"author": "Jake Hartman",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"homepage": "https://github.com/jakes-space/firetender",
|
package/src/proxies.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { deleteField } from "./firestore-deps";
|
|
4
4
|
import { assertKeyIsString } from "./ts-helpers";
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -158,28 +158,35 @@ export function watchArrayForChanges<
|
|
|
158
158
|
// data, and mark the entire top-level array as needing to be written.
|
|
159
159
|
const propertySchema = getPropertySchema(field, fieldSchema, propertyKey);
|
|
160
160
|
processedValue = propertySchema.parse(processedValue);
|
|
161
|
-
|
|
161
|
+
let result = true;
|
|
162
|
+
if (processedValue === undefined) {
|
|
163
|
+
result = Reflect.deleteProperty(target, propertyKey);
|
|
164
|
+
} else {
|
|
165
|
+
result = Reflect.set(target, propertyKey, processedValue);
|
|
166
|
+
}
|
|
162
167
|
addToUpdateList(arrayPath, array);
|
|
163
168
|
return result;
|
|
164
169
|
},
|
|
165
170
|
deleteProperty(target, propertyKey) {
|
|
166
171
|
assertKeyIsString(propertyKey);
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
addToUpdateList(arrayPath, arrayRemove(removedValues[0]));
|
|
172
|
+
let result = true;
|
|
173
|
+
if ((target as any) instanceof Array) {
|
|
174
|
+
// Calling Reflect.deleteProperty on an array item sets it to undefined,
|
|
175
|
+
// which causes Firestore writes to fail if ignoreUndefinedProperties is
|
|
176
|
+
// not set, and which is generally not what we want. Hence splice.
|
|
177
|
+
const index = Number(propertyKey);
|
|
178
|
+
if (target.splice(index, 1).length !== 1) {
|
|
179
|
+
throw RangeError(
|
|
180
|
+
`Failed to delete array item with index ${propertyKey}. Out of bounds?`
|
|
181
|
+
);
|
|
182
|
+
}
|
|
179
183
|
} else {
|
|
180
|
-
|
|
184
|
+
result = Reflect.deleteProperty(target, propertyKey);
|
|
181
185
|
}
|
|
182
|
-
|
|
186
|
+
// Firestore's arrayRemove() deletes all matching entries, which is not
|
|
187
|
+
// desired. So we have to rewrite the full array.
|
|
188
|
+
addToUpdateList(arrayPath, array);
|
|
189
|
+
return result;
|
|
183
190
|
},
|
|
184
191
|
});
|
|
185
192
|
}
|
|
@@ -269,11 +276,17 @@ export function watchFieldForChanges<FieldSchemaType extends z.ZodTypeAny>(
|
|
|
269
276
|
}
|
|
270
277
|
// A property of this object is being set to a new value. Parse the new
|
|
271
278
|
// value with the appropriate schema, set it in the local data, and mark
|
|
272
|
-
// the entire top-level array as needing to be written.
|
|
279
|
+
// the entire top-level array as needing to be written. If the new value
|
|
280
|
+
// is undefined, delete the property.
|
|
273
281
|
const propertySchema = getPropertySchema(field, fieldSchema, propertyKey);
|
|
274
282
|
processedValue = propertySchema.parse(processedValue);
|
|
275
|
-
|
|
276
|
-
|
|
283
|
+
if (processedValue === undefined) {
|
|
284
|
+
addToUpdateList([...fieldPath, propertyKey], deleteField());
|
|
285
|
+
return Reflect.deleteProperty(target, propertyKey);
|
|
286
|
+
} else {
|
|
287
|
+
addToUpdateList([...fieldPath, propertyKey], processedValue);
|
|
288
|
+
return Reflect.set(target, propertyKey, processedValue);
|
|
289
|
+
}
|
|
277
290
|
},
|
|
278
291
|
deleteProperty(target, propertyKey) {
|
|
279
292
|
assertKeyIsString(propertyKey);
|