firefighter
    TypeScript icon, indicating that this package has built-in type declarations

    0.6.0 • Public • Published

    firefighter

    test

    firefighter is Firestore REST API wrapper library worked on @sveltejs/kit + Cloudflare Workers.
    This library can write/read firestore with set JWT token (and fetch function) authenticated by Firebase Authentication or Google OAuth.

    why

    Official Firestore library is awesome library, but currently , in 2021-11-10, cannot work on Loading and Endpoints of @sveltejs/kit + Cloudflare Workers.
    So, I made this library.

    feature

    • get
    • list
    • runQuery
    • patch (set, update, delete)
    • createDocument
    • commit (batch, transaction)

    install

    npm install firefighter
    

    imporant

    • gRPC Listen (called onSnapshot function in official firestore library) is not supported
    • It is not recommended to have a firestore instance globally as the Firestore objects in this library do not automatically update the JWT token.

    usage

    get

    import { firestore, reference, from } from 'firefighter'
    import type { FromConverter } from 'firefighter'
    
    const jwtToken = 'eyJhbGciOiJSUzI...'
    
    const fs = firestore({ projectId: 'projectId', token: jwtToken }, { fetch: fetch } /* option */)
    const ref = reference(fs, 'collection', 'document')
    const convert: FromConverter = (result) => ({ id: result.id, ...result.toJson() })
    
    const result = await from(ref, { convert, picks: ['documentProperty'] } /* option */).find()
    console.log(result.toJson())

    list

    import { firestore, reference, from } from 'firefighter'
    import type { FromConverter } from 'firefighter'
    
    const jwtToken = 'eyJhbGciOiJSUzI...'
    
    const fs = firestore({ projectId: 'projectId', token: jwtToken }, { fetch: fetch } /* option */)
    const ref = reference(fs, 'collection')
    const convert: FromConverter = (result) => ({ id: result.id, ...result.toJson() })
    
    const result = await from(ref, { convert, picks: ['documentProperty'] } /* option */).findAll()
    console.log(result.toList())

    runQuery

    import { firestore, reference, from, where, offset } from 'firefighter'
    import type { FromConverter } from 'firefighter'
    
    const jwtToken = 'eyJhbGciOiJSUzI...'
    
    const fs = firestore({ projectId: 'projectId', token: jwtToken }, { fetch: fetch } /* option */)
    const ref = reference(fs, 'collection')
    
    const convert: FromConverter = (result) => ({ id: result.id, ...result.toJson() })
    
    const { query, queryAll } = await from(ref, { convert, picks: ['documentProperty'] } /* option */)
    
    let result = await query(where('count', '>', 1), offset(10))
    console.log(result.toList())
    
    let result = await queryAll(where('count', '>', 1), offset(10))
    console.log(result.toList())

    patch(set, update, delete)

    import { firestore, reference, on, increment } from 'firefighter'
    import type { ToConverter } from 'firefighter'
    
    const jwtToken = 'eyJhbGciOiJSUzI...'
    
    const fs = firestore({ projectId: 'projectId', token: jwtToken }, { fetch: fetch } /* option */)
    const ref = reference(fs, 'collection', 'document')
    
    const convert: ToConverter = (data: { id: string; name: string; count: number }) => ({
      name: data.name,
      count: data.count,
    })
    
    const data = { id: 'document', name: 'user', count: 1 }
    const { set, update, delete: del } = on(ref, { convert } /* option */)
    await set(data)
    await update({ count: increment(1) })
    await del()

    createDocument

    import { firestore, reference, on } from 'firefighter'
    import type { ToConverter } from 'firefighter'
    
    const jwtToken = 'eyJhbGciOiJSUzI...'
    
    const fs = firestore({ projectId: 'projectId', token: jwtToken }, { fetch: fetch } /* option */)
    const ref = reference(fs, 'collection')
    
    const convert: ToConverter = (data: { id: string; name: string; count: number }) => ({
      name: data.name,
      count: data.count,
    })
    
    const data = { id: 'document', name: 'user', count: 1 }
    const documentId = await on(ref, { convert } /* option */).create(data)

    commit (batch, transaction)

    import { firestore, reference, batcher, transactor } from 'firefighter'
    
    const jwtToken = 'eyJhbGciOiJSUzI...'
    
    const fs = firestore({ projectId: 'projectId', token: jwtToken }, { fetch: fetch } /* option */)
    const batch = batcher(fs)
    
    batch.set(reference(fs, 'collection', 'document'), { name: 'user', count: 1 })
    batch.update(reference(fs, 'collection', 'document'), { count: 2 })
    batch.delete(reference(fs, 'collection', 'document'))
    
    await batch.commit()
    
    await transactor(fs).run(async (t) => {
      const ref = reference(fs, 'collection', 'document')
      const result = await t.get(ref)
      if (!result.toJson()) {
        throw new Error('error')
      }
    
      t.set(ref, { count: result.toJson().count + 1 })
    })

    Install

    npm i firefighter

    DownloadsWeekly Downloads

    2

    Version

    0.6.0

    License

    MIT

    Unpacked Size

    74.1 kB

    Total Files

    33

    Last publish

    Collaborators

    • koheing