エンジニアのはしがき

プログラミングの日々の知見を書き連ねているブログです

BunからFirestoreにDocumentを追加しようと思ったらうまく動かなかった

ちょっとハマってしまったのでメモがてらに書きます。。

やりたかったこと

以下のようなFirestoreのあるCollectionにDocumentを追加するような処理を書いてました。

import { cert, initializeApp } from "firebase-admin/app";
import { getFirestore } from "firebase-admin/firestore";
...

const firebaseInit = () => {
  const app = initializeApp({
    credential: cert(process.env.GOOGLE_APPLICATION_CREDENTIALS!),
    databaseURL: "https://*************.firebaseio.com",
  });

  return getFirestore(app);
};

export const generateTokenAsync = async () => {
  const db = firebaseInit();

  ...

  await db.collection("hoge_fuga_collection").add(record);

このファイルをbun ****.tsで実行しようとすると以下のようなエラーが出てしまった。

$ bun ****.ts

29 | const CALL_INVOCATION_TRANSFORMER_SYMBOL = Symbol();
30 | function isFunction(arg) {
31 |     return typeof arg === 'function';
32 | }
33 | function getErrorStackString(error) {
34 |     return error.stack.split('\n').slice(1).join('\n');
                ^
TypeError: undefined is not an object (evaluating 'error.stack.split')
      at getErrorStackString (/mnt/d/*******/node_modules/@grpc/grpc-js/build/src/client.js:34:12)
      at onReceiveStatus (/mnt/d/*******/node_modules/@grpc/grpc-js/build/src/client.js:191:41)
      at onReceiveStatus (/mnt/d/*******/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:360:138)
      at onReceiveStatus (/mnt/d/*******/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:323:178)
      at /mnt/d/*******/node_modules/@grpc/grpc-js/build/src/resolving-call.js:94:75
      at processTicksAndRejections (:61:77)

動作環境

$ bun --version
1.0.15

package.json

  "dependencies": {
    "firebase-admin": "^11.11.1",
    ...
  }

Bun側の問題らしい

github.com

github.com

↑ら辺のIssueにそれらしい記載があり、Bun側で対応中みたい。 公式では"Bun aims for complete Node.js API compatibility."ということなので、対応に期待したいですね。