11import type { Reducer , AnyAction , Action } from 'redux' ;
2- import {
3- analyzeDocuments ,
4- type SchemaParseOptions ,
5- type Schema ,
6- } from 'mongodb-schema' ;
2+ import { analyzeDocuments , type Schema } from 'mongodb-schema' ;
73
84import type { CollectionMetadata } from 'mongodb-collection-model' ;
95import type { ThunkAction } from 'redux-thunk' ;
@@ -37,7 +33,6 @@ type CollectionThunkAction<R, A extends AnyAction = AnyAction> = ThunkAction<
3733 experimentationServices : ReturnType < typeof experimentationServiceLocator > ;
3834 logger : Logger ;
3935 preferences : PreferencesAccess ;
40- analysisAbortControllerRef : { current ?: AbortController } ;
4136 } ,
4237 A
4338> ;
@@ -82,12 +77,16 @@ interface CollectionMetadataFetchedAction {
8277
8378interface SchemaAnalysisStartedAction {
8479 type : CollectionActions . SchemaAnalysisStarted ;
85- analysisStartTime : number ;
8680}
8781
8882interface SchemaAnalysisFinishedAction {
8983 type : CollectionActions . SchemaAnalysisFinished ;
90- schemaAnalysis : SchemaAnalysis ;
84+ schema : Schema | null ;
85+ sampleDocument : Document | null ;
86+ schemaMetadata : {
87+ maxNestingDepth : number ;
88+ validationRules : Document ;
89+ } | null ;
9190}
9291
9392interface SchemaAnalysisFailedAction {
@@ -149,7 +148,13 @@ const reducer: Reducer<CollectionState, Action> = (
149148 ) {
150149 return {
151150 ...state ,
152- schemaAnalysis : action . schemaAnalysis ,
151+ schemaAnalysis : {
152+ status : SchemaAnalysisStatus . COMPLETED ,
153+ schema : action . schema ,
154+ sampleDocument : action . sampleDocument ,
155+ schemaMetadata : action . schemaMetadata ,
156+ error : null ,
157+ } ,
153158 } ;
154159 }
155160
@@ -162,7 +167,9 @@ const reducer: Reducer<CollectionState, Action> = (
162167 return {
163168 ...state ,
164169 schemaAnalysis : {
165- ...state . schemaAnalysis ,
170+ schema : null ,
171+ sampleDocument : null ,
172+ schemaMetadata : null ,
166173 status : SchemaAnalysisStatus . ERROR ,
167174 error : action . error . message ,
168175 } ,
@@ -192,11 +199,7 @@ export const selectTab = (
192199export const analyzeCollectionSchema = ( ) : CollectionThunkAction <
193200 Promise < void >
194201> => {
195- return async (
196- dispatch ,
197- getState ,
198- { analysisAbortControllerRef, dataService, preferences, logger }
199- ) => {
202+ return async ( dispatch , getState , { dataService, preferences, logger } ) => {
200203 const { schemaAnalysis, namespace } = getState ( ) ;
201204 const analysisStatus = schemaAnalysis . status ;
202205 if ( analysisStatus === SchemaAnalysisStatus . ANALYZING ) {
@@ -206,24 +209,17 @@ export const analyzeCollectionSchema = (): CollectionThunkAction<
206209 return ;
207210 }
208211
209- analysisAbortControllerRef . current = new AbortController ( ) ;
210- const abortSignal = analysisAbortControllerRef . current . signal ;
211-
212- const analysisStartTime = Date . now ( ) ;
213-
214212 try {
215213 logger . debug ( 'Schema analysis started.' ) ;
216214
217215 dispatch ( {
218216 type : CollectionActions . SchemaAnalysisStarted ,
219- analysisStartTime,
220217 } ) ;
221218
222219 // Sample documents
223220 const samplingOptions = { size : DEFAULT_SAMPLE_SIZE } ;
224221 const driverOptions = {
225222 maxTimeMS : preferences . getPreferences ( ) . maxTimeMS ,
226- signal : abortSignal ,
227223 } ;
228224 const sampleCursor = dataService . sampleCursor (
229225 namespace ,
@@ -236,16 +232,7 @@ export const analyzeCollectionSchema = (): CollectionThunkAction<
236232 const sampleDocuments = await sampleCursor . toArray ( ) ;
237233
238234 // Analyze sampled documents
239- const schemaParseOptions : SchemaParseOptions = {
240- signal : abortSignal ,
241- } ;
242- const schemaAccessor = await analyzeDocuments (
243- sampleDocuments ,
244- schemaParseOptions
245- ) ;
246- if ( abortSignal ?. aborted ) {
247- throw new Error ( abortSignal ?. reason || new Error ( 'Operation aborted' ) ) ;
248- }
235+ const schemaAccessor = await analyzeDocuments ( sampleDocuments ) ;
249236
250237 let schema : Schema | null = null ;
251238 if ( schemaAccessor ) {
@@ -264,17 +251,14 @@ export const analyzeCollectionSchema = (): CollectionThunkAction<
264251 const collInfo = await dataService . collectionInfo ( database , collection ) ;
265252 schemaMetadata = {
266253 maxNestingDepth : schema_depth ,
267- validationRules : collInfo ?. validation ?. validator || null ,
254+ validationRules : collInfo ?. validation ?. validator ?? null ,
268255 } ;
269256 }
270257 dispatch ( {
271258 type : CollectionActions . SchemaAnalysisFinished ,
272- schemaAnalysis : {
273- status : SchemaAnalysisStatus . COMPLETED ,
274- schema,
275- sampleDocument : sampleDocuments [ 0 ] ?? null ,
276- schemaMetadata,
277- } ,
259+ schema,
260+ sampleDocument : sampleDocuments [ 0 ] ?? null ,
261+ schemaMetadata,
278262 } ) ;
279263 } catch ( err : any ) {
280264 logger . log . error (
@@ -284,18 +268,12 @@ export const analyzeCollectionSchema = (): CollectionThunkAction<
284268 {
285269 namespace,
286270 error : err . message ,
287- aborted : abortSignal . aborted ,
288- ...( abortSignal . aborted
289- ? { abortReason : abortSignal . reason ?. message ?? abortSignal . reason }
290- : { } ) ,
291271 }
292272 ) ;
293273 dispatch ( {
294274 type : CollectionActions . SchemaAnalysisFailed ,
295275 error : err as Error ,
296276 } ) ;
297- } finally {
298- analysisAbortControllerRef . current = undefined ;
299277 }
300278 } ;
301279} ;
0 commit comments