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

0.7.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 (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 page.js and server.js 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.

usage

get

import { firestore, reference, from } from 'firefighter'
import type { FromConverter } from 'firefighter'

const token = 'eyJhbGciOiJSUzI...'

const fs = firestore({ projectId: 'projectId', token }, { fetch: fetch } /* option */)
const ref = reference(fs, 'collection', 'document')
  .withConverter({ from: (result) => ({ id: result.id, ...result.toJson() }) })

const result = await from(ref, { picks: ['documentProperty'] } /* option */).find()
console.log(result.toJson())

list

import { firestore, reference, from } from 'firefighter'
import type { FromConverter } from 'firefighter'

const token = 'eyJhbGciOiJSUzI...'

const fs = firestore({ projectId: 'projectId', token }, { fetch: fetch } /* option */)
const ref = reference(fs, 'collection')
  .withConverter({ from: (result) => ({ id: result.id, ...result.toJson() }) })

const result = await from(ref, { picks: ['documentProperty'] } /* option */).findAll()
console.log(result.toList())

runQuery

import { firestore, reference, from, where, offset } from 'firefighter'
import type { FromConverter } from 'firefighter'

const token = 'eyJhbGciOiJSUzI...'

const fs = firestore({ projectId: 'projectId', token }, { fetch: fetch } /* option */)
const ref = reference(fs, 'collection')
  .withConverter({ from: (result) => ({ id: result.id, ...result.toJson() }) })

const { query, groupQuery } = await from(ref, { picks: ['documentProperty'] } /* option */)

let result = await query(where('count', '>', 1), offset(10))
console.log(result.toList())

let result = await groupQuery(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 token = 'eyJhbGciOiJSUzI...'

const fs = firestore({ projectId: 'projectId', token }, { fetch: fetch } /* option */)
const ref = reference(fs, 'collection', 'document')
  .withConverter<{ name: string, count: number }>({ to: (data) => ({ name: data.name, count: data.count }) })

const data = { id: 'document', name: 'user', count: 1 }
const { set, update, delete: del } = on(ref)
await set(data)
await update({ count: increment(1) })
await del()

createDocument

import { firestore, reference, on } from 'firefighter'
import type { ToConverter } from 'firefighter'

const token = 'eyJhbGciOiJSUzI...'

const fs = firestore({ projectId: 'projectId', token }, { fetch: fetch } /* option */)
const ref = reference(fs, 'collection')

const data = { id: 'document', name: 'user', count: 1 }
const documentId = await on(ref).create(data)

commit (batch, transaction)

import { firestore, reference, batcher, transactor } from 'firefighter'

const token = 'eyJhbGciOiJSUzI...'

const fs = firestore({ projectId: 'projectId', token }, { 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 })
})

Dependents (0)

Package Sidebar

Install

npm i firefighter

Weekly Downloads

7

Version

0.7.0

License

MIT

Unpacked Size

305 kB

Total Files

21

Last publish

Collaborators

  • koheing