diff --git a/.gitignore b/.gitignore index a989576ccf3..e0c3ecbda0f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ dist .awcache .cache /config/project.json +/config/prod.project.json scripts/docgen-compat/html # OS Specific Files diff --git a/packages/firestore/externs.json b/packages/firestore/externs.json index ae68fe87be8..c20ff9b6a75 100644 --- a/packages/firestore/externs.json +++ b/packages/firestore/externs.json @@ -5,12 +5,15 @@ "node_modules/typescript/lib/lib.dom.d.ts", "node_modules/typescript/lib/lib.es2015.promise.d.ts", "node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "node_modules/typescript/lib/lib.es2020.bigint.d.ts", "node_modules/typescript/lib/lib.es2015.iterable.d.ts", "node_modules/typescript/lib/lib.es2015.collection.d.ts", "node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", "node_modules/typescript/lib/lib.es2015.core.d.ts", "node_modules/typescript/lib/lib.es2017.object.d.ts", "node_modules/typescript/lib/lib.es2017.string.d.ts", + "node_modules/typescript/lib/lib.es2019.array.d.ts", + "node_modules/re2js/build/index.esm.d.ts", "packages/app-types/index.d.ts", "packages/app-types/private.d.ts", "packages/app/dist/app.d.ts", diff --git a/packages/firestore/package.json b/packages/firestore/package.json index 8c458acb3ab..996c8f7cf0c 100644 --- a/packages/firestore/package.json +++ b/packages/firestore/package.json @@ -139,7 +139,9 @@ "@firebase/webchannel-wrapper": "1.0.5", "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", - "tslib": "^2.1.0" + "re2js": "^0.4.2", + "tslib": "^2.1.0", + "undici": "6.19.7" }, "peerDependencies": { "@firebase/app": "0.x" @@ -157,6 +159,7 @@ "rollup": "2.79.2", "rollup-plugin-copy": "3.5.0", "rollup-plugin-copy-assets": "2.0.3", + "rollup-plugin-dts": "5.3.1", "rollup-plugin-replace": "2.2.0", "rollup-plugin-sourcemaps": "0.6.3", "@rollup/plugin-terser": "0.4.4", diff --git a/packages/firestore/src/protos/firestore_proto_api.ts b/packages/firestore/src/protos/firestore_proto_api.ts index cc1c57259f5..d20cd2df4f9 100644 --- a/packages/firestore/src/protos/firestore_proto_api.ts +++ b/packages/firestore/src/protos/firestore_proto_api.ts @@ -356,6 +356,9 @@ export declare namespace firestoreV1ApiClientInterfaces { parent?: string; structuredQuery?: StructuredQuery; } + interface PipelineQueryTarget { + structuredPipeline?: StructuredPipeline; + } interface ReadOnly { readTime?: string; } @@ -424,6 +427,7 @@ export declare namespace firestoreV1ApiClientInterfaces { interface Target { query?: QueryTarget; documents?: DocumentsTarget; + pipelineQuery?: PipelineQueryTarget; resumeToken?: string | Uint8Array; readTime?: Timestamp; targetId?: number; @@ -555,6 +559,8 @@ export declare type Pipeline = firestoreV1ApiClientInterfaces.Pipeline; export declare type Precondition = firestoreV1ApiClientInterfaces.Precondition; export declare type Projection = firestoreV1ApiClientInterfaces.Projection; export declare type QueryTarget = firestoreV1ApiClientInterfaces.QueryTarget; +export declare type PipelineQueryTarget = + firestoreV1ApiClientInterfaces.PipelineQueryTarget; export declare type ReadOnly = firestoreV1ApiClientInterfaces.ReadOnly; export declare type ReadWrite = firestoreV1ApiClientInterfaces.ReadWrite; export declare type RollbackRequest = diff --git a/packages/firestore/src/protos/google/firestore/v1/firestore.proto b/packages/firestore/src/protos/google/firestore/v1/firestore.proto index 3e7b62e0609..be914ccdfce 100644 --- a/packages/firestore/src/protos/google/firestore/v1/firestore.proto +++ b/packages/firestore/src/protos/google/firestore/v1/firestore.proto @@ -913,6 +913,15 @@ message Target { } } + // A target specified by a pipeline query. + message PipelineQueryTarget { + // The pipeline to run. + oneof pipeline_type { + // A pipelined operation in structured format. + StructuredPipeline structured_pipeline = 1; + } + } + // The type of target to listen to. oneof target_type { // A target specified by a query. @@ -920,6 +929,9 @@ message Target { // A target specified by a set of document names. DocumentsTarget documents = 3; + + // A target specified by a pipeline query. + PipelineQueryTarget pipeline_query = 13; } // When to start listening. diff --git a/packages/firestore/src/protos/google/firestore/v1/write.proto b/packages/firestore/src/protos/google/firestore/v1/write.proto index d8465955b67..f1d1bbb9ec1 100644 --- a/packages/firestore/src/protos/google/firestore/v1/write.proto +++ b/packages/firestore/src/protos/google/firestore/v1/write.proto @@ -198,6 +198,12 @@ message WriteResult { // // Multiple [DocumentChange][google.firestore.v1.DocumentChange] messages may be returned for the same logical // change, if multiple targets are affected. +// +// For PipelineQueryTargets, `document` will be in the new pipeline format, +// (-- TODO(b/330735468): Insert link to spec. --) +// For a Listen stream with both QueryTargets and PipelineQueryTargets present, +// if a document matches both types of queries, then a separate DocumentChange +// messages will be sent out one for each set. message DocumentChange { // The new state of the [Document][google.firestore.v1.Document]. // diff --git a/packages/firestore/src/protos/protos.json b/packages/firestore/src/protos/protos.json index 5b73c4647f8..15093c0f981 100644 --- a/packages/firestore/src/protos/protos.json +++ b/packages/firestore/src/protos/protos.json @@ -2343,7 +2343,8 @@ "targetType": { "oneof": [ "query", - "documents" + "documents", + "pipeline_query" ] }, "resumeType": { @@ -2362,6 +2363,10 @@ "type": "DocumentsTarget", "id": 3 }, + "pipelineQuery": { + "type": "PipelineQueryTarget", + "id": 13 + }, "resumeToken": { "type": "bytes", "id": 4 @@ -2411,6 +2416,21 @@ "id": 2 } } + }, + "PipelineQueryTarget": { + "oneofs": { + "pipelineType": { + "oneof": [ + "structuredPipeline" + ] + } + }, + "fields": { + "structuredPipeline": { + "type": "StructuredPipeline", + "id": 1 + } + } } } }, @@ -3266,4 +3286,4 @@ } } } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index caa33e3d218..d3a5bd924fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1022,6 +1022,14 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" +"@babel/types@^7.26.10": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259" + integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/types@^7.26.8": version "7.26.8" resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz#97dcdc190fab45be7f3dc073e3c11160d677c127" @@ -13692,6 +13700,11 @@ re2@^1.17.7: nan "^2.20.0" node-gyp "^10.2.0" +re2js@^0.4.2: + version "0.4.3" + resolved "https://registry.npmjs.org/re2js/-/re2js-0.4.3.tgz#1318cd0c12aa6ed3ba56d5e012311ffbfb2aef35" + integrity sha512-EuNmh7jurhHEE8Ge/lBo9JuMLb3qf866Xjjfyovw3wPc7+hlqDkZq4LwhrCQMEI+ARWfrKrHozEndzlpNT0WDg== + react-is@^18.0.0: version "18.3.1" resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" @@ -14566,7 +14579,7 @@ semver-greatest-satisfied-range@^1.1.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.7.1: +semver@7.7.1, semver@^7.1.2: version "7.7.1" resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== @@ -16401,6 +16414,11 @@ undici-types@~6.20.0: resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== +undici@6.19.7: + version "6.19.7" + resolved "https://registry.npmjs.org/undici/-/undici-6.19.7.tgz#7d4cf26dc689838aa8b6753a3c5c4288fc1e0216" + integrity sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2"