@reqlan/analytical 0.9.1 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -2
- package/README.template.md +1 -1
- package/out/core/barrel-page.d.ts +2 -1
- package/out/core/barrel-page.js +18 -83
- package/out/core/barrel-page.js.map +1 -1
- package/out/core/base-discovery.d.ts +6 -0
- package/out/core/base-discovery.js +47 -2
- package/out/core/base-discovery.js.map +1 -1
- package/out/core/create-base.js +10 -14
- package/out/core/create-base.js.map +1 -1
- package/out/core/file-reference-resolve.js +3 -1
- package/out/core/file-reference-resolve.js.map +1 -1
- package/out/core/index-error.d.ts +3 -3
- package/out/core/index-error.js.map +1 -1
- package/out/core/index-state-types.d.ts +47 -0
- package/out/core/index-state-types.js +11 -0
- package/out/core/index-state-types.js.map +1 -0
- package/out/core/path-relative.d.ts +15 -0
- package/out/core/path-relative.js +84 -0
- package/out/core/path-relative.js.map +1 -0
- package/out/core/rqignore.js +62 -62
- package/out/core/rqignore.js.map +1 -1
- package/out/core/types.d.ts +4 -3
- package/out/core/types.js +4 -1
- package/out/core/types.js.map +1 -1
- package/out/core/workspace-paths.d.ts +1 -2
- package/out/core/workspace-paths.js +6 -46
- package/out/core/workspace-paths.js.map +1 -1
- package/out/export/build-export-snapshot.js +1 -1
- package/out/export/build-export-snapshot.js.map +1 -1
- package/out/export/export-utils.d.ts +5 -0
- package/out/export/export-utils.js +38 -0
- package/out/export/export-utils.js.map +1 -0
- package/out/export/write-csv-export.js +1 -1
- package/out/export/write-csv-export.js.map +1 -1
- package/out/export/write-markdown-export.js +1 -1
- package/out/export/write-markdown-export.js.map +1 -1
- package/out/index-store/base-registry.d.ts +2 -3
- package/out/index-store/base-registry.js +8 -4
- package/out/index-store/base-registry.js.map +1 -1
- package/out/index-store/fuzzy-search-hit.d.ts +10 -0
- package/out/index-store/fuzzy-search-hit.js +2 -0
- package/out/index-store/fuzzy-search-hit.js.map +1 -0
- package/out/index-store/index-diagnostics-store.d.ts +4 -0
- package/out/index-store/index-diagnostics-store.js +44 -88
- package/out/index-store/index-diagnostics-store.js.map +1 -1
- package/out/index-store/index-file-error.d.ts +1 -1
- package/out/index-store/index-parse-issues.d.ts +4 -3
- package/out/index-store/index-parse-issues.js +0 -38
- package/out/index-store/index-parse-issues.js.map +1 -1
- package/out/index-store/index-status.d.ts +1 -1
- package/out/index-store/sqlite-store.d.ts +6 -2
- package/out/index-store/sqlite-store.js +70 -613
- package/out/index-store/sqlite-store.js.map +1 -1
- package/out/index-store/webview-graph-queries.d.ts +5 -0
- package/out/index-store/webview-graph-queries.js.map +1 -1
- package/out/index-store/workspace-index-file.d.ts +3 -14
- package/out/index-store/workspace-index-file.js +1 -114
- package/out/index-store/workspace-index-file.js.map +1 -1
- package/out/index-store/workspace-index-sync.d.ts +4 -17
- package/out/index-store/workspace-index-sync.js +29 -11
- package/out/index-store/workspace-index-sync.js.map +1 -1
- package/out/index-store/workspace-index.d.ts +36 -9
- package/out/index-store/workspace-index.js +223 -120
- package/out/index-store/workspace-index.js.map +1 -1
- package/out/index.d.ts +16 -43
- package/out/index.js +9 -25
- package/out/index.js.map +1 -1
- package/out/native/generated.d.ts +102 -0
- package/out/native/generated.js +4 -0
- package/out/native/generated.js.map +1 -0
- package/out/native/index.d.ts +17 -0
- package/out/native/index.js +12 -0
- package/out/native/index.js.map +1 -0
- package/out/native/load-native.d.ts +50 -0
- package/out/native/load-native.js +186 -0
- package/out/native/load-native.js.map +1 -0
- package/out/{analysis-api.d.ts → native/native-analysis-api.d.ts} +19 -19
- package/out/native/native-analysis-api.js +212 -0
- package/out/native/native-analysis-api.js.map +1 -0
- package/out/native/native-index-store.d.ts +5 -0
- package/out/native/native-index-store.js +6 -0
- package/out/native/native-index-store.js.map +1 -0
- package/out/native/native-sql-db.d.ts +135 -0
- package/out/native/native-sql-db.js +217 -0
- package/out/native/native-sql-db.js.map +1 -0
- package/out/native/native-workspace-index.d.ts +164 -0
- package/out/native/native-workspace-index.js +283 -0
- package/out/native/native-workspace-index.js.map +1 -0
- package/out/native/open-analysis-api.d.ts +16 -0
- package/out/native/open-analysis-api.js +21 -0
- package/out/native/open-analysis-api.js.map +1 -0
- package/out/native/parse-source.d.ts +24 -0
- package/out/native/parse-source.js +26 -0
- package/out/native/parse-source.js.map +1 -0
- package/package.json +18 -30
- package/out/analysis/analyser-registry.d.ts +0 -21
- package/out/analysis/analyser-registry.js +0 -33
- package/out/analysis/analyser-registry.js.map +0 -1
- package/out/analysis/completion-tracking-analyser.d.ts +0 -3
- package/out/analysis/completion-tracking-analyser.js +0 -37
- package/out/analysis/completion-tracking-analyser.js.map +0 -1
- package/out/analysis/contextual-search.d.ts +0 -26
- package/out/analysis/contextual-search.js +0 -94
- package/out/analysis/contextual-search.js.map +0 -1
- package/out/analysis/deprecation-impact-analyser.d.ts +0 -3
- package/out/analysis/deprecation-impact-analyser.js +0 -21
- package/out/analysis/deprecation-impact-analyser.js.map +0 -1
- package/out/analysis/file-related-analyser.d.ts +0 -5
- package/out/analysis/file-related-analyser.js +0 -41
- package/out/analysis/file-related-analyser.js.map +0 -1
- package/out/analysis/fuzzy-search-analyser.d.ts +0 -17
- package/out/analysis/fuzzy-search-analyser.js +0 -25
- package/out/analysis/fuzzy-search-analyser.js.map +0 -1
- package/out/analysis/fuzzy-search-worker-client.d.ts +0 -39
- package/out/analysis/fuzzy-search-worker-client.js +0 -178
- package/out/analysis/fuzzy-search-worker-client.js.map +0 -1
- package/out/analysis/fuzzy-search-worker.d.ts +0 -32
- package/out/analysis/fuzzy-search-worker.js +0 -81
- package/out/analysis/fuzzy-search-worker.js.map +0 -1
- package/out/analysis/fuzzy-search.d.ts +0 -62
- package/out/analysis/fuzzy-search.js +0 -471
- package/out/analysis/fuzzy-search.js.map +0 -1
- package/out/analysis/git-dates-analyser.d.ts +0 -12
- package/out/analysis/git-dates-analyser.js +0 -96
- package/out/analysis/git-dates-analyser.js.map +0 -1
- package/out/analysis/list-ideas-analyser.d.ts +0 -3
- package/out/analysis/list-ideas-analyser.js +0 -7
- package/out/analysis/list-ideas-analyser.js.map +0 -1
- package/out/analysis/local-graph-analyser.d.ts +0 -6
- package/out/analysis/local-graph-analyser.js +0 -42
- package/out/analysis/local-graph-analyser.js.map +0 -1
- package/out/analysis/semantic-search-analyser.d.ts +0 -8
- package/out/analysis/semantic-search-analyser.js +0 -51
- package/out/analysis/semantic-search-analyser.js.map +0 -1
- package/out/analysis-api.js +0 -199
- package/out/analysis-api.js.map +0 -1
- package/out/core/analytical-store.d.ts +0 -85
- package/out/core/analytical-store.js +0 -143
- package/out/core/analytical-store.js.map +0 -1
- package/out/core/context-model.d.ts +0 -204
- package/out/core/context-model.js +0 -36
- package/out/core/context-model.js.map +0 -1
- package/out/core/context-signals.d.ts +0 -154
- package/out/core/context-signals.js +0 -406
- package/out/core/context-signals.js.map +0 -1
- package/out/create-runtime.d.ts +0 -47
- package/out/create-runtime.js +0 -79
- package/out/create-runtime.js.map +0 -1
- package/out/export/export-html.d.ts +0 -4
- package/out/export/export-html.js +0 -12
- package/out/export/export-html.js.map +0 -1
- package/out/export/html-export-assets.d.ts +0 -3
- package/out/export/html-export-assets.js +0 -2294
- package/out/export/html-export-assets.js.map +0 -1
- package/out/export/html-export-template.d.ts +0 -18
- package/out/export/html-export-template.js +0 -1154
- package/out/export/html-export-template.js.map +0 -1
- package/out/export/html-export-utils.d.ts +0 -86
- package/out/export/html-export-utils.js +0 -485
- package/out/export/html-export-utils.js.map +0 -1
- package/out/export/write-html-export.d.ts +0 -2
- package/out/export/write-html-export.js +0 -181
- package/out/export/write-html-export.js.map +0 -1
- package/out/graph/physics-core-source.d.ts +0 -5
- package/out/graph/physics-core-source.js +0 -8
- package/out/graph/physics-core-source.js.map +0 -1
- package/out/graph/physics-core.d.ts +0 -141
- package/out/graph/physics-core.js +0 -237
- package/out/graph/physics-core.js.map +0 -1
- package/out/index-store/file-treatment.d.ts +0 -40
- package/out/index-store/file-treatment.js +0 -144
- package/out/index-store/file-treatment.js.map +0 -1
- package/out/index-store/idea-extractor.d.ts +0 -11
- package/out/index-store/idea-extractor.js +0 -351
- package/out/index-store/idea-extractor.js.map +0 -1
- package/out/index-store/overview-coverage.d.ts +0 -23
- package/out/index-store/overview-coverage.js +0 -254
- package/out/index-store/overview-coverage.js.map +0 -1
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Worker-thread fuzzy idea search — keeps scoring off the extension-host event loop.
|
|
3
|
-
* rq:["../../../../reqlan rq/core_analysis/search.rq".fuzzy_search]
|
|
4
|
-
* rq:["../../../../reqlan rq/core_analysis/search.rq".fuzzy_search_whitespace]
|
|
5
|
-
*/
|
|
6
|
-
import { parentPort } from 'node:worker_threads';
|
|
7
|
-
import { filterAndScoreIdeas } from './fuzzy-search.js';
|
|
8
|
-
let catalog = [];
|
|
9
|
-
let activeRequestId;
|
|
10
|
-
if (!parentPort) {
|
|
11
|
-
throw new Error('fuzzy-search-worker must run as a worker thread');
|
|
12
|
-
}
|
|
13
|
-
parentPort.on('message', (message) => {
|
|
14
|
-
if (!message || typeof message !== 'object' || !('type' in message)) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
switch (message.type) {
|
|
18
|
-
case 'setCatalog':
|
|
19
|
-
catalog = message.ideas;
|
|
20
|
-
break;
|
|
21
|
-
case 'clearCatalog':
|
|
22
|
-
catalog = [];
|
|
23
|
-
break;
|
|
24
|
-
case 'cancel':
|
|
25
|
-
if (message.requestId === undefined || message.requestId === activeRequestId) {
|
|
26
|
-
activeRequestId = undefined;
|
|
27
|
-
}
|
|
28
|
-
break;
|
|
29
|
-
case 'search': {
|
|
30
|
-
const { requestId, query, limit, requireQuery = false } = message;
|
|
31
|
-
activeRequestId = requestId;
|
|
32
|
-
try {
|
|
33
|
-
const trimmed = query.trim();
|
|
34
|
-
if (requireQuery && !trimmed) {
|
|
35
|
-
parentPort.postMessage({
|
|
36
|
-
type: 'result',
|
|
37
|
-
requestId,
|
|
38
|
-
hits: [],
|
|
39
|
-
total: 0,
|
|
40
|
-
truncated: false
|
|
41
|
-
});
|
|
42
|
-
break;
|
|
43
|
-
}
|
|
44
|
-
const ranked = filterAndScoreIdeas(catalog, trimmed);
|
|
45
|
-
if (activeRequestId !== requestId) {
|
|
46
|
-
parentPort.postMessage({
|
|
47
|
-
type: 'cancelled',
|
|
48
|
-
requestId
|
|
49
|
-
});
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
const total = ranked.length;
|
|
53
|
-
const truncated = limit !== undefined && total > limit;
|
|
54
|
-
const hits = limit === undefined ? ranked : ranked.slice(0, Math.max(0, limit));
|
|
55
|
-
parentPort.postMessage({
|
|
56
|
-
type: 'result',
|
|
57
|
-
requestId,
|
|
58
|
-
hits,
|
|
59
|
-
total,
|
|
60
|
-
truncated
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
parentPort.postMessage({
|
|
65
|
-
type: 'error',
|
|
66
|
-
requestId,
|
|
67
|
-
message: error instanceof Error ? error.message : String(error)
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
finally {
|
|
71
|
-
if (activeRequestId === requestId) {
|
|
72
|
-
activeRequestId = undefined;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
77
|
-
default:
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
//# sourceMappingURL=fuzzy-search-worker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzy-search-worker.js","sourceRoot":"","sources":["../../src/analysis/fuzzy-search-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fuzzy / partial idea search with interchangeable separators.
|
|
3
|
-
* rq:["../../../../reqlan rq/core_analysis/search.rq".fuzzy_search]
|
|
4
|
-
* rq:["../../../../reqlan rq/core_analysis/search.rq".fuzzy_search_whitespace]
|
|
5
|
-
* rq:["../../../../reqlan rq/extension/module/activitybar-panels/search.rq".search_pane_match_highlighting]
|
|
6
|
-
*/
|
|
7
|
-
import type { IdeaSummary } from '../core/types.js';
|
|
8
|
-
export interface FuzzySearchHit {
|
|
9
|
-
id: string;
|
|
10
|
-
name: string;
|
|
11
|
-
kind: IdeaSummary['kind'];
|
|
12
|
-
fileUri: string;
|
|
13
|
-
summary: string;
|
|
14
|
-
lineStart: number;
|
|
15
|
-
score: number;
|
|
16
|
-
}
|
|
17
|
-
/** Lowercase and strip interchangeable separators for comparison. */
|
|
18
|
-
export declare function normalizeSearchSeparators(value: string): string;
|
|
19
|
-
/** Split on interchangeable separators into lowercase word tokens. */
|
|
20
|
-
export declare function splitSearchTokens(value: string): string[];
|
|
21
|
-
export declare function filterAndScoreIdeas(ideas: IdeaSummary[], query: string): FuzzySearchHit[];
|
|
22
|
-
/**
|
|
23
|
-
* Score ideas in chunks, yielding to the event loop so UI actions (e.g. openIdea)
|
|
24
|
-
* are not blocked by a long synchronous scan of a large index.
|
|
25
|
-
* Returns `undefined` when `isCancelled` becomes true mid-run.
|
|
26
|
-
*/
|
|
27
|
-
export declare function filterAndScoreIdeasAsync(ideas: IdeaSummary[], query: string, options?: {
|
|
28
|
-
isCancelled?: () => boolean;
|
|
29
|
-
/** Ideas processed between yields; default 250. */
|
|
30
|
-
chunkSize?: number;
|
|
31
|
-
}): Promise<FuzzySearchHit[] | undefined>;
|
|
32
|
-
/**
|
|
33
|
-
* Match every query token against hay tokens.
|
|
34
|
-
* Prefers order-preserving matches; still accepts reordered tokens (missing
|
|
35
|
-
* intermediate hay words are fine either way).
|
|
36
|
-
*/
|
|
37
|
-
export declare function matchQueryTokens(hayTokens: string[], queryTokens: string[]): 'ordered' | 'reordered' | null;
|
|
38
|
-
/** True when needle characters appear in order inside hay (simple fuzzy). */
|
|
39
|
-
export declare function fuzzySubsequence(hay: string, needle: string): boolean;
|
|
40
|
-
export interface SearchHighlightRange {
|
|
41
|
-
start: number;
|
|
42
|
-
end: number;
|
|
43
|
-
}
|
|
44
|
-
export interface SearchHighlightPart {
|
|
45
|
-
text: string;
|
|
46
|
-
matched: boolean;
|
|
47
|
-
}
|
|
48
|
-
export interface SearchHighlightOptions {
|
|
49
|
-
/**
|
|
50
|
-
* When denser strategies miss, highlight in-order character subsequence.
|
|
51
|
-
* Use for short fields (idea names). Skip on long summaries/paths so
|
|
52
|
-
* scattered letters do not light up the whole line.
|
|
53
|
-
*/
|
|
54
|
-
allowSparseFuzzy?: boolean;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Ranges in `hay` that correspond to the fuzzy query.
|
|
58
|
-
* Prefers contiguous / token / word-start matches over sparse subsequence.
|
|
59
|
-
*/
|
|
60
|
-
export declare function findSearchHighlightRanges(hay: string, query: string, options?: SearchHighlightOptions): SearchHighlightRange[];
|
|
61
|
-
/** Split `hay` into matched / unmatched slices for rendering. */
|
|
62
|
-
export declare function splitSearchHighlight(hay: string, query: string, options?: SearchHighlightOptions): SearchHighlightPart[];
|
|
@@ -1,471 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Characters treated as the same separator family: underscore, hyphen,
|
|
3
|
-
* ellipsis / dots, and whitespace. Runs collapse to nothing for matching so
|
|
4
|
-
* `cli package`, `cli_package`, `cli-package`, and `cli...package` align.
|
|
5
|
-
*/
|
|
6
|
-
const SEPARATOR_RE = /[_\-\s.…]+/g;
|
|
7
|
-
/** Lowercase and strip interchangeable separators for comparison. */
|
|
8
|
-
export function normalizeSearchSeparators(value) {
|
|
9
|
-
return value.toLowerCase().replace(SEPARATOR_RE, '');
|
|
10
|
-
}
|
|
11
|
-
/** Split on interchangeable separators into lowercase word tokens. */
|
|
12
|
-
export function splitSearchTokens(value) {
|
|
13
|
-
return value
|
|
14
|
-
.toLowerCase()
|
|
15
|
-
.split(SEPARATOR_RE)
|
|
16
|
-
.map(token => token.trim())
|
|
17
|
-
.filter(Boolean);
|
|
18
|
-
}
|
|
19
|
-
export function filterAndScoreIdeas(ideas, query) {
|
|
20
|
-
return rankScoredIdeas(scoreIdeas(ideas, query));
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Score ideas in chunks, yielding to the event loop so UI actions (e.g. openIdea)
|
|
24
|
-
* are not blocked by a long synchronous scan of a large index.
|
|
25
|
-
* Returns `undefined` when `isCancelled` becomes true mid-run.
|
|
26
|
-
*/
|
|
27
|
-
export async function filterAndScoreIdeasAsync(ideas, query, options) {
|
|
28
|
-
const chunkSize = Math.max(1, options?.chunkSize ?? 250);
|
|
29
|
-
const isCancelled = options?.isCancelled;
|
|
30
|
-
const rawNeedle = query.trim().toLowerCase();
|
|
31
|
-
const needle = normalizeSearchSeparators(rawNeedle);
|
|
32
|
-
const queryTokens = splitSearchTokens(rawNeedle);
|
|
33
|
-
const scored = [];
|
|
34
|
-
for (let index = 0; index < ideas.length; index += 1) {
|
|
35
|
-
if (index > 0 && index % chunkSize === 0) {
|
|
36
|
-
if (isCancelled?.()) {
|
|
37
|
-
return undefined;
|
|
38
|
-
}
|
|
39
|
-
await yieldEventLoop();
|
|
40
|
-
if (isCancelled?.()) {
|
|
41
|
-
return undefined;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const idea = ideas[index];
|
|
45
|
-
if (idea.kind === 'ideaset') {
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
const score = rawNeedle ? scoreIdeaMatch(idea, rawNeedle, needle, queryTokens) : 1;
|
|
49
|
-
if (score <= 0) {
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
scored.push({
|
|
53
|
-
id: idea.id,
|
|
54
|
-
name: idea.name,
|
|
55
|
-
kind: idea.kind,
|
|
56
|
-
fileUri: idea.fileUri,
|
|
57
|
-
summary: idea.summary,
|
|
58
|
-
lineStart: idea.lineStart,
|
|
59
|
-
score
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
if (isCancelled?.()) {
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
return rankScoredIdeas(scored);
|
|
66
|
-
}
|
|
67
|
-
function scoreIdeas(ideas, query) {
|
|
68
|
-
const rawNeedle = query.trim().toLowerCase();
|
|
69
|
-
const needle = normalizeSearchSeparators(rawNeedle);
|
|
70
|
-
const queryTokens = splitSearchTokens(rawNeedle);
|
|
71
|
-
const scored = [];
|
|
72
|
-
for (const idea of ideas) {
|
|
73
|
-
if (idea.kind === 'ideaset') {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
const score = rawNeedle ? scoreIdeaMatch(idea, rawNeedle, needle, queryTokens) : 1;
|
|
77
|
-
if (score <= 0) {
|
|
78
|
-
continue;
|
|
79
|
-
}
|
|
80
|
-
scored.push({
|
|
81
|
-
id: idea.id,
|
|
82
|
-
name: idea.name,
|
|
83
|
-
kind: idea.kind,
|
|
84
|
-
fileUri: idea.fileUri,
|
|
85
|
-
summary: idea.summary,
|
|
86
|
-
lineStart: idea.lineStart,
|
|
87
|
-
score
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
return scored;
|
|
91
|
-
}
|
|
92
|
-
function rankScoredIdeas(scored) {
|
|
93
|
-
return scored.sort((left, right) => right.score - left.score
|
|
94
|
-
|| left.name.localeCompare(right.name)
|
|
95
|
-
|| left.fileUri.localeCompare(right.fileUri));
|
|
96
|
-
}
|
|
97
|
-
function yieldEventLoop() {
|
|
98
|
-
return new Promise(resolve => {
|
|
99
|
-
setTimeout(resolve, 0);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
function scoreIdeaMatch(idea, rawNeedle, needle, queryTokens) {
|
|
103
|
-
const nameRaw = idea.name.toLowerCase();
|
|
104
|
-
const name = normalizeSearchSeparators(idea.name);
|
|
105
|
-
const summaryRaw = idea.summary.toLowerCase();
|
|
106
|
-
const summary = normalizeSearchSeparators(idea.summary);
|
|
107
|
-
let score = 0;
|
|
108
|
-
if (nameRaw === rawNeedle || name === needle) {
|
|
109
|
-
score = 100;
|
|
110
|
-
}
|
|
111
|
-
else if (nameRaw.startsWith(rawNeedle) || name.startsWith(needle)) {
|
|
112
|
-
score = 80;
|
|
113
|
-
}
|
|
114
|
-
else if (nameRaw.includes(rawNeedle) || name.includes(needle)) {
|
|
115
|
-
score = 50;
|
|
116
|
-
}
|
|
117
|
-
else if (fuzzySubsequence(nameRaw, rawNeedle) || fuzzySubsequence(name, needle)) {
|
|
118
|
-
score = 30;
|
|
119
|
-
}
|
|
120
|
-
const nameTokenKind = matchQueryTokens(splitSearchTokens(idea.name), queryTokens);
|
|
121
|
-
if (nameTokenKind === 'ordered') {
|
|
122
|
-
score = Math.max(score, 45);
|
|
123
|
-
}
|
|
124
|
-
else if (nameTokenKind === 'reordered') {
|
|
125
|
-
score = Math.max(score, 35);
|
|
126
|
-
}
|
|
127
|
-
if (summaryRaw.includes(rawNeedle) || (needle && summary.includes(needle))) {
|
|
128
|
-
score = Math.max(score, 20) + 5;
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
const summaryTokenKind = matchQueryTokens(splitSearchTokens(idea.summary), queryTokens);
|
|
132
|
-
if (summaryTokenKind === 'ordered') {
|
|
133
|
-
score = Math.max(score, 22);
|
|
134
|
-
}
|
|
135
|
-
else if (summaryTokenKind === 'reordered') {
|
|
136
|
-
score = Math.max(score, 18);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
for (const tag of idea.tags) {
|
|
140
|
-
const tagRaw = tag.toLowerCase();
|
|
141
|
-
const tagNorm = normalizeSearchSeparators(tag);
|
|
142
|
-
if (tagRaw.includes(rawNeedle) || (needle && tagNorm.includes(needle))) {
|
|
143
|
-
score = Math.max(score, 15) + 2;
|
|
144
|
-
}
|
|
145
|
-
else if (matchQueryTokens(splitSearchTokens(tag), queryTokens) !== null) {
|
|
146
|
-
score = Math.max(score, 15) + 2;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
return score;
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Match every query token against hay tokens.
|
|
153
|
-
* Prefers order-preserving matches; still accepts reordered tokens (missing
|
|
154
|
-
* intermediate hay words are fine either way).
|
|
155
|
-
*/
|
|
156
|
-
export function matchQueryTokens(hayTokens, queryTokens) {
|
|
157
|
-
if (queryTokens.length === 0 || hayTokens.length === 0) {
|
|
158
|
-
return null;
|
|
159
|
-
}
|
|
160
|
-
let hayIndex = 0;
|
|
161
|
-
let ordered = true;
|
|
162
|
-
for (const queryToken of queryTokens) {
|
|
163
|
-
let found = -1;
|
|
164
|
-
for (let index = hayIndex; index < hayTokens.length; index += 1) {
|
|
165
|
-
if (tokenMatches(hayTokens[index], queryToken)) {
|
|
166
|
-
found = index;
|
|
167
|
-
break;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
if (found < 0) {
|
|
171
|
-
ordered = false;
|
|
172
|
-
break;
|
|
173
|
-
}
|
|
174
|
-
hayIndex = found + 1;
|
|
175
|
-
}
|
|
176
|
-
if (ordered) {
|
|
177
|
-
return 'ordered';
|
|
178
|
-
}
|
|
179
|
-
const used = new Set();
|
|
180
|
-
for (const queryToken of queryTokens) {
|
|
181
|
-
let found = -1;
|
|
182
|
-
for (let index = 0; index < hayTokens.length; index += 1) {
|
|
183
|
-
if (used.has(index)) {
|
|
184
|
-
continue;
|
|
185
|
-
}
|
|
186
|
-
if (tokenMatches(hayTokens[index], queryToken)) {
|
|
187
|
-
found = index;
|
|
188
|
-
break;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
if (found < 0) {
|
|
192
|
-
return null;
|
|
193
|
-
}
|
|
194
|
-
used.add(found);
|
|
195
|
-
}
|
|
196
|
-
return 'reordered';
|
|
197
|
-
}
|
|
198
|
-
function tokenMatches(hayToken, queryToken) {
|
|
199
|
-
return hayToken === queryToken || hayToken.startsWith(queryToken);
|
|
200
|
-
}
|
|
201
|
-
/** True when needle characters appear in order inside hay (simple fuzzy). */
|
|
202
|
-
export function fuzzySubsequence(hay, needle) {
|
|
203
|
-
if (!needle) {
|
|
204
|
-
return true;
|
|
205
|
-
}
|
|
206
|
-
let index = 0;
|
|
207
|
-
for (const char of hay) {
|
|
208
|
-
if (char === needle[index]) {
|
|
209
|
-
index += 1;
|
|
210
|
-
if (index >= needle.length) {
|
|
211
|
-
return true;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
return false;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Ranges in `hay` that correspond to the fuzzy query.
|
|
219
|
-
* Prefers contiguous / token / word-start matches over sparse subsequence.
|
|
220
|
-
*/
|
|
221
|
-
export function findSearchHighlightRanges(hay, query, options) {
|
|
222
|
-
const rawNeedle = query.trim();
|
|
223
|
-
if (!rawNeedle || !hay) {
|
|
224
|
-
return [];
|
|
225
|
-
}
|
|
226
|
-
const substring = findAllCaseInsensitiveSubstrings(hay, rawNeedle);
|
|
227
|
-
if (substring.length > 0) {
|
|
228
|
-
return substring;
|
|
229
|
-
}
|
|
230
|
-
const normalized = findNormalizedSubstringRanges(hay, rawNeedle);
|
|
231
|
-
if (normalized.length > 0) {
|
|
232
|
-
return normalized;
|
|
233
|
-
}
|
|
234
|
-
const tokens = findTokenPrefixRanges(hay, rawNeedle);
|
|
235
|
-
if (tokens.length > 0) {
|
|
236
|
-
return tokens;
|
|
237
|
-
}
|
|
238
|
-
const acronym = findWordStartRanges(hay, rawNeedle);
|
|
239
|
-
if (acronym.length > 0) {
|
|
240
|
-
return acronym;
|
|
241
|
-
}
|
|
242
|
-
if (options?.allowSparseFuzzy) {
|
|
243
|
-
return findFuzzySubsequenceRanges(hay, rawNeedle);
|
|
244
|
-
}
|
|
245
|
-
return [];
|
|
246
|
-
}
|
|
247
|
-
/** Split `hay` into matched / unmatched slices for rendering. */
|
|
248
|
-
export function splitSearchHighlight(hay, query, options) {
|
|
249
|
-
const ranges = findSearchHighlightRanges(hay, query, options);
|
|
250
|
-
if (ranges.length === 0) {
|
|
251
|
-
return hay ? [{ text: hay, matched: false }] : [];
|
|
252
|
-
}
|
|
253
|
-
const parts = [];
|
|
254
|
-
let cursor = 0;
|
|
255
|
-
for (const range of ranges) {
|
|
256
|
-
if (range.start > cursor) {
|
|
257
|
-
parts.push({ text: hay.slice(cursor, range.start), matched: false });
|
|
258
|
-
}
|
|
259
|
-
if (range.end > range.start) {
|
|
260
|
-
parts.push({ text: hay.slice(range.start, range.end), matched: true });
|
|
261
|
-
}
|
|
262
|
-
cursor = Math.max(cursor, range.end);
|
|
263
|
-
}
|
|
264
|
-
if (cursor < hay.length) {
|
|
265
|
-
parts.push({ text: hay.slice(cursor), matched: false });
|
|
266
|
-
}
|
|
267
|
-
return parts;
|
|
268
|
-
}
|
|
269
|
-
function isSearchSeparator(char) {
|
|
270
|
-
return /[_\-\s.…]/.test(char);
|
|
271
|
-
}
|
|
272
|
-
function findAllCaseInsensitiveSubstrings(hay, rawNeedle) {
|
|
273
|
-
const needle = rawNeedle.toLowerCase();
|
|
274
|
-
const hayLower = hay.toLowerCase();
|
|
275
|
-
if (!needle) {
|
|
276
|
-
return [];
|
|
277
|
-
}
|
|
278
|
-
const ranges = [];
|
|
279
|
-
let from = 0;
|
|
280
|
-
while (from <= hayLower.length - needle.length) {
|
|
281
|
-
const index = hayLower.indexOf(needle, from);
|
|
282
|
-
if (index < 0) {
|
|
283
|
-
break;
|
|
284
|
-
}
|
|
285
|
-
ranges.push({ start: index, end: index + needle.length });
|
|
286
|
-
from = index + needle.length;
|
|
287
|
-
}
|
|
288
|
-
return ranges;
|
|
289
|
-
}
|
|
290
|
-
function findNormalizedSubstringRanges(hay, rawNeedle) {
|
|
291
|
-
const needle = normalizeSearchSeparators(rawNeedle);
|
|
292
|
-
if (!needle) {
|
|
293
|
-
return [];
|
|
294
|
-
}
|
|
295
|
-
const origIndex = [];
|
|
296
|
-
let normalized = '';
|
|
297
|
-
for (let index = 0; index < hay.length; index += 1) {
|
|
298
|
-
const char = hay[index];
|
|
299
|
-
if (isSearchSeparator(char)) {
|
|
300
|
-
continue;
|
|
301
|
-
}
|
|
302
|
-
normalized += char.toLowerCase();
|
|
303
|
-
origIndex.push(index);
|
|
304
|
-
}
|
|
305
|
-
const ranges = [];
|
|
306
|
-
let from = 0;
|
|
307
|
-
while (from <= normalized.length - needle.length) {
|
|
308
|
-
const index = normalized.indexOf(needle, from);
|
|
309
|
-
if (index < 0) {
|
|
310
|
-
break;
|
|
311
|
-
}
|
|
312
|
-
const startOrig = origIndex[index];
|
|
313
|
-
const endOrig = origIndex[index + needle.length - 1] + 1;
|
|
314
|
-
ranges.push({ start: startOrig, end: endOrig });
|
|
315
|
-
from = index + needle.length;
|
|
316
|
-
}
|
|
317
|
-
return ranges;
|
|
318
|
-
}
|
|
319
|
-
function tokensWithRanges(value) {
|
|
320
|
-
const tokens = [];
|
|
321
|
-
let start = -1;
|
|
322
|
-
for (let index = 0; index <= value.length; index += 1) {
|
|
323
|
-
const atEnd = index === value.length;
|
|
324
|
-
const sep = atEnd || isSearchSeparator(value[index]);
|
|
325
|
-
if (!sep && start < 0) {
|
|
326
|
-
start = index;
|
|
327
|
-
}
|
|
328
|
-
else if (sep && start >= 0) {
|
|
329
|
-
tokens.push({
|
|
330
|
-
token: value.slice(start, index).toLowerCase(),
|
|
331
|
-
start,
|
|
332
|
-
end: index
|
|
333
|
-
});
|
|
334
|
-
start = -1;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
return tokens;
|
|
338
|
-
}
|
|
339
|
-
function findTokenPrefixRanges(hay, rawNeedle) {
|
|
340
|
-
const queryTokens = splitSearchTokens(rawNeedle);
|
|
341
|
-
const hayTokens = tokensWithRanges(hay);
|
|
342
|
-
if (queryTokens.length === 0 || hayTokens.length === 0) {
|
|
343
|
-
return [];
|
|
344
|
-
}
|
|
345
|
-
const ranges = [];
|
|
346
|
-
let hayIndex = 0;
|
|
347
|
-
let ordered = true;
|
|
348
|
-
for (const queryToken of queryTokens) {
|
|
349
|
-
let found = -1;
|
|
350
|
-
for (let index = hayIndex; index < hayTokens.length; index += 1) {
|
|
351
|
-
if (tokenMatches(hayTokens[index].token, queryToken)) {
|
|
352
|
-
found = index;
|
|
353
|
-
break;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
if (found < 0) {
|
|
357
|
-
ordered = false;
|
|
358
|
-
break;
|
|
359
|
-
}
|
|
360
|
-
pushTokenPrefixRange(ranges, hayTokens[found], queryToken);
|
|
361
|
-
hayIndex = found + 1;
|
|
362
|
-
}
|
|
363
|
-
if (ordered) {
|
|
364
|
-
return mergeHighlightRanges(ranges);
|
|
365
|
-
}
|
|
366
|
-
const used = new Set();
|
|
367
|
-
const reordered = [];
|
|
368
|
-
for (const queryToken of queryTokens) {
|
|
369
|
-
let found = -1;
|
|
370
|
-
for (let index = 0; index < hayTokens.length; index += 1) {
|
|
371
|
-
if (used.has(index)) {
|
|
372
|
-
continue;
|
|
373
|
-
}
|
|
374
|
-
if (tokenMatches(hayTokens[index].token, queryToken)) {
|
|
375
|
-
found = index;
|
|
376
|
-
break;
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
if (found < 0) {
|
|
380
|
-
return [];
|
|
381
|
-
}
|
|
382
|
-
used.add(found);
|
|
383
|
-
pushTokenPrefixRange(reordered, hayTokens[found], queryToken);
|
|
384
|
-
}
|
|
385
|
-
return mergeHighlightRanges(reordered);
|
|
386
|
-
}
|
|
387
|
-
function pushTokenPrefixRange(ranges, hayToken, queryToken) {
|
|
388
|
-
ranges.push({
|
|
389
|
-
start: hayToken.start,
|
|
390
|
-
end: Math.min(hayToken.start + queryToken.length, hayToken.end)
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
|
-
function findWordStartRanges(hay, rawNeedle) {
|
|
394
|
-
const needleChars = normalizeSearchSeparators(rawNeedle);
|
|
395
|
-
const hayTokens = tokensWithRanges(hay);
|
|
396
|
-
if (!needleChars || hayTokens.length === 0) {
|
|
397
|
-
return [];
|
|
398
|
-
}
|
|
399
|
-
const ranges = [];
|
|
400
|
-
let needleIndex = 0;
|
|
401
|
-
for (const token of hayTokens) {
|
|
402
|
-
if (needleIndex >= needleChars.length) {
|
|
403
|
-
break;
|
|
404
|
-
}
|
|
405
|
-
if (token.token[0] === needleChars[needleIndex]) {
|
|
406
|
-
ranges.push({ start: token.start, end: token.start + 1 });
|
|
407
|
-
needleIndex += 1;
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
return needleIndex === needleChars.length ? ranges : [];
|
|
411
|
-
}
|
|
412
|
-
function findFuzzySubsequenceRanges(hay, rawNeedle) {
|
|
413
|
-
const rawPositions = matchSubsequencePositions(hay.toLowerCase(), rawNeedle.toLowerCase());
|
|
414
|
-
if (rawPositions) {
|
|
415
|
-
return mergeHighlightRanges(rawPositions.map(index => ({ start: index, end: index + 1 })));
|
|
416
|
-
}
|
|
417
|
-
const needleNorm = normalizeSearchSeparators(rawNeedle);
|
|
418
|
-
if (!needleNorm) {
|
|
419
|
-
return [];
|
|
420
|
-
}
|
|
421
|
-
const origIndex = [];
|
|
422
|
-
let normalized = '';
|
|
423
|
-
for (let index = 0; index < hay.length; index += 1) {
|
|
424
|
-
const char = hay[index];
|
|
425
|
-
if (isSearchSeparator(char)) {
|
|
426
|
-
continue;
|
|
427
|
-
}
|
|
428
|
-
normalized += char.toLowerCase();
|
|
429
|
-
origIndex.push(index);
|
|
430
|
-
}
|
|
431
|
-
const normPositions = matchSubsequencePositions(normalized, needleNorm);
|
|
432
|
-
if (!normPositions) {
|
|
433
|
-
return [];
|
|
434
|
-
}
|
|
435
|
-
return mergeHighlightRanges(normPositions.map(index => ({ start: origIndex[index], end: origIndex[index] + 1 })));
|
|
436
|
-
}
|
|
437
|
-
function matchSubsequencePositions(hay, needle) {
|
|
438
|
-
if (!needle) {
|
|
439
|
-
return [];
|
|
440
|
-
}
|
|
441
|
-
const positions = [];
|
|
442
|
-
let from = 0;
|
|
443
|
-
for (const char of needle) {
|
|
444
|
-
const index = hay.indexOf(char, from);
|
|
445
|
-
if (index < 0) {
|
|
446
|
-
return null;
|
|
447
|
-
}
|
|
448
|
-
positions.push(index);
|
|
449
|
-
from = index + 1;
|
|
450
|
-
}
|
|
451
|
-
return positions;
|
|
452
|
-
}
|
|
453
|
-
function mergeHighlightRanges(ranges) {
|
|
454
|
-
if (ranges.length === 0) {
|
|
455
|
-
return [];
|
|
456
|
-
}
|
|
457
|
-
const sorted = [...ranges].sort((left, right) => left.start - right.start || left.end - right.end);
|
|
458
|
-
const merged = [{ start: sorted[0].start, end: sorted[0].end }];
|
|
459
|
-
for (let index = 1; index < sorted.length; index += 1) {
|
|
460
|
-
const current = sorted[index];
|
|
461
|
-
const last = merged[merged.length - 1];
|
|
462
|
-
if (current.start <= last.end) {
|
|
463
|
-
last.end = Math.max(last.end, current.end);
|
|
464
|
-
}
|
|
465
|
-
else {
|
|
466
|
-
merged.push({ start: current.start, end: current.end });
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
return merged;
|
|
470
|
-
}
|
|
471
|
-
//# sourceMappingURL=fuzzy-search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzy-search.js","sourceRoot":"","sources":["../../src/analysis/fuzzy-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Analyser } from './analyser-registry.js';
|
|
2
|
-
/** Extract ISO author-date lines from git log stdout (defensive against patch noise). */
|
|
3
|
-
export declare function parseGitAuthorDates(stdout: string): string[];
|
|
4
|
-
export interface GitDateInfo {
|
|
5
|
-
ideaId: string;
|
|
6
|
-
createdAt?: string;
|
|
7
|
-
modifiedAt?: string;
|
|
8
|
-
changeCount?: number;
|
|
9
|
-
}
|
|
10
|
-
export declare const gitDatesAnalyser: Analyser<{
|
|
11
|
-
ideaIds?: string[];
|
|
12
|
-
}, GitDateInfo[]>;
|