@sprucelabs/data-stores 31.0.9 → 31.0.10

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.
@@ -350,7 +350,7 @@ class MongoDatabase {
350
350
  await this.dropIndex(collectionName, extra);
351
351
  }
352
352
  for (const index of indexes) {
353
- if (!this.doesInclude(currentIndexes, this.normalizeIndex(index))) {
353
+ if (!this.doesInclude(currentIndexes, this.normalizeIndex(index, isSyncingUniqueIndexes))) {
354
354
  try {
355
355
  await this[func](collectionName, index);
356
356
  }
@@ -364,7 +364,7 @@ class MongoDatabase {
364
364
  }
365
365
  async createUniqueIndex(collection, index) {
366
366
  const currentIndexes = await this.getUniqueIndexes(collection);
367
- const indexWithFilter = this.normalizeIndex(index);
367
+ const indexWithFilter = this.normalizeIndex(index, true);
368
368
  this.assertIndexDoesNotExist(currentIndexes, indexWithFilter, collection);
369
369
  const created = {};
370
370
  indexWithFilter.fields.forEach((name) => {
@@ -395,8 +395,8 @@ class MongoDatabase {
395
395
  }
396
396
  }
397
397
  }
398
- normalizeIndex(index) {
399
- return (0, database_utilities_1.normalizeIndex)(index);
398
+ normalizeIndex(index, isUnique) {
399
+ return (0, database_utilities_1.normalizeIndex)(index, isUnique);
400
400
  }
401
401
  async syncUniqueIndexes(collectionName, indexes) {
402
402
  await this._syncIndexes(collectionName, indexes, 'createUniqueIndex', true);
@@ -1,5 +1,5 @@
1
1
  import { IndexWithFilter, Index } from '../types/database.types';
2
2
  export declare function doesIndexesInclude(haystack: Index[], needle: Index): boolean;
3
3
  export declare function areIndexesEqual(left: Index, right: Index): boolean;
4
- export declare function normalizeIndex(index: Index): IndexWithFilter;
4
+ export declare function normalizeIndex(index: Index, isUnique?: boolean): IndexWithFilter;
5
5
  export declare function pluckMissingIndexes(left: Index[], right: Index[]): Index[];
@@ -21,7 +21,7 @@ function areIndexesEqual(left, right) {
21
21
  const name2 = generateIndexName(normalizeIndex(right));
22
22
  return name1 === name2;
23
23
  }
24
- function generateIndexName(indexWithFilter) {
24
+ function generateIndexName(indexWithFilter, isUnique) {
25
25
  if (indexWithFilter.name) {
26
26
  return indexWithFilter.name;
27
27
  }
@@ -29,9 +29,12 @@ function generateIndexName(indexWithFilter) {
29
29
  if (indexWithFilter.filter) {
30
30
  name += '_filtered';
31
31
  }
32
+ if (isUnique) {
33
+ name += '_unique';
34
+ }
32
35
  return name;
33
36
  }
34
- function normalizeIndex(index) {
37
+ function normalizeIndex(index, isUnique) {
35
38
  const fields = Array.isArray(index) ? index : index.fields;
36
39
  const filter = Array.isArray(index) ? undefined : index.filter;
37
40
  fields.sort();
@@ -41,7 +44,7 @@ function normalizeIndex(index) {
41
44
  if (filter) {
42
45
  normalized.filter = filter;
43
46
  }
44
- normalized.name = generateIndexName(normalized);
47
+ normalized.name = generateIndexName(normalized, isUnique);
45
48
  return normalized;
46
49
  }
47
50
  function pluckMissingIndexes(left, right) {
@@ -386,7 +386,7 @@ export default class MongoDatabase {
386
386
  yield this.dropIndex(collectionName, extra);
387
387
  }
388
388
  for (const index of indexes) {
389
- if (!this.doesInclude(currentIndexes, this.normalizeIndex(index))) {
389
+ if (!this.doesInclude(currentIndexes, this.normalizeIndex(index, isSyncingUniqueIndexes))) {
390
390
  try {
391
391
  yield this[func](collectionName, index);
392
392
  }
@@ -402,7 +402,7 @@ export default class MongoDatabase {
402
402
  createUniqueIndex(collection, index) {
403
403
  return __awaiter(this, void 0, void 0, function* () {
404
404
  const currentIndexes = yield this.getUniqueIndexes(collection);
405
- const indexWithFilter = this.normalizeIndex(index);
405
+ const indexWithFilter = this.normalizeIndex(index, true);
406
406
  this.assertIndexDoesNotExist(currentIndexes, indexWithFilter, collection);
407
407
  const created = {};
408
408
  indexWithFilter.fields.forEach((name) => {
@@ -434,8 +434,8 @@ export default class MongoDatabase {
434
434
  }
435
435
  });
436
436
  }
437
- normalizeIndex(index) {
438
- return normalizeIndex(index);
437
+ normalizeIndex(index, isUnique) {
438
+ return normalizeIndex(index, isUnique);
439
439
  }
440
440
  syncUniqueIndexes(collectionName, indexes) {
441
441
  return __awaiter(this, void 0, void 0, function* () {
@@ -1,5 +1,5 @@
1
1
  import { IndexWithFilter, Index } from '../types/database.types';
2
2
  export declare function doesIndexesInclude(haystack: Index[], needle: Index): boolean;
3
3
  export declare function areIndexesEqual(left: Index, right: Index): boolean;
4
- export declare function normalizeIndex(index: Index): IndexWithFilter;
4
+ export declare function normalizeIndex(index: Index, isUnique?: boolean): IndexWithFilter;
5
5
  export declare function pluckMissingIndexes(left: Index[], right: Index[]): Index[];
@@ -12,7 +12,7 @@ export function areIndexesEqual(left, right) {
12
12
  const name2 = generateIndexName(normalizeIndex(right));
13
13
  return name1 === name2;
14
14
  }
15
- function generateIndexName(indexWithFilter) {
15
+ function generateIndexName(indexWithFilter, isUnique) {
16
16
  if (indexWithFilter.name) {
17
17
  return indexWithFilter.name;
18
18
  }
@@ -20,9 +20,12 @@ function generateIndexName(indexWithFilter) {
20
20
  if (indexWithFilter.filter) {
21
21
  name += '_filtered';
22
22
  }
23
+ if (isUnique) {
24
+ name += '_unique';
25
+ }
23
26
  return name;
24
27
  }
25
- export function normalizeIndex(index) {
28
+ export function normalizeIndex(index, isUnique) {
26
29
  const fields = Array.isArray(index) ? index : index.fields;
27
30
  const filter = Array.isArray(index) ? undefined : index.filter;
28
31
  fields.sort();
@@ -32,7 +35,7 @@ export function normalizeIndex(index) {
32
35
  if (filter) {
33
36
  normalized.filter = filter;
34
37
  }
35
- normalized.name = generateIndexName(normalized);
38
+ normalized.name = generateIndexName(normalized, isUnique);
36
39
  return normalized;
37
40
  }
38
41
  export function pluckMissingIndexes(left, right) {
@@ -1,6 +1,6 @@
1
1
  import { Database, IndexWithFilter, TestConnect } from '../types/database.types';
2
2
  import { DataStore } from '../types/stores.types';
3
- declare const methods: readonly ["assertThrowsWithInvalidConnectionString", "assertThrowsWhenCantConnect", "assertThrowsWithBadDatabaseName", "assertKnowsIfConnectionClosed", "assertCanSortDesc", "assertCanSortAsc", "assertCanSortById", "assertCanQueryWithOr", "assertGeneratesIdDifferentEachTime", "assertInsertingGeneratesId", "assertCanCreateMany", "assertCanCreateWithObjectField", "assertCanCountOnId", "assertCanCount", "assertThrowsWhenUpdatingRecordNotFound", "assertCanUpdate", "assertCanUpdateMany", "assertCanPushOntoArrayValue", "assertCanUpdateWithObjectField", "assertCanUpdateFieldInObjectFieldWithTargettedWhere", "assertCanSaveAndGetNullAndUndefined", "assertUpdateReturnsMatchedCounts", "assertCanUpsertOne", "assertCanUpsertNull", "assertCanPushToArrayOnUpsert", "assertCanSyncUniqueIndexesWithFilterExpression", "assertEmptyDatabaseReturnsEmptyArray", "assertFindOneOnEmptyDatabaseReturnsNull", "assertCanLimitResults", "assertCanLimitResultsToZero", "assertCanFindWithBooleanField", "assertCanQueryByGtLtGteLteNe", "assertCanQueryPathWithDotSyntax", "assertCanReturnOnlySelectFields", "assertCanSearchByRegex", "assertCanFindWithNe", "assertCanFindWithIn", "assertCanFindOrWithBadIdField", "assertCanDeleteRecord", "assertCanDeleteOne", "assertHasNoUniqueIndexToStart", "assertCanCreateUniqueIndex", "assertCanCreateMultiFieldUniqueIndex", "assertCantCreateUniqueIndexTwice", "assertCanDropUniqueIndex", "assertCanDropCompoundUniqueIndex", "assertCantDropUniqueIndexThatDoesntExist", "assertCantDropIndexWhenNoIndexExists", "assertCantDropCompoundUniqueIndexThatDoesntExist", "assertSyncingUniqueIndexesAddsMissingIndexes", "assertSyncingUniqueIndexesSkipsExistingUniqueIndexes", "assertSyncingUniqueIndexesRemovesExtraUniqueIndexes", "assertSyncingUniqueIndexesIsRaceProof", "assertSyncUniqueIndexesSkipsOnesThatExist", "assertUniqueIndexBlocksDuplicates", "assertDuplicateKeyThrowsOnInsert", "assertSettingUniqueIndexViolationThrowsSpruceError", "assertCanCreateUniqueIndexOnNestedField", "assertUpsertWithUniqueIndex", "assertNestedFieldIndexUpdates", "assertHasNoIndexToStart", "assertCanCreateIndex", "assertCantCreateSameIndexTwice", "assertCanCreateMultiFieldIndex", "assertCanDropIndex", "assertCanDropCompoundIndex", "assertCantDropCompoundIndexThatDoesNotExist", "assertSyncIndexesSkipsExisting", "assertSyncIndexesRemovesExtraIndexes", "assertSyncIndexesHandlesRaceConditions", "assertSyncIndexesDoesNotRemoveExisting", "assertDuplicateFieldsWithMultipleUniqueIndexesWorkAsExpected", "assertCanSyncIndexesWithoutPartialThenAgainWithProperlyUpdates"];
3
+ declare const methods: readonly ["assertThrowsWithInvalidConnectionString", "assertThrowsWhenCantConnect", "assertThrowsWithBadDatabaseName", "assertKnowsIfConnectionClosed", "assertCanSortDesc", "assertCanSortAsc", "assertCanSortById", "assertCanQueryWithOr", "assertGeneratesIdDifferentEachTime", "assertInsertingGeneratesId", "assertCanCreateMany", "assertCanCreateWithObjectField", "assertCanCountOnId", "assertCanCount", "assertThrowsWhenUpdatingRecordNotFound", "assertCanUpdate", "assertCanUpdateMany", "assertCanPushOntoArrayValue", "assertCanUpdateWithObjectField", "assertCanUpdateFieldInObjectFieldWithTargettedWhere", "assertCanSaveAndGetNullAndUndefined", "assertUpdateReturnsMatchedCounts", "assertCanUpsertOne", "assertCanUpsertNull", "assertCanPushToArrayOnUpsert", "assertCanSyncUniqueIndexesWithFilterExpression", "assertEmptyDatabaseReturnsEmptyArray", "assertFindOneOnEmptyDatabaseReturnsNull", "assertCanLimitResults", "assertCanLimitResultsToZero", "assertCanFindWithBooleanField", "assertCanQueryByGtLtGteLteNe", "assertCanQueryPathWithDotSyntax", "assertCanReturnOnlySelectFields", "assertCanSearchByRegex", "assertCanFindWithNe", "assertCanFindWithIn", "assertCanFindOrWithBadIdField", "assertCanDeleteRecord", "assertCanDeleteOne", "assertHasNoUniqueIndexToStart", "assertCanCreateUniqueIndex", "assertCanCreateMultiFieldUniqueIndex", "assertCantCreateUniqueIndexTwice", "assertCanDropUniqueIndex", "assertCanDropCompoundUniqueIndex", "assertCantDropUniqueIndexThatDoesntExist", "assertCantDropIndexWhenNoIndexExists", "assertCantDropCompoundUniqueIndexThatDoesntExist", "assertSyncingUniqueIndexesAddsMissingIndexes", "assertSyncingUniqueIndexesSkipsExistingUniqueIndexes", "assertSyncingUniqueIndexesRemovesExtraUniqueIndexes", "assertSyncingUniqueIndexesIsRaceProof", "assertSyncUniqueIndexesSkipsOnesThatExist", "assertCanHaveUniqueIndexOnFieldThatIsAlreadyInIndex", "assertUniqueIndexBlocksDuplicates", "assertDuplicateKeyThrowsOnInsert", "assertSettingUniqueIndexViolationThrowsSpruceError", "assertCanCreateUniqueIndexOnNestedField", "assertUpsertWithUniqueIndex", "assertNestedFieldIndexUpdates", "assertHasNoIndexToStart", "assertCanCreateIndex", "assertCantCreateSameIndexTwice", "assertCanCreateMultiFieldIndex", "assertCanDropIndex", "assertCanDropCompoundIndex", "assertCantDropCompoundIndexThatDoesNotExist", "assertSyncIndexesSkipsExisting", "assertSyncIndexesRemovesExtraIndexes", "assertSyncIndexesHandlesRaceConditions", "assertSyncIndexesDoesNotRemoveExisting", "assertDuplicateFieldsWithMultipleUniqueIndexesWorkAsExpected", "assertCanSyncIndexesWithoutPartialThenAgainWithProperlyUpdates"];
4
4
  type OriginalMethods = (typeof methods)[number];
5
5
  type BangMethods = `!${OriginalMethods}`;
6
6
  export type DatabaseAssertionName = OriginalMethods | BangMethods;
@@ -38,6 +38,7 @@ declare const databaseAssertUtil: {
38
38
  assertSettingUniqueIndexViolationThrowsSpruceError(connect: TestConnect): Promise<void>;
39
39
  assertDuplicateKeyThrowsOnInsert(connect: TestConnect): Promise<void>;
40
40
  assertSyncUniqueIndexesSkipsOnesThatExist(connect: TestConnect): Promise<void>;
41
+ assertCanHaveUniqueIndexOnFieldThatIsAlreadyInIndex(connect: TestConnect): Promise<void>;
41
42
  assertSyncingUniqueIndexesRemovesExtraUniqueIndexes(connect: TestConnect): Promise<void>;
42
43
  assertSyncingUniqueIndexesSkipsExistingUniqueIndexes(connect: TestConnect): Promise<void>;
43
44
  assertSyncingUniqueIndexesAddsMissingIndexes(connect: TestConnect): Promise<void>;
@@ -74,6 +74,7 @@ const methods = [
74
74
  'assertSyncingUniqueIndexesRemovesExtraUniqueIndexes',
75
75
  'assertSyncingUniqueIndexesIsRaceProof',
76
76
  'assertSyncUniqueIndexesSkipsOnesThatExist',
77
+ 'assertCanHaveUniqueIndexOnFieldThatIsAlreadyInIndex',
77
78
  'assertUniqueIndexBlocksDuplicates',
78
79
  'assertDuplicateKeyThrowsOnInsert',
79
80
  'assertSettingUniqueIndexViolationThrowsSpruceError',
@@ -765,6 +766,16 @@ const databaseAssertUtil = {
765
766
  yield this.shutdown(db);
766
767
  });
767
768
  },
769
+ assertCanHaveUniqueIndexOnFieldThatIsAlreadyInIndex(connect) {
770
+ return __awaiter(this, void 0, void 0, function* () {
771
+ const db = yield connectToDabatase(connect);
772
+ yield db.syncIndexes(this.collectionName, [
773
+ ['nested.field1'],
774
+ ['nested.field2'],
775
+ ]);
776
+ yield db.syncUniqueIndexes(this.collectionName, [['nested.field1']]);
777
+ });
778
+ },
768
779
  assertSyncingUniqueIndexesRemovesExtraUniqueIndexes(connect) {
769
780
  return __awaiter(this, void 0, void 0, function* () {
770
781
  const db = yield connectToDabatase(connect);
@@ -42,6 +42,7 @@ export interface IndexWithFilter {
42
42
  fields: string[];
43
43
  filter?: Record<string, any>;
44
44
  name?: string;
45
+ isUnique?: boolean;
45
46
  }
46
47
  export type Index = string[] | IndexWithFilter;
47
48
  export interface CreateOptions extends DatabaseInternalOptions {
@@ -1,6 +1,6 @@
1
1
  import { Database, IndexWithFilter, TestConnect } from '../types/database.types';
2
2
  import { DataStore } from '../types/stores.types';
3
- declare const methods: readonly ["assertThrowsWithInvalidConnectionString", "assertThrowsWhenCantConnect", "assertThrowsWithBadDatabaseName", "assertKnowsIfConnectionClosed", "assertCanSortDesc", "assertCanSortAsc", "assertCanSortById", "assertCanQueryWithOr", "assertGeneratesIdDifferentEachTime", "assertInsertingGeneratesId", "assertCanCreateMany", "assertCanCreateWithObjectField", "assertCanCountOnId", "assertCanCount", "assertThrowsWhenUpdatingRecordNotFound", "assertCanUpdate", "assertCanUpdateMany", "assertCanPushOntoArrayValue", "assertCanUpdateWithObjectField", "assertCanUpdateFieldInObjectFieldWithTargettedWhere", "assertCanSaveAndGetNullAndUndefined", "assertUpdateReturnsMatchedCounts", "assertCanUpsertOne", "assertCanUpsertNull", "assertCanPushToArrayOnUpsert", "assertCanSyncUniqueIndexesWithFilterExpression", "assertEmptyDatabaseReturnsEmptyArray", "assertFindOneOnEmptyDatabaseReturnsNull", "assertCanLimitResults", "assertCanLimitResultsToZero", "assertCanFindWithBooleanField", "assertCanQueryByGtLtGteLteNe", "assertCanQueryPathWithDotSyntax", "assertCanReturnOnlySelectFields", "assertCanSearchByRegex", "assertCanFindWithNe", "assertCanFindWithIn", "assertCanFindOrWithBadIdField", "assertCanDeleteRecord", "assertCanDeleteOne", "assertHasNoUniqueIndexToStart", "assertCanCreateUniqueIndex", "assertCanCreateMultiFieldUniqueIndex", "assertCantCreateUniqueIndexTwice", "assertCanDropUniqueIndex", "assertCanDropCompoundUniqueIndex", "assertCantDropUniqueIndexThatDoesntExist", "assertCantDropIndexWhenNoIndexExists", "assertCantDropCompoundUniqueIndexThatDoesntExist", "assertSyncingUniqueIndexesAddsMissingIndexes", "assertSyncingUniqueIndexesSkipsExistingUniqueIndexes", "assertSyncingUniqueIndexesRemovesExtraUniqueIndexes", "assertSyncingUniqueIndexesIsRaceProof", "assertSyncUniqueIndexesSkipsOnesThatExist", "assertUniqueIndexBlocksDuplicates", "assertDuplicateKeyThrowsOnInsert", "assertSettingUniqueIndexViolationThrowsSpruceError", "assertCanCreateUniqueIndexOnNestedField", "assertUpsertWithUniqueIndex", "assertNestedFieldIndexUpdates", "assertHasNoIndexToStart", "assertCanCreateIndex", "assertCantCreateSameIndexTwice", "assertCanCreateMultiFieldIndex", "assertCanDropIndex", "assertCanDropCompoundIndex", "assertCantDropCompoundIndexThatDoesNotExist", "assertSyncIndexesSkipsExisting", "assertSyncIndexesRemovesExtraIndexes", "assertSyncIndexesHandlesRaceConditions", "assertSyncIndexesDoesNotRemoveExisting", "assertDuplicateFieldsWithMultipleUniqueIndexesWorkAsExpected", "assertCanSyncIndexesWithoutPartialThenAgainWithProperlyUpdates"];
3
+ declare const methods: readonly ["assertThrowsWithInvalidConnectionString", "assertThrowsWhenCantConnect", "assertThrowsWithBadDatabaseName", "assertKnowsIfConnectionClosed", "assertCanSortDesc", "assertCanSortAsc", "assertCanSortById", "assertCanQueryWithOr", "assertGeneratesIdDifferentEachTime", "assertInsertingGeneratesId", "assertCanCreateMany", "assertCanCreateWithObjectField", "assertCanCountOnId", "assertCanCount", "assertThrowsWhenUpdatingRecordNotFound", "assertCanUpdate", "assertCanUpdateMany", "assertCanPushOntoArrayValue", "assertCanUpdateWithObjectField", "assertCanUpdateFieldInObjectFieldWithTargettedWhere", "assertCanSaveAndGetNullAndUndefined", "assertUpdateReturnsMatchedCounts", "assertCanUpsertOne", "assertCanUpsertNull", "assertCanPushToArrayOnUpsert", "assertCanSyncUniqueIndexesWithFilterExpression", "assertEmptyDatabaseReturnsEmptyArray", "assertFindOneOnEmptyDatabaseReturnsNull", "assertCanLimitResults", "assertCanLimitResultsToZero", "assertCanFindWithBooleanField", "assertCanQueryByGtLtGteLteNe", "assertCanQueryPathWithDotSyntax", "assertCanReturnOnlySelectFields", "assertCanSearchByRegex", "assertCanFindWithNe", "assertCanFindWithIn", "assertCanFindOrWithBadIdField", "assertCanDeleteRecord", "assertCanDeleteOne", "assertHasNoUniqueIndexToStart", "assertCanCreateUniqueIndex", "assertCanCreateMultiFieldUniqueIndex", "assertCantCreateUniqueIndexTwice", "assertCanDropUniqueIndex", "assertCanDropCompoundUniqueIndex", "assertCantDropUniqueIndexThatDoesntExist", "assertCantDropIndexWhenNoIndexExists", "assertCantDropCompoundUniqueIndexThatDoesntExist", "assertSyncingUniqueIndexesAddsMissingIndexes", "assertSyncingUniqueIndexesSkipsExistingUniqueIndexes", "assertSyncingUniqueIndexesRemovesExtraUniqueIndexes", "assertSyncingUniqueIndexesIsRaceProof", "assertSyncUniqueIndexesSkipsOnesThatExist", "assertCanHaveUniqueIndexOnFieldThatIsAlreadyInIndex", "assertUniqueIndexBlocksDuplicates", "assertDuplicateKeyThrowsOnInsert", "assertSettingUniqueIndexViolationThrowsSpruceError", "assertCanCreateUniqueIndexOnNestedField", "assertUpsertWithUniqueIndex", "assertNestedFieldIndexUpdates", "assertHasNoIndexToStart", "assertCanCreateIndex", "assertCantCreateSameIndexTwice", "assertCanCreateMultiFieldIndex", "assertCanDropIndex", "assertCanDropCompoundIndex", "assertCantDropCompoundIndexThatDoesNotExist", "assertSyncIndexesSkipsExisting", "assertSyncIndexesRemovesExtraIndexes", "assertSyncIndexesHandlesRaceConditions", "assertSyncIndexesDoesNotRemoveExisting", "assertDuplicateFieldsWithMultipleUniqueIndexesWorkAsExpected", "assertCanSyncIndexesWithoutPartialThenAgainWithProperlyUpdates"];
4
4
  type OriginalMethods = (typeof methods)[number];
5
5
  type BangMethods = `!${OriginalMethods}`;
6
6
  export type DatabaseAssertionName = OriginalMethods | BangMethods;
@@ -38,6 +38,7 @@ declare const databaseAssertUtil: {
38
38
  assertSettingUniqueIndexViolationThrowsSpruceError(connect: TestConnect): Promise<void>;
39
39
  assertDuplicateKeyThrowsOnInsert(connect: TestConnect): Promise<void>;
40
40
  assertSyncUniqueIndexesSkipsOnesThatExist(connect: TestConnect): Promise<void>;
41
+ assertCanHaveUniqueIndexOnFieldThatIsAlreadyInIndex(connect: TestConnect): Promise<void>;
41
42
  assertSyncingUniqueIndexesRemovesExtraUniqueIndexes(connect: TestConnect): Promise<void>;
42
43
  assertSyncingUniqueIndexesSkipsExistingUniqueIndexes(connect: TestConnect): Promise<void>;
43
44
  assertSyncingUniqueIndexesAddsMissingIndexes(connect: TestConnect): Promise<void>;
@@ -70,6 +70,7 @@ const methods = [
70
70
  'assertSyncingUniqueIndexesRemovesExtraUniqueIndexes',
71
71
  'assertSyncingUniqueIndexesIsRaceProof',
72
72
  'assertSyncUniqueIndexesSkipsOnesThatExist',
73
+ 'assertCanHaveUniqueIndexOnFieldThatIsAlreadyInIndex',
73
74
  'assertUniqueIndexBlocksDuplicates',
74
75
  'assertDuplicateKeyThrowsOnInsert',
75
76
  'assertSettingUniqueIndexViolationThrowsSpruceError',
@@ -699,6 +700,14 @@ const databaseAssertUtil = {
699
700
  ]);
700
701
  await this.shutdown(db);
701
702
  },
703
+ async assertCanHaveUniqueIndexOnFieldThatIsAlreadyInIndex(connect) {
704
+ const db = await connectToDabatase(connect);
705
+ await db.syncIndexes(this.collectionName, [
706
+ ['nested.field1'],
707
+ ['nested.field2'],
708
+ ]);
709
+ await db.syncUniqueIndexes(this.collectionName, [['nested.field1']]);
710
+ },
702
711
  async assertSyncingUniqueIndexesRemovesExtraUniqueIndexes(connect) {
703
712
  const db = await connectToDabatase(connect);
704
713
  await db.syncUniqueIndexes(this.collectionName, [
@@ -42,6 +42,7 @@ export interface IndexWithFilter {
42
42
  fields: string[];
43
43
  filter?: Record<string, any>;
44
44
  name?: string;
45
+ isUnique?: boolean;
45
46
  }
46
47
  export type Index = string[] | IndexWithFilter;
47
48
  export interface CreateOptions extends DatabaseInternalOptions {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "31.0.9",
6
+ "version": "31.0.10",
7
7
  "files": [
8
8
  "build/**/*",
9
9
  "!build/__tests__",