strapi-plugin-fuzzy-search-young
Version:
Register a weighted fuzzy search endpoint for Strapi Headless CMS you can add your content types to in no time.
49 lines (48 loc) • 2.63 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const errors_1 = require("@strapi/utils/lib/errors");
const fuzzySearchService_1 = __importDefault(require("../services/fuzzySearchService"));
const settingsService_1 = __importDefault(require("../services/settingsService"));
const buildRestResponse_1 = __importDefault(require("../utils/buildRestResponse"));
const validateQueryParams_1 = require("../utils/validateQueryParams");
exports.default = () => ({
async search(ctx) {
var _a;
const { contentTypes } = (0, settingsService_1.default)().get();
const { query, pagination, filters: filtersQuery = {}, locale, populate } = ctx.query;
const { auth } = ctx.state;
const queriedContentTypes = filtersQuery && filtersQuery.contentTypes
? (_a = filtersQuery.contentTypes) === null || _a === void 0 ? void 0 : _a.split(',')
: null;
try {
await (0, validateQueryParams_1.validateQueryParams)(ctx.query, contentTypes, pagination, populate, queriedContentTypes);
}
catch (err) {
return ctx.badRequest('Invalid query', err.message);
}
const queriedContentTypesSet = new Set(queriedContentTypes);
const filteredContentTypes = (filtersQuery === null || filtersQuery === void 0 ? void 0 : filtersQuery.contentTypes)
? [...contentTypes].filter((contentType) => queriedContentTypesSet.has(contentType.model.info.pluralName))
: contentTypes;
const results = await Promise.all(filteredContentTypes.map(async (contentType) => {
var _a;
return await (0, fuzzySearchService_1.default)({
contentType,
query,
filters: filtersQuery === null || filtersQuery === void 0 ? void 0 : filtersQuery[contentType.model.info.pluralName],
locale: ((_a = filtersQuery === null || filtersQuery === void 0 ? void 0 : filtersQuery[contentType.model.info.pluralName]) === null || _a === void 0 ? void 0 : _a.locale) || locale,
populate: populate === null || populate === void 0 ? void 0 : populate[contentType.model.info.pluralName],
});
}));
const response = await (0, buildRestResponse_1.default)(results, auth, pagination, queriedContentTypes);
if (response) {
return response;
}
else {
throw new errors_1.NotFoundError();
}
},
});