From c19a051ce490398f49fbf9bdb7181a986b66fa14 Mon Sep 17 00:00:00 2001 From: Maneesh Tewani Date: Thu, 9 Jan 2025 10:17:03 -0800 Subject: [PATCH] Updated FDC to include promise instead of promiselike (#8667) --- .changeset/tame-tigers-approve.md | 6 +++++ common/api-review/data-connect.api.md | 12 ++-------- packages/data-connect/src/api/Mutation.ts | 6 ++--- packages/data-connect/src/api/query.ts | 4 ++-- packages/data-connect/src/network/fetch.ts | 9 ++++++-- .../src/network/transport/index.ts | 8 ++----- .../src/network/transport/rest.ts | 22 +++++-------------- packages/data-connect/test/unit/fetch.test.ts | 12 ++++++++-- 8 files changed, 38 insertions(+), 41 deletions(-) create mode 100644 .changeset/tame-tigers-approve.md diff --git a/.changeset/tame-tigers-approve.md b/.changeset/tame-tigers-approve.md new file mode 100644 index 00000000000..42ce75ecfc0 --- /dev/null +++ b/.changeset/tame-tigers-approve.md @@ -0,0 +1,6 @@ +--- +"@firebase/data-connect": minor +"firebase": minor +--- + +Updated to include promise instead of promiselike diff --git a/common/api-review/data-connect.api.md b/common/api-review/data-connect.api.md index b2c6fb01931..952d8b4dc10 100644 --- a/common/api-review/data-connect.api.md +++ b/common/api-review/data-connect.api.md @@ -11,14 +11,6 @@ import { FirebaseError } from '@firebase/util'; import { LogLevelString } from '@firebase/logger'; import { Provider } from '@firebase/component'; -// @public (undocumented) -export interface CancellableOperation extends PromiseLike<{ - data: T; -}> { - // (undocumented) - cancel: () => void; -} - // @public export function connectDataConnectEmulator(dc: DataConnect, host: string, port?: number, sslEnabled?: boolean): void; @@ -88,7 +80,7 @@ export function getDataConnect(app: FirebaseApp, options: ConnectorConfig): Data export const MUTATION_STR = "mutation"; // @public -export interface MutationPromise extends PromiseLike> { +export interface MutationPromise extends Promise> { } // @public (undocumented) @@ -144,7 +136,7 @@ export interface OpResult { export const QUERY_STR = "query"; // @public -export interface QueryPromise extends PromiseLike> { +export interface QueryPromise extends Promise> { } // @public diff --git a/packages/data-connect/src/api/Mutation.ts b/packages/data-connect/src/api/Mutation.ts index ca2efdb7a30..570b28b0eab 100644 --- a/packages/data-connect/src/api/Mutation.ts +++ b/packages/data-connect/src/api/Mutation.ts @@ -76,7 +76,7 @@ export function mutationRef( * @internal */ export class MutationManager { - private _inflight: Array> = []; + private _inflight: Array> = []; constructor(private _transport: DataConnectTransport) {} executeMutation( mutationRef: MutationRef @@ -95,7 +95,7 @@ export class MutationManager { return obj; }); this._inflight.push(result); - const removePromise = (): Array> => + const removePromise = (): Array> => (this._inflight = this._inflight.filter(promise => promise !== result)); result.then(removePromise, removePromise); return withRefPromise; @@ -113,7 +113,7 @@ export interface MutationResult * Mutation return value from `executeMutation` */ export interface MutationPromise - extends PromiseLike> { + extends Promise> { // reserved for special actions like cancellation } diff --git a/packages/data-connect/src/api/query.ts b/packages/data-connect/src/api/query.ts index a4ab17b7ceb..00382686dab 100644 --- a/packages/data-connect/src/api/query.ts +++ b/packages/data-connect/src/api/query.ts @@ -67,7 +67,7 @@ export interface QueryResult * Promise returned from `executeQuery` */ export interface QueryPromise - extends PromiseLike> { + extends Promise> { // reserved for special actions like cancellation } @@ -124,7 +124,7 @@ export function queryRef( dataConnect: dcInstance, refType: QUERY_STR, name: queryName, - variables: variables as Variables + variables: variables }; } /** diff --git a/packages/data-connect/src/network/fetch.ts b/packages/data-connect/src/network/fetch.ts index 06ef6dd8285..d5d2a439432 100644 --- a/packages/data-connect/src/network/fetch.ts +++ b/packages/data-connect/src/network/fetch.ts @@ -30,9 +30,14 @@ function getGoogApiClientValue(_isUsingGen: boolean): string { } return str; } +export interface DataConnectFetchBody { + name: string; + operationName: string; + variables: T; +} export function dcFetch( url: string, - body: U, + body: DataConnectFetchBody, { signal }: AbortController, appId: string | null, accessToken: string | null, @@ -95,7 +100,7 @@ export function dcFetch( logError('DataConnect error while performing request: ' + stringified); throw new DataConnectError(Code.OTHER, stringified); } - return res as { data: T; errors: Error[] }; + return res; }); } interface MessageObject { diff --git a/packages/data-connect/src/network/transport/index.ts b/packages/data-connect/src/network/transport/index.ts index 5518faa0f95..f4bb801f9b3 100644 --- a/packages/data-connect/src/network/transport/index.ts +++ b/packages/data-connect/src/network/transport/index.ts @@ -26,19 +26,15 @@ export interface DataConnectTransport { invokeQuery( queryName: string, body?: U - ): PromiseLike<{ data: T; errors: Error[] }>; + ): Promise<{ data: T; errors: Error[] }>; invokeMutation( queryName: string, body?: U - ): PromiseLike<{ data: T; errors: Error[] }>; + ): Promise<{ data: T; errors: Error[] }>; useEmulator(host: string, port?: number, sslEnabled?: boolean): void; onTokenChanged: (token: string | null) => void; } -export interface CancellableOperation extends PromiseLike<{ data: T }> { - cancel: () => void; -} - /** * @internal */ diff --git a/packages/data-connect/src/network/transport/rest.ts b/packages/data-connect/src/network/transport/rest.ts index 85847868c5d..0a49fc9e269 100644 --- a/packages/data-connect/src/network/transport/rest.ts +++ b/packages/data-connect/src/network/transport/rest.ts @@ -161,7 +161,7 @@ export class RESTTransport implements DataConnectTransport { invokeQuery: ( queryName: string, body?: U - ) => PromiseLike<{ data: T; errors: Error[] }> = ( + ) => Promise<{ data: T; errors: Error[] }> = ( queryName: string, body: U ) => { @@ -174,7 +174,7 @@ export class RESTTransport implements DataConnectTransport { name: `projects/${this._project}/locations/${this._location}/services/${this._serviceName}/connectors/${this._connectorName}`, operationName: queryName, variables: body - } as unknown as U, // TODO(mtewani): This is a patch, fix this. + }, abortController, this.appId, this._accessToken, @@ -182,16 +182,12 @@ export class RESTTransport implements DataConnectTransport { this._isUsingGen ) ); - - return { - then: withAuth.then.bind(withAuth), - catch: withAuth.catch.bind(withAuth) - }; + return withAuth; }; invokeMutation: ( queryName: string, body?: U - ) => PromiseLike<{ data: T; errors: Error[] }> = ( + ) => Promise<{ data: T; errors: Error[] }> = ( mutationName: string, body: U ) => { @@ -203,7 +199,7 @@ export class RESTTransport implements DataConnectTransport { name: `projects/${this._project}/locations/${this._location}/services/${this._serviceName}/connectors/${this._connectorName}`, operationName: mutationName, variables: body - } as unknown as U, + }, abortController, this.appId, this._accessToken, @@ -211,12 +207,6 @@ export class RESTTransport implements DataConnectTransport { this._isUsingGen ); }); - - return { - then: taskResult.then.bind(taskResult), - // catch: taskResult.catch.bind(taskResult), - // finally: taskResult.finally.bind(taskResult), - cancel: () => abortController.abort() - }; + return taskResult; }; } diff --git a/packages/data-connect/test/unit/fetch.test.ts b/packages/data-connect/test/unit/fetch.test.ts index a50ac188724..3d9a9b04523 100644 --- a/packages/data-connect/test/unit/fetch.test.ts +++ b/packages/data-connect/test/unit/fetch.test.ts @@ -42,7 +42,11 @@ describe('fetch', () => { await expect( dcFetch( 'http://localhost', - {}, + { + name: 'n', + operationName: 'n', + variables: {} + }, {} as AbortController, null, null, @@ -61,7 +65,11 @@ describe('fetch', () => { await expect( dcFetch( 'http://localhost', - {}, + { + name: 'n', + operationName: 'n', + variables: {} + }, {} as AbortController, null, null,