From 5cc94a754de3d5d4a9eea3785d45df48882aaab1 Mon Sep 17 00:00:00 2001 From: Charles Fries Date: Mon, 22 Apr 2024 15:38:49 -0700 Subject: [PATCH 1/4] Make `buildCollectionRef` protected --- addon/adapters/cloud-firestore-modular.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/adapters/cloud-firestore-modular.ts b/addon/adapters/cloud-firestore-modular.ts index c70d9d7..690dfc5 100644 --- a/addon/adapters/cloud-firestore-modular.ts +++ b/addon/adapters/cloud-firestore-modular.ts @@ -282,7 +282,7 @@ export default class CloudFirestoreModularAdapter extends Adapter { }); } - private buildCollectionRef( + protected buildCollectionRef( modelName: keyof ModelRegistry, adapterOptions?: AdapterOption, ): CollectionReference { From 528e3d14d250598c6daf4dc263a64ba0307ac1ac Mon Sep 17 00:00:00 2001 From: Charles Fries Date: Mon, 22 Apr 2024 17:00:25 -0700 Subject: [PATCH 2/4] Export AdapterOption --- addon/adapters/cloud-firestore-modular.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addon/adapters/cloud-firestore-modular.ts b/addon/adapters/cloud-firestore-modular.ts index 690dfc5..e2881c0 100644 --- a/addon/adapters/cloud-firestore-modular.ts +++ b/addon/adapters/cloud-firestore-modular.ts @@ -35,7 +35,7 @@ import FirestoreDataManager from 'ember-cloud-firestore-adapter/services/-firest import buildCollectionName from 'ember-cloud-firestore-adapter/-private/build-collection-name'; import flattenDocSnapshot from 'ember-cloud-firestore-adapter/-private/flatten-doc-snapshot'; -interface AdapterOption { +export interface AdapterOption { isRealtime?: boolean; queryId?: string; From 00f3d22e50e92b6314d8d8d3c184f4e64c2751a0 Mon Sep 17 00:00:00 2001 From: Charles Fries Date: Mon, 22 Apr 2024 18:56:15 -0700 Subject: [PATCH 3/4] Protected --- addon/adapters/cloud-firestore-modular.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addon/adapters/cloud-firestore-modular.ts b/addon/adapters/cloud-firestore-modular.ts index e2881c0..1ca0d60 100644 --- a/addon/adapters/cloud-firestore-modular.ts +++ b/addon/adapters/cloud-firestore-modular.ts @@ -72,11 +72,11 @@ interface HasManyRelationshipMeta { export default class CloudFirestoreModularAdapter extends Adapter { @service('-firestore-data-manager') - private declare firestoreDataManager: FirestoreDataManager; + protected declare firestoreDataManager: FirestoreDataManager; protected referenceKeyName = 'referenceTo'; - private get isFastBoot(): boolean { + protected get isFastBoot(): boolean { const fastboot = getOwner(this).lookup('service:fastboot'); return fastboot && fastboot.isFastBoot; From 0bebc8932d12cad5c9798a5a677749ce71edc380 Mon Sep 17 00:00:00 2001 From: Charles Fries Date: Mon, 22 Apr 2024 19:00:52 -0700 Subject: [PATCH 4/4] Use `ModelSchema` in serializer --- addon/serializers/cloud-firestore-modular.ts | 41 ++------------------ 1 file changed, 3 insertions(+), 38 deletions(-) diff --git a/addon/serializers/cloud-firestore-modular.ts b/addon/serializers/cloud-firestore-modular.ts index 415dd14..7754449 100644 --- a/addon/serializers/cloud-firestore-modular.ts +++ b/addon/serializers/cloud-firestore-modular.ts @@ -6,7 +6,7 @@ */ import { isNone } from '@ember/utils'; -import DS from 'ember-data'; +import DS, { ModelSchema } from 'ember-data'; import JSONSerializer from '@ember-data/serializer/json'; import Store from '@ember-data/store'; @@ -33,43 +33,8 @@ interface RelationshipDefinition { }; } -interface RelationshipSchema { - name: string; - kind: 'belongsTo' | 'hasMany'; - type: string; - options: { - async: boolean; - polymorphic?: boolean; - as?: string; - inverse: string | null; - [key: string]: unknown; - }; -} - -interface AttributeSchema { - name: string; - kind?: 'attribute'; - options?: Record; - type?: string; -} - -interface ModelClass { - modelName: string; - fields: Map; - attributes: Map; - relationshipsByName: Map; - eachAttribute( - callback: (this: T, key: string, attribute: AttributeSchema) => void, - binding?: T - ): void; - eachTransformedAttribute( - callback: (this: T, key: string, relationship: RelationshipSchema) => void, - binding?: T - ): void; +type ModelClass = ModelSchema & { determineRelationshipType(descriptor: { kind: string, type: string }, store: Store): string; - eachRelationship(callback: (this: T, name: string, descriptor: RelationshipSchema) => void, - binding?: T - ): void; } export default class CloudFirestoreSerializer extends JSONSerializer { @@ -105,7 +70,7 @@ export default class CloudFirestoreSerializer extends JSONSerializer { if (cardinality === 'manyToOne') { hasManyPath = buildCollectionName(descriptor.type); } else { - const collectionName = buildCollectionName(modelClass.modelName); + const collectionName = buildCollectionName(modelClass.modelName as string); const docId = resourceHash.id; hasManyPath = `${collectionName}/${docId}/${name}`;