@amplience/dc-cli
Version:
Dynamic Content CLI Tool
109 lines (108 loc) • 4.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DAMFixtures = void 0;
const fs_1 = require("fs");
const path_1 = require("path");
const url_1 = require("url");
function escapeForRegex(url) {
return url.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
class DAMFixtures {
static install(adapter) {
const fixturesBaseDir = __dirname;
this.installSpecific(adapter, fixturesBaseDir + '/assets', {
id: '65d78690-bf4e-415d-a16c-ca4dadbb2717',
version: '1'
});
this.installSpecific(adapter, fixturesBaseDir + '/assets', {
id: '1f7b5ac6-bb0c-4cd1-b5a1-190ede681b8f',
selectors: ['fail']
});
this.installSpecific(adapter, fixturesBaseDir + '/settings', {});
}
static installSpecific(adapter, baseDir, params) {
const contents = (0, fs_1.readdirSync)(baseDir);
contents.forEach(name => {
const fullPath = (0, path_1.join)(baseDir, name);
if ((0, fs_1.statSync)(fullPath).isDirectory()) {
this.installSpecific(adapter, fullPath, params);
}
else if (fullPath.endsWith(`.json`)) {
this.installFile(adapter, fullPath, params);
}
});
}
static installFile(adapter, path, params) {
const baseUri = 'https://dam-api.amplience.net/v1.5.0/';
const baseName = (0, path_1.basename)(path, '.json');
let dirName = (0, path_1.relative)(__dirname, (0, path_1.dirname)(path));
const nameSplit = baseName.split('-');
if (nameSplit.length === 0)
return;
const method = nameSplit[0];
let pathExtension = '';
let selectorCount = 0;
for (let i = 1; i < nameSplit.length; i++) {
const arg = nameSplit[i];
if (arg.startsWith('{') && arg.endsWith('}')) {
const paramName = arg.substr(1, arg.length - 2);
if (params[paramName] != null) {
pathExtension = params[paramName];
}
else {
return;
}
}
else {
selectorCount++;
if (params.selectors == null || params.selectors.indexOf(arg) === -1) {
return;
}
}
}
if (selectorCount === 0 && params.selectors != null && params.selectors.length > 0) {
return;
}
for (let i = 0; i < dirName.length; i++) {
if (dirName[i] === '{') {
for (let j = i + 1; j < dirName.length; j++) {
if (dirName[j] === '}') {
const paramName = dirName.substring(i + 1, j);
if (params[paramName] != null) {
dirName = dirName.substring(0, i) + params[paramName] + dirName.substring(j + 1);
break;
}
else {
return;
}
}
}
}
}
const response = JSON.parse((0, fs_1.readFileSync)(path, { encoding: 'utf8' }));
let fullUri = (0, url_1.resolve)(baseUri, dirName);
if (pathExtension !== '') {
fullUri = (0, url_1.resolve)(fullUri + '/', pathExtension);
}
const responseCode = method === 'POST' ? 204 : 200;
const regex = new RegExp('^' + escapeForRegex(fullUri) + '(\\?.*$)?$');
switch (method) {
case 'GET':
adapter.onGet(regex).reply(responseCode, response);
break;
case 'POST':
adapter.onPost(regex).reply(responseCode, response);
break;
case 'PATCH':
adapter.onPatch(regex).reply(responseCode, response);
break;
case 'PUT':
adapter.onPut(regex).reply(responseCode, response);
break;
case 'DELETE':
adapter.onDelete(regex).reply(responseCode, response);
break;
}
}
}
exports.DAMFixtures = DAMFixtures;