Allow for Bolt rules parsing.

This commit is contained in:
Michael Bleigh
2015-09-28 14:19:25 -07:00
parent d41d9a649c
commit 95f21922bc
3 changed files with 39 additions and 1 deletions

View File

@@ -50,6 +50,10 @@ module.exports = new Command('deploy')
return prepareUpload(options, config);
}).then(function(upload) {
if (!upload.manifest.length) {
return utils.reject('Must have at least one file in public directory to deploy.', {exit: 1});
}
payload.hosting = {
version: versionId,
prefix: versionId + '/',

View File

@@ -4,8 +4,10 @@ var FirebaseError = require('./error');
var detectProjectRoot = require('./detectProjectRoot');
var cjson = require('cjson');
var loadConfig = require('./loadConfig');
var parseBoltRules = require('./parseBoltRules');
var resolveProjectPath = require('./resolveProjectPath');
var chalk = require('chalk');
var path = require('path');
module.exports = function(options) {
var config = loadConfig(options);
@@ -18,7 +20,13 @@ module.exports = function(options) {
var pd = detectProjectRoot(options.cwd);
if (pd) {
try {
var rules = cjson.load(resolveProjectPath(options.cwd, config.rules));
var rulesPath = resolveProjectPath(pd, config.rules);
if (path.extname(rulesPath) === '.bolt') {
return parseBoltRules(rulesPath);
}
var rules = cjson.load(rulesPath);
return rules;
} catch (e) {
if (e.code === 'ENOENT') {

26
lib/parseBoltRules.js Normal file
View File

@@ -0,0 +1,26 @@
'use strict';
var fs = require('fs');
var spawnSync = require('child_process').spawnSync;
var FirebaseError = require('./error');
var chalk = require('chalk');
module.exports = function(filename) {
var ruleSrc = fs.readFileSync(filename);
var result = spawnSync('firebase-bolt', {
input: ruleSrc,
timeout: 10000,
encoding: 'utf-8'
});
if (result.error && result.error.code === 'ENOENT') {
throw new FirebaseError('Bolt not installed, run ' + chalk.bold('npm install -g firebase-bolt'), {exit: 1});
} else if (result.error) {
throw new FirebaseError('Unexpected error parsing Bolt rules file', {exit: 2});
} else if (result.status > 0) {
throw new FirebaseError(result.stderr, {exit: 1});
}
return JSON.parse(result.stdout);
};