diff --git a/.changeset/honest-waves-brake.md b/.changeset/honest-waves-brake.md new file mode 100644 index 00000000000..7019afe2325 --- /dev/null +++ b/.changeset/honest-waves-brake.md @@ -0,0 +1,5 @@ +--- +'@firebase/firestore': patch +--- + +Expose client side indexing feature with `setIndexConfiguration`. diff --git a/common/api-review/firestore.api.md b/common/api-review/firestore.api.md index db36b60482c..469eca6f2ee 100644 --- a/common/api-review/firestore.api.md +++ b/common/api-review/firestore.api.md @@ -233,6 +233,30 @@ export function getFirestore(app?: FirebaseApp): Firestore; // @public export function increment(n: number): FieldValue; +// @public +export interface Index { + // (undocumented) + [key: string]: unknown; + readonly collectionGroup: string; + readonly fields?: IndexField[]; +} + +// @public +export interface IndexConfiguration { + // (undocumented) + [key: string]: unknown; + readonly indexes?: Index[]; +} + +// @public +export interface IndexField { + // (undocumented) + [key: string]: unknown; + readonly arrayConfig?: 'CONTAINS'; + readonly fieldPath: string; + readonly order?: 'ASCENDING' | 'DESCENDING'; +} + // @public export function initializeFirestore(app: FirebaseApp, settings: FirestoreSettings): Firestore; @@ -396,6 +420,12 @@ export function setDoc(reference: DocumentReference, data: WithFieldValue< // @public export function setDoc(reference: DocumentReference, data: PartialWithFieldValue, options: SetOptions): Promise; +// @public +export function setIndexConfiguration(firestore: Firestore, configuration: IndexConfiguration): Promise; + +// @public +export function setIndexConfiguration(firestore: Firestore, json: string): Promise; + // @public export function setLogLevel(logLevel: LogLevel): void; diff --git a/packages/firestore/src/api.ts b/packages/firestore/src/api.ts index 8e774dbfb30..544d275fc30 100644 --- a/packages/firestore/src/api.ts +++ b/packages/firestore/src/api.ts @@ -143,6 +143,13 @@ export { UnionToIntersection } from '../src/lite-api/types'; +export { + setIndexConfiguration, + Index, + IndexConfiguration, + IndexField +} from './api/index_configuration'; + /** * Internal exports */ @@ -160,4 +167,3 @@ export type { ByteString as _ByteString } from './util/byte_string'; export { logWarn as _logWarn } from './util/log'; export { EmptyAuthCredentialsProvider as _EmptyAuthCredentialsProvider } from './api/credentials'; export { EmptyAppCheckTokenProvider as _EmptyAppCheckTokenProvider } from './api/credentials'; -export { setIndexConfiguration as _setIndexConfiguration } from './api/index_configuration'; diff --git a/packages/firestore/src/api/index_configuration.ts b/packages/firestore/src/api/index_configuration.ts index 918c8956441..6fd53693c75 100644 --- a/packages/firestore/src/api/index_configuration.ts +++ b/packages/firestore/src/api/index_configuration.ts @@ -39,8 +39,6 @@ export { /** * A single field element in an index configuration. - * - * @internal */ export interface IndexField { /** The field path to index. */ @@ -65,8 +63,6 @@ export interface IndexField { /** * The SDK definition of a Firestore index. - * - * @internal */ export interface Index { /** The ID of the collection to index. */ @@ -82,8 +78,6 @@ export interface Index { * * See {@link https://firebase.google.com/docs/reference/firestore/indexes/#json_format | JSON Format} * for a description of the format of the index definition. - * - * @internal */ export interface IndexConfiguration { /** A list of all Firestore indexes. */ @@ -107,7 +101,6 @@ export interface IndexConfiguration { * before setting an index configuration. If IndexedDb is not enabled, any * index configuration is ignored. * - * @internal * @param firestore - The {@link Firestore} instance to configure indexes for. * @param configuration -The index definition. * @throws FirestoreError if the JSON format is invalid. @@ -118,6 +111,7 @@ export function setIndexConfiguration( firestore: Firestore, configuration: IndexConfiguration ): Promise; + /** * Configures indexing for local query execution. Any previous index * configuration is overridden. The `Promise` resolves once the index @@ -137,7 +131,6 @@ export function setIndexConfiguration( * firestore:indexes`). If the JSON format is invalid, this method throws an * error. * - * @internal * @param firestore - The {@link Firestore} instance to configure indexes for. * @param json -The JSON format exported by the Firebase CLI. * @throws FirestoreError if the JSON format is invalid. @@ -148,6 +141,7 @@ export function setIndexConfiguration( firestore: Firestore, json: string ): Promise; + export function setIndexConfiguration( firestore: Firestore, jsonOrConfiguration: string | IndexConfiguration diff --git a/packages/firestore/test/integration/api/index_configuration.test.ts b/packages/firestore/test/integration/api/index_configuration.test.ts index cf6adf6a9ba..f75f065d263 100644 --- a/packages/firestore/test/integration/api/index_configuration.test.ts +++ b/packages/firestore/test/integration/api/index_configuration.test.ts @@ -17,7 +17,7 @@ import { expect } from 'chai'; -import { _setIndexConfiguration as setIndexConfiguration } from '../util/firebase_export'; +import { setIndexConfiguration } from '../util/firebase_export'; import { apiDescribe, withTestDb } from '../util/helpers'; apiDescribe('Index Configuration:', (persistence: boolean) => {