@kerebron/editor 0.4.27 → 0.4.29
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/esm/CoreEditor.d.ts +40 -0
- package/esm/CoreEditor.d.ts.map +1 -0
- package/esm/CoreEditor.js +224 -0
- package/esm/CoreEditor.js.map +1 -0
- package/esm/DummyEditorView.d.ts +60 -0
- package/esm/DummyEditorView.d.ts.map +1 -0
- package/esm/DummyEditorView.js +243 -0
- package/esm/DummyEditorView.js.map +1 -0
- package/esm/Extension.d.ts +31 -0
- package/esm/Extension.d.ts.map +1 -0
- package/esm/Extension.js +35 -0
- package/esm/Extension.js.map +1 -0
- package/esm/ExtensionManager.d.ts +32 -0
- package/esm/ExtensionManager.d.ts.map +1 -0
- package/esm/ExtensionManager.js +223 -0
- package/esm/ExtensionManager.js.map +1 -0
- package/esm/Mark.d.ts +23 -0
- package/esm/Mark.d.ts.map +1 -0
- package/esm/Mark.js +28 -0
- package/esm/Mark.js.map +1 -0
- package/esm/Node.d.ts +32 -0
- package/esm/Node.d.ts.map +1 -0
- package/esm/Node.js +37 -0
- package/esm/Node.js.map +1 -0
- package/esm/commands/CommandManager.d.ts +24 -0
- package/esm/commands/CommandManager.d.ts.map +1 -0
- package/esm/commands/CommandManager.js +101 -0
- package/esm/commands/CommandManager.js.map +1 -0
- package/esm/commands/baseCommandFactories.d.ts +3 -0
- package/esm/commands/baseCommandFactories.d.ts.map +1 -0
- package/esm/commands/baseCommandFactories.js +862 -0
- package/esm/commands/baseCommandFactories.js.map +1 -0
- package/esm/commands/createChainableState.d.ts +3 -0
- package/esm/commands/createChainableState.d.ts.map +1 -0
- package/esm/commands/createChainableState.js +30 -0
- package/esm/commands/createChainableState.js.map +1 -0
- package/esm/commands/keyCommandFactories.d.ts +3 -0
- package/esm/commands/keyCommandFactories.d.ts.map +1 -0
- package/esm/commands/keyCommandFactories.js +11 -0
- package/esm/commands/keyCommandFactories.js.map +1 -0
- package/esm/commands/mod.d.ts +7 -0
- package/esm/commands/mod.d.ts.map +1 -0
- package/esm/commands/mod.js +82 -0
- package/esm/commands/mod.js.map +1 -0
- package/esm/commands/replaceCommandFactories.d.ts +3 -0
- package/esm/commands/replaceCommandFactories.d.ts.map +1 -0
- package/esm/commands/replaceCommandFactories.js +95 -0
- package/esm/commands/replaceCommandFactories.js.map +1 -0
- package/esm/commands/types.d.ts +22 -0
- package/esm/commands/types.d.ts.map +1 -0
- package/esm/commands/types.js +2 -0
- package/esm/commands/types.js.map +1 -0
- package/esm/mod.d.ts +9 -0
- package/esm/mod.d.ts.map +1 -0
- package/esm/mod.js +9 -0
- package/esm/mod.js.map +1 -0
- package/esm/nodeToTreeString.d.ts +10 -0
- package/esm/nodeToTreeString.d.ts.map +1 -0
- package/esm/nodeToTreeString.js +75 -0
- package/esm/nodeToTreeString.js.map +1 -0
- package/esm/package.json +3 -0
- package/esm/plugins/TrackSelecionPlugin.d.ts +6 -0
- package/esm/plugins/TrackSelecionPlugin.d.ts.map +1 -0
- package/esm/plugins/TrackSelecionPlugin.js +25 -0
- package/esm/plugins/TrackSelecionPlugin.js.map +1 -0
- package/esm/plugins/input-rules/InputRulesPlugin.d.ts +25 -0
- package/esm/plugins/input-rules/InputRulesPlugin.d.ts.map +1 -0
- package/esm/plugins/input-rules/InputRulesPlugin.js +169 -0
- package/esm/plugins/input-rules/InputRulesPlugin.js.map +1 -0
- package/esm/plugins/input-rules/mod.d.ts +3 -0
- package/esm/plugins/input-rules/mod.d.ts.map +1 -0
- package/esm/plugins/input-rules/mod.js +3 -0
- package/esm/plugins/input-rules/mod.js.map +1 -0
- package/esm/plugins/input-rules/rulebuilders.d.ts +6 -0
- package/esm/plugins/input-rules/rulebuilders.d.ts.map +1 -0
- package/esm/plugins/input-rules/rulebuilders.js +65 -0
- package/esm/plugins/input-rules/rulebuilders.js.map +1 -0
- package/esm/plugins/keymap/keymap.d.ts +12 -0
- package/esm/plugins/keymap/keymap.d.ts.map +1 -0
- package/esm/plugins/keymap/keymap.js +126 -0
- package/esm/plugins/keymap/keymap.js.map +1 -0
- package/esm/plugins/keymap/mod.d.ts +2 -0
- package/esm/plugins/keymap/mod.d.ts.map +1 -0
- package/esm/plugins/keymap/mod.js +2 -0
- package/esm/plugins/keymap/mod.js.map +1 -0
- package/esm/plugins/keymap/w3c-keyname.d.ts +4 -0
- package/esm/plugins/keymap/w3c-keyname.d.ts.map +1 -0
- package/esm/plugins/keymap/w3c-keyname.js +125 -0
- package/esm/plugins/keymap/w3c-keyname.js.map +1 -0
- package/esm/search/mod.d.ts +3 -0
- package/esm/search/mod.d.ts.map +1 -0
- package/esm/search/mod.js +3 -0
- package/esm/search/mod.js.map +1 -0
- package/esm/search/query.d.ts +45 -0
- package/esm/search/query.d.ts.map +1 -0
- package/esm/search/query.js +335 -0
- package/esm/search/query.js.map +1 -0
- package/esm/search/search.d.ts +32 -0
- package/esm/search/search.d.ts.map +1 -0
- package/esm/search/search.js +200 -0
- package/esm/search/search.js.map +1 -0
- package/esm/types.d.ts +59 -0
- package/esm/types.d.ts.map +1 -0
- package/esm/types.js +2 -0
- package/esm/types.js.map +1 -0
- package/esm/ui.d.ts +15 -0
- package/esm/ui.d.ts.map +1 -0
- package/esm/ui.js +17 -0
- package/esm/ui.js.map +1 -0
- package/esm/utilities/SmartOutput.d.ts +41 -0
- package/esm/utilities/SmartOutput.d.ts.map +1 -0
- package/esm/utilities/SmartOutput.js +202 -0
- package/esm/utilities/SmartOutput.js.map +1 -0
- package/esm/utilities/createNodeFromContent.d.ts +9 -0
- package/esm/utilities/createNodeFromContent.d.ts.map +1 -0
- package/esm/utilities/createNodeFromContent.js +33 -0
- package/esm/utilities/createNodeFromContent.js.map +1 -0
- package/esm/utilities/getHtmlAttributes.d.ts +9 -0
- package/esm/utilities/getHtmlAttributes.d.ts.map +1 -0
- package/esm/utilities/getHtmlAttributes.js +48 -0
- package/esm/utilities/getHtmlAttributes.js.map +1 -0
- package/esm/utilities/getShadowRoot.d.ts +2 -0
- package/esm/utilities/getShadowRoot.d.ts.map +1 -0
- package/esm/utilities/getShadowRoot.js +17 -0
- package/esm/utilities/getShadowRoot.js.map +1 -0
- package/esm/utilities/mod.d.ts +6 -0
- package/esm/utilities/mod.d.ts.map +1 -0
- package/esm/utilities/mod.js +6 -0
- package/esm/utilities/mod.js.map +1 -0
- package/esm/utilities/toRawTextResult.d.ts +3 -0
- package/esm/utilities/toRawTextResult.d.ts.map +1 -0
- package/esm/utilities/toRawTextResult.js +22 -0
- package/esm/utilities/toRawTextResult.js.map +1 -0
- package/package.json +5 -2
- package/src/CoreEditor.ts +277 -0
- package/src/DummyEditorView.ts +403 -0
- package/src/Extension.ts +63 -0
- package/src/ExtensionManager.ts +328 -0
- package/src/Mark.ts +47 -0
- package/src/Node.ts +66 -0
- package/src/commands/CommandManager.ts +145 -0
- package/src/commands/baseCommandFactories.ts +1103 -0
- package/src/commands/createChainableState.ts +36 -0
- package/src/commands/keyCommandFactories.ts +26 -0
- package/src/commands/mod.ts +104 -0
- package/src/commands/replaceCommandFactories.ts +129 -0
- package/src/commands/types.ts +30 -0
- package/src/mod.ts +8 -0
- package/src/nodeToTreeString.ts +100 -0
- package/src/plugins/TrackSelecionPlugin.ts +27 -0
- package/src/plugins/input-rules/InputRulesPlugin.ts +242 -0
- package/src/plugins/input-rules/mod.ts +2 -0
- package/src/plugins/input-rules/rulebuilders.ts +88 -0
- package/src/plugins/keymap/keymap.ts +117 -0
- package/src/plugins/keymap/mod.ts +1 -0
- package/src/plugins/keymap/w3c-keyname.ts +123 -0
- package/src/search/mod.ts +2 -0
- package/src/search/query.ts +412 -0
- package/src/search/search.ts +284 -0
- package/src/types.ts +71 -0
- package/src/ui.ts +35 -0
- package/src/utilities/SmartOutput.ts +284 -0
- package/src/utilities/createNodeFromContent.ts +66 -0
- package/src/utilities/getHtmlAttributes.ts +68 -0
- package/src/utilities/getShadowRoot.ts +18 -0
- package/src/utilities/mod.ts +5 -0
- package/src/utilities/toRawTextResult.ts +27 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { EditorState } from 'prosemirror-state';
|
|
2
|
+
import { Slice } from 'prosemirror-model';
|
|
3
|
+
export declare class SearchQuery {
|
|
4
|
+
readonly search: string;
|
|
5
|
+
readonly caseSensitive: boolean;
|
|
6
|
+
readonly literal: boolean;
|
|
7
|
+
readonly regexp: boolean;
|
|
8
|
+
readonly replace: string;
|
|
9
|
+
readonly valid: boolean;
|
|
10
|
+
readonly wholeWord: boolean;
|
|
11
|
+
readonly filter: ((state: EditorState, result: SearchResult) => boolean) | null;
|
|
12
|
+
impl: QueryImpl;
|
|
13
|
+
constructor(config: {
|
|
14
|
+
search: string;
|
|
15
|
+
caseSensitive?: boolean;
|
|
16
|
+
literal?: boolean;
|
|
17
|
+
regexp?: boolean;
|
|
18
|
+
replace?: string;
|
|
19
|
+
wholeWord?: boolean;
|
|
20
|
+
filter?: (state: EditorState, result: SearchResult) => boolean;
|
|
21
|
+
});
|
|
22
|
+
eq(other: SearchQuery): boolean;
|
|
23
|
+
findNext(state: EditorState, from?: number, to?: number): SearchResult | null;
|
|
24
|
+
findPrev(state: EditorState, from?: number, to?: number): SearchResult | null;
|
|
25
|
+
checkResult(state: EditorState, result: SearchResult): boolean;
|
|
26
|
+
unquote(string: string): string;
|
|
27
|
+
getReplacements(state: EditorState, result: SearchResult): {
|
|
28
|
+
from: number;
|
|
29
|
+
to: number;
|
|
30
|
+
insert: Slice;
|
|
31
|
+
}[];
|
|
32
|
+
}
|
|
33
|
+
export interface SearchResult {
|
|
34
|
+
from: number;
|
|
35
|
+
to: number;
|
|
36
|
+
match: RegExpMatchArray | null;
|
|
37
|
+
matchStart: number;
|
|
38
|
+
}
|
|
39
|
+
interface QueryImpl {
|
|
40
|
+
findNext(state: EditorState, from: number, to: number): SearchResult | null;
|
|
41
|
+
findPrev(state: EditorState, from: number, to: number): SearchResult | null;
|
|
42
|
+
}
|
|
43
|
+
export declare function validRegExp(source: string): boolean;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/search/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAkB,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1D,qBAAa,WAAW;IAEtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAIhC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAG1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAGzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAGxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B,QAAQ,CAAC,MAAM,EACX,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,GACvD,IAAI,CAAC;IAGT,IAAI,EAAE,SAAS,CAAC;gBAGJ,MAAM,EAAE;QAElB,MAAM,EAAE,MAAM,CAAC;QAEf,aAAa,CAAC,EAAE,OAAO,CAAC;QAIxB,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB,MAAM,CAAC,EAAE,OAAO,CAAC;QAEjB,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB,SAAS,CAAC,EAAE,OAAO,CAAC;QAGpB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC;KAChE;IAiBD,EAAE,CAAC,KAAK,EAAE,WAAW;IAQrB,QAAQ,CACN,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,MAAU,EAChB,EAAE,GAAE,MAA+B;IAYrC,QAAQ,CACN,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,MAA+B,EACrC,EAAE,GAAE,MAAU;IAWhB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY;IAQpD,OAAO,CAAC,MAAM,EAAE,MAAM;IAgBtB,eAAe,CACb,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,YAAY,GACnB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAA;KAAE,EAAE;CAuCjD;AAID,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IAC5E,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;CAC7E;AA8JD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,WAOzC"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import { Fragment, Slice } from 'prosemirror-model';
|
|
2
|
+
export class SearchQuery {
|
|
3
|
+
/// The search string (or regular expression).
|
|
4
|
+
search;
|
|
5
|
+
/// Indicates whether the search is case-sensitive.
|
|
6
|
+
caseSensitive;
|
|
7
|
+
/// By default, string search will replace `\n`, `\r`, and `\t` in
|
|
8
|
+
/// the query with newline, return, and tab characters. When this
|
|
9
|
+
/// is set to true, that behavior is disabled.
|
|
10
|
+
literal;
|
|
11
|
+
/// When true, the search string is interpreted as a regular
|
|
12
|
+
/// expression.
|
|
13
|
+
regexp;
|
|
14
|
+
/// The replace text, or the empty string if no replace text has
|
|
15
|
+
/// been given.
|
|
16
|
+
replace;
|
|
17
|
+
/// Whether this query is non-empty and, in case of a regular
|
|
18
|
+
/// expression search, syntactically valid.
|
|
19
|
+
valid;
|
|
20
|
+
/// When true, matches that contain words are ignored when there are
|
|
21
|
+
/// further word characters around them.
|
|
22
|
+
wholeWord;
|
|
23
|
+
/// An optional filter that causes some results to be ignored.
|
|
24
|
+
filter;
|
|
25
|
+
/// @internal
|
|
26
|
+
impl;
|
|
27
|
+
/// Create a query object.
|
|
28
|
+
constructor(config) {
|
|
29
|
+
this.search = config.search;
|
|
30
|
+
this.caseSensitive = !!config.caseSensitive;
|
|
31
|
+
this.literal = !!config.literal;
|
|
32
|
+
this.regexp = !!config.regexp;
|
|
33
|
+
this.replace = config.replace || '';
|
|
34
|
+
this.valid = !!this.search && !(this.regexp && !validRegExp(this.search));
|
|
35
|
+
this.wholeWord = !!config.wholeWord;
|
|
36
|
+
this.filter = config.filter || null;
|
|
37
|
+
this.impl = !this.valid
|
|
38
|
+
? nullQuery
|
|
39
|
+
: this.regexp
|
|
40
|
+
? new RegExpQuery(this)
|
|
41
|
+
: new StringQuery(this);
|
|
42
|
+
}
|
|
43
|
+
/// Compare this query to another query.
|
|
44
|
+
eq(other) {
|
|
45
|
+
return this.search == other.search && this.replace == other.replace &&
|
|
46
|
+
this.caseSensitive == other.caseSensitive &&
|
|
47
|
+
this.regexp == other.regexp &&
|
|
48
|
+
this.wholeWord == other.wholeWord;
|
|
49
|
+
}
|
|
50
|
+
/// Find the next occurrence of this query in the given range.
|
|
51
|
+
findNext(state, from = 0, to = state.doc.content.size) {
|
|
52
|
+
for (;;) {
|
|
53
|
+
if (from >= to)
|
|
54
|
+
return null;
|
|
55
|
+
let result = this.impl.findNext(state, from, to);
|
|
56
|
+
if (!result || this.checkResult(state, result))
|
|
57
|
+
return result;
|
|
58
|
+
from = result.from + 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/// Find the previous occurrence of this query in the given range.
|
|
62
|
+
/// Note that, if `to` is given, it should be _less_ than `from`.
|
|
63
|
+
findPrev(state, from = state.doc.content.size, to = 0) {
|
|
64
|
+
for (;;) {
|
|
65
|
+
if (from <= to)
|
|
66
|
+
return null;
|
|
67
|
+
let result = this.impl.findPrev(state, from, to);
|
|
68
|
+
if (!result || this.checkResult(state, result))
|
|
69
|
+
return result;
|
|
70
|
+
from = result.to - 1;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/// @internal
|
|
74
|
+
checkResult(state, result) {
|
|
75
|
+
return (!this.wholeWord ||
|
|
76
|
+
checkWordBoundary(state, result.from) &&
|
|
77
|
+
checkWordBoundary(state, result.to)) &&
|
|
78
|
+
(!this.filter || this.filter(state, result));
|
|
79
|
+
}
|
|
80
|
+
/// @internal
|
|
81
|
+
unquote(string) {
|
|
82
|
+
return this.literal
|
|
83
|
+
? string
|
|
84
|
+
: string.replace(/\\([nrt\\])/g, (_, ch) => ch == 'n' ? '\n' : ch == 'r' ? '\r' : ch == 't' ? '\t' : '\\');
|
|
85
|
+
}
|
|
86
|
+
/// Get the ranges that should be replaced for this result. This can
|
|
87
|
+
/// return multiple ranges when `this.replace` contains
|
|
88
|
+
/// `$1`/`$&`-style placeholders, in which case the preserved
|
|
89
|
+
/// content is skipped by the replacements.
|
|
90
|
+
///
|
|
91
|
+
/// Ranges are sorted by position, and `from`/`to` positions all
|
|
92
|
+
/// refer to positions in `state.doc`. When applying these, you'll
|
|
93
|
+
/// want to either apply them from back to front, or map these
|
|
94
|
+
/// positions through your transaction's current mapping.
|
|
95
|
+
getReplacements(state, result) {
|
|
96
|
+
let $from = state.doc.resolve(result.from);
|
|
97
|
+
let marks = $from.marksAcross(state.doc.resolve(result.to));
|
|
98
|
+
let ranges = [];
|
|
99
|
+
let frag = Fragment.empty, pos = result.from, { match } = result;
|
|
100
|
+
let groups = match
|
|
101
|
+
? getGroupIndices(match)
|
|
102
|
+
: [[0, result.to - result.from]];
|
|
103
|
+
let replParts = parseReplacement(this.unquote(this.replace)), groupSpan;
|
|
104
|
+
for (let part of replParts) {
|
|
105
|
+
if (typeof part == 'string') { // Replacement text
|
|
106
|
+
frag = frag.addToEnd(state.schema.text(part, marks));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
groupSpan = groups[part.group];
|
|
110
|
+
if (groupSpan) {
|
|
111
|
+
let from = result.matchStart + groupSpan[0], to = result.matchStart + groupSpan[1];
|
|
112
|
+
if (part.copy) { // Copied content
|
|
113
|
+
frag = frag.append(state.doc.slice(from, to).content);
|
|
114
|
+
}
|
|
115
|
+
else { // Skipped content
|
|
116
|
+
if (frag != Fragment.empty || from > pos) {
|
|
117
|
+
ranges.push({
|
|
118
|
+
from: pos,
|
|
119
|
+
to: from,
|
|
120
|
+
insert: new Slice(frag, 0, 0),
|
|
121
|
+
});
|
|
122
|
+
frag = Fragment.empty;
|
|
123
|
+
}
|
|
124
|
+
pos = to;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (frag != Fragment.empty || pos < result.to) {
|
|
130
|
+
ranges.push({ from: pos, to: result.to, insert: new Slice(frag, 0, 0) });
|
|
131
|
+
}
|
|
132
|
+
return ranges;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const nullQuery = new class {
|
|
136
|
+
findNext() {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
findPrev() {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}();
|
|
143
|
+
class StringQuery {
|
|
144
|
+
query;
|
|
145
|
+
string;
|
|
146
|
+
constructor(query) {
|
|
147
|
+
this.query = query;
|
|
148
|
+
let string = query.unquote(query.search);
|
|
149
|
+
if (!query.caseSensitive)
|
|
150
|
+
string = string.toLowerCase();
|
|
151
|
+
this.string = string;
|
|
152
|
+
}
|
|
153
|
+
findNext(state, from, to) {
|
|
154
|
+
return scanTextblocks(state.doc, from, to, (node, start) => {
|
|
155
|
+
let off = Math.max(from, start);
|
|
156
|
+
let content = textContent(node).slice(off - start, Math.min(node.content.size, to - start));
|
|
157
|
+
let index = (this.query.caseSensitive ? content : content.toLowerCase())
|
|
158
|
+
.indexOf(this.string);
|
|
159
|
+
return index < 0 ? null : {
|
|
160
|
+
from: off + index,
|
|
161
|
+
to: off + index + this.string.length,
|
|
162
|
+
match: null,
|
|
163
|
+
matchStart: start,
|
|
164
|
+
};
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
findPrev(state, from, to) {
|
|
168
|
+
return scanTextblocks(state.doc, from, to, (node, start) => {
|
|
169
|
+
let off = Math.max(start, to);
|
|
170
|
+
let content = textContent(node).slice(off - start, Math.min(node.content.size, from - start));
|
|
171
|
+
if (!this.query.caseSensitive)
|
|
172
|
+
content = content.toLowerCase();
|
|
173
|
+
let index = content.lastIndexOf(this.string);
|
|
174
|
+
return index < 0 ? null : {
|
|
175
|
+
from: off + index,
|
|
176
|
+
to: off + index + this.string.length,
|
|
177
|
+
match: null,
|
|
178
|
+
matchStart: start,
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const baseFlags = 'g' + (/x/.unicode == null ? '' : 'u') +
|
|
184
|
+
(/x/.hasIndices == null ? '' : 'd');
|
|
185
|
+
class RegExpQuery {
|
|
186
|
+
query;
|
|
187
|
+
regexp;
|
|
188
|
+
constructor(query) {
|
|
189
|
+
this.query = query;
|
|
190
|
+
this.regexp = new RegExp(query.search, baseFlags + (query.caseSensitive ? '' : 'i'));
|
|
191
|
+
}
|
|
192
|
+
findNext(state, from, to) {
|
|
193
|
+
return scanTextblocks(state.doc, from, to, (node, start) => {
|
|
194
|
+
let content = textContent(node).slice(0, Math.min(node.content.size, to - start));
|
|
195
|
+
this.regexp.lastIndex = from - start;
|
|
196
|
+
let match = this.regexp.exec(content);
|
|
197
|
+
return match
|
|
198
|
+
? {
|
|
199
|
+
from: start + match.index,
|
|
200
|
+
to: start + match.index + match[0].length,
|
|
201
|
+
match,
|
|
202
|
+
matchStart: start,
|
|
203
|
+
}
|
|
204
|
+
: null;
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
findPrev(state, from, to) {
|
|
208
|
+
return scanTextblocks(state.doc, from, to, (node, start) => {
|
|
209
|
+
let content = textContent(node).slice(0, Math.min(node.content.size, from - start));
|
|
210
|
+
let match;
|
|
211
|
+
for (let off = 0;;) {
|
|
212
|
+
this.regexp.lastIndex = off;
|
|
213
|
+
let next = this.regexp.exec(content);
|
|
214
|
+
if (!next)
|
|
215
|
+
break;
|
|
216
|
+
match = next;
|
|
217
|
+
off = next.index + 1;
|
|
218
|
+
}
|
|
219
|
+
return match
|
|
220
|
+
? {
|
|
221
|
+
from: start + match.index,
|
|
222
|
+
to: start + match.index + match[0].length,
|
|
223
|
+
match,
|
|
224
|
+
matchStart: start,
|
|
225
|
+
}
|
|
226
|
+
: null;
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
function getGroupIndices(match) {
|
|
231
|
+
if (match.indices)
|
|
232
|
+
return match.indices;
|
|
233
|
+
let result = [[0, match[0].length]];
|
|
234
|
+
for (let i = 1, pos = 0; i < match.length; i++) {
|
|
235
|
+
let found = match[i] ? match[0].indexOf(match[i], pos) : -1;
|
|
236
|
+
result.push(found < 0 ? undefined : [found, pos = found + match[i].length]);
|
|
237
|
+
}
|
|
238
|
+
return result;
|
|
239
|
+
}
|
|
240
|
+
function parseReplacement(text) {
|
|
241
|
+
let result = [], highestSeen = -1;
|
|
242
|
+
function add(text) {
|
|
243
|
+
let last = result.length - 1;
|
|
244
|
+
if (last > -1 && typeof result[last] == 'string')
|
|
245
|
+
result[last] += text;
|
|
246
|
+
else
|
|
247
|
+
result.push(text);
|
|
248
|
+
}
|
|
249
|
+
while (text.length) {
|
|
250
|
+
let m = /\$([$&\d+])/.exec(text);
|
|
251
|
+
if (!m) {
|
|
252
|
+
add(text);
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
if (m.index > 0)
|
|
256
|
+
add(text.slice(0, m.index + (m[1] == '$' ? 1 : 0)));
|
|
257
|
+
if (m[1] != '$') {
|
|
258
|
+
let n = m[1] == '&' ? 0 : +m[1];
|
|
259
|
+
if (highestSeen >= n) {
|
|
260
|
+
result.push({ group: n, copy: true });
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
highestSeen = n || 1000;
|
|
264
|
+
result.push({ group: n, copy: false });
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
text = text.slice(m.index + m[0].length);
|
|
268
|
+
}
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
export function validRegExp(source) {
|
|
272
|
+
try {
|
|
273
|
+
new RegExp(source, baseFlags);
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
const TextContentCache = new WeakMap();
|
|
281
|
+
function textContent(node) {
|
|
282
|
+
let cached = TextContentCache.get(node);
|
|
283
|
+
if (cached)
|
|
284
|
+
return cached;
|
|
285
|
+
let content = '';
|
|
286
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
287
|
+
let child = node.child(i);
|
|
288
|
+
if (child.isText)
|
|
289
|
+
content += child.text;
|
|
290
|
+
else if (child.isLeaf)
|
|
291
|
+
content += '\ufffc';
|
|
292
|
+
else
|
|
293
|
+
content += ' ' + textContent(child) + ' ';
|
|
294
|
+
}
|
|
295
|
+
TextContentCache.set(node, content);
|
|
296
|
+
return content;
|
|
297
|
+
}
|
|
298
|
+
function scanTextblocks(node, from, to, f, nodeStart = 0) {
|
|
299
|
+
if (node.inlineContent) {
|
|
300
|
+
return f(node, nodeStart);
|
|
301
|
+
}
|
|
302
|
+
else if (!node.isLeaf) {
|
|
303
|
+
if (from > to) {
|
|
304
|
+
for (let i = node.childCount - 1, pos = nodeStart + node.content.size; i >= 0 && pos > to; i--) {
|
|
305
|
+
let child = node.child(i);
|
|
306
|
+
pos -= child.nodeSize;
|
|
307
|
+
if (pos < from) {
|
|
308
|
+
let result = scanTextblocks(child, from, to, f, pos + 1);
|
|
309
|
+
if (result != null)
|
|
310
|
+
return result;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
for (let i = 0, pos = nodeStart; i < node.childCount && pos < to; i++) {
|
|
316
|
+
let child = node.child(i), start = pos;
|
|
317
|
+
pos += child.nodeSize;
|
|
318
|
+
if (pos > from) {
|
|
319
|
+
let result = scanTextblocks(child, from, to, f, start + 1);
|
|
320
|
+
if (result != null)
|
|
321
|
+
return result;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
function checkWordBoundary(state, pos) {
|
|
329
|
+
let $pos = state.doc.resolve(pos);
|
|
330
|
+
let before = $pos.nodeBefore, after = $pos.nodeAfter;
|
|
331
|
+
if (!before || !after || !before.isText || !after.isText)
|
|
332
|
+
return true;
|
|
333
|
+
return !/\p{L}$/u.test(before.text) || !/^\p{L}/u.test(after.text);
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/search/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { EditorState, Plugin, Transaction } from 'prosemirror-state';
|
|
2
|
+
import { DecorationSet } from 'prosemirror-view';
|
|
3
|
+
import { type Command } from '../commands/types.js';
|
|
4
|
+
import { SearchQuery } from './query.js';
|
|
5
|
+
export declare function search(options?: {
|
|
6
|
+
initialQuery?: SearchQuery;
|
|
7
|
+
initialRange?: {
|
|
8
|
+
from: number;
|
|
9
|
+
to: number;
|
|
10
|
+
};
|
|
11
|
+
}): Plugin;
|
|
12
|
+
export declare function getSearchState(state: EditorState): {
|
|
13
|
+
query: SearchQuery;
|
|
14
|
+
range: {
|
|
15
|
+
from: number;
|
|
16
|
+
to: number;
|
|
17
|
+
} | null;
|
|
18
|
+
} | undefined;
|
|
19
|
+
export declare function getMatchHighlights(state: EditorState): DecorationSet;
|
|
20
|
+
export declare function setSearchState(tr: Transaction, query: SearchQuery, range?: {
|
|
21
|
+
from: number;
|
|
22
|
+
to: number;
|
|
23
|
+
} | null): Transaction;
|
|
24
|
+
export declare const findNext: Command;
|
|
25
|
+
export declare const findNextNoWrap: Command;
|
|
26
|
+
export declare const findPrev: Command;
|
|
27
|
+
export declare const findPrevNoWrap: Command;
|
|
28
|
+
export declare const replaceNext: Command;
|
|
29
|
+
export declare const replaceNextNoWrap: Command;
|
|
30
|
+
export declare const replaceCurrent: Command;
|
|
31
|
+
export declare const replaceAll: Command;
|
|
32
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/search/search.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,MAAM,EAGN,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAqCvD,wBAAgB,MAAM,CACpB,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC,GACL,MAAM,CA8CR;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG;IAClD,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5C,GAAG,SAAS,CAEZ;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,iBAGpD;AAID,wBAAgB,cAAc,CAC5B,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,WAAW,EAClB,KAAK,GAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAW,eAGlD;AA6DD,eAAO,MAAM,QAAQ,SAAuB,CAAC;AAI7C,eAAO,MAAM,cAAc,SAAwB,CAAC;AAIpD,eAAO,MAAM,QAAQ,SAAwB,CAAC;AAK9C,eAAO,MAAM,cAAc,SAAyB,CAAC;AAkDrD,eAAO,MAAM,WAAW,SAA6B,CAAC;AAItD,eAAO,MAAM,iBAAiB,SAA8B,CAAC;AAI7D,eAAO,MAAM,cAAc,SAA+B,CAAC;AAG3D,eAAO,MAAM,UAAU,EAAE,OAwBxB,CAAC"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { Plugin, PluginKey, TextSelection, } from 'prosemirror-state';
|
|
2
|
+
import { Decoration, DecorationSet } from 'prosemirror-view';
|
|
3
|
+
import { SearchQuery } from './query.js';
|
|
4
|
+
class SearchState {
|
|
5
|
+
query;
|
|
6
|
+
range;
|
|
7
|
+
deco;
|
|
8
|
+
constructor(query, range, deco) {
|
|
9
|
+
this.query = query;
|
|
10
|
+
this.range = range;
|
|
11
|
+
this.deco = deco;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function buildMatchDeco(state, query, range) {
|
|
15
|
+
if (!query.valid)
|
|
16
|
+
return DecorationSet.empty;
|
|
17
|
+
let deco = [];
|
|
18
|
+
let sel = state.selection;
|
|
19
|
+
for (let pos = range ? range.from : 0, end = range ? range.to : state.doc.content.size;;) {
|
|
20
|
+
let next = query.findNext(state, pos, end);
|
|
21
|
+
if (!next)
|
|
22
|
+
break;
|
|
23
|
+
let cls = next.from == sel.from && next.to == sel.to
|
|
24
|
+
? 'kb-active-search-match'
|
|
25
|
+
: 'kb-search-match';
|
|
26
|
+
deco.push(Decoration.inline(next.from, next.to, { class: cls }));
|
|
27
|
+
pos = next.to;
|
|
28
|
+
}
|
|
29
|
+
return DecorationSet.create(state.doc, deco);
|
|
30
|
+
}
|
|
31
|
+
const searchKey = new PluginKey('search');
|
|
32
|
+
/// Returns a plugin that stores a current search query and searched
|
|
33
|
+
/// range, and highlights matches of the query.
|
|
34
|
+
export function search(options = {}) {
|
|
35
|
+
return new Plugin({
|
|
36
|
+
key: searchKey,
|
|
37
|
+
state: {
|
|
38
|
+
init(_config, state) {
|
|
39
|
+
let query = options.initialQuery || new SearchQuery({ search: '' });
|
|
40
|
+
let range = options.initialRange || null;
|
|
41
|
+
return new SearchState(query, range, buildMatchDeco(state, query, range));
|
|
42
|
+
},
|
|
43
|
+
apply(tr, search, _oldState, state) {
|
|
44
|
+
let set = tr.getMeta(searchKey);
|
|
45
|
+
if (set) {
|
|
46
|
+
return new SearchState(set.query, set.range, buildMatchDeco(state, set.query, set.range));
|
|
47
|
+
}
|
|
48
|
+
if (tr.docChanged || tr.selectionSet) {
|
|
49
|
+
let range = search.range;
|
|
50
|
+
if (range) {
|
|
51
|
+
let from = tr.mapping.map(range.from, 1);
|
|
52
|
+
let to = tr.mapping.map(range.to, -1);
|
|
53
|
+
range = from < to ? { from, to } : null;
|
|
54
|
+
}
|
|
55
|
+
search = new SearchState(search.query, range, buildMatchDeco(state, search.query, range));
|
|
56
|
+
}
|
|
57
|
+
return search;
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
props: {
|
|
61
|
+
decorations: (state) => searchKey.getState(state).deco,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/// Get the current active search query and searched range. Will
|
|
66
|
+
/// return `undefined` is the search plugin isn't active.
|
|
67
|
+
export function getSearchState(state) {
|
|
68
|
+
return searchKey.getState(state);
|
|
69
|
+
}
|
|
70
|
+
/// Access the decoration set holding the currently highlighted search
|
|
71
|
+
/// matches in the document.
|
|
72
|
+
export function getMatchHighlights(state) {
|
|
73
|
+
let search = searchKey.getState(state);
|
|
74
|
+
return search ? search.deco : DecorationSet.empty;
|
|
75
|
+
}
|
|
76
|
+
/// Add metadata to a transaction that updates the active search query
|
|
77
|
+
/// and searched range, when dispatched.
|
|
78
|
+
export function setSearchState(tr, query, range = null) {
|
|
79
|
+
return tr.setMeta(searchKey, { query, range });
|
|
80
|
+
}
|
|
81
|
+
function nextMatch(search, state, wrap, curFrom, curTo) {
|
|
82
|
+
let range = search.range || { from: 0, to: state.doc.content.size };
|
|
83
|
+
let next = search.query.findNext(state, Math.max(curTo, range.from), range.to);
|
|
84
|
+
if (!next && wrap) {
|
|
85
|
+
next = search.query.findNext(state, range.from, Math.min(curFrom, range.to));
|
|
86
|
+
}
|
|
87
|
+
return next;
|
|
88
|
+
}
|
|
89
|
+
function prevMatch(search, state, wrap, curFrom, curTo) {
|
|
90
|
+
let range = search.range || { from: 0, to: state.doc.content.size };
|
|
91
|
+
let prev = search.query.findPrev(state, Math.min(curFrom, range.to), range.from);
|
|
92
|
+
if (!prev && wrap) {
|
|
93
|
+
prev = search.query.findPrev(state, range.to, Math.max(curTo, range.from));
|
|
94
|
+
}
|
|
95
|
+
return prev;
|
|
96
|
+
}
|
|
97
|
+
function findCommand(wrap, dir) {
|
|
98
|
+
return (state, dispatch) => {
|
|
99
|
+
let search = searchKey.getState(state);
|
|
100
|
+
if (!search || !search.query.valid)
|
|
101
|
+
return false;
|
|
102
|
+
let { from, to } = state.selection;
|
|
103
|
+
let next = dir > 0
|
|
104
|
+
? nextMatch(search, state, wrap, from, to)
|
|
105
|
+
: prevMatch(search, state, wrap, from, to);
|
|
106
|
+
if (!next)
|
|
107
|
+
return false;
|
|
108
|
+
let selection = TextSelection.create(state.doc, next.from, next.to);
|
|
109
|
+
if (dispatch)
|
|
110
|
+
dispatch(state.tr.setSelection(selection).scrollIntoView());
|
|
111
|
+
return true;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/// Find the next instance of the search query after the current
|
|
115
|
+
/// selection and move the selection to it.
|
|
116
|
+
export const findNext = findCommand(true, 1);
|
|
117
|
+
/// Find the next instance of the search query and move the selection
|
|
118
|
+
/// to it. Don't wrap around at the end of document or search range.
|
|
119
|
+
export const findNextNoWrap = findCommand(false, 1);
|
|
120
|
+
/// Find the previous instance of the search query and move the
|
|
121
|
+
/// selection to it.
|
|
122
|
+
export const findPrev = findCommand(true, -1);
|
|
123
|
+
/// Find the previous instance of the search query and move the
|
|
124
|
+
/// selection to it. Don't wrap at the start of the document or search
|
|
125
|
+
/// range.
|
|
126
|
+
export const findPrevNoWrap = findCommand(false, -1);
|
|
127
|
+
function replaceCommand(wrap, moveForward) {
|
|
128
|
+
return (state, dispatch) => {
|
|
129
|
+
let search = searchKey.getState(state);
|
|
130
|
+
if (!search || !search.query.valid)
|
|
131
|
+
return false;
|
|
132
|
+
let { from } = state.selection;
|
|
133
|
+
let next = nextMatch(search, state, wrap, from, from);
|
|
134
|
+
if (!next)
|
|
135
|
+
return false;
|
|
136
|
+
if (!dispatch)
|
|
137
|
+
return true;
|
|
138
|
+
if (state.selection.from == next.from && state.selection.to == next.to) {
|
|
139
|
+
let tr = state.tr, replacements = search.query.getReplacements(state, next);
|
|
140
|
+
for (let i = replacements.length - 1; i >= 0; i--) {
|
|
141
|
+
let { from, to, insert } = replacements[i];
|
|
142
|
+
tr.replace(from, to, insert);
|
|
143
|
+
}
|
|
144
|
+
let after = moveForward &&
|
|
145
|
+
nextMatch(search, state, wrap, next.from, next.to);
|
|
146
|
+
if (after) {
|
|
147
|
+
tr.setSelection(TextSelection.create(tr.doc, tr.mapping.map(after.from, 1), tr.mapping.map(after.to, -1)));
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
tr.setSelection(TextSelection.create(tr.doc, next.from, tr.mapping.map(next.to, 1)));
|
|
151
|
+
}
|
|
152
|
+
dispatch(tr.scrollIntoView());
|
|
153
|
+
}
|
|
154
|
+
else if (!moveForward) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
dispatch(state.tr.setSelection(TextSelection.create(state.doc, next.from, next.to)).scrollIntoView());
|
|
159
|
+
}
|
|
160
|
+
return true;
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/// Replace the currently selected instance of the search query, and
|
|
164
|
+
/// move to the next one. Or select the next match, if none is already
|
|
165
|
+
/// selected.
|
|
166
|
+
export const replaceNext = replaceCommand(true, true);
|
|
167
|
+
/// Replace the next instance of the search query. Don't wrap around
|
|
168
|
+
/// at the end of the document.
|
|
169
|
+
export const replaceNextNoWrap = replaceCommand(false, true);
|
|
170
|
+
/// Replace the currently selected instance of the search query, if
|
|
171
|
+
/// any, and keep it selected.
|
|
172
|
+
export const replaceCurrent = replaceCommand(false, false);
|
|
173
|
+
/// Replace all instances of the search query.
|
|
174
|
+
export const replaceAll = (state, dispatch) => {
|
|
175
|
+
let search = searchKey.getState(state);
|
|
176
|
+
if (!search)
|
|
177
|
+
return false;
|
|
178
|
+
let matches = [], range = search.range || { from: 0, to: state.doc.content.size };
|
|
179
|
+
for (let pos = range.from;;) {
|
|
180
|
+
let next = search.query.findNext(state, pos, range.to);
|
|
181
|
+
if (!next)
|
|
182
|
+
break;
|
|
183
|
+
matches.push(next);
|
|
184
|
+
pos = next.to;
|
|
185
|
+
}
|
|
186
|
+
if (dispatch) {
|
|
187
|
+
let tr = state.tr;
|
|
188
|
+
for (let i = matches.length - 1; i >= 0; i--) {
|
|
189
|
+
let match = matches[i];
|
|
190
|
+
let replacements = search.query.getReplacements(state, match);
|
|
191
|
+
for (let j = replacements.length - 1; j >= 0; j--) {
|
|
192
|
+
let { from, to, insert } = replacements[j];
|
|
193
|
+
tr.replace(from, to, insert);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
dispatch(tr);
|
|
197
|
+
}
|
|
198
|
+
return true;
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/search/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EACN,SAAS,EACT,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW;IAEJ;IACA;IACA;IAHX,YACW,KAAkB,EAClB,KAA0C,EAC1C,IAAmB;QAFnB,UAAK,GAAL,KAAK,CAAa;QAClB,UAAK,GAAL,KAAK,CAAqC;QAC1C,SAAI,GAAJ,IAAI,CAAe;IAC3B,CAAC;CACL;AAED,SAAS,cAAc,CACrB,KAAkB,EAClB,KAAkB,EAClB,KAA0C;IAE1C,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC;IAC7C,IAAI,IAAI,GAAiB,EAAE,CAAC;IAC5B,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;IAC1B,KACE,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC9B,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IACjD,CAAC;QACD,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE;YAClD,CAAC,CAAC,wBAAwB;YAC1B,CAAC,CAAC,iBAAiB,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACjE,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,SAAS,GAA2B,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;AAElE,oEAAoE;AACpE,+CAA+C;AAC/C,MAAM,UAAU,MAAM,CACpB,UAGI,EAAE;IAEN,OAAO,IAAI,MAAM,CAAc;QAC7B,GAAG,EAAE,SAAS;QACd,KAAK,EAAE;YACL,IAAI,CAAC,OAAO,EAAE,KAAK;gBACjB,IAAI,KAAK,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpE,IAAI,KAAK,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;gBACzC,OAAO,IAAI,WAAW,CACpB,KAAK,EACL,KAAK,EACL,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CACpC,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK;gBAChC,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAGjB,CAAC;gBACd,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,IAAI,WAAW,CACpB,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,KAAK,EACT,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAC5C,CAAC;gBACJ,CAAC;gBAED,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;oBACrC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;oBACzB,IAAI,KAAK,EAAE,CAAC;wBACV,IAAI,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBACzC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;wBACtC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC1C,CAAC;oBACD,MAAM,GAAG,IAAI,WAAW,CACtB,MAAM,CAAC,KAAK,EACZ,KAAK,EACL,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAC3C,CAAC;gBACJ,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;SACF;QACD,KAAK,EAAE;YACL,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,IAAI;SACxD;KACF,CAAC,CAAC;AACL,CAAC;AAED,gEAAgE;AAChE,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,KAAkB;IAI/C,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,sEAAsE;AACtE,4BAA4B;AAC5B,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,IAAI,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;AACpD,CAAC;AAED,sEAAsE;AACtE,wCAAwC;AACxC,MAAM,UAAU,cAAc,CAC5B,EAAe,EACf,KAAkB,EAClB,QAA6C,IAAI;IAEjD,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,SAAS,CAChB,MAAmB,EACnB,KAAkB,EAClB,IAAa,EACb,OAAe,EACf,KAAa;IAEb,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACpE,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAC9B,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAC3B,KAAK,CAAC,EAAE,CACT,CAAC;IACF,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAC1B,KAAK,EACL,KAAK,CAAC,IAAI,EACV,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAC5B,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAChB,MAAmB,EACnB,KAAkB,EAClB,IAAa,EACb,OAAe,EACf,KAAa;IAEb,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACpE,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAC9B,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,EAC3B,KAAK,CAAC,IAAI,CACX,CAAC;IACF,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,IAAa,EAAE,GAAW;IAC7C,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACzB,IAAI,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;QACnC,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC;YAChB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YAC1C,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,QAAQ;YAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAE7C,qEAAqE;AACrE,oEAAoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAEpD,+DAA+D;AAC/D,oBAAoB;AACpB,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9C,+DAA+D;AAC/D,sEAAsE;AACtE,UAAU;AACV,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAErD,SAAS,cAAc,CAAC,IAAa,EAAE,WAAoB;IACzD,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACzB,IAAI,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;QAC/B,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACvE,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,EACf,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC3D,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC3C,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,KAAK,GAAG,WAAW;gBACrB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,KAAK,EAAE,CAAC;gBACV,EAAE,CAAC,YAAY,CACb,aAAa,CAAC,MAAM,CAClB,EAAE,CAAC,GAAG,EACN,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAC7B,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAC7B,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,YAAY,CACb,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CACpE,CAAC;YACJ,CAAC;YACD,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,CAAC;YACN,QAAQ,CACN,KAAK,CAAC,EAAE,CAAC,YAAY,CACnB,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CACpD,CAAC,cAAc,EAAE,CACnB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,sEAAsE;AACtE,aAAa;AACb,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAEtD,oEAAoE;AACpE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAE7D,mEAAmE;AACnE,8BAA8B;AAC9B,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAE3D,8CAA8C;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IACrD,IAAI,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,OAAO,GAAmB,EAAE,EAC9B,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAClE,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC;QAC5B,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC9D,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC3C,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|