UNPKG

@amplience/dc-cli

Version:
109 lines (108 loc) 4.23 kB
"use strict"; 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;