An open API service indexing awesome lists of open source software.

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.

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`