Skip to content

Commit 72f2aaf

Browse files
committed
Fix regex replacement
Signed-off-by: Tyler Ohlsen <ohltyler@amazon.com>
1 parent cc06f23 commit 72f2aaf

File tree

3 files changed

+147
-71
lines changed

3 files changed

+147
-71
lines changed

public/pages/workflow_detail/tools/resources/resource_flyout_content.tsx

+47-1
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,13 @@ import {
1313
EuiEmptyPrompt,
1414
EuiHealth,
1515
EuiSpacer,
16+
EuiLink,
1617
} from '@elastic/eui';
17-
import { WORKFLOW_STEP_TYPE, WorkflowResource } from '../../../../../common';
18+
import {
19+
SEARCH_PIPELINE_DOCS_LINK,
20+
WORKFLOW_STEP_TYPE,
21+
WorkflowResource,
22+
} from '../../../../../common';
1823

1924
interface ResourceFlyoutContentProps {
2025
resource: WorkflowResource;
@@ -75,6 +80,47 @@ export function ResourceFlyoutContent(props: ResourceFlyoutContentProps) {
7580
/>
7681
)}
7782
</EuiFlexItem>
83+
<EuiSpacer size="s" />
84+
<EuiFlexItem grow={false}>
85+
<EuiTitle size="s">
86+
<h4>
87+
{props.resource?.stepType ===
88+
WORKFLOW_STEP_TYPE.CREATE_INDEX_STEP_TYPE
89+
? 'Ingest additional data using the bulk API'
90+
: props.resource?.stepType ===
91+
WORKFLOW_STEP_TYPE.CREATE_INGEST_PIPELINE_STEP_TYPE
92+
? 'Ingest additional data using the bulk API'
93+
: 'Apply a search pipeline to your applications'}
94+
</h4>
95+
</EuiTitle>
96+
</EuiFlexItem>
97+
{props.resource?.stepType ===
98+
WORKFLOW_STEP_TYPE.CREATE_SEARCH_PIPELINE_STEP_TYPE && (
99+
<EuiFlexItem grow={false}>
100+
<EuiText size="s">
101+
<p>
102+
You can invoke the search pipeline API in your applications.{' '}
103+
<EuiLink href={SEARCH_PIPELINE_DOCS_LINK} target="_blank">
104+
Learn more
105+
</EuiLink>
106+
</p>
107+
</EuiText>
108+
</EuiFlexItem>
109+
)}
110+
<EuiFlexItem grow={false}>
111+
<EuiCodeBlock fontSize="m" isCopyable={true}>
112+
{`GET /my_index/_search?search_pipeline=my_pipeline
113+
{
114+
"query": {
115+
"term": {
116+
"item_text": {
117+
"value": "{{query_text}}"
118+
}
119+
}
120+
}
121+
}`}
122+
</EuiCodeBlock>
123+
</EuiFlexItem>
78124
</EuiFlexGroup>
79125
);
80126
}

public/utils/config_to_template_utils.test.tsx

+94-63
Original file line numberDiff line numberDiff line change
@@ -10,110 +10,141 @@ describe('config_to_template_utils', () => {
1010
beforeEach(() => {});
1111
describe('updatePathForExpandedQuery', () => {
1212
test('term query', () => {
13-
expect(
14-
updatePathForExpandedQuery('query.term.a') === 'query.term.a.value'
13+
expect(updatePathForExpandedQuery('query.term.a')).toEqual(
14+
'query.term.a.value'
1515
);
16-
expect(
17-
updatePathForExpandedQuery('query.term.a.value') ===
18-
'query.term.a.value'
16+
expect(updatePathForExpandedQuery('query.term.a.value')).toEqual(
17+
'query.term.a.value'
1918
);
20-
expect(
21-
updatePathForExpandedQuery('$.query.term.a') === '$.query.term.a.value'
19+
expect(updatePathForExpandedQuery('query.term.abc')).toEqual(
20+
'query.term.abc.value'
2221
);
23-
expect(
24-
updatePathForExpandedQuery('a.b.c.d.query.term.a') ===
25-
'a.b.c.d.query.term.a.value'
22+
expect(updatePathForExpandedQuery('query.term.abc.value')).toEqual(
23+
'query.term.abc.value'
2624
);
27-
expect(
28-
updatePathForExpandedQuery('query.bool.must[0].term.a') ===
29-
'query.bool.must[0].term.a.value'
25+
expect(updatePathForExpandedQuery('$.query.term.abc.value')).toEqual(
26+
'$.query.term.abc.value'
3027
);
28+
expect(updatePathForExpandedQuery('query.bool.must[0].term.abc')).toEqual(
29+
'query.bool.must[0].term.abc.value'
30+
);
31+
expect(
32+
updatePathForExpandedQuery('query.bool.must[0].term.ab_c')
33+
).toEqual('query.bool.must[0].term.ab_c.value');
3134
});
3235
test('prefix query', () => {
33-
expect(
34-
updatePathForExpandedQuery('query.prefix.a') === 'query.prefix.a.value'
36+
expect(updatePathForExpandedQuery('query.prefix.a')).toEqual(
37+
'query.prefix.a.value'
3538
);
36-
expect(
37-
updatePathForExpandedQuery('query.prefix.a.value') ===
38-
'query.prefix.a.value'
39+
expect(updatePathForExpandedQuery('query.prefix.a.value')).toEqual(
40+
'query.prefix.a.value'
41+
);
42+
expect(updatePathForExpandedQuery('query.prefix.abc')).toEqual(
43+
'query.prefix.abc.value'
44+
);
45+
expect(updatePathForExpandedQuery('query.prefix.abc.value')).toEqual(
46+
'query.prefix.abc.value'
3947
);
4048
});
4149
test('fuzzy query', () => {
42-
expect(
43-
updatePathForExpandedQuery('query.fuzzy.a') === 'query.fuzzy.a.value'
50+
expect(updatePathForExpandedQuery('query.fuzzy.a')).toEqual(
51+
'query.fuzzy.a.value'
4452
);
45-
expect(
46-
updatePathForExpandedQuery('query.fuzzy.a.value') ===
47-
'query.fuzzy.a.value'
53+
expect(updatePathForExpandedQuery('query.fuzzy.a.value')).toEqual(
54+
'query.fuzzy.a.value'
55+
);
56+
expect(updatePathForExpandedQuery('query.fuzzy.abc')).toEqual(
57+
'query.fuzzy.abc.value'
58+
);
59+
expect(updatePathForExpandedQuery('query.fuzzy.abc.value')).toEqual(
60+
'query.fuzzy.abc.value'
4861
);
4962
});
5063
test('wildcard query', () => {
51-
expect(
52-
updatePathForExpandedQuery('query.wildcard.a') ===
53-
'query.wildcard.a.wildcard'
64+
expect(updatePathForExpandedQuery('query.wildcard.a')).toEqual(
65+
'query.wildcard.a.wildcard'
5466
);
55-
expect(
56-
updatePathForExpandedQuery('query.wildcard.a.wildcard') ===
57-
'query.wildcard.a.wildcard'
67+
expect(updatePathForExpandedQuery('query.wildcard.a.wildcard')).toEqual(
68+
'query.wildcard.a.wildcard'
69+
);
70+
expect(updatePathForExpandedQuery('query.wildcard.abc')).toEqual(
71+
'query.wildcard.abc.wildcard'
72+
);
73+
expect(updatePathForExpandedQuery('query.wildcard.abc.wildcard')).toEqual(
74+
'query.wildcard.abc.wildcard'
5875
);
5976
});
6077
test('regexp query', () => {
61-
expect(
62-
updatePathForExpandedQuery('query.regexp.a') === 'query.regexp.a.value'
78+
expect(updatePathForExpandedQuery('query.regexp.a')).toEqual(
79+
'query.regexp.a.value'
6380
);
64-
expect(
65-
updatePathForExpandedQuery('query.regexp.a.value') ===
66-
'query.regexp.a.value'
81+
expect(updatePathForExpandedQuery('query.regexp.a.value')).toEqual(
82+
'query.regexp.a.value'
83+
);
84+
expect(updatePathForExpandedQuery('query.regexp.abc')).toEqual(
85+
'query.regexp.abc.value'
86+
);
87+
expect(updatePathForExpandedQuery('query.regexp.abc.value')).toEqual(
88+
'query.regexp.abc.value'
6789
);
6890
});
6991
test('match query', () => {
70-
expect(
71-
updatePathForExpandedQuery('query.match.a') === 'query.match.a.query'
92+
expect(updatePathForExpandedQuery('query.match.a')).toEqual(
93+
'query.match.a.query'
7294
);
73-
expect(
74-
updatePathForExpandedQuery('query.match.a.query') ===
75-
'query.match.a.query'
95+
expect(updatePathForExpandedQuery('query.match.a.query')).toEqual(
96+
'query.match.a.query'
97+
);
98+
expect(updatePathForExpandedQuery('query.match.item_text')).toEqual(
99+
'query.match.item_text.query'
100+
);
101+
expect(updatePathForExpandedQuery('query.match.item_text.query')).toEqual(
102+
'query.match.item_text.query'
76103
);
77104
});
78105
test('match bool prefix query', () => {
79106
expect(
80-
updatePathForExpandedQuery('query.match_bool_prefix.a') ===
81-
'query.match_bool_prefix.a.query'
82-
);
107+
updatePathForExpandedQuery('query.match_bool_prefix.a.query')
108+
).toEqual('query.match_bool_prefix.a.query');
83109
expect(
84-
updatePathForExpandedQuery('query.match_bool_prefix.a.query') ===
85-
'query.match_bool_prefix.a.query'
86-
);
110+
updatePathForExpandedQuery('query.match_bool_prefix.item_text')
111+
).toEqual('query.match_bool_prefix.item_text.query');
112+
expect(
113+
updatePathForExpandedQuery('query.match_bool_prefix.item_text.query')
114+
).toEqual('query.match_bool_prefix.item_text.query');
87115
});
88116
test('match phrase query', () => {
89-
expect(
90-
updatePathForExpandedQuery('query.match_phrase.a') ===
91-
'query.match_phrase.a.query'
117+
expect(updatePathForExpandedQuery('query.match_phrase.a.query')).toEqual(
118+
'query.match_phrase.a.query'
92119
);
93120
expect(
94-
updatePathForExpandedQuery('query.match_phrase.a.query') ===
95-
'query.match_phrase.a.query'
96-
);
121+
updatePathForExpandedQuery('query.match_phrase.item_text')
122+
).toEqual('query.match_phrase.item_text.query');
123+
expect(
124+
updatePathForExpandedQuery('query.match_phrase.item_text.query')
125+
).toEqual('query.match_phrase.item_text.query');
97126
});
98127
test('match phrase prefix query', () => {
99128
expect(
100-
updatePathForExpandedQuery('query.match_phrase_prefix.a') ===
101-
'query.match_phrase_prefix.a.query'
102-
);
129+
updatePathForExpandedQuery('query.match_phrase_prefix.a.query')
130+
).toEqual('query.match_phrase_prefix.a.query');
103131
expect(
104-
updatePathForExpandedQuery('query.match_phrase_prefix.a.query') ===
105-
'query.match_phrase_prefix.a.query'
106-
);
132+
updatePathForExpandedQuery('query.match_phrase_prefix.item_text')
133+
).toEqual('query.match_phrase_prefix.item_text.query');
134+
expect(
135+
updatePathForExpandedQuery('query.match_phrase_prefix.item_text.query')
136+
).toEqual('query.match_phrase_prefix.item_text.query');
107137
});
108138
test('aggs query', () => {
109-
expect(
110-
updatePathForExpandedQuery('aggs.avg_a.avg.field') ===
111-
'aggregations.avg_a.avg.field'
139+
expect(updatePathForExpandedQuery('aggs.avg_a.avg.field')).toEqual(
140+
'aggregations.avg_a.avg.field'
112141
);
113142
expect(
114-
updatePathForExpandedQuery('aggs.b.c.d.aggs.avg_a.avg.field') ===
115-
'aggregations.b.c.d.aggregations.avg_a.avg.field'
116-
);
143+
updatePathForExpandedQuery('aggs.b.c.d.aggs.avg_a.avg.field')
144+
).toEqual('aggregations.b.c.d.aggregations.avg_a.avg.field');
145+
expect(
146+
updatePathForExpandedQuery('aggs.b.c.d_e_f.aggs.avg_a.avg.field_abc')
147+
).toEqual('aggregations.b.c.d_e_f.aggregations.avg_a.avg.field_abc');
117148
});
118149
});
119150
});

public/utils/config_to_template_utils.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -705,17 +705,16 @@ export function updatePathForExpandedQuery(path: string): string {
705705
// If the path already has the suffix present, do nothing.
706706
function addSuffixToPath(path: string, prefix: string, suffix: string): string {
707707
function generateRegex(prefix: string, suffix: string): RegExp {
708-
// match the specified prefix, followed by some value in dot or bracket notation
709-
const notationPattern = `\\b${prefix}\\b(\\.\\w+|\\[\\w+\\])`;
710-
// ensure the suffix (in dot or bracket notation) is not present
711-
const suffixPattern = `(?!(\\.${suffix}|\\[${suffix}\\]))`;
712-
return new RegExp(notationPattern + suffixPattern, 'g');
708+
// ensure the suffix (in dot or bracket notation) is not present, and match
709+
// on the prefix, followed by some value in dot notation
710+
const finalPattern = `(?!.*(\\.\\b${suffix}\\b|\\[\\b${suffix}\\b\\])).*\\b${prefix}\\b\\.(.+)`;
711+
return new RegExp(finalPattern, 'g');
713712
}
714713

715714
// if the pattern matches, append the appropriate suffix via dot notation
716715
const regexPattern = generateRegex(prefix, suffix);
717-
return path.replace(regexPattern, (_, subStr) => {
718-
return `${prefix}${subStr}.${suffix}`;
716+
return path.replace(regexPattern, (pattern) => {
717+
return `${pattern}.${suffix}`;
719718
});
720719
}
721720

0 commit comments

Comments
 (0)