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 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
- const result = Reflect.set(target, propertyKey, processedValue);
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
- // Calling Reflect.deleteProperty on an array item sets it to undefined,
140
- // which causes Firestore updates to fail unless ignoreUndefinedProperties
141
- // is set, and which is generally not what we want. Hence splice.
142
- const removedValues = array.splice(Number(propertyKey), 1);
143
- if (removedValues.length !== 1) {
144
- throw RangeError(`Failed to delete array item with index ${propertyKey}. Out of bounds?`);
145
- }
146
- // Only top-level elements can be deleted with Firestore's arrayRemove.
147
- if (target === array) {
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
- addToUpdateList(arrayPath, array);
156
+ result = Reflect.deleteProperty(target, propertyKey);
152
157
  }
153
- return true;
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
- addToUpdateList([...fieldPath, propertyKey], processedValue);
231
- return Reflect.set(target, propertyKey, processedValue);
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);
@@ -1 +1 @@
1
- {"version":3,"file":"proxies.js","sourceRoot":"","sources":["../src/proxies.ts"],"names":[],"mappings":"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"}
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.1",
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 { arrayRemove, deleteField } from "./firestore-deps";
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
- const result = Reflect.set(target, propertyKey, processedValue);
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
- // Calling Reflect.deleteProperty on an array item sets it to undefined,
168
- // which causes Firestore updates to fail unless ignoreUndefinedProperties
169
- // is set, and which is generally not what we want. Hence splice.
170
- const removedValues = array.splice(Number(propertyKey), 1);
171
- if (removedValues.length !== 1) {
172
- throw RangeError(
173
- `Failed to delete array item with index ${propertyKey}. Out of bounds?`
174
- );
175
- }
176
- // Only top-level elements can be deleted with Firestore's arrayRemove.
177
- if (target === array) {
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
- addToUpdateList(arrayPath, array);
184
+ result = Reflect.deleteProperty(target, propertyKey);
181
185
  }
182
- return true;
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
- addToUpdateList([...fieldPath, propertyKey], processedValue);
276
- return Reflect.set(target, propertyKey, processedValue);
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);