// Originally from: // https://github.com/fauna/netlify-faunadb-todomvc/blob/master/scripts/bootstrap-fauna-database.js const faunadb = require('faunadb') const config = require('./config.js') const q = faunadb.query /* idempotent function to create the necessary collections in your Fauna database */ function ensureFaunaCollections(fauna_server_secret) { if (!fauna_server_secret) { console.log('Missing first argument: fauna_server_secret. Try with:') console.log() console.log('node ensure-fauna-collections.js fnYourFaunaSecretHere') console.log() console.log('You can create fauna DB keys here: https://dashboard.fauna.com/db/keys') return false } const client = new faunadb.Client({ secret: fauna_server_secret }) console.log('Creating the collections...') return client.query( q.CreateCollection({ name: config.COLLECTION_NAME, }) ) .then(() => client.query( q.CreateIndex({ name: config.INDEX_NAME, source: q.Collection(config.COLLECTION_NAME), values: [ {field: ['data', 'expires_at']}, {field: ['ref']}, ], }) )) .then(console.log.bind(console)) .catch((e) => { if (e.message === 'instance already exists') { console.log("collection already created... skipping. You're good to go!"); } else if (e.message === 'unauthorized') { e.message = 'unauthorized: missing or invalid fauna_server_secret, or not enough permissions'; throw e } else { throw e } }) } if (require.main === module) { ensureFaunaCollections.apply(this, process.argv.slice(2)) .then((result) => console.log(result)) .catch((error) => console.error(error)) } module.exports = ensureFaunaCollections;