@dereekb/firebase 10.1.7 → 10.1.8

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/index.cjs.js CHANGED
@@ -4141,6 +4141,10 @@ function firestoreFieldConfigToModelMapFunctionsRef(config) {
4141
4141
  */
4142
4142
  function firestoreObjectArray(config) {
4143
4143
  var _a, _b;
4144
+ const {
4145
+ filterUnique: inputFilterUnique
4146
+ } = config;
4147
+ const filterUnique = inputFilterUnique !== null && inputFilterUnique !== void 0 ? inputFilterUnique : util.MAP_IDENTITY;
4144
4148
  const objectField = (_a = config.objectField) !== null && _a !== void 0 ? _a : firestoreFieldConfigToModelMapFunctionsRef(config.firestoreField);
4145
4149
  const sortFn = util.sortValuesFunctionOrMapIdentityWithSortRef(config);
4146
4150
  const {
@@ -4150,14 +4154,14 @@ function firestoreObjectArray(config) {
4150
4154
  const to = x => {
4151
4155
  // remove null/undefined values from each field when converting to in order to mirror firestore usage (undefined is treated like null)
4152
4156
  const base = baseTo(x);
4153
- const filtered = util.filterNullAndUndefinedValues(base);
4154
- return filtered;
4157
+ const nullishfilteredOut = util.filterNullAndUndefinedValues(base);
4158
+ return nullishfilteredOut;
4155
4159
  };
4156
4160
  return firestoreField({
4157
4161
  default: (_b = config.default) !== null && _b !== void 0 ? _b : () => [],
4158
4162
  defaultBeforeSave: config.defaultBeforeSave,
4159
- fromData: input => sortFn(input.map(x => from(x)), false),
4160
- toData: input => util.filterMaybeValues(sortFn(input, true)).map(x => to(x))
4163
+ fromData: input => sortFn(filterUnique(input.map(x => from(x))), false),
4164
+ toData: input => util.filterMaybeValues(sortFn(filterUnique(input), true)).map(x => to(x)) // filter then sort then map
4161
4165
  });
4162
4166
  }
4163
4167
  /**
package/index.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { increment, onSnapshot, getDoc, deleteDoc, setDoc, updateDoc, doc, collectionGroup, collection, runTransaction, writeBatch, limit as limit$1, limitToLast as limitToLast$1, orderBy as orderBy$1, documentId, where as where$1, startAt as startAt$1, startAfter as startAfter$1, endAt as endAt$1, endBefore as endBefore$1, getDocs, query } from 'firebase/firestore';
2
- import { cachedGetter, mergeModifiers, asArray, filterUndefinedValues, objectHasNoKeys, filterFalsyAndEmptyValues, build, wrapUseAsyncFunction, makeWithFactory, performMakeLoop, runAsyncTasksForValues, filterMaybeValues, useAsync, toModelFieldConversions, makeModelMapFunctions, modifyModelMapFunctions, assignValuesToPOJOFunction, KeyValueTypleValueFilter, asObjectCopyFactory, passThrough, isEqualToValueDecisionFunction, transformStringFunctionConfig, transformStringFunction, isDate, transformNumberFunction, sortValuesFunctionOrMapIdentityWithSortRef, unique, isMapIdentityFunction, chainMapSameFunctions, filterUniqueFunction, filterUniqueTransform, filterFromPOJOFunction, mapObjectMapFunction, copyObject, mapObjectMap, filterEmptyValues, modelFieldMapFunctions, toModelMapFunctions, latLngStringFunction, DEFAULT_LAT_LNG_STRING_VALUE, sortAscendingIndexNumberRefFunction, bitwiseSetDencoder, filterNullAndUndefinedValues, convertToArray, pushItemOrArrayItemsIntoArray, separateValues, UTF_8_START_CHARACTER, UTF_PRIVATE_USAGE_AREA_START, mergeArraysIntoArray, lastValue, flattenArrayOrValueArray, performAsyncTasks, batch, asGetter, getValueFromGetter, mapIdentityFunction, performTasksFromFactoryInParallelFunction, allowValueOnceFilter, flattenArray, groupValues, forEachInIterable, arrayToObject, takeFront, isOddNumber, objectToMap, ServerErrorResponse, toReadableError, capitalizeFirstLetter, lowercaseFirstLetter, toRelativeSlashPathStartType, mappedUseFunction, iterableToArray, setContainsAllValues, usePromise, slashPathFactory, errorMessageContainsString } from '@dereekb/util';
2
+ import { cachedGetter, mergeModifiers, asArray, filterUndefinedValues, objectHasNoKeys, filterFalsyAndEmptyValues, build, wrapUseAsyncFunction, makeWithFactory, performMakeLoop, runAsyncTasksForValues, filterMaybeValues, useAsync, toModelFieldConversions, makeModelMapFunctions, modifyModelMapFunctions, assignValuesToPOJOFunction, KeyValueTypleValueFilter, asObjectCopyFactory, passThrough, isEqualToValueDecisionFunction, transformStringFunctionConfig, transformStringFunction, isDate, transformNumberFunction, sortValuesFunctionOrMapIdentityWithSortRef, unique, isMapIdentityFunction, chainMapSameFunctions, filterUniqueFunction, filterUniqueTransform, filterFromPOJOFunction, mapObjectMapFunction, copyObject, mapObjectMap, filterEmptyValues, modelFieldMapFunctions, toModelMapFunctions, latLngStringFunction, DEFAULT_LAT_LNG_STRING_VALUE, sortAscendingIndexNumberRefFunction, bitwiseSetDencoder, MAP_IDENTITY, filterNullAndUndefinedValues, convertToArray, pushItemOrArrayItemsIntoArray, separateValues, UTF_8_START_CHARACTER, UTF_PRIVATE_USAGE_AREA_START, mergeArraysIntoArray, lastValue, flattenArrayOrValueArray, performAsyncTasks, batch, asGetter, getValueFromGetter, mapIdentityFunction, performTasksFromFactoryInParallelFunction, allowValueOnceFilter, flattenArray, groupValues, forEachInIterable, arrayToObject, takeFront, isOddNumber, objectToMap, ServerErrorResponse, toReadableError, capitalizeFirstLetter, lowercaseFirstLetter, toRelativeSlashPathStartType, mappedUseFunction, iterableToArray, setContainsAllValues, usePromise, slashPathFactory, errorMessageContainsString } from '@dereekb/util';
3
3
  import { filterMaybe, lazyFrom, itemAccumulator, ItemPageIterator, MappedPageItemIterationInstance } from '@dereekb/rxjs';
4
4
  import { from, map, combineLatest, shareReplay, of, exhaustMap, Observable, switchMap, timer, skip } from 'rxjs';
5
5
  import { UNKNOWN_WEBSITE_LINK_TYPE, decodeWebsiteLinkEncodedDataToWebsiteFileLink, encodeWebsiteFileLinkToWebsiteLinkEncodedData, AbstractModelPermissionService, grantedRoleMapReader, noAccessRoleMap, fullAccessRoleMap } from '@dereekb/model';
@@ -4392,6 +4392,10 @@ function firestoreFieldConfigToModelMapFunctionsRef(config) {
4392
4392
  */
4393
4393
  function firestoreObjectArray(config) {
4394
4394
  var _objectField, _config$default9;
4395
+ const {
4396
+ filterUnique: inputFilterUnique
4397
+ } = config;
4398
+ const filterUnique = inputFilterUnique != null ? inputFilterUnique : MAP_IDENTITY;
4395
4399
  const objectField = (_objectField = config.objectField) != null ? _objectField : firestoreFieldConfigToModelMapFunctionsRef(config.firestoreField);
4396
4400
  const sortFn = sortValuesFunctionOrMapIdentityWithSortRef(config);
4397
4401
  const {
@@ -4401,14 +4405,15 @@ function firestoreObjectArray(config) {
4401
4405
  const to = x => {
4402
4406
  // remove null/undefined values from each field when converting to in order to mirror firestore usage (undefined is treated like null)
4403
4407
  const base = baseTo(x);
4404
- const filtered = filterNullAndUndefinedValues(base);
4405
- return filtered;
4408
+ const nullishfilteredOut = filterNullAndUndefinedValues(base);
4409
+ return nullishfilteredOut;
4406
4410
  };
4407
4411
  return firestoreField({
4408
4412
  default: (_config$default9 = config.default) != null ? _config$default9 : () => [],
4409
4413
  defaultBeforeSave: config.defaultBeforeSave,
4410
- fromData: input => sortFn(input.map(x => from(x)), false),
4411
- toData: input => filterMaybeValues(sortFn(input, true)).map(x => to(x))
4414
+ fromData: input => sortFn(filterUnique(input.map(x => from(x))), false),
4415
+ // map then filter then sort
4416
+ toData: input => filterMaybeValues(sortFn(filterUnique(input), true)).map(x => to(x)) // filter then sort then map
4412
4417
  });
4413
4418
  }
4414
4419
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/firebase",
3
- "version": "10.1.7",
3
+ "version": "10.1.8",
4
4
  "exports": {
5
5
  ".": {
6
6
  "types": "./src/index.d.ts",
@@ -325,7 +325,12 @@ export declare const firestoreModelIdGrantedRoleArrayMap: () => FirestoreModelFi
325
325
  /**
326
326
  * firestoreObjectArray configuration
327
327
  */
328
- export type FirestoreObjectArrayFieldConfig<T extends object, O extends object = FirestoreModelData<T>> = DefaultMapConfiguredFirestoreFieldConfig<T[], O[]> & (FirestoreObjectArrayFieldConfigObjectFieldInput<T, O> | FirestoreObjectArrayFieldConfigFirestoreFieldInput<T, O>) & Partial<SortCompareFunctionRef<T>>;
328
+ export type FirestoreObjectArrayFieldConfig<T extends object, O extends object = FirestoreModelData<T>> = DefaultMapConfiguredFirestoreFieldConfig<T[], O[]> & (FirestoreObjectArrayFieldConfigObjectFieldInput<T, O> | FirestoreObjectArrayFieldConfigFirestoreFieldInput<T, O>) & Partial<SortCompareFunctionRef<T>> & {
329
+ /**
330
+ * Filters the objects array uniquely.
331
+ */
332
+ readonly filterUnique?: FilterUniqueFunction<T, any>;
333
+ };
329
334
  export type FirestoreObjectArrayFieldConfigObjectFieldInput<T extends object, O extends object = FirestoreModelData<T>> = {
330
335
  /**
331
336
  * The field to use for conversion.
package/test/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [10.1.8](https://github.com/dereekb/dbx-components/compare/v10.1.7-dev...v10.1.8) (2024-04-02)
6
+
7
+
8
+
5
9
  ## [10.1.7](https://github.com/dereekb/dbx-components/compare/v10.1.6-dev...v10.1.7) (2024-03-28)
6
10
 
7
11
 
package/test/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/firebase/test",
3
- "version": "10.1.7",
3
+ "version": "10.1.8",
4
4
  "type": "commonjs",
5
5
  "peerDependencies": {
6
6
  "@dereekb/util": "*",