sbis3-node-ws
Version:
Модуль позволяет использовать ядро интерфейсного фреймворка sbis3-ws(`core.js`) и модуль работы с данными (`Source.js`) в приложении на nodejs.
79 lines (72 loc) • 2.35 kB
JavaScript
define('js!Core/tmpl/js/helpers/requireFile', ['js!Core/tmpl/js/helpers/utils', 'js!Core/tmpl/js/helpers/State', 'js!Core/tmpl/js/helpers/errorHandling'], function requireFileLoader(utils, State, errorHandling) {
'use strict';
return function requireFile(url) {
var isNode = utils.isNode(),
resolver = function resolver(templatePath, ext) {
return templatePath + '.' + ext;
},
pathResolver = (this.resolver !== undefined) ? this.resolver : resolver,
path = pathResolver(url, 'tmpl');
/**
* If not node environment -> create empty requirejs module
*
*/
if (isNode === false) {
define('fs', function restrainFs() {
return {};
});
}
/**
* Create XMLHttpRequest
* @param {String} url
* @return {Object} XMLHttpRequest
*/
function createRequest(url) {
var request = new XMLHttpRequest();
request.open('GET', url);
request.send();
return request;
}
/**
* Read file with help of FileSystemApi
* @param {String} url
* @return {Object} State promise
*/
function readFileFs(url) {
var fs,
state = State.make();
try {
fs = requirejs('fs');
} catch (e) {
errorHandling("There is no requirejs for node included");
}
fs.readFile(url, function readFileCallback(err, data) {
if (err) {
state.break(err);
} else {
state.keep(this.parse(data));
}
}.bind(this));
return state.promise;
}
/**
* Read file with XMLHttpRequest
* @param {String} url
* @return {Object} State Promise
*/
function readFileXMLHttpRequest(url) {
var state = State.make(),
req = createRequest(url);
req.onreadystatechange = function requestHandler() {
if (req.readyState === 4 && req.status === 200) {
state.keep(this.parse(req.responseText));
}
}.bind(this);
return state.promise;
}
if (isNode) {
return readFileFs.call(this, path);
}
return readFileXMLHttpRequest.call(this, path);
};
});