https://github.com/uphy/firestore-seed
Seed data library for Cloud Firestore.
https://github.com/uphy/firestore-seed
firebase firestore seed
Last synced: 4 months ago
JSON representation
Seed data library for Cloud Firestore.
- Host: GitHub
- URL: https://github.com/uphy/firestore-seed
- Owner: uphy
- Created: 2017-11-04T00:20:59.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2022-06-02T22:30:54.000Z (about 4 years ago)
- Last Synced: 2025-12-14T09:06:07.345Z (6 months ago)
- Topics: firebase, firestore, seed
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/firestore-seed
- Size: 732 KB
- Stars: 26
- Watchers: 1
- Forks: 7
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# firestore-seed
`firestore-seed` insert initial seed data to [Cloud Firestore](https://firebase.google.com/docs/firestore/).
Not tested at all. Use this at your own lisk.
## Getting started
Add firestore-seed to your project.
```sh
$ yarn add firestore-seed
```
Create a simple seed program.
```javascript
const admin = require("firebase-admin");
// serviceAccountKey.json can be generated in Firebase Console.
const serviceAccountKey = require("./serviceAccountKey.json");
const seed = require('firestore-seed');
// Initialize firebase-admin.
admin.initializeApp({
credential: admin.credential.cert(serviceAccountKey),
databaseURL: "https://xxxxxx.firebaseio.com",
storageBucket: "xxxxxx.appspot.com",
});
// Import seeds.
let messagesCollection = seed.collection("messages", [
seed.doc("message1", {
content: "Hello firestore-seed.",
created: new Date(),
}),
seed.doc("message2", {
content: "Good bye firestore-seed.",
created: new Date(),
})
]);
messagesCollection.importDocuments(admin).then(() => {
console.log("Successfully imported documents.");
}).catch(e => {
console.log("Failed to import documents: " + e);
});
```
## Uploading files
You can also upload files to the Firebase Cloud Storage and add the download URL to the Firestore documents.
```javascript
const admin = require("firebase-admin");
// serviceAccountKey.json can be generated in Firebase Console.
const serviceAccountKey = require("./serviceAccountKey.json");
const seed = require('firestore-seed');
// Initialize firebase-admin
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://xxxxxx.firebaseio.com",
storageBucket: "xxxxxx.appspot.com",
});
// Import seeds.
let imageOptions = seed.imageOptions("images/{id}", "public/profiles/{id}")
let profilesCollection = seed.collection("profiles", [
seed.doc("uphy", {
name: "foo",
introduction: "Hello, I'm foo.",
created: new Date(),
// Upload 'images/uphy/image.png' to 'public/profiles/uphy/image.png' and set its' download URL to this field.
icon: seed.image("image.png", "image.png", imageOptions)
}),
seed.doc("yhpu", {
name: "bar",
introduction: "Hello, I'm bar.",
content: "Good bye firestore-seed.",
created: new Date(),
// Upload 'images/yhpu/image.png' to 'public/profiles/yhpu/image.png' and set its' download URL to this field.
icon: seed.image("image.png", "image.png", imageOptions)
})
]);
profilesCollection.importDocuments(admin).then(() => {
console.log("Successfully imported documents.");
}).catch(e => {
console.log("Failed to import documents: " + e);
});
```
## Subcollections
For inserting subcollections, use `seed.subcollection(docs)`.
```javascript
const admin = require("firebase-admin");
// serviceAccountKey.json can be generated in Firebase Console.
const serviceAccountKey = require("./serviceAccountKey.json");
const seed = require('firestore-seed');
// Initialize firebase-admin
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://xxxxxx.firebaseio.com",
storageBucket: "xxxxxx.appspot.com",
});
// Import seeds.
seed.importCollections(admin,
[
seed.collection("users", [
seed.doc("uphy", {
name: 'Yuhi Ishikura',
rooms: seed.subcollection([
seed.doc("room1", {
"ref": seed.docRef("rooms", "room1")
}),
seed.doc("room2", {
"ref": seed.docRef("rooms", "room2")
})
])
}),
seed.doc("suzuki", {
name: 'Taro Suzuki',
rooms: seed.subcollection([
seed.doc("room1", {
"ref": seed.docRef("rooms", "room1")
}),
seed.doc("room2", {
"ref": seed.docRef("rooms", "room2")
})
]),
}),
seed.doc("tanaka", {
name: 'Tanaka Jiro',
rooms: seed.subcollection([
seed.doc("room2", {
"ref": seed.docRef("rooms", "room2")
})
]),
})
]),
seed.collection("rooms", [
seed.doc("room1", {
name: "Room 1",
messages: seed.subcollection([
seed.doc("message1", {
time: Date.now(),
content: "Message 1 of room1",
user: seed.docRef("users", "uphy")
}),
seed.doc("message2", {
time: Date.now(),
content: "Message 2 of room1",
user: seed.docRef("users", "suzuki")
})
])
}),
seed.doc("room2", {
name: "Room 2",
messages: seed.subcollection([
seed.doc("message1", {
time: Date.now(),
content: "Message 1 of room2",
user: seed.docRef("users", "uphy")
}),
seed.doc("message2", {
time: Date.now(),
content: "Message 2 of room2",
user: seed.docRef("users", "suzuki")
}),
seed.doc("message3", {
time: Date.now(),
content: "Message 3 of room2",
user: seed.docRef("users", "tanaka")
})
])
})
])
]
).then(() => {
console.log("Successfully imported documents.");
}).catch(e => {
console.log("Failed to import documents: " + e);
});
```
## Predefined script
You can use firestore-seed more simply with npm scripts.
1. `yarn add -D firestore-seed`
2. Create seed file
```javascript
const seed = require('firestore-seed');
// Export collection or collection array.
module.exports = seed.collection("messages", [
seed.doc("message1", {
content: "Hello firestore-seed.",
created: new Date(),
}),
seed.doc("message2", {
content: "Good bye firestore-seed.",
created: new Date(),
})
]);
```
3. Add following properties to your `package.json`
```json
"scripts": {
"seed": "firestore-seed",
/* ... */
},
/* ... */
"firestore-seed": {
/* Firestore database URL(required) */
"databaseURL": "https://xxxxxxx.firebaseio.com",
/* Firebase service account key file. */
"credentialPath": "./firebase-credential.json",
/* Firestore seed file created in #2 */
"seedDataPath": "./firestore-seed.js"
}
```
4. Run `yarn seed`