server-ts: Port services/search/value_extractor

This commit is contained in:
Elian Doran 2024-02-18 00:34:30 +02:00
parent 80e6ced5db
commit 216f3f2c07
No known key found for this signature in database
4 changed files with 18 additions and 11 deletions

View File

@ -1,5 +1,5 @@
const {note} = require('./becca_mocking.js');
const ValueExtractor = require('../../src/services/search/value_extractor.js');
const ValueExtractor = require('../../src/services/search/value_extractor');
const becca = require('../../src/becca/becca.js');
const SearchContext = require('../../src/services/search/search_context');

View File

@ -450,7 +450,7 @@ class BNote extends AbstractBeccaEntity<BNote> {
);
}
getAttributeCaseInsensitive(type: string, name: string, value: string | null) {
getAttributeCaseInsensitive(type: string, name: string, value?: string | null) {
name = name.toLowerCase();
value = value ? value.toLowerCase() : null;

View File

@ -16,7 +16,7 @@ const NoteContentFulltextExp = require('../expressions/note_content_fulltext.js'
const OrderByAndLimitExp = require('../expressions/order_by_and_limit.js');
const AncestorExp = require('../expressions/ancestor.js');
const buildComparator = require('./build_comparator.js');
const ValueExtractor = require('../value_extractor.js');
const ValueExtractor = require('../value_extractor');
const utils = require('../../utils');
const TrueExp = require('../expressions/true.js');
const IsHiddenExp = require('../expressions/is_hidden.js');

View File

@ -1,10 +1,12 @@
"use strict";
import BNote = require("../../becca/entities/bnote");
/**
* Search string is lower cased for case-insensitive comparison. But when retrieving properties,
* we need a case-sensitive form, so we have this translation object.
*/
const PROP_MAPPING = {
const PROP_MAPPING: Record<string, string> = {
"noteid": "noteId",
"title": "title",
"type": "type",
@ -32,8 +34,14 @@ const PROP_MAPPING = {
"revisioncount": "revisionCount"
};
interface SearchContext {
dbLoadNeeded: boolean;
}
class ValueExtractor {
constructor(searchContext, propertyPath) {
private propertyPath: string[];
constructor(searchContext: SearchContext, propertyPath: string[]) {
this.propertyPath = propertyPath.map(pathEl => pathEl.toLowerCase());
if (this.propertyPath[0].startsWith('#')) {
@ -81,10 +89,10 @@ class ValueExtractor {
}
}
extract(note) {
let cursor = note;
extract(note: BNote) {
let cursor: BNote | null = note;
let i;
let i: number = 0;
const cur = () => this.propertyPath[i];
@ -105,8 +113,7 @@ class ValueExtractor {
i++;
const attr = cursor.getAttributeCaseInsensitive('relation', cur());
cursor = attr ? attr.targetNote : null;
cursor = (attr ? attr.targetNote || null : null);
}
else if (cur() === 'parents') {
cursor = cursor.parents[0];
@ -118,7 +125,7 @@ class ValueExtractor {
return Math.random().toString(); // string is expected for comparison
}
else if (cur() in PROP_MAPPING) {
return cursor[PROP_MAPPING[cur()]];
return (cursor as any)[PROP_MAPPING[cur()]];
}
else {
// FIXME