@opra/elastic
Version:
Opra Elastic Search adapter package
127 lines (126 loc) • 5.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ElasticAdapter = void 0;
const tslib_1 = require("tslib");
const prepare_filter_js_1 = tslib_1.__importDefault(require("./adapter-utils/prepare-filter.js"));
const prepare_patch_js_1 = tslib_1.__importDefault(require("./adapter-utils/prepare-patch.js"));
const prepare_projection_js_1 = tslib_1.__importDefault(require("./adapter-utils/prepare-projection.js"));
const prepare_sort_js_1 = tslib_1.__importDefault(require("./adapter-utils/prepare-sort.js"));
var ElasticAdapter;
(function (ElasticAdapter) {
ElasticAdapter.prepareFilter = prepare_filter_js_1.default;
ElasticAdapter.preparePatch = prepare_patch_js_1.default;
ElasticAdapter.prepareProjection = prepare_projection_js_1.default;
ElasticAdapter.prepareSort = prepare_sort_js_1.default;
async function parseRequest(context) {
if (context.protocol !== 'http') {
throw new TypeError('ElasticAdapter can parse only HttpContext');
}
const ctx = context;
const { operation } = ctx;
if (operation?.composition?.startsWith('Entity.') &&
operation.compositionOptions?.type) {
const controller = operation.owner;
switch (operation.composition) {
case 'Entity.Create': {
const data = await ctx.getBody();
const options = {
projection: ctx.queryParams.projection,
};
return {
method: 'create',
data,
options,
};
}
case 'Entity.Delete': {
const keyParam = operation.parameters.find(p => p.keyParam) ||
controller.parameters.find(p => p.keyParam);
const key = keyParam && ctx.pathParams[String(keyParam.name)];
const options = {
filter: ctx.queryParams.filter,
};
return {
method: 'delete',
key,
options,
};
}
case 'Entity.DeleteMany': {
const options = {
filter: ctx.queryParams.filter,
};
return { method: 'deleteMany', options };
}
case 'Entity.FindMany': {
const options = {
filter: ctx.queryParams.filter,
projection: ctx.queryParams.projection,
count: ctx.queryParams.count,
limit: ctx.queryParams.limit,
skip: ctx.queryParams.skip,
sort: ctx.queryParams.sort,
};
return { method: 'findMany', options };
}
case 'Entity.Get': {
const keyParam = operation.parameters.find(p => p.keyParam) ||
controller.parameters.find(p => p.keyParam);
const key = keyParam && ctx.pathParams[String(keyParam.name)];
const options = {
projection: ctx.queryParams.projection,
filter: ctx.queryParams.filter,
};
return { method: 'get', key, options };
}
case 'Entity.Replace': {
const data = await ctx.getBody();
const keyParam = operation.parameters.find(p => p.keyParam) ||
controller.parameters.find(p => p.keyParam);
const key = keyParam && ctx.pathParams[String(keyParam.name)];
const options = {
projection: ctx.queryParams.projection,
filter: ctx.queryParams.filter,
};
return {
method: 'replace',
key,
data,
options,
};
}
case 'Entity.Update': {
const data = await ctx.getBody();
const keyParam = operation.parameters.find(p => p.keyParam) ||
controller.parameters.find(p => p.keyParam);
const key = keyParam && ctx.pathParams[String(keyParam.name)];
const options = {
projection: ctx.queryParams.projection,
filter: ctx.queryParams.filter,
};
return {
method: 'update',
key,
data,
options,
};
}
case 'Entity.UpdateMany': {
const data = await ctx.getBody();
const options = {
filter: ctx.queryParams.filter,
};
return {
method: 'updateMany',
data,
options,
};
}
default:
break;
}
}
throw new Error(`This operation is not compatible to Elastic adapter`);
}
ElasticAdapter.parseRequest = parseRequest;
})(ElasticAdapter || (exports.ElasticAdapter = ElasticAdapter = {}));