firebase-bolt
Version:
Firebase Bolt Security and Modeling Language Compiler
90 lines (88 loc) • 10.1 kB
JavaScript
;
exports.__esModule = true;
/*
* Copyright 2015 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var fs = require("fs");
var util = require("./util");
var hasXMLHttpRequest = typeof global !== 'undefined' && global['XMLHttpRequest'] !== undefined;
function readJSONFile(path, fnFallback) {
return readFile(path)
.then(function (response) {
return JSON.parse(response.content);
})["catch"](function (error) {
if (error.code === 'ENOENT' && typeof fnFallback === 'function') {
return fnFallback();
}
throw error;
});
}
exports.readJSONFile = readJSONFile;
function writeJSONFile(path, data) {
return writeFile(path, util.prettyJSON(data));
}
exports.writeJSONFile = writeJSONFile;
function readFile(path) {
return hasXMLHttpRequest ? request('GET', path) : readFS(path);
}
exports.readFile = readFile;
function writeFile(path, data) {
return hasXMLHttpRequest ? request('PUT', path, data) : writeFS(path, data);
}
exports.writeFile = writeFile;
function request(method, url, data) {
return new Promise(function (resolve, reject) {
var req = new XMLHttpRequest();
req.open(method, '/' + url);
req.onload = function () {
if (req.status === 200) {
resolve({ content: req.response, url: url });
}
else {
reject(new Error(url + " " + req.statusText));
}
};
req.onerror = function () {
reject(new Error(url + " Network Error"));
};
if (data) {
req.setRequestHeader('Content-Type', 'text');
}
req.send(data);
});
}
function readFS(path) {
return new Promise(function (resolve, reject) {
fs.readFile(path, { encoding: 'utf8' }, function (error, data) {
if (error) {
reject(error);
return;
}
resolve({ url: path, content: data });
});
});
}
function writeFS(path, data) {
return new Promise(function (resolve, reject) {
fs.writeFile(path, data, { encoding: 'utf8' }, function (error) {
if (error) {
reject(error);
return;
}
resolve({ url: path, content: "ok" });
});
});
}
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QyxFQUFFLFVBQVMsS0FBSyxFQUFFLElBQUk7WUFDeEQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNkLE9BQU87YUFDUjtZQUNELE9BQU8sQ0FBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxpQkFBaUIsSUFBWSxFQUFFLElBQVM7SUFDdEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFTLE9BQU8sRUFBRSxNQUFNO1FBQ3pDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsRUFBRSxVQUFTLEtBQUs7WUFDekQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNkLE9BQU87YUFDUjtZQUNELE9BQU8sQ0FBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJmaWxlIjoiZmlsZS1pby5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBoYXNYTUxIdHRwUmVxdWVzdCA9XG4gIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmICg8YW55PiBnbG9iYWwpWydYTUxIdHRwUmVxdWVzdCddICE9PSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZEZpbGVSZXN1bHQge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEpTT05GaWxlKHBhdGg6IHN0cmluZywgZm5GYWxsYmFjaz86ICgpID0+IGFueSk6IFByb21pc2U8YW55PiB7XG4gIHJldHVybiByZWFkRmlsZShwYXRoKVxuICAgIC50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlOiBSZWFkRmlsZVJlc3VsdCkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2UuY29udGVudCk7XG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJyAmJiB0eXBlb2YgZm5GYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZm5GYWxsYmFjaygpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUpTT05GaWxlKHBhdGg6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTxSZWFkRmlsZVJlc3VsdD4ge1xuICByZXR1cm4gd3JpdGVGaWxlKHBhdGgsIHV0aWwucHJldHR5SlNPTihkYXRhKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFJlYWRGaWxlUmVzdWx0PiB7XG4gIHJldHVybiBoYXNYTUxIdHRwUmVxdWVzdCA/IHJlcXVlc3QoJ0dFVCcsIHBhdGgpIDogcmVhZEZTKHBhdGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTxSZWFkRmlsZVJlc3VsdD4ge1xuICByZXR1cm4gaGFzWE1MSHR0cFJlcXVlc3QgPyByZXF1ZXN0KCdQVVQnLCBwYXRoLCBkYXRhKSA6IHdyaXRlRlMocGF0aCwgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3QobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBkYXRhPzogYW55KTogUHJvbWlzZTxSZWFkRmlsZVJlc3VsdD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgbGV0IHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxLm9wZW4obWV0aG9kLCAnLycgKyB1cmwpO1xuXG4gICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICByZXNvbHZlKHtjb250ZW50OiByZXEucmVzcG9uc2UsIHVybDogdXJsfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKHVybCArIFwiIFwiICsgcmVxLnN0YXR1c1RleHQpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IodXJsICsgXCIgTmV0d29yayBFcnJvclwiKSk7XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQnKTtcbiAgICB9XG5cbiAgICByZXEuc2VuZChkYXRhKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGUyhwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFJlYWRGaWxlUmVzdWx0PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmcy5yZWFkRmlsZShwYXRoLCB7ZW5jb2Rpbmc6ICd1dGY4J30sIGZ1bmN0aW9uKGVycm9yLCBkYXRhKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh7dXJsOiBwYXRoLCBjb250ZW50OiBkYXRhfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3cml0ZUZTKHBhdGg6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTxSZWFkRmlsZVJlc3VsdD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnMud3JpdGVGaWxlKHBhdGgsIGRhdGEsIHtlbmNvZGluZzogJ3V0ZjgnfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHt1cmw6IHBhdGgsIGNvbnRlbnQ6IFwib2tcIn0pO1xuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ==