Adds Sources/SkipFirebaseFirestore/Pipeline.swift with the minimum API surface needed for full-text search via the Firestore Pipeline API: - Firestore.pipeline() -> PipelineSource (extension on existing wrapper) - PipelineSource.collection(_:) / collectionGroup(_:) -> Pipeline - Pipeline.where(_:) / search(query:) / limit(_:) / offset(_:) -> Pipeline - Pipeline.execute() async throws -> PipelineSnapshot - PipelineSnapshot.results: [PipelineResult] - PipelineResult.id / data() - Field(_:) — wraps com.google.firebase.firestore.pipeline.Field.field() - DocumentMatches(_:) — wraps Expression.documentMatches() on Android - Expression / BooleanExpression protocols bridging iOS + Android types Includes compile-time smoke tests in PipelineTests.swift.
…idge gen The first cut used Swift protocols (Expression, BooleanExpression) with Kotlin-only return types and a 'where' method, both of which broke Skip bridge generation: - 'where' is a Swift keyword; the auto-generated Pipeline_Bridge.swift produced unescaped identifier usage that won't compile. - Protocols whose signatures reference com.google.firebase.firestore.pipeline.* cannot be bridged to iOS, where those Kotlin types do not exist; the generated _BridgeImpl types fail conformance. Switch to the SkipFirebaseFirestore.swift convention used throughout the package: concrete final classes that extend KotlinConverting<...> and expose the platform value via a 'kotlin()' override. Rename .where(...) to .whereCondition(...) to dodge the keyword. Collapse the Expression / Field / BooleanExpression hierarchy into a single PipelineBooleanExpression with static factories (documentMatches, fieldEqualTo, fieldArrayContainsAny) since that's all the search call sites need.
…store PipelineTests.swift was calling iOS-native FirebaseFirestore Pipeline APIs (Field.equalTo, PipelineSnapshot, PipelineResult.data()) but the native iOS SDK 12.12.1 exposes those with different shapes (equal not equalTo, no PipelineSnapshot wrapper, .data is a property). The Skip wrapper exists only on the SKIP/Android path — iOS gets Pipeline via @_exported import FirebaseFirestore directly. Gate the test class with #if SKIP so it exercises the wrapper only where the wrapper applies, and use the renamed API (whereCondition, PipelineBooleanExpression factories).
…, error scope
Three issues in the Android (Kotlin) transpile pass:
- 'field' factory lives on Expression.Companion, not Field.Companion
(api.txt: 'method public static final ... Expression.field(String)').
Switch from Field.field(name) to Expression.field(name).
- snapshot.results.map { ... } returns Kotlin List but the property
signature is Skip-Array. Rewrite with arrayOf() + append loop so the
return type matches.
- execute() referenced fileprivate asNSError from SkipFirebaseFirestore.swift
which Kotlin can't access across files. Drop the catch — propagate
FirebaseFirestoreException as-is (the existing rest of the package
follows the same pattern in non-private call sites).
IT-Guy007 marked this pull request as ready for review
June 17, 2026 16:24IT-Guy007 deleted the feature/CLUBAPP-459-pipeline-api branch
June 17, 2026 17:55