Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
import CloudFirestoreAdapter from 'ember-cloud-firestore-adapter/adapters/cloud-firestore';
export default CloudFirestoreAdapter.extend();
export default function mockCloudFirestore(owner, fixtureData) {
initializeInstanceInitializer(owner);
const mockFirebase = new MockFirebase();
const mockFirebasePojo = {
_data: fixtureData,
initializeApp: mockFirebase.initializeApp,
firestore: mockFirebase.firestore,
};
const firebaseService = Service.extend(mockFirebasePojo);
owner.register('service:firebase', firebaseService);
return owner.lookup('service:firebase', { as: 'firebase' });
}
beforeEach() {
this.application = startApp();
const owner = this.application.__container__.owner;
mockFirebase(owner, getFixtureData());
if (options.beforeEach) {
return options.beforeEach.apply(this, arguments);
}
},
extractRelationship(relationshipModelName, relationshipHash) {
if (isDocumentReference(relationshipHash)) {
const path = buildPathFromRef(relationshipHash);
const pathNodes = path.split('/');
const belongsToId = pathNodes[pathNodes.length - 1];
return { id: belongsToId, type: relationshipModelName };
}
return null;
},
init(...args) {
this._super(...args);
if (this.firestoreSettings) {
const db = this.firebase.firestore();
db.settings(this.firestoreSettings);
}
this.set('realtimeTracker', new RealtimeTracker());
},
return new Promise((resolve, reject) => {
const db = this.firebase.firestore();
const collectionRef = db.collection(buildCollectionName(type.modelName));
const unsubscribe = collectionRef.onSnapshot((querySnapshot) => {
if (this.getAdapterOptionConfig(snapshotRecordArray, 'isRealtime') && !this.isFastBoot) {
this.realtimeTracker.trackFindAllChanges(type.modelName, collectionRef, store);
}
const requests = querySnapshot.docs.map(docSnapshot => (
this.findRecord(store, type, docSnapshot.id, snapshotRecordArray)
));
Promise.all(requests).then(records => resolve(records)).catch(error => (
reject(new Error(error.message))
));
unsubscribe();
}, error => reject(new Error(error.message)));
});
if (
Object.prototype.hasOwnProperty.call(resourceHash, name)
&& isDocumentReference(resourceHash[name])
) {
const path = buildPathFromRef(resourceHash[name]);
links[name] = path;
}
} else {
const cardinality = modelClass.determineRelationshipType(descriptor, this.store);
let hasManyPath;
if (cardinality === 'manyToOne') {
hasManyPath = buildCollectionName(descriptor.type);
} else {
const collectionName = buildCollectionName(modelClass.modelName);
const docId = resourceHash.id;
hasManyPath = `${collectionName}/${docId}/${name}`;
}
links[name] = hasManyPath;
}
});
buildHasManyCollectionRef(store, snapshot, url, relationship) {
const db = this.firebase.firestore();
const cardinality = snapshot.type.determineRelationshipType(relationship, store);
let collectionRef;
if (cardinality === 'manyToOne') {
const inverse = snapshot.type.inverseFor(relationship.key, store);
const collectionName = buildCollectionName(snapshot.modelName);
const reference = db.collection(collectionName).doc(snapshot.id);
collectionRef = db.collection(url).where(inverse.name, '==', reference);
} else if (Object.prototype.hasOwnProperty.call(relationship.options, 'buildReference')) {
collectionRef = relationship.options.buildReference(db, snapshot.record);
} else {
collectionRef = buildRefFromPath(db, url);
}
return this.buildQuery(collectionRef, relationship.options, snapshot.record);
},
modelClass.eachRelationship((name, descriptor) => {
if (descriptor.kind === 'belongsTo') {
if (
Object.prototype.hasOwnProperty.call(resourceHash, name)
&& isDocumentReference(resourceHash[name])
) {
const path = buildPathFromRef(resourceHash[name]);
links[name] = path;
}
} else {
const cardinality = modelClass.determineRelationshipType(descriptor, this.store);
let hasManyPath;
if (cardinality === 'manyToOne') {
hasManyPath = buildCollectionName(descriptor.type);
} else {
const collectionName = buildCollectionName(modelClass.modelName);
const docId = resourceHash.id;
hasManyPath = `${collectionName}/${docId}/${name}`;
}
links[name] = hasManyPath;
}
});
generateIdForRecord(store, type) {
const db = this.firebase.firestore();
const collectionName = buildCollectionName(type);
return db.collection(collectionName).doc().id;
},