sardines-utils
Version:
Test cases for sardines.js
313 lines (312 loc) • 15 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var _this = this;
Object.defineProperty(exports, "__esModule", { value: true });
var fetch = require("isomorphic-fetch");
var path = require("path");
var fs = require("fs");
var sardines_interfaces_1 = require("./sardines_interfaces");
exports.sardineAppName = 'sardines';
exports.sardineRepoModuleName = '/repository';
exports.genServiceIdentitySting = function (serviceIdentity) {
return serviceIdentity.application + ":" + serviceIdentity.module + ":" + serviceIdentity.name + ":" + serviceIdentity.version;
};
exports.parseServiceIdentity = function (identityString) {
if (!identityString)
return null;
var parts = identityString.split(':');
if (parts.length !== 3 && parts.length !== 4)
return null;
return {
application: parts[0],
module: parts[1],
name: parts[2],
version: parts.length === 4 ? parts[3] : '*'
};
};
var RepositoryService;
(function (RepositoryService) {
RepositoryService["signIn"] = "signIn";
RepositoryService["signOut"] = "signOut";
RepositoryService["signUp"] = "signUp";
RepositoryService["queryService"] = "queryService";
RepositoryService["createOrUpdateSource"] = "createOrUpdateSource";
RepositoryService["createOrUpdateApplication"] = "createOrUpdateApplication";
RepositoryService["createOrUpdateService"] = "createOrUpdateService";
})(RepositoryService = exports.RepositoryService || (exports.RepositoryService = {}));
exports.readSardinesConfigFile = function (sardinesConfigFile) {
if (!fs.existsSync(sardinesConfigFile)) {
throw ("Sardines configure file [" + sardinesConfigFile + "] does not exist");
}
if (!fs.lstatSync(sardinesConfigFile).isFile()) {
throw ("Sardines configure file [" + sardinesConfigFile + "] is invalid");
}
if (path.extname(sardinesConfigFile).toLowerCase() !== '.json') {
throw ("Sardines configure file [" + sardinesConfigFile + "] must in JSON format");
}
var sardinesConfig = null;
try {
sardinesConfig = JSON.parse(fs.readFileSync(sardinesConfigFile).toString());
}
catch (e) {
throw ("Sardines configure file [" + sardinesConfigFile + "] has broken");
}
if (!sardinesConfig || JSON.stringify(sardinesConfig) === JSON.stringify({})) {
throw ("Sardines configure file [" + sardinesConfigFile + "] is empty");
}
if (!sardinesConfig.application || typeof sardinesConfig.application !== 'string') {
throw ("Application name is missing in sardines configure file [" + sardinesConfigFile + "]");
}
if (!sardinesConfig.repositoryEntries || !Array.isArray(sardinesConfig.repositoryEntries) || sardinesConfig.repositoryEntries.length === 0) {
throw ("Repository entries are missing in sardines configure file [" + sardinesConfigFile + "]");
}
if (sardinesConfig.srcRootDir && typeof sardinesConfig.srcRootDir !== 'string') {
throw ("srcRootDir is wrong in sardines configure file [" + sardinesConfigFile + "]");
}
if (sardinesConfig.sardinesDir && typeof sardinesConfig.sardinesDir !== 'string') {
throw ("sardinesDir is wrong in sardines configure file [" + sardinesConfigFile + "]");
}
if (!sardinesConfig.srcRootDir)
sardinesConfig.srcRootDir = './src';
if (!sardinesConfig.sardinesDir)
sardinesConfig.sardinesDir = 'sardines';
for (var _i = 0, _a = sardinesConfig.repositoryEntries; _i < _a.length; _i++) {
var entry = _a[_i];
if (!entry.user && !entry.password)
entry.password = 'anonymous';
if (!entry.user)
entry.user = 'anonymous';
}
if (!sardinesConfig.drivers || !sardinesConfig.drivers.length) {
sardinesConfig.drivers = [{
name: 'sardines-service-driver-http',
locationType: sardines_interfaces_1.Sardines.LocationType.npm,
protocols: ['http', 'https']
}];
}
return sardinesConfig;
};
var entries = [];
exports.setupRepositoryEntries = function (repoEntries) {
if (!repoEntries || !Array.isArray(repoEntries) || repoEntries.length == 0) {
throw 'Repository entry is empty';
}
entries = repoEntries.reverse();
};
exports.setupRepositoryEntriesBySardinesConfig = function (config) {
exports.setupRepositoryEntries(config.repositoryEntries);
};
exports.setupRepositoryEntriesByConfigFile = function (sardinesConfigFile) {
var sardinesConfig = null;
sardinesConfig = exports.readSardinesConfigFile(sardinesConfigFile);
exports.setupRepositoryEntriesBySardinesConfig(sardinesConfig);
return sardinesConfig;
};
var requestRepoServiceOnSingleEntry = function (entry, service) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
return __awaiter(_this, void 0, void 0, function () {
var addr, pvdr, url, body, method, res, resJson;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
addr = entry.address;
pvdr = addr.providerInfo;
if (!(addr.type === 'native-http')) return [3, 7];
url = "" + pvdr.host + (pvdr.port && pvdr.port !== 80 ? ':' + pvdr.port : '');
url = path.join(url, "/" + exports.sardineRepoModuleName + "/" + service);
url = pvdr.protocol + "://" + url;
body = {};
if (service === RepositoryService.signIn) {
body = { account: { name: entry.user }, password: entry.password };
}
else if (service === RepositoryService.queryService) {
body = { service: args[0], token: entry.token };
}
else if (service === RepositoryService.signUp) {
body = { username: args[0], password: args[1], token: entry.token };
}
else if (service === RepositoryService.createOrUpdateSource) {
body = { source: args[0], token: entry.token };
}
else if (service === RepositoryService.createOrUpdateApplication) {
body = { application: args[0], token: entry.token };
}
else if (service === RepositoryService.createOrUpdateService) {
body = { service: args[0], token: entry.token };
}
method = 'post';
if (service === RepositoryService.signIn || service === RepositoryService.signUp)
method = 'put';
else if (service === RepositoryService.signOut)
method = 'get';
return [4, fetch(url, {
method: method,
body: JSON.stringify(body),
headers: { 'content-type': 'application/json' }
})];
case 1:
res = _a.sent();
return [4, res.text()];
case 2:
res = _a.sent();
resJson = null;
try {
resJson = JSON.parse(res);
}
catch (e) { }
if (!(res === 'Invalid token' || res === 'token expired' || (resJson && ['token expired', 'Invalid token'].indexOf(resJson.error) >= 0))) return [3, 5];
return [4, requestRepoServiceOnSingleEntry(entry, RepositoryService.signIn)];
case 3:
_a.sent();
return [4, requestRepoServiceOnSingleEntry.apply(void 0, [entry, service].concat(args))];
case 4: return [2, _a.sent()];
case 5:
if (res.toLowerCase() === 'not found' || res.toLowerCase() === 'method not allowed') {
throw "Can not access service [" + service + "] at URL: " + url;
}
else if (res && res.indexOf('error') > 0) {
res = JSON.parse(res);
throw res;
}
_a.label = 6;
case 6:
if (service === RepositoryService.signIn || service === RepositoryService.signUp) {
entry.token = res;
if (service === RepositoryService.signUp) {
entry.user = args[0];
entry.password = args[1];
}
}
else if (resJson && resJson.res !== undefined) {
return [2, resJson.res];
}
else if (resJson) {
return [2, resJson];
}
return [2, res];
case 7: return [2];
}
});
});
};
var requestRepoService = function (service) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return __awaiter(_this, void 0, void 0, function () {
var failedEntries, res, i, entry, e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
failedEntries = [];
res = null;
i = entries.length - 1;
_a.label = 1;
case 1:
if (!(i >= 0)) return [3, 8];
entry = entries[i];
_a.label = 2;
case 2:
_a.trys.push([2, 6, , 7]);
if (!!entry.token) return [3, 4];
return [4, requestRepoServiceOnSingleEntry(entry, RepositoryService.signIn)];
case 3:
_a.sent();
_a.label = 4;
case 4: return [4, requestRepoServiceOnSingleEntry.apply(void 0, [entry, service].concat(args))];
case 5:
res = _a.sent();
return [3, 8];
case 6:
e_1 = _a.sent();
console.error("ERROR when requesting repository service [" + service + "]:", e_1);
failedEntries.push(entries.pop());
return [3, 7];
case 7:
i--;
return [3, 1];
case 8:
Array.prototype.unshift.apply(entries, failedEntries);
return [2, res];
}
});
});
};
exports.queryService = function (serviceIdentity) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, requestRepoService(RepositoryService.queryService, serviceIdentity)];
case 1: return [2, _a.sent()];
}
});
}); };
exports.createUser = function (username, password) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, requestRepoService(RepositoryService.signUp, username, password)];
case 1: return [2, _a.sent()];
}
});
}); };
exports.createOrUpdateSource = function (source) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, requestRepoService(RepositoryService.createOrUpdateSource, source)];
case 1: return [2, _a.sent()];
}
});
}); };
exports.createOrUpdateApplication = function (application) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, requestRepoService(RepositoryService.createOrUpdateApplication, application)];
case 1: return [2, _a.sent()];
}
});
}); };
exports.createOrUpdateService = function (service) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, requestRepoService(RepositoryService.createOrUpdateService, service)];
case 1: return [2, _a.sent()];
}
});
}); };