Registry / database / firesnap

firesnap

JSON →
library1.0.14jsnpmunverified

Firesnap is an ORM/ODM for Google Firestore, inspired by Mongoose, providing data validation, population of related data, and lifecycle hooks (save/delete callbacks). Current stable version is 1.0.14. It supports both TypeScript (with decorators) and JavaScript (with static schema). Key differentiators: decorator-based model definition, built-in validation, and Firestore-specific query operators ($eq, $gt, etc.). Release cadence is irregular; maintained primarily by a single developer. Not officially stable or production-ready (version < 1.0).

npm install firesnap
INSTALL
IMPORT
SIG · FIRESNAP
F
firesnap
databasejavascriptv1.0.14
harness data pending
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

Firesnap
import { Firesnap } from 'firesnap'
const Firesnap = require('firesnap').default
Named export in ESM; CommonJS use { Firesnap }
Model
import { Model } from 'firesnap'
const Model = require('firesnap').Model
Same pattern for both ESM and CJS
Field
import { Field } from 'firesnap'
const Field = require('firesnap').Field
Works with require due to named export
Collection
import { Collection } from 'firesnap'
Used in class definitions, not a constructor

Shows initialization with Firebase Admin SDK, model definition using decorators, and basic CRUD operations.

import * as admin from 'firebase-admin'; import { Firesnap, Model, Field, Collection } from 'firesnap'; const serviceAccount = require('./serviceAccountKey.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), }); Firesnap.initialize(admin.firestore()); class Post extends Model { @Field({ required: true }) title: string; @Field() created = Date.now; @Collection(Comment) comments: Comment[]; } const post = new Post({ title: 'Hello' }); await post.save(); const retrieved = await Post.doc('some-id').get(); console.log(retrieved.title);
Debug
Known issues
gotchaTypeScript requires experimentalDecorators and emitDecoratorMetadata in tsconfig.json
fix
Set 'experimentalDecorators': true and 'emitDecoratorMetadata': true in compilerOptions
affects: >=0.0.0
gotchaFiresnap must be initialized before any model operations; calling Model methods before initialization throws
fix
Call Firesnap.initialize(admin.firestore()) at app startup
affects: >=0.0.0
deprecatedVersion 1.0.x is pre-1.0; API may change without semver notice
fix
Pin to exact version and expect breaking changes on minor updates
affects: <1.0.0
gotchaModel.doc() returns a reference, not a document; must call .get() to retrieve data
fix
Use await Post.doc('id').get() instead of just Post.doc('id')
affects: >=0.0.0
Errors
Common errors & fixes
Cannot find name 'decorators' or 'experimentalDecorators' error
Missing tsconfig.json compiler options
fix
Add 'experimentalDecorators': true and 'emitDecoratorMetadata': true to tsconfig.json
Firesnap is not initialized
Forgot to call Firesnap.initialize() before using models
fix
Call Firesnap.initialize(admin.firestore()) after admin.initializeApp()
TypeError: Post.doc is not a function
Model not properly extended or firesnap not imported correctly
fix
Ensure class extends Model and import { Model } from 'firesnap'
Cannot read property 'id' of undefined
Calling doc() without a valid document ID or before get()
fix
Use const docRef = Post.doc('id'); const doc = await docRef.get();
Upgrade
Version history
1.0.14latest on npm
Audit
Dependencies
firebase-adminrequiredFirestore database client - mandatory peer dependency
Agent activity
6 hits · last 30 days
node
4
Resources
firesnap — npm install firesnap · libregistry