Skip to content

Commit 7c7817f

Browse files
committed
perf: optimize predicates for AsyncAPI namesapce
Refs #691
1 parent e23b670 commit 7c7817f

File tree

1 file changed

+103
-145
lines changed

1 file changed

+103
-145
lines changed
Lines changed: 103 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { allPass, either, is, startsWith } from 'ramda';
2-
import { isNonEmptyString } from 'ramda-adjunct';
31
import { createPredicate, isBooleanElement, isStringElement } from '@swagger-api/apidom-core';
42

53
import AsyncApi2Element from './elements/AsyncApi2';
@@ -25,50 +23,42 @@ import ServerVariableElement from './elements/ServerVariable';
2523

2624
export const isAsyncApi2Element = createPredicate(
2725
({ hasBasicElementProps, isElementType, primitiveEq, hasClass }) => {
28-
const isElementTypeAsyncApi2 = isElementType('asyncApi2');
29-
const primitiveEqObject = primitiveEq('object');
30-
const hasClassApi = hasClass('api');
31-
32-
return either(
33-
is(AsyncApi2Element),
34-
allPass([hasBasicElementProps, isElementTypeAsyncApi2, primitiveEqObject, hasClassApi]),
35-
);
26+
return (element: any) =>
27+
element instanceof AsyncApi2Element ||
28+
(hasBasicElementProps(element) &&
29+
isElementType('asyncApi2', element) &&
30+
primitiveEq('object', element) &&
31+
hasClass('api', element));
3632
},
3733
);
3834

3935
export const isAsyncApiVersionElement = createPredicate(
4036
({ hasBasicElementProps, isElementType, primitiveEq }) => {
41-
const isElementTypeAsyncApiVersion = isElementType('asyncApiVersion');
42-
const primitiveEqString = primitiveEq('string');
43-
44-
return either(
45-
is(AsyncApiVersionElement),
46-
allPass([hasBasicElementProps, isElementTypeAsyncApiVersion, primitiveEqString]),
47-
);
37+
return (element: any) =>
38+
element instanceof AsyncApiVersionElement ||
39+
(hasBasicElementProps(element) &&
40+
isElementType('asyncApiVersion', element) &&
41+
primitiveEq('string', element));
4842
},
4943
);
5044

5145
export const isChannelBindingsElement = createPredicate(
5246
({ hasBasicElementProps, isElementType, primitiveEq }) => {
53-
const isElementTypeChannelBindings = isElementType('channelBindings');
54-
const primitiveEqString = primitiveEq('object');
55-
56-
return either(
57-
is(ChannelBindingsElement),
58-
allPass([hasBasicElementProps, isElementTypeChannelBindings, primitiveEqString]),
59-
);
47+
return (element: any) =>
48+
element instanceof ChannelBindingsElement ||
49+
(hasBasicElementProps(element) &&
50+
isElementType('channelBindings', element) &&
51+
primitiveEq('object', element));
6052
},
6153
);
6254

6355
export const isChannelItemElement = createPredicate(
6456
({ hasBasicElementProps, isElementType, primitiveEq }) => {
65-
const isElementTypeChannelItem = isElementType('channelItem');
66-
const primitiveEqObject = primitiveEq('object');
67-
68-
return either(
69-
is(ChannelItemElement),
70-
allPass([hasBasicElementProps, isElementTypeChannelItem, primitiveEqObject]),
71-
);
57+
return (element: any) =>
58+
element instanceof ChannelItemElement ||
59+
(hasBasicElementProps(element) &&
60+
isElementType('channelItem', element) &&
61+
primitiveEq('object', element));
7262
},
7363
);
7464

@@ -82,126 +72,106 @@ export const isChannelItemElementExternal = (element: any): element is ChannelIt
8272

8373
const value = element.$ref.toValue();
8474

85-
return isNonEmptyString(value) && !startsWith('#', value);
75+
return typeof value === 'string' && value.length > 0 && !value.startsWith('#');
8676
};
8777

8878
export const isChannelsElement = createPredicate(
8979
({ hasBasicElementProps, isElementType, primitiveEq }) => {
90-
const isElementTypeChannels = isElementType('channels');
91-
const primitiveEqObject = primitiveEq('object');
92-
93-
return either(
94-
is(ChannelsElement),
95-
allPass([hasBasicElementProps, isElementTypeChannels, primitiveEqObject]),
96-
);
80+
return (element: any) =>
81+
element instanceof ChannelsElement ||
82+
(hasBasicElementProps(element) &&
83+
isElementType('channels', element) &&
84+
primitiveEq('object', element));
9785
},
9886
);
9987

10088
export const isComponentsElement = createPredicate(
10189
({ hasBasicElementProps, isElementType, primitiveEq }) => {
102-
const isElementTypeComponents = isElementType('components');
103-
const primitiveEqObject = primitiveEq('object');
104-
105-
return either(
106-
is(ComponentsElement),
107-
allPass([hasBasicElementProps, isElementTypeComponents, primitiveEqObject]),
108-
);
90+
return (element: any) =>
91+
element instanceof ComponentsElement ||
92+
(hasBasicElementProps(element) &&
93+
isElementType('components', element) &&
94+
primitiveEq('object', element));
10995
},
11096
);
11197

11298
export const isContactElement = createPredicate(
11399
({ hasBasicElementProps, isElementType, primitiveEq }) => {
114-
const isElementTypeContact = isElementType('contact');
115-
const primitiveEqObject = primitiveEq('object');
116-
117-
return either(
118-
is(ContactElement),
119-
allPass([hasBasicElementProps, isElementTypeContact, primitiveEqObject]),
120-
);
100+
return (element: any) =>
101+
element instanceof ContactElement ||
102+
(hasBasicElementProps(element) &&
103+
isElementType('contact', element) &&
104+
primitiveEq('object', element));
121105
},
122106
);
123107

124108
export const isIdentifierElement = createPredicate(
125109
({ hasBasicElementProps, isElementType, primitiveEq }) => {
126-
const isElementTypeIdentifier = isElementType('identifier');
127-
const primitiveEqString = primitiveEq('string');
128-
129-
return either(
130-
is(IdentifierElement),
131-
allPass([hasBasicElementProps, isElementTypeIdentifier, primitiveEqString]),
132-
);
110+
return (element: any) =>
111+
element instanceof IdentifierElement ||
112+
(hasBasicElementProps(element) &&
113+
isElementType('identifier', element) &&
114+
primitiveEq('string', element));
133115
},
134116
);
135117

136118
export const isInfoElement = createPredicate(
137119
({ hasBasicElementProps, isElementType, primitiveEq }) => {
138-
const isElementTypeInfo = isElementType('info');
139-
const primitiveEqObject = primitiveEq('object');
140-
141-
return either(
142-
is(InfoElement),
143-
allPass([hasBasicElementProps, isElementTypeInfo, primitiveEqObject]),
144-
);
120+
return (element: any) =>
121+
element instanceof InfoElement ||
122+
(hasBasicElementProps(element) &&
123+
isElementType('info', element) &&
124+
primitiveEq('object', element));
145125
},
146126
);
147127

148128
export const isLicenseElement = createPredicate(
149129
({ hasBasicElementProps, isElementType, primitiveEq }) => {
150-
const isElementTypeLicense = isElementType('license');
151-
const primitiveEqObject = primitiveEq('object');
152-
153-
return either(
154-
is(LicenseElement),
155-
allPass([hasBasicElementProps, isElementTypeLicense, primitiveEqObject]),
156-
);
130+
return (element: any) =>
131+
element instanceof LicenseElement ||
132+
(hasBasicElementProps(element) &&
133+
isElementType('license', element) &&
134+
primitiveEq('object', element));
157135
},
158136
);
159137

160138
export const isOperationElement = createPredicate(
161139
({ hasBasicElementProps, isElementType, primitiveEq }) => {
162-
const isElementTypeOperation = isElementType('operation');
163-
const primitiveEqObject = primitiveEq('object');
164-
165-
return either(
166-
is(OperationElement),
167-
allPass([hasBasicElementProps, isElementTypeOperation, primitiveEqObject]),
168-
);
140+
return (element: any) =>
141+
element instanceof OperationElement ||
142+
(hasBasicElementProps(element) &&
143+
isElementType('operation', element) &&
144+
primitiveEq('object', element));
169145
},
170146
);
171147

172148
export const isParameterElement = createPredicate(
173149
({ hasBasicElementProps, isElementType, primitiveEq }) => {
174-
const isElementTypeParameter = isElementType('parameter');
175-
const primitiveEqObject = primitiveEq('object');
176-
177-
return either(
178-
is(ParameterElement),
179-
allPass([hasBasicElementProps, isElementTypeParameter, primitiveEqObject]),
180-
);
150+
return (element: any) =>
151+
element instanceof ParameterElement ||
152+
(hasBasicElementProps(element) &&
153+
isElementType('parameter', element) &&
154+
primitiveEq('object', element));
181155
},
182156
);
183157

184158
export const isParametersElement = createPredicate(
185159
({ hasBasicElementProps, isElementType, primitiveEq }) => {
186-
const isElementTypeParameters = isElementType('parameters');
187-
const primitiveEqObject = primitiveEq('object');
188-
189-
return either(
190-
is(ParametersElement),
191-
allPass([hasBasicElementProps, isElementTypeParameters, primitiveEqObject]),
192-
);
160+
return (element: any) =>
161+
element instanceof ParametersElement ||
162+
(hasBasicElementProps(element) &&
163+
isElementType('parameters', element) &&
164+
primitiveEq('object', element));
193165
},
194166
);
195167

196168
export const isReferenceElement = createPredicate(
197169
({ hasBasicElementProps, isElementType, primitiveEq }) => {
198-
const isElementTypeReference = isElementType('reference');
199-
const primitiveEqObject = primitiveEq('object');
200-
201-
return either(
202-
is(ReferenceElement),
203-
allPass([hasBasicElementProps, isElementTypeReference, primitiveEqObject]),
204-
);
170+
return (element: any) =>
171+
element instanceof ReferenceElement ||
172+
(hasBasicElementProps(element) &&
173+
isElementType('reference', element) &&
174+
primitiveEq('object', element));
205175
},
206176
);
207177

@@ -212,18 +182,16 @@ export const isReferenceElementExternal = (element: any): element is ReferenceEl
212182

213183
const value = element.$ref.toValue();
214184

215-
return isNonEmptyString(value) && !startsWith('#', value);
185+
return typeof value === 'string' && value.length > 0 && !value.startsWith('#');
216186
};
217187

218188
export const isSchemaElement = createPredicate(
219189
({ hasBasicElementProps, isElementType, primitiveEq }) => {
220-
const isElementTypeSchema = isElementType('schema');
221-
const primitiveEqObject = primitiveEq('object');
222-
223-
return either(
224-
is(SchemaElement),
225-
allPass([hasBasicElementProps, isElementTypeSchema, primitiveEqObject]),
226-
);
190+
return (element: any) =>
191+
element instanceof SchemaElement ||
192+
(hasBasicElementProps(element) &&
193+
isElementType('schema', element) &&
194+
primitiveEq('object', element));
227195
},
228196
);
229197

@@ -233,60 +201,50 @@ export const isBooleanJsonSchemaElement = (element: any) => {
233201

234202
export const isSecurityRequirementElement = createPredicate(
235203
({ hasBasicElementProps, isElementType, primitiveEq }) => {
236-
const isElementTypeSecurityRequirement = isElementType('securityRequirement');
237-
const primitiveEqObject = primitiveEq('object');
238-
239-
return either(
240-
is(SecurityRequirementElement),
241-
allPass([hasBasicElementProps, isElementTypeSecurityRequirement, primitiveEqObject]),
242-
);
204+
return (element: any) =>
205+
element instanceof SecurityRequirementElement ||
206+
(hasBasicElementProps(element) &&
207+
isElementType('securityRequirement', element) &&
208+
primitiveEq('object', element));
243209
},
244210
);
245211

246212
export const isServerElement = createPredicate(
247213
({ hasBasicElementProps, isElementType, primitiveEq }) => {
248-
const isElementTypeServer = isElementType('server');
249-
const primitiveEqObject = primitiveEq('object');
250-
251-
return either(
252-
is(ServerElement),
253-
allPass([hasBasicElementProps, isElementTypeServer, primitiveEqObject]),
254-
);
214+
return (element: any) =>
215+
element instanceof ServerElement ||
216+
(hasBasicElementProps(element) &&
217+
isElementType('server', element) &&
218+
primitiveEq('object', element));
255219
},
256220
);
257221

258222
export const isServerBindingsElement = createPredicate(
259223
({ hasBasicElementProps, isElementType, primitiveEq }) => {
260-
const isElementTypeServerBindings = isElementType('serverBindings');
261-
const primitiveEqObject = primitiveEq('object');
262-
263-
return either(
264-
is(ServerBindingsElement),
265-
allPass([hasBasicElementProps, isElementTypeServerBindings, primitiveEqObject]),
266-
);
224+
return (element: any) =>
225+
element instanceof ServerBindingsElement ||
226+
(hasBasicElementProps(element) &&
227+
isElementType('serverBindings', element) &&
228+
primitiveEq('object', element));
267229
},
268230
);
269231

270232
export const isServersElement = createPredicate(
271233
({ hasBasicElementProps, isElementType, primitiveEq }) => {
272-
const isElementTypeServers = isElementType('servers');
273-
const primitiveEqObject = primitiveEq('object');
274-
275-
return either(
276-
is(ServersElement),
277-
allPass([hasBasicElementProps, isElementTypeServers, primitiveEqObject]),
278-
);
234+
return (element: any) =>
235+
element instanceof ServersElement ||
236+
(hasBasicElementProps(element) &&
237+
isElementType('servers', element) &&
238+
primitiveEq('object', element));
279239
},
280240
);
281241

282242
export const isServerVariableElement = createPredicate(
283243
({ hasBasicElementProps, isElementType, primitiveEq }) => {
284-
const isElementTypeServerVariable = isElementType('serverVariable');
285-
const primitiveEqObject = primitiveEq('object');
286-
287-
return either(
288-
is(ServerVariableElement),
289-
allPass([hasBasicElementProps, isElementTypeServerVariable, primitiveEqObject]),
290-
);
244+
return (element: any) =>
245+
element instanceof ServerVariableElement ||
246+
(hasBasicElementProps(element) &&
247+
isElementType('serverVariable', element) &&
248+
primitiveEq('object', element));
291249
},
292250
);

0 commit comments

Comments
 (0)