TypeScriptでFirestoreにgetOrCreateをやる

Django REST Framework使った後だとgetOrCreateが欲しくなる。
実際はDocumentSnapshot.updateとかが便利すぎるので使い道はほぼ無い。

const db = firebase.firestore();

const fsGetOrCreate = (docPath: string, initialData: any): Promise<DocumentSnapshot> => {
  return new Promise(async (resolve, reject) => {
    const ref = db.doc(docPath);
    return ref.get()
        .then(async (snap) => {
          if (snap.exists) {
            resolve(snap);
          } else {
            await ref.create(initialData);
            const snap = await ref.get();
            return resolve(snap);
          }
        })
        .catch((error) => reject(error));
  });
};