mirror of
https://github.com/zhigang1992/firebase-tools.git
synced 2026-05-24 00:48:53 +08:00
Allow for Bolt rules parsing.
This commit is contained in:
@@ -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 + '/',
|
||||
|
||||
@@ -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
26
lib/parseBoltRules.js
Normal 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);
|
||||
};
|
||||
Reference in New Issue
Block a user