@@ -65,13 +65,20 @@ import {
6565} from '../lite-api/stage' ;
6666import { Pipeline } from '../api/pipeline' ;
6767import { Pipeline as LitePipeline } from '../lite-api/pipeline' ;
68- import { canonifyQuery , Query , queryEquals , stringifyQuery } from './query' ;
68+ import {
69+ canonifyQuery ,
70+ Query ,
71+ queryEquals ,
72+ QueryImpl ,
73+ stringifyQuery
74+ } from './query' ;
6975import {
7076 canonifyTarget ,
7177 Target ,
7278 targetEquals ,
7379 targetIsPipelineTarget
7480} from './target' ;
81+ import { ResourcePath } from '../model/path' ;
7582
7683/* eslint @typescript-eslint/no-explicit-any: 0 */
7784
@@ -405,7 +412,7 @@ export function getPipelineFlavor(p: Pipeline): PipelineFlavor {
405412
406413export type PipelineSourceType =
407414 | 'collection'
408- | 'collection-group '
415+ | 'collection_group '
409416 | 'database'
410417 | 'documents' ;
411418
@@ -416,10 +423,10 @@ export function getPipelineSourceType(
416423 const source = p . stages [ 0 ] ;
417424
418425 if (
419- source . name === CollectionSource . name ||
420- source . name === CollectionGroupSource . name ||
421- source . name === DatabaseSource . name ||
422- source . name === DocumentsSource . name
426+ source instanceof CollectionSource ||
427+ source instanceof CollectionGroupSource ||
428+ source instanceof DatabaseSource ||
429+ source instanceof DocumentsSource
423430 ) {
424431 return source . name as PipelineSourceType ;
425432 }
@@ -435,12 +442,34 @@ export function getPipelineCollection(p: Pipeline): string | undefined {
435442}
436443
437444export function getPipelineCollectionGroup ( p : Pipeline ) : string | undefined {
438- if ( getPipelineSourceType ( p ) === 'collection-group ' ) {
445+ if ( getPipelineSourceType ( p ) === 'collection_group ' ) {
439446 return ( p . stages [ 0 ] as CollectionGroupSource ) . collectionId ;
440447 }
441448 return undefined ;
442449}
443450
451+ export function asCollectionPipelineAtPath (
452+ pipeline : Pipeline ,
453+ path : ResourcePath
454+ ) : Pipeline {
455+ const newStages = pipeline . stages . map ( s => {
456+ if ( s instanceof CollectionGroupSource ) {
457+ return new CollectionSource ( path . canonicalString ( ) ) ;
458+ }
459+
460+ return s ;
461+ } ) ;
462+
463+ return new Pipeline (
464+ pipeline . db ,
465+ pipeline . userDataReader ,
466+ pipeline . userDataWriter ,
467+ pipeline . documentReferenceFactory ,
468+ newStages ,
469+ pipeline . converter
470+ ) ;
471+ }
472+
444473export function getPipelineDocuments ( p : Pipeline ) : string [ ] | undefined {
445474 if ( getPipelineSourceType ( p ) === 'documents' ) {
446475 return ( p . stages [ 0 ] as DocumentsSource ) . docPaths ;
@@ -451,7 +480,7 @@ export function getPipelineDocuments(p: Pipeline): string[] | undefined {
451480export type QueryOrPipeline = Query | Pipeline ;
452481
453482export function isPipeline ( q : QueryOrPipeline ) : q is Pipeline {
454- return q instanceof Pipeline ;
483+ return q instanceof Pipeline || q instanceof LitePipeline ;
455484}
456485
457486export function stringifyQueryOrPipeline ( q : QueryOrPipeline ) : string {
0 commit comments