Skip to content

Commit bcfaf2a

Browse files
committed
Modular-style pipeline and execute methods for experimentation. Plus cleanup.
1 parent 56c4e4a commit bcfaf2a

File tree

12 files changed

+162
-83
lines changed

12 files changed

+162
-83
lines changed

common/api-review/firestore-lite.api.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,9 @@ export function euclideanDistance(expr: Constant, other: VectorValue): Euclidean
639639
// @beta
640640
export function euclideanDistance(expr: Constant, other: Constant): EuclideanDistance;
641641

642+
// @beta
643+
export function execute<AppModelType>(pipeline: Pipeline<AppModelType>): Promise<Array<PipelineResult<AppModelType>>>;
644+
642645
// @beta (undocumented)
643646
export class Exists extends FirestoreFunction implements FilterCondition {
644647
constructor(expr: Constant);
@@ -1612,6 +1615,14 @@ export class Pipeline<AppModelType = DocumentData> {
16121615
where(condition: FilterCondition & Constant): Pipeline<AppModelType>;
16131616
}
16141617

1618+
// Warning: (ae-incompatible-release-tags) The symbol "pipeline" is marked as @public, but its signature references "PipelineSource" which is marked as @beta
1619+
//
1620+
// @public
1621+
export function pipeline(firestore: Firestore): PipelineSource;
1622+
1623+
// @public
1624+
export function pipeline(query: Query): Pipeline;
1625+
16151626
// @beta
16161627
export class PipelineResult<AppModelType = DocumentData> {
16171628
/* Excluded from this release type: _ref */
@@ -2203,8 +2214,8 @@ export function xor(left: FilterExpr, ...right: FilterExpr[]): Xor;
22032214

22042215
// Warnings were encountered during analysis:
22052216
//
2206-
// /home/runner/work/firebase-js-sdk/firebase-js-sdk/packages/firestore/dist/lite/index.d.ts:9237:9 - (ae-incompatible-release-tags) The symbol "accumulators" is marked as @public, but its signature references "AccumulatorTarget" which is marked as @beta
2207-
// /home/runner/work/firebase-js-sdk/firebase-js-sdk/packages/firestore/dist/lite/index.d.ts:9238:9 - (ae-incompatible-release-tags) The symbol "groups" is marked as @public, but its signature references "Selectable" which is marked as @beta
2208-
// /home/runner/work/firebase-js-sdk/firebase-js-sdk/packages/firestore/dist/lite/index.d.ts:9267:9 - (ae-incompatible-release-tags) The symbol "orderings" is marked as @public, but its signature references "Ordering" which is marked as @beta
2217+
// /Users/markduckworth/projects/firebase-js-sdk/packages/firestore/dist/lite/index.d.ts:9243:9 - (ae-incompatible-release-tags) The symbol "accumulators" is marked as @public, but its signature references "AccumulatorTarget" which is marked as @beta
2218+
// /Users/markduckworth/projects/firebase-js-sdk/packages/firestore/dist/lite/index.d.ts:9244:9 - (ae-incompatible-release-tags) The symbol "groups" is marked as @public, but its signature references "Selectable" which is marked as @beta
2219+
// /Users/markduckworth/projects/firebase-js-sdk/packages/firestore/dist/lite/index.d.ts:9273:9 - (ae-incompatible-release-tags) The symbol "orderings" is marked as @public, but its signature references "Ordering" which is marked as @beta
22092220

22102221
```

common/api-review/firestore.api.md

Lines changed: 28 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,9 @@ export function euclideanDistance(expr: Constant, other: VectorValue): Euclidean
686686
// @beta
687687
export function euclideanDistance(expr: Constant, other: Constant): EuclideanDistance;
688688

689+
// @beta
690+
export function execute<AppModelType>(pipeline: Pipeline<AppModelType>): Promise<Array<PipelineResult<AppModelType>>>;
691+
689692
// @beta (undocumented)
690693
export class Exists extends FirestoreFunction implements FilterCondition {
691694
constructor(expr: Constant);
@@ -1819,65 +1822,53 @@ export interface PersistentSingleTabManagerSettings {
18191822
// @public
18201823
export type PersistentTabManager = PersistentSingleTabManager | PersistentMultipleTabManager;
18211824

1822-
// @public
1825+
// @public (undocumented)
18231826
export class Pipeline<AppModelType = DocumentData> {
1824-
/* Excluded from this release type: _db */
1827+
/* Excluded from this release type: __constructor */
18251828
// Warning: (ae-incompatible-release-tags) The symbol "addFields" is marked as @public, but its signature references "Selectable" which is marked as @beta
18261829
addFields(...fields: Selectable[]): Pipeline<AppModelType>;
1827-
/* Excluded from this release type: userDataWriter */
1828-
/* Excluded from this release type: documentReferenceFactory */
18291830
// Warning: (ae-incompatible-release-tags) The symbol "aggregate" is marked as @public, but its signature references "AccumulatorTarget" which is marked as @beta
18301831
aggregate(...accumulators: AccumulatorTarget[]): Pipeline<AppModelType>;
1831-
/* Excluded from this release type: userDataWriter */
1832-
/* Excluded from this release type: documentReferenceFactory */
1833-
aggregate(options: {
1834-
accumulators: AccumulatorTarget[];
1835-
groups?: Array<string | Selectable>;
1836-
}): Pipeline<AppModelType>;
1837-
/* Excluded from this release type: userDataWriter */
1838-
/* Excluded from this release type: documentReferenceFactory */
1832+
aggregate(options: { accumulators: AccumulatorTarget[]; groups?: Array<string | Selectable>; }): Pipeline<AppModelType>;
1833+
// (undocumented)
1834+
converter: any;
18391835
// Warning: (ae-incompatible-release-tags) The symbol "distinct" is marked as @public, but its signature references "Selectable" which is marked as @beta
18401836
distinct(...groups: Array<string | Selectable>): Pipeline<AppModelType>;
1841-
/* Excluded from this release type: userDataWriter */
1842-
/* Excluded from this release type: documentReferenceFactory */
18431837
// Warning: (ae-incompatible-release-tags) The symbol "execute" is marked as @public, but its signature references "PipelineResult" which is marked as @beta
18441838
execute(): Promise<Array<PipelineResult<AppModelType>>>;
1845-
/* Excluded from this release type: userDataWriter */
1846-
/* Excluded from this release type: documentReferenceFactory */
18471839
// Warning: (ae-incompatible-release-tags) The symbol "findNearest" is marked as @public, but its signature references "FindNearestOptions" which is marked as @beta
18481840
//
18491841
// (undocumented)
18501842
findNearest(options: FindNearestOptions): Pipeline<AppModelType>;
1851-
/* Excluded from this release type: userDataWriter */
1852-
/* Excluded from this release type: documentReferenceFactory */
18531843
genericStage(name: string, params: any[]): Pipeline<AppModelType>;
1854-
/* Excluded from this release type: userDataWriter */
1855-
/* Excluded from this release type: documentReferenceFactory */
18561844
limit(limit: number): Pipeline<AppModelType>;
1857-
/* Excluded from this release type: userDataWriter */
1858-
/* Excluded from this release type: documentReferenceFactory */
18591845
offset(offset: number): Pipeline<AppModelType>;
1860-
/* Excluded from this release type: userDataWriter */
1861-
/* Excluded from this release type: documentReferenceFactory */
1846+
readUserData: any;
18621847
// Warning: (ae-incompatible-release-tags) The symbol "select" is marked as @public, but its signature references "Selectable" which is marked as @beta
18631848
select(...selections: Array<Selectable | string>): Pipeline<AppModelType>;
1864-
/* Excluded from this release type: userDataWriter */
1865-
/* Excluded from this release type: documentReferenceFactory */
1849+
// (undocumented)
1850+
selectablesToMap: any;
18661851
// Warning: (ae-incompatible-release-tags) The symbol "sort" is marked as @public, but its signature references "Ordering" which is marked as @beta
18671852
sort(...orderings: Ordering[]): Pipeline<AppModelType>;
1868-
/* Excluded from this release type: userDataWriter */
1869-
/* Excluded from this release type: documentReferenceFactory */
1870-
// (undocumented)
1871-
sort(options: {
1872-
orderings: Ordering[];
1873-
}): Pipeline<AppModelType>;
1874-
/* Excluded from this release type: userDataWriter */
1875-
/* Excluded from this release type: documentReferenceFactory */
1853+
// (undocumented)
1854+
sort(options: { orderings: Ordering[]; }): Pipeline<AppModelType>;
1855+
// (undocumented)
1856+
stages: any;
1857+
// (undocumented)
1858+
userDataReader: any;
18761859
// Warning: (ae-incompatible-release-tags) The symbol "where" is marked as @public, but its signature references "FilterCondition" which is marked as @beta
18771860
// Warning: (ae-incompatible-release-tags) The symbol "where" is marked as @public, but its signature references "Constant" which is marked as @beta
18781861
where(condition: FilterCondition & Constant): Pipeline<AppModelType>;
18791862
}
18801863

1864+
// Warning: (ae-incompatible-release-tags) The symbol "pipeline" is marked as @public, but its signature references "PipelineSource" which is marked as @beta
1865+
//
1866+
// @public
1867+
export function pipeline(firestore: Firestore): PipelineSource;
1868+
1869+
// @public
1870+
export function pipeline(query: Query): Pipeline;
1871+
18811872
// @beta
18821873
export class PipelineResult<AppModelType = DocumentData> {
18831874
/* Excluded from this release type: _ref */
@@ -2499,8 +2490,8 @@ export function xor(left: FilterExpr, ...right: FilterExpr[]): Xor;
24992490

25002491
// Warnings were encountered during analysis:
25012492
//
2502-
// /home/runner/work/firebase-js-sdk/firebase-js-sdk/packages/firestore/dist/index.d.ts:10116:9 - (ae-incompatible-release-tags) The symbol "accumulators" is marked as @public, but its signature references "AccumulatorTarget" which is marked as @beta
2503-
// /home/runner/work/firebase-js-sdk/firebase-js-sdk/packages/firestore/dist/index.d.ts:10117:9 - (ae-incompatible-release-tags) The symbol "groups" is marked as @public, but its signature references "Selectable" which is marked as @beta
2504-
// /home/runner/work/firebase-js-sdk/firebase-js-sdk/packages/firestore/dist/index.d.ts:10146:9 - (ae-incompatible-release-tags) The symbol "orderings" is marked as @public, but its signature references "Ordering" which is marked as @beta
2493+
// /Users/markduckworth/projects/firebase-js-sdk/packages/firestore/dist/index.d.ts:10106:26 - (ae-incompatible-release-tags) The symbol "accumulators" is marked as @public, but its signature references "AccumulatorTarget" which is marked as @beta
2494+
// /Users/markduckworth/projects/firebase-js-sdk/packages/firestore/dist/index.d.ts:10106:61 - (ae-incompatible-release-tags) The symbol "groups" is marked as @public, but its signature references "Selectable" which is marked as @beta
2495+
// /Users/markduckworth/projects/firebase-js-sdk/packages/firestore/dist/index.d.ts:10133:21 - (ae-incompatible-release-tags) The symbol "orderings" is marked as @public, but its signature references "Ordering" which is marked as @beta
25052496

25062497
```

packages/firestore/lite/index.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@ export { PipelineSource } from '../src/lite-api/pipeline-source';
3131

3232
export { PipelineResult } from '../src/lite-api/pipeline-result';
3333

34-
export { Pipeline } from '../src/lite-api/pipeline';
34+
export { Pipeline, pipeline } from '../src/lite-api/pipeline';
3535

3636
export { useFirestorePipelines } from '../src/lite-api/database_augmentation';
3737

38+
export { execute } from '../src/lite-api/pipeline_impl';
39+
3840
export {
3941
Stage,
4042
FindNearestOptions,
@@ -238,10 +240,7 @@ export {
238240
queryEqual
239241
} from '../src/lite-api/reference';
240242

241-
export {
242-
and,
243-
or,
244-
} from '../src/lite-api/overloads';
243+
export { and, or } from '../src/lite-api/overloads';
245244

246245
export {
247246
endAt,

packages/firestore/src/api.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ export { PipelineSource } from './lite-api/pipeline-source';
1919

2020
export { PipelineResult } from './lite-api/pipeline-result';
2121

22-
export { Pipeline } from './lite-api/pipeline';
22+
export { Pipeline, pipeline } from './api/pipeline';
2323

2424
export { useFirestorePipelines } from './api/database_augmentation';
2525

26+
export { execute } from './lite-api/pipeline_impl';
27+
2628
export {
2729
Stage,
2830
FindNearestOptions,

packages/firestore/src/api/pipeline.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { firestoreClientExecutePipeline } from '../core/firestore_client';
22
import { Pipeline as LitePipeline } from '../lite-api/pipeline';
33
import { PipelineResult } from '../lite-api/pipeline-result';
4-
import { DocumentData, DocumentReference } from '../lite-api/reference';
4+
import { PipelineSource } from '../lite-api/pipeline-source';
5+
import { DocumentData, DocumentReference, Query } from '../lite-api/reference';
56
import { Stage } from '../lite-api/stage';
67
import { UserDataReader } from '../lite-api/user_data_reader';
78
import { AbstractUserDataWriter } from '../lite-api/user_data_writer';
@@ -97,3 +98,21 @@ export class Pipeline<
9798
});
9899
}
99100
}
101+
102+
/**
103+
* Experimental Modular API for console testing.
104+
* @param firestore
105+
*/
106+
export function pipeline(firestore: Firestore): PipelineSource;
107+
108+
/**
109+
* Experimental Modular API for console testing.
110+
* @param query
111+
*/
112+
export function pipeline(query: Query): Pipeline;
113+
114+
export function pipeline(
115+
firestoreOrQuery: Firestore | Query
116+
): PipelineSource | Pipeline {
117+
return firestoreOrQuery.pipeline();
118+
}

packages/firestore/src/core/pipeline-util.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,9 @@ import {
1717
Expr,
1818
Field,
1919
FilterCondition,
20-
not,
20+
not
2121
} from '../lite-api/expressions';
22-
import {
23-
and,
24-
or
25-
} from '../lite-api/overloads';
22+
import { and, or } from '../lite-api/overloads';
2623
import { isNanValue, isNullValue } from '../model/values';
2724
import {
2825
ArrayValue as ProtoArrayValue,

packages/firestore/src/lite-api/database_augmentation.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { DocumentKey } from '../model/document_key';
22

33
import { Firestore } from './database';
4+
import { And, FilterExpr, Or } from './expressions';
5+
import { or, and } from './overloads';
46
import { Pipeline } from './pipeline';
57
import { PipelineSource } from './pipeline-source';
68
import { DocumentReference, Query } from './reference';
79
import { LiteUserDataWriter } from './reference_impl';
810
import { newUserDataReader } from './user_data_reader';
9-
import {or, and} from "./overloads";
10-
import {And, Avg, Expr, Field, FilterExpr, Or, Sum} from "./expressions";
1111

1212
export function useFirestorePipelines(): void {
1313
Firestore.prototype.pipeline = function (): PipelineSource {
@@ -41,11 +41,11 @@ export function useFirestorePipelines(): void {
4141
return pipeline;
4242
};
4343

44-
and._andFunction = function(left: FilterExpr, ...right: FilterExpr[]): And {
44+
and._andFunction = function (left: FilterExpr, ...right: FilterExpr[]): And {
4545
return new And([left, ...right]);
46-
}
46+
};
4747

48-
or._orFunction = function(left: FilterExpr, ...right: FilterExpr[]): Or {
48+
or._orFunction = function (left: FilterExpr, ...right: FilterExpr[]): Or {
4949
return new Or([left, ...right]);
50-
}
50+
};
5151
}

packages/firestore/src/lite-api/overloads.ts

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,12 @@
11
import { CompositeOperator } from '../core/filter';
22

3-
import {
4-
And, Avg, Expr, Field,
5-
FilterExpr,
6-
Or, Sum
7-
} from './expressions';
8-
3+
import { And, FilterExpr, Or } from './expressions';
94
import {
105
QueryCompositeFilterConstraint,
116
QueryConstraint,
127
QueryFilterConstraint,
138
validateQueryFilterConstraint
149
} from './query';
15-
import {FieldPath} from "./field_path";
16-
import {AggregateField} from "./aggregate_types";
17-
import {fieldPathFromArgument} from "./user_data_reader";
1810

1911
/**
2012
* @beta
@@ -53,8 +45,7 @@ export function or(
5345
): Or | QueryCompositeFilterConstraint {
5446
if (leftFilterExprOrQueryConstraint === undefined) {
5547
return or._orFilters();
56-
}
57-
else if (
48+
} else if (
5849
leftFilterExprOrQueryConstraint instanceof QueryConstraint ||
5950
leftFilterExprOrQueryConstraint instanceof QueryCompositeFilterConstraint ||
6051
leftFilterExprOrQueryConstraint === undefined
@@ -65,7 +56,7 @@ export function or(
6556
);
6657
} else {
6758
// @ts-ignore
68-
return or._orFunction(leftFilterExprOrQueryConstraint, ...(right));
59+
return or._orFunction(leftFilterExprOrQueryConstraint, ...right);
6960
}
7061
}
7162

@@ -83,10 +74,7 @@ or._orFilters = function (
8374
);
8475
};
8576

86-
or._orFunction = function (
87-
left: FilterExpr,
88-
...right: FilterExpr[]
89-
): Or {
77+
or._orFunction = function (left: FilterExpr, ...right: FilterExpr[]): Or {
9078
throw new Error(
9179
'Pipelines not initialized. Your application must call `useFirestorePipelines()` before using Firestore Pipeline features.'
9280
);
@@ -160,10 +148,7 @@ and._andFilters = function (
160148
);
161149
};
162150

163-
and._andFunction = function (
164-
left: FilterExpr,
165-
...right: FilterExpr[]
166-
): And {
151+
and._andFunction = function (left: FilterExpr, ...right: FilterExpr[]): And {
167152
throw new Error(
168153
'Pipelines not initialized. Your application must call `useFirestorePipelines()` before using Firestore Pipeline features.'
169154
);

packages/firestore/src/lite-api/pipeline.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ import {
4242
Selectable
4343
} from './expressions';
4444
import { PipelineResult } from './pipeline-result';
45-
import { DocumentData, DocumentReference } from './reference';
45+
import { PipelineSource } from './pipeline-source';
46+
import { DocumentData, DocumentReference, Query } from './reference';
4647
import {
4748
AddFields,
4849
Aggregate,
@@ -829,3 +830,21 @@ export class Pipeline<AppModelType = DocumentData>
829830
};
830831
}
831832
}
833+
834+
/**
835+
* Experimental Modular API for console testing.
836+
* @param firestore
837+
*/
838+
export function pipeline(firestore: Firestore): PipelineSource;
839+
840+
/**
841+
* Experimental Modular API for console testing.
842+
* @param query
843+
*/
844+
export function pipeline(query: Query): Pipeline;
845+
846+
export function pipeline(
847+
firestoreOrQuery: Firestore | Query
848+
): PipelineSource | Pipeline {
849+
return firestoreOrQuery.pipeline();
850+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Pipeline } from './pipeline';
2+
import { PipelineResult } from './pipeline-result';
3+
4+
/**
5+
* Modular API for console experimentation.
6+
* @param pipeline Execute this pipeline.
7+
* @beta
8+
*/
9+
export function execute<AppModelType>(
10+
pipeline: Pipeline<AppModelType>
11+
): Promise<Array<PipelineResult<AppModelType>>> {
12+
return pipeline.execute();
13+
}

0 commit comments

Comments
 (0)