1- import { createPredicateFromFilter } from '@rocket.chat/mongo-adapter' ;
2- import type { FieldExpression , Filter } from '@rocket.chat/mongo-adapter' ;
1+ import {
2+ createDocumentMatcherFromFilter ,
3+ createPredicateFromFilter ,
4+ createTransformFromUpdateFilter ,
5+ createUpsertDocument ,
6+ } from '@rocket.chat/mongo-adapter' ;
7+ import type { ArrayIndices } from '@rocket.chat/mongo-adapter' ;
38import { Meteor } from 'meteor/meteor' ;
4- import type { CountDocumentsOptions } from 'mongodb' ;
9+ import type { CountDocumentsOptions , FilterOperators , Filter , UpdateFilter } from 'mongodb' ;
510import type { StoreApi , UseBoundStore } from 'zustand' ;
611
712import { Cursor } from './Cursor' ;
813import type { Options } from './Cursor' ;
914import { DiffSequence } from './DiffSequence' ;
1015import type { IdMap } from './IdMap' ;
11- import { Matcher } from './Matcher' ;
1216import { MinimongoError } from './MinimongoError' ;
1317import type { Query } from './Query' ;
1418import { SynchronousQueue } from './SynchronousQueue' ;
15- import type { UpdateFilter } from './Updater' ;
16- import { Updater } from './Updater' ;
17- import type { ArrayIndices } from './common' ;
18- import { hasOwn , _selectorIsId , clone , assertHasValidFieldNames } from './common' ;
19+ import { clone , assertHasValidFieldNames } from './common' ;
1920
2021/**
2122 * Forked from Meteor's Mongo.Collection, this class implements a local collection over a Zustand store.
@@ -209,7 +210,7 @@ export class LocalCollection<T extends { _id: string }> {
209210 }
210211
211212 private prepareRemove ( selector : Filter < T > ) {
212- const predicate = createPredicateFromFilter ( selector ) ;
213+ const predicate = createPredicateFromFilter < T > ( selector ) ;
213214 const remove = new Set < T > ( ) ;
214215
215216 this . _eachPossiblyMatchingDoc ( selector , ( doc ) => {
@@ -430,7 +431,7 @@ export class LocalCollection<T extends { _id: string }> {
430431 const callback = ! _callback && typeof _options === 'function' ? _options : _callback ;
431432 const options = typeof _options === 'object' && _options !== null ? _options : { } ;
432433
433- const matcher = new Matcher ( selector ) ;
434+ const matchDocument = createDocumentMatcherFromFilter < T > ( selector ) ;
434435
435436 const queriesToOriginalResults = this . prepareUpdate ( selector ) ;
436437
@@ -439,7 +440,7 @@ export class LocalCollection<T extends { _id: string }> {
439440 let updateCount = 0 ;
440441
441442 await this . _eachPossiblyMatchingDocAsync ( selector , async ( doc , id ) => {
442- const queryResult = matcher . documentMatches ( doc ) ;
443+ const queryResult = matchDocument ( doc ) ;
443444
444445 if ( queryResult . result ) {
445446 this . _saveOriginal ( id , doc ) ;
@@ -508,7 +509,7 @@ export class LocalCollection<T extends { _id: string }> {
508509 const callback = ! _callback && typeof _options === 'function' ? _options : _callback ;
509510 const options = typeof _options === 'object' && _options !== null ? _options : { } ;
510511
511- const matcher = new Matcher ( selector ) ;
512+ const matchDocument = createDocumentMatcherFromFilter ( selector ) ;
512513
513514 const queriesToOriginalResults = this . prepareUpdate ( selector ) ;
514515
@@ -517,7 +518,7 @@ export class LocalCollection<T extends { _id: string }> {
517518 let updateCount = 0 ;
518519
519520 this . _eachPossiblyMatchingDoc ( selector , ( doc , id ) => {
520- const queryResult = matcher . documentMatches ( doc ) ;
521+ const queryResult = matchDocument ( doc ) ;
521522
522523 if ( queryResult . result ) {
523524 this . _saveOriginal ( id , doc ) ;
@@ -680,8 +681,8 @@ export class LocalCollection<T extends { _id: string }> {
680681 const matchedBefore = this . _getMatchedDocAndModify ( doc ) ;
681682
682683 const oldDoc = clone ( doc ) ;
683- const updater = new Updater ( clone ( mod ) ) ;
684- doc = updater . modify ( doc , { arrayIndices } ) ;
684+ const updater = createTransformFromUpdateFilter ( clone ( mod ) ) ;
685+ doc = updater ( doc , { arrayIndices } ) ;
685686 this . store . setState ( ( state ) => {
686687 const records = new Map ( state . records ) ;
687688 records . set ( doc . _id , doc ) ;
@@ -715,8 +716,8 @@ export class LocalCollection<T extends { _id: string }> {
715716 const matchedBefore = this . _getMatchedDocAndModify ( doc ) ;
716717
717718 const oldDoc = clone ( doc ) ;
718- const updater = new Updater ( clone ( mod ) ) ;
719- doc = updater . modify ( doc , { arrayIndices } ) ;
719+ const updater = createTransformFromUpdateFilter ( clone ( mod ) ) ;
720+ doc = updater ( doc , { arrayIndices } ) ;
720721 this . store . setState ( ( state ) => {
721722 const records = new Map ( state . records ) ;
722723 records . set ( doc . _id , doc ) ;
@@ -797,8 +798,7 @@ export class LocalCollection<T extends { _id: string }> {
797798 }
798799
799800 private _createUpsertDocument ( selector : Filter < T > , modifier : UpdateFilter < T > ) : T {
800- const updater = new Updater ( modifier ) ;
801- return updater . createUpsertDocument ( selector ) ;
801+ return createUpsertDocument ( selector , modifier ) ;
802802 }
803803
804804 private _findInOrderedResults ( query : Query < T > , doc : T ) : number {
@@ -815,27 +815,27 @@ export class LocalCollection<T extends { _id: string }> {
815815 throw new MinimongoError ( 'object missing from query' ) ;
816816 }
817817
818- private _idsMatchedBySelector ( selector : Filter < T > | T [ '_id' ] ) : T [ '_id' ] [ ] | null {
819- if ( _selectorIsId ( selector ) ) {
818+ private _idsMatchedBySelector ( selector : Filter < T > | T [ '_id' ] ) : readonly T [ '_id' ] [ ] | null {
819+ if ( typeof selector === 'string' ) {
820820 return [ selector ] ;
821821 }
822822
823823 if ( ! selector ) {
824824 return null ;
825825 }
826826
827- if ( hasOwn . call ( selector , '_id' ) ) {
828- if ( _selectorIsId ( selector . _id ) ) {
827+ if ( '_id' in selector ) {
828+ if ( typeof selector . _id === 'string' ) {
829829 return [ selector . _id ] ;
830830 }
831831
832832 if (
833833 selector . _id &&
834- Array . isArray ( ( selector . _id as FieldExpression < T [ '_id' ] > ) . $in ) &&
835- ( selector . _id as FieldExpression < T [ '_id' ] > ) . $in ?. length &&
836- ( selector . _id as FieldExpression < T [ '_id' ] > ) . $in ?. every ( _selectorIsId )
834+ Array . isArray ( ( selector . _id as FilterOperators < T [ '_id' ] > ) . $in ) &&
835+ ( selector . _id as FilterOperators < T [ '_id' ] > ) . $in ?. length &&
836+ ( selector . _id as FilterOperators < T [ '_id' ] > ) . $in ?. every ( ( id ) => typeof id === 'string' )
837837 ) {
838- return ( selector . _id as FieldExpression < T [ '_id' ] > ) . $in ! ;
838+ return ( selector . _id as FilterOperators < T [ '_id' ] > ) . $in ! ;
839839 }
840840
841841 return null ;
0 commit comments