@nordcraft/search 1.0.34 → 1.0.36

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.
@@ -1 +1 @@
1
- {"version":3,"file":"getAllCustomPropertiesBySyntax.js","sourceRoot":"","sources":["../../src/memos/getAllCustomPropertiesBySyntax.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,IAAwC,EACxC,EACE,KAAK,GAGN,EACD,EAAE,CACF,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;IACvC,MAAM,KAAK,GAGP,EAAE,CAAA;IAEN,MAAM,GAAG,GAAG,CACV,QAAgB,EAChB,MAAqB,EACrB,QAAkB,EAClB,EAAE;QACF,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW;YAAE,OAAM;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAA;QACzB,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;QACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAC7B,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IACzD,CAAC,CAAA;IAED,KAAK,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACzE,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YACrE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;gBAAE,SAAQ;YAElE,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAC3C,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAC5B,EAAE,CAAC;gBACF,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;oBACzB,YAAY;oBACZ,YAAY;oBACZ,OAAO;oBACP,OAAO;oBACP,kBAAkB;oBAClB,QAAQ;iBACT,CAAC,CAAA;YACJ,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE;gBAC/C,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAC3C,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAC/B,EAAE,CAAC;oBACF,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;wBACzB,YAAY;wBACZ,YAAY;wBACZ,OAAO;wBACP,OAAO;wBACP,UAAU;wBACV,MAAM,CAAC,YAAY,CAAC;wBACpB,kBAAkB;wBAClB,QAAQ;qBACT,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"getAllCustomPropertiesBySyntax.js","sourceRoot":"","sources":["../../src/memos/getAllCustomPropertiesBySyntax.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,IAAY,EACZ,EACE,KAAK,GAGN,EACD,EAAE,CACF,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;IACvC,MAAM,KAAK,GAGP,EAAE,CAAA;IAEN,MAAM,GAAG,GAAG,CACV,QAAgB,EAChB,MAAqB,EACrB,QAAkB,EAClB,EAAE;QACF,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW;YAAE,OAAM;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAA;QACzB,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;QACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAC7B,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IACzD,CAAC,CAAA;IAED,KAAK,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACzE,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YACrE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;gBAAE,SAAQ;YAElE,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAC3C,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAC5B,EAAE,CAAC;gBACF,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;oBACzB,YAAY;oBACZ,YAAY;oBACZ,OAAO;oBACP,OAAO;oBACP,kBAAkB;oBAClB,QAAQ;iBACT,CAAC,CAAA;YACJ,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE;gBAC/C,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAC3C,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAC/B,EAAE,CAAC;oBACF,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;wBACzB,YAAY;wBACZ,YAAY;wBACZ,OAAO;wBACP,OAAO;wBACP,UAAU;wBACV,MAAM,CAAC,YAAY,CAAC;wBACpB,kBAAkB;wBAClB,QAAQ;qBACT,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA"}
@@ -18,6 +18,7 @@ import { createRequiredDirectChildRule } from './rules/dom/createRequiredDirectC
18
18
  import { createRequiredDirectParentRule } from './rules/dom/createRequiredDirectParentRule';
19
19
  import { createRequiredElementAttributeRule } from './rules/dom/createRequiredElementAttributeRule';
20
20
  import { createRequiredMetaTagRule } from './rules/dom/createRequiredMetaTagRule';
21
+ import { elementWithoutInteractiveContentRule } from './rules/dom/elementWithoutInteractiveContentRule';
21
22
  import { imageWithoutDimensionRule } from './rules/dom/imageWithoutDimensionRule';
22
23
  import { nonEmptyVoidElementRule } from './rules/dom/nonEmptyVoidElementRule';
23
24
  import { duplicateRouteRule } from './rules/duplicateRouteRule';
@@ -90,6 +91,7 @@ const RULES = [
90
91
  duplicateRouteRule,
91
92
  duplicateUrlParameterRule,
92
93
  duplicateWorkflowParameterRule,
94
+ elementWithoutInteractiveContentRule,
93
95
  imageWithoutDimensionRule,
94
96
  legacyActionRule,
95
97
  legacyApiRule,
@@ -1 +1 @@
1
- {"version":3,"file":"problems.worker.js","sourceRoot":"","sources":["../src/problems.worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"problems.worker.js","sourceRoot":"","sources":["../src/problems.worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { isDefined } from '@nordcraft/core/dist/utils/util';
2
+ import { interactiveContentElementDefinition, } from '../../util/helpers';
3
+ const ELEMENTS_WITHOUT_INTERACTIVE_CONTENT = ['button', 'a'];
4
+ export const elementWithoutInteractiveContentRule = {
5
+ code: 'invalid element child',
6
+ level: 'warning',
7
+ category: 'Accessibility',
8
+ visit: (report, args) => {
9
+ if (args.nodeType !== 'component-node') {
10
+ return;
11
+ }
12
+ const { value, component, path, files } = args;
13
+ if (value.type !== 'element' ||
14
+ !ELEMENTS_WITHOUT_INTERACTIVE_CONTENT.includes(value.tag)) {
15
+ return;
16
+ }
17
+ // TODO: Consider memoizing this function to avoid repeated searches
18
+ const searchChildren = (container, children, results = []) => {
19
+ return children.reduce((acc, childId) => {
20
+ const child = container.nodes[childId];
21
+ if (!isDefined(child) || child.type === 'text') {
22
+ return acc;
23
+ }
24
+ if (child.type === 'element') {
25
+ // Check if the child element is an interactive content element
26
+ const interactiveElement = interactiveContentElementDefinition(child);
27
+ if (interactiveElement) {
28
+ // TODO: consider visiting this element's children instead of returning early
29
+ return [...acc, interactiveElement];
30
+ }
31
+ }
32
+ const allResults = [...acc];
33
+ if (child.type === 'component') {
34
+ const component = child.package
35
+ ? files.packages?.[child.package]?.components?.[child.name]
36
+ : files.components?.[child.name];
37
+ if (!component) {
38
+ return results;
39
+ }
40
+ // Search children in the component's own nodes
41
+ allResults.push(...searchChildren(component, component.nodes['root']?.children ?? [], acc));
42
+ }
43
+ // Search children in slot/component/element:
44
+ return searchChildren(container, child.children, allResults);
45
+ }, results);
46
+ };
47
+ const childTags = searchChildren(component, value.children);
48
+ if (childTags.length > 0) {
49
+ childTags.forEach((ic) => report(path, {
50
+ parentTag: value.tag,
51
+ invalidChild: ic,
52
+ }));
53
+ }
54
+ },
55
+ };
56
+ //# sourceMappingURL=elementWithoutInteractiveContentRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elementWithoutInteractiveContentRule.js","sourceRoot":"","sources":["../../../src/rules/dom/elementWithoutInteractiveContentRule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,386 @@
1
+ import { valueFormula } from '@nordcraft/core/dist/formula/formulaUtils';
2
+ import { describe, expect, test } from 'bun:test';
3
+ import { searchProject } from '../../searchProject';
4
+ import { elementWithoutInteractiveContentRule } from './elementWithoutInteractiveContentRule';
5
+ describe('elementWithoutInteractiveContentRule', () => {
6
+ test('should detect invalid button in button element', () => {
7
+ const problems = Array.from(searchProject({
8
+ files: {
9
+ formulas: {},
10
+ components: {
11
+ test: {
12
+ name: 'test',
13
+ nodes: {
14
+ root: {
15
+ type: 'element',
16
+ attrs: {},
17
+ classes: {},
18
+ events: {},
19
+ tag: 'button',
20
+ children: ['child1'],
21
+ style: {},
22
+ },
23
+ child1: {
24
+ type: 'element',
25
+ attrs: {},
26
+ classes: {},
27
+ events: {},
28
+ tag: 'div',
29
+ children: ['child2'],
30
+ style: {},
31
+ },
32
+ child2: {
33
+ type: 'element',
34
+ attrs: {},
35
+ classes: {},
36
+ events: {},
37
+ tag: 'button',
38
+ children: [],
39
+ style: {},
40
+ },
41
+ },
42
+ formulas: {},
43
+ apis: {},
44
+ attributes: {},
45
+ variables: {},
46
+ },
47
+ },
48
+ },
49
+ rules: [elementWithoutInteractiveContentRule],
50
+ }));
51
+ expect(problems).toHaveLength(1);
52
+ expect(problems[0].code).toBe('invalid element child');
53
+ expect(problems[0].path).toEqual(['components', 'test', 'nodes', 'root']);
54
+ expect(problems[0].details).toEqual({
55
+ parentTag: 'button',
56
+ invalidChild: { tag: 'button' },
57
+ });
58
+ });
59
+ test('should detect invalid label in button element', () => {
60
+ const problems = Array.from(searchProject({
61
+ files: {
62
+ formulas: {},
63
+ components: {
64
+ test: {
65
+ name: 'test',
66
+ nodes: {
67
+ root: {
68
+ type: 'element',
69
+ attrs: {},
70
+ classes: {},
71
+ events: {},
72
+ tag: 'button',
73
+ children: ['child1'],
74
+ style: {},
75
+ },
76
+ child1: {
77
+ type: 'element',
78
+ attrs: {},
79
+ classes: {},
80
+ events: {},
81
+ tag: 'div',
82
+ children: ['child2'],
83
+ style: {},
84
+ },
85
+ child2: {
86
+ type: 'element',
87
+ attrs: {},
88
+ classes: {},
89
+ events: {},
90
+ tag: 'label',
91
+ children: [],
92
+ style: {},
93
+ },
94
+ },
95
+ formulas: {},
96
+ apis: {},
97
+ attributes: {},
98
+ variables: {},
99
+ },
100
+ },
101
+ },
102
+ rules: [elementWithoutInteractiveContentRule],
103
+ }));
104
+ expect(problems).toHaveLength(1);
105
+ expect(problems[0].code).toBe('invalid element child');
106
+ expect(problems[0].path).toEqual(['components', 'test', 'nodes', 'root']);
107
+ expect(problems[0].details).toEqual({
108
+ parentTag: 'button',
109
+ invalidChild: { tag: 'label' },
110
+ });
111
+ });
112
+ test('should detect invalid element with attribute requirement', () => {
113
+ const problems = Array.from(searchProject({
114
+ files: {
115
+ formulas: {},
116
+ components: {
117
+ test: {
118
+ name: 'test',
119
+ nodes: {
120
+ root: {
121
+ type: 'element',
122
+ attrs: {},
123
+ classes: {},
124
+ events: {},
125
+ tag: 'button',
126
+ children: ['child1'],
127
+ style: {},
128
+ },
129
+ child1: {
130
+ type: 'element',
131
+ attrs: {},
132
+ classes: {},
133
+ events: {},
134
+ tag: 'div',
135
+ children: ['child2'],
136
+ style: {},
137
+ },
138
+ child2: {
139
+ type: 'element',
140
+ attrs: { href: valueFormula('https://example.com') },
141
+ classes: {},
142
+ events: {},
143
+ tag: 'a',
144
+ children: [],
145
+ style: {},
146
+ },
147
+ },
148
+ formulas: {},
149
+ apis: {},
150
+ attributes: {},
151
+ variables: {},
152
+ },
153
+ },
154
+ },
155
+ rules: [elementWithoutInteractiveContentRule],
156
+ }));
157
+ expect(problems).toHaveLength(1);
158
+ expect(problems[0].code).toBe('invalid element child');
159
+ expect(problems[0].path).toEqual(['components', 'test', 'nodes', 'root']);
160
+ expect(problems[0].details).toEqual({
161
+ parentTag: 'button',
162
+ invalidChild: { tag: 'a', whenAttributeIsPresent: 'href' },
163
+ });
164
+ });
165
+ test('should allow element children when attribute requirement is not met', () => {
166
+ const problems = Array.from(searchProject({
167
+ files: {
168
+ formulas: {},
169
+ components: {
170
+ test: {
171
+ name: 'test',
172
+ nodes: {
173
+ root: {
174
+ type: 'element',
175
+ attrs: {},
176
+ classes: {},
177
+ events: {},
178
+ tag: 'button',
179
+ children: ['child1'],
180
+ style: {},
181
+ },
182
+ child1: {
183
+ type: 'element',
184
+ attrs: {},
185
+ classes: {},
186
+ events: {},
187
+ tag: 'div',
188
+ children: ['child2'],
189
+ style: {},
190
+ },
191
+ child2: {
192
+ type: 'element',
193
+ attrs: {},
194
+ classes: {},
195
+ events: {},
196
+ tag: 'a',
197
+ children: [],
198
+ style: {},
199
+ },
200
+ },
201
+ formulas: {},
202
+ apis: {},
203
+ attributes: {},
204
+ variables: {},
205
+ },
206
+ },
207
+ },
208
+ rules: [elementWithoutInteractiveContentRule],
209
+ }));
210
+ expect(problems).toHaveLength(0);
211
+ });
212
+ test('should detect invalid children when negative attribute requirement is met', () => {
213
+ const problems = Array.from(searchProject({
214
+ files: {
215
+ formulas: {},
216
+ components: {
217
+ test: {
218
+ name: 'test',
219
+ nodes: {
220
+ root: {
221
+ type: 'element',
222
+ attrs: {},
223
+ classes: {},
224
+ events: {},
225
+ tag: 'button',
226
+ children: ['child1'],
227
+ style: {},
228
+ },
229
+ child1: {
230
+ type: 'element',
231
+ attrs: {},
232
+ classes: {},
233
+ events: {},
234
+ tag: 'div',
235
+ children: ['child2'],
236
+ style: {},
237
+ },
238
+ child2: {
239
+ type: 'element',
240
+ attrs: { type: valueFormula('text') },
241
+ classes: {},
242
+ events: {},
243
+ tag: 'input',
244
+ children: [],
245
+ style: {},
246
+ },
247
+ },
248
+ formulas: {},
249
+ apis: {},
250
+ attributes: {},
251
+ variables: {},
252
+ },
253
+ },
254
+ },
255
+ rules: [elementWithoutInteractiveContentRule],
256
+ }));
257
+ expect(problems).toHaveLength(0);
258
+ });
259
+ test('should detect invalid label in button element in nested component', () => {
260
+ const problems = Array.from(searchProject({
261
+ files: {
262
+ formulas: {},
263
+ components: {
264
+ test: {
265
+ name: 'test',
266
+ nodes: {
267
+ root: {
268
+ type: 'element',
269
+ attrs: {},
270
+ classes: {},
271
+ events: {},
272
+ tag: 'button',
273
+ children: ['child1'],
274
+ style: {},
275
+ },
276
+ child1: {
277
+ type: 'component',
278
+ attrs: {},
279
+ name: 'buttonComponent',
280
+ events: {},
281
+ children: [],
282
+ style: {},
283
+ },
284
+ },
285
+ formulas: {},
286
+ apis: {},
287
+ attributes: {},
288
+ variables: {},
289
+ },
290
+ buttonComponent: {
291
+ name: 'buttonComponent',
292
+ nodes: {
293
+ root: {
294
+ type: 'element',
295
+ attrs: {},
296
+ classes: {},
297
+ events: {},
298
+ tag: 'div',
299
+ children: ['child1'],
300
+ style: {},
301
+ },
302
+ child1: {
303
+ type: 'element',
304
+ attrs: {},
305
+ classes: {},
306
+ events: {},
307
+ tag: 'div',
308
+ children: ['child2'],
309
+ style: {},
310
+ },
311
+ child2: {
312
+ type: 'element',
313
+ attrs: {},
314
+ classes: {},
315
+ events: {},
316
+ tag: 'label',
317
+ children: [],
318
+ style: {},
319
+ },
320
+ },
321
+ formulas: {},
322
+ apis: {},
323
+ attributes: {},
324
+ variables: {},
325
+ },
326
+ },
327
+ },
328
+ rules: [elementWithoutInteractiveContentRule],
329
+ }));
330
+ expect(problems).toHaveLength(1);
331
+ expect(problems[0].code).toBe('invalid element child');
332
+ expect(problems[0].path).toEqual(['components', 'test', 'nodes', 'root']);
333
+ expect(problems[0].details).toEqual({
334
+ parentTag: 'button',
335
+ invalidChild: { tag: 'label' },
336
+ });
337
+ });
338
+ test('should not detect valid element children', () => {
339
+ const problems = Array.from(searchProject({
340
+ files: {
341
+ formulas: {},
342
+ components: {
343
+ test: {
344
+ name: 'test',
345
+ nodes: {
346
+ root: {
347
+ type: 'element',
348
+ attrs: {},
349
+ classes: {},
350
+ events: {},
351
+ tag: 'button',
352
+ children: ['child1', 'child2'],
353
+ style: {},
354
+ },
355
+ child1: {
356
+ type: 'element',
357
+ attrs: {},
358
+ classes: {},
359
+ events: {},
360
+ tag: 'p',
361
+ children: [],
362
+ style: {},
363
+ },
364
+ child2: {
365
+ type: 'element',
366
+ attrs: {},
367
+ classes: {},
368
+ events: {},
369
+ tag: 'p',
370
+ children: [],
371
+ style: {},
372
+ },
373
+ },
374
+ formulas: {},
375
+ apis: {},
376
+ attributes: {},
377
+ variables: {},
378
+ },
379
+ },
380
+ },
381
+ rules: [elementWithoutInteractiveContentRule],
382
+ }));
383
+ expect(problems).toHaveLength(0);
384
+ });
385
+ });
386
+ //# sourceMappingURL=elementWithoutInteractiveContentRule.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elementWithoutInteractiveContentRule.test.js","sourceRoot":"","sources":["../../../src/rules/dom/elementWithoutInteractiveContentRule.test.ts"],"names":[],"mappings":"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"}
@@ -109,6 +109,7 @@ export function* searchProject({ files, rules, pathsToVisit = [], state, }) {
109
109
  }, state);
110
110
  }
111
111
  function* visitNode(args, state) {
112
+ performance.mark(`visitNode-${args.path.join('/')}`);
112
113
  const { rules, pathsToVisit, ...data } = args;
113
114
  const { files, value, path, memo, nodeType } = data;
114
115
  if (!shouldSearchPath(data.path, pathsToVisit)) {
@@ -116,6 +117,7 @@ function* visitNode(args, state) {
116
117
  }
117
118
  const results = [];
118
119
  for (const rule of rules) {
120
+ performance.mark(`rule-${rule.code}`);
119
121
  rule.visit((path, details) => {
120
122
  results.push({
121
123
  code: rule.code,
@@ -1 +1 @@
1
- {"version":3,"file":"searchProject.js","sourceRoot":"","sources":["../src/searchProject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"searchProject.js","sourceRoot":"","sources":["../src/searchProject.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { isDefined } from '@nordcraft/core/dist/utils/util';
1
2
  export function shouldSearchPath(path, pathsToVisit = []) {
2
3
  return (pathsToVisit.length === 0 ||
3
4
  pathsToVisit.some((pathToVisit) => pathToVisit.every((p1, i) => path[i] === p1)));
@@ -32,4 +33,33 @@ const LEGACY_CUSTOM_ACTIONS = new Set([
32
33
  'TriggerEvent',
33
34
  'Set session cookies',
34
35
  ]);
36
+ const INTERACTIVE_CONTENT = [
37
+ { tag: 'button' },
38
+ { tag: 'details' },
39
+ { tag: 'embed' },
40
+ { tag: 'iframe' },
41
+ { tag: 'label' },
42
+ { tag: 'select' },
43
+ { tag: 'textarea' },
44
+ { tag: 'a', whenAttributeIsPresent: 'href' },
45
+ { tag: 'audio', whenAttributeIsPresent: 'controls' },
46
+ { tag: 'img', whenAttributeIsPresent: 'usemap' },
47
+ { tag: 'input', whenAttributeIsNot: { attribute: 'type', value: 'hidden' } },
48
+ { tag: 'object', whenAttributeIsPresent: 'usemap' },
49
+ { tag: 'video', whenAttributeIsPresent: 'controls' },
50
+ ];
51
+ export const interactiveContentElementDefinition = (element) => INTERACTIVE_CONTENT.find((ic) => {
52
+ if (element.tag !== ic.tag) {
53
+ return false;
54
+ }
55
+ if ('whenAttributeIsPresent' in ic) {
56
+ return isDefined(element.attrs[ic.whenAttributeIsPresent]);
57
+ }
58
+ if ('whenAttributeIsNot' in ic) {
59
+ const attributeFormula = element.attrs[ic.whenAttributeIsNot.attribute];
60
+ return (attributeFormula?.type === 'value' &&
61
+ attributeFormula.value === ic.whenAttributeIsNot.value);
62
+ }
63
+ return true;
64
+ });
35
65
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/util/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAC9B,IAAyB,EACzB,eAA2B,EAAE;IAE7B,OAAO,CACL,YAAY,CAAC,MAAM,KAAK,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAChC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAC7C,CACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAkB,EAAE,EAAE;IACnD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,mEAAmE;YACnE,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,IAAI;IACJ,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,sBAAsB;IACtB,qBAAqB;IACrB,kBAAkB;IAClB,cAAc;IACd,OAAO;IACP,YAAY;IACZ,aAAa;IACb,cAAc;IACd,OAAO;IACP,SAAS;IACT,cAAc;IACd,qBAAqB;CACtB,CAAC,CAAA"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/util/helpers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/nordcraftengine/nordcraft",
7
7
  "dependencies": {
8
- "@nordcraft/ssr": "1.0.34"
8
+ "@nordcraft/ssr": "1.0.36"
9
9
  },
10
10
  "scripts": {
11
11
  "build": "tsc",
@@ -17,5 +17,5 @@
17
17
  "test:watch:only": "bun test --watch --only"
18
18
  },
19
19
  "files": ["dist", "src"],
20
- "version": "1.0.34"
20
+ "version": "1.0.36"
21
21
  }
@@ -1,8 +1,9 @@
1
1
  import type { CssSyntaxNode } from '@nordcraft/core/dist/styling/customProperty'
2
2
  import type { ProjectFiles } from '@nordcraft/ssr/dist/ssr.types'
3
+ import type { MemoFn } from '../types'
3
4
 
4
5
  export const getAllCustomPropertiesBySyntax = (
5
- memo: <T>(key: string, fn: () => T) => T,
6
+ memo: MemoFn,
6
7
  {
7
8
  files,
8
9
  }: {
@@ -19,6 +19,7 @@ import { createRequiredDirectChildRule } from './rules/dom/createRequiredDirectC
19
19
  import { createRequiredDirectParentRule } from './rules/dom/createRequiredDirectParentRule'
20
20
  import { createRequiredElementAttributeRule } from './rules/dom/createRequiredElementAttributeRule'
21
21
  import { createRequiredMetaTagRule } from './rules/dom/createRequiredMetaTagRule'
22
+ import { elementWithoutInteractiveContentRule } from './rules/dom/elementWithoutInteractiveContentRule'
22
23
  import { imageWithoutDimensionRule } from './rules/dom/imageWithoutDimensionRule'
23
24
  import { nonEmptyVoidElementRule } from './rules/dom/nonEmptyVoidElementRule'
24
25
  import { duplicateRouteRule } from './rules/duplicateRouteRule'
@@ -125,6 +126,7 @@ const RULES = [
125
126
  duplicateRouteRule,
126
127
  duplicateUrlParameterRule,
127
128
  duplicateWorkflowParameterRule,
129
+ elementWithoutInteractiveContentRule,
128
130
  imageWithoutDimensionRule,
129
131
  legacyActionRule,
130
132
  legacyApiRule,
@@ -0,0 +1,401 @@
1
+ import { valueFormula } from '@nordcraft/core/dist/formula/formulaUtils'
2
+ import { describe, expect, test } from 'bun:test'
3
+ import { searchProject } from '../../searchProject'
4
+ import { elementWithoutInteractiveContentRule } from './elementWithoutInteractiveContentRule'
5
+
6
+ describe('elementWithoutInteractiveContentRule', () => {
7
+ test('should detect invalid button in button element', () => {
8
+ const problems = Array.from(
9
+ searchProject({
10
+ files: {
11
+ formulas: {},
12
+ components: {
13
+ test: {
14
+ name: 'test',
15
+ nodes: {
16
+ root: {
17
+ type: 'element',
18
+ attrs: {},
19
+ classes: {},
20
+ events: {},
21
+ tag: 'button',
22
+ children: ['child1'],
23
+ style: {},
24
+ },
25
+ child1: {
26
+ type: 'element',
27
+ attrs: {},
28
+ classes: {},
29
+ events: {},
30
+ tag: 'div',
31
+ children: ['child2'],
32
+ style: {},
33
+ },
34
+ child2: {
35
+ type: 'element',
36
+ attrs: {},
37
+ classes: {},
38
+ events: {},
39
+ tag: 'button',
40
+ children: [],
41
+ style: {},
42
+ },
43
+ },
44
+ formulas: {},
45
+ apis: {},
46
+ attributes: {},
47
+ variables: {},
48
+ },
49
+ },
50
+ },
51
+ rules: [elementWithoutInteractiveContentRule],
52
+ }),
53
+ )
54
+ expect(problems).toHaveLength(1)
55
+ expect(problems[0].code).toBe('invalid element child')
56
+ expect(problems[0].path).toEqual(['components', 'test', 'nodes', 'root'])
57
+ expect(problems[0].details).toEqual({
58
+ parentTag: 'button',
59
+ invalidChild: { tag: 'button' },
60
+ })
61
+ })
62
+ test('should detect invalid label in button element', () => {
63
+ const problems = Array.from(
64
+ searchProject({
65
+ files: {
66
+ formulas: {},
67
+ components: {
68
+ test: {
69
+ name: 'test',
70
+ nodes: {
71
+ root: {
72
+ type: 'element',
73
+ attrs: {},
74
+ classes: {},
75
+ events: {},
76
+ tag: 'button',
77
+ children: ['child1'],
78
+ style: {},
79
+ },
80
+ child1: {
81
+ type: 'element',
82
+ attrs: {},
83
+ classes: {},
84
+ events: {},
85
+ tag: 'div',
86
+ children: ['child2'],
87
+ style: {},
88
+ },
89
+ child2: {
90
+ type: 'element',
91
+ attrs: {},
92
+ classes: {},
93
+ events: {},
94
+ tag: 'label',
95
+ children: [],
96
+ style: {},
97
+ },
98
+ },
99
+ formulas: {},
100
+ apis: {},
101
+ attributes: {},
102
+ variables: {},
103
+ },
104
+ },
105
+ },
106
+ rules: [elementWithoutInteractiveContentRule],
107
+ }),
108
+ )
109
+ expect(problems).toHaveLength(1)
110
+ expect(problems[0].code).toBe('invalid element child')
111
+ expect(problems[0].path).toEqual(['components', 'test', 'nodes', 'root'])
112
+ expect(problems[0].details).toEqual({
113
+ parentTag: 'button',
114
+ invalidChild: { tag: 'label' },
115
+ })
116
+ })
117
+ test('should detect invalid element with attribute requirement', () => {
118
+ const problems = Array.from(
119
+ searchProject({
120
+ files: {
121
+ formulas: {},
122
+ components: {
123
+ test: {
124
+ name: 'test',
125
+ nodes: {
126
+ root: {
127
+ type: 'element',
128
+ attrs: {},
129
+ classes: {},
130
+ events: {},
131
+ tag: 'button',
132
+ children: ['child1'],
133
+ style: {},
134
+ },
135
+ child1: {
136
+ type: 'element',
137
+ attrs: {},
138
+ classes: {},
139
+ events: {},
140
+ tag: 'div',
141
+ children: ['child2'],
142
+ style: {},
143
+ },
144
+ child2: {
145
+ type: 'element',
146
+ attrs: { href: valueFormula('https://example.com') },
147
+ classes: {},
148
+ events: {},
149
+ tag: 'a',
150
+ children: [],
151
+ style: {},
152
+ },
153
+ },
154
+ formulas: {},
155
+ apis: {},
156
+ attributes: {},
157
+ variables: {},
158
+ },
159
+ },
160
+ },
161
+ rules: [elementWithoutInteractiveContentRule],
162
+ }),
163
+ )
164
+ expect(problems).toHaveLength(1)
165
+ expect(problems[0].code).toBe('invalid element child')
166
+ expect(problems[0].path).toEqual(['components', 'test', 'nodes', 'root'])
167
+ expect(problems[0].details).toEqual({
168
+ parentTag: 'button',
169
+ invalidChild: { tag: 'a', whenAttributeIsPresent: 'href' },
170
+ })
171
+ })
172
+ test('should allow element children when attribute requirement is not met', () => {
173
+ const problems = Array.from(
174
+ searchProject({
175
+ files: {
176
+ formulas: {},
177
+ components: {
178
+ test: {
179
+ name: 'test',
180
+ nodes: {
181
+ root: {
182
+ type: 'element',
183
+ attrs: {},
184
+ classes: {},
185
+ events: {},
186
+ tag: 'button',
187
+ children: ['child1'],
188
+ style: {},
189
+ },
190
+ child1: {
191
+ type: 'element',
192
+ attrs: {},
193
+ classes: {},
194
+ events: {},
195
+ tag: 'div',
196
+ children: ['child2'],
197
+ style: {},
198
+ },
199
+ child2: {
200
+ type: 'element',
201
+ attrs: {},
202
+ classes: {},
203
+ events: {},
204
+ tag: 'a',
205
+ children: [],
206
+ style: {},
207
+ },
208
+ },
209
+ formulas: {},
210
+ apis: {},
211
+ attributes: {},
212
+ variables: {},
213
+ },
214
+ },
215
+ },
216
+ rules: [elementWithoutInteractiveContentRule],
217
+ }),
218
+ )
219
+ expect(problems).toHaveLength(0)
220
+ })
221
+ test('should detect invalid children when negative attribute requirement is met', () => {
222
+ const problems = Array.from(
223
+ searchProject({
224
+ files: {
225
+ formulas: {},
226
+ components: {
227
+ test: {
228
+ name: 'test',
229
+ nodes: {
230
+ root: {
231
+ type: 'element',
232
+ attrs: {},
233
+ classes: {},
234
+ events: {},
235
+ tag: 'button',
236
+ children: ['child1'],
237
+ style: {},
238
+ },
239
+ child1: {
240
+ type: 'element',
241
+ attrs: {},
242
+ classes: {},
243
+ events: {},
244
+ tag: 'div',
245
+ children: ['child2'],
246
+ style: {},
247
+ },
248
+ child2: {
249
+ type: 'element',
250
+ attrs: { type: valueFormula('text') },
251
+ classes: {},
252
+ events: {},
253
+ tag: 'input',
254
+ children: [],
255
+ style: {},
256
+ },
257
+ },
258
+ formulas: {},
259
+ apis: {},
260
+ attributes: {},
261
+ variables: {},
262
+ },
263
+ },
264
+ },
265
+ rules: [elementWithoutInteractiveContentRule],
266
+ }),
267
+ )
268
+ expect(problems).toHaveLength(0)
269
+ })
270
+ test('should detect invalid label in button element in nested component', () => {
271
+ const problems = Array.from(
272
+ searchProject({
273
+ files: {
274
+ formulas: {},
275
+ components: {
276
+ test: {
277
+ name: 'test',
278
+ nodes: {
279
+ root: {
280
+ type: 'element',
281
+ attrs: {},
282
+ classes: {},
283
+ events: {},
284
+ tag: 'button',
285
+ children: ['child1'],
286
+ style: {},
287
+ },
288
+ child1: {
289
+ type: 'component',
290
+ attrs: {},
291
+ name: 'buttonComponent',
292
+ events: {},
293
+ children: [],
294
+ style: {},
295
+ },
296
+ },
297
+ formulas: {},
298
+ apis: {},
299
+ attributes: {},
300
+ variables: {},
301
+ },
302
+ buttonComponent: {
303
+ name: 'buttonComponent',
304
+ nodes: {
305
+ root: {
306
+ type: 'element',
307
+ attrs: {},
308
+ classes: {},
309
+ events: {},
310
+ tag: 'div',
311
+ children: ['child1'],
312
+ style: {},
313
+ },
314
+ child1: {
315
+ type: 'element',
316
+ attrs: {},
317
+ classes: {},
318
+ events: {},
319
+ tag: 'div',
320
+ children: ['child2'],
321
+ style: {},
322
+ },
323
+ child2: {
324
+ type: 'element',
325
+ attrs: {},
326
+ classes: {},
327
+ events: {},
328
+ tag: 'label',
329
+ children: [],
330
+ style: {},
331
+ },
332
+ },
333
+ formulas: {},
334
+ apis: {},
335
+ attributes: {},
336
+ variables: {},
337
+ },
338
+ },
339
+ },
340
+ rules: [elementWithoutInteractiveContentRule],
341
+ }),
342
+ )
343
+ expect(problems).toHaveLength(1)
344
+ expect(problems[0].code).toBe('invalid element child')
345
+ expect(problems[0].path).toEqual(['components', 'test', 'nodes', 'root'])
346
+ expect(problems[0].details).toEqual({
347
+ parentTag: 'button',
348
+ invalidChild: { tag: 'label' },
349
+ })
350
+ })
351
+ test('should not detect valid element children', () => {
352
+ const problems = Array.from(
353
+ searchProject({
354
+ files: {
355
+ formulas: {},
356
+ components: {
357
+ test: {
358
+ name: 'test',
359
+ nodes: {
360
+ root: {
361
+ type: 'element',
362
+ attrs: {},
363
+ classes: {},
364
+ events: {},
365
+ tag: 'button',
366
+ children: ['child1', 'child2'],
367
+ style: {},
368
+ },
369
+ child1: {
370
+ type: 'element',
371
+ attrs: {},
372
+ classes: {},
373
+ events: {},
374
+ tag: 'p',
375
+ children: [],
376
+ style: {},
377
+ },
378
+ child2: {
379
+ type: 'element',
380
+ attrs: {},
381
+ classes: {},
382
+ events: {},
383
+ tag: 'p',
384
+ children: [],
385
+ style: {},
386
+ },
387
+ },
388
+ formulas: {},
389
+ apis: {},
390
+ attributes: {},
391
+ variables: {},
392
+ },
393
+ },
394
+ },
395
+ rules: [elementWithoutInteractiveContentRule],
396
+ }),
397
+ )
398
+
399
+ expect(problems).toHaveLength(0)
400
+ })
401
+ })
@@ -0,0 +1,80 @@
1
+ import type { Component } from '@nordcraft/core/dist/component/component.types'
2
+ import type { ToddleComponent } from '@nordcraft/core/dist/component/ToddleComponent'
3
+ import { isDefined } from '@nordcraft/core/dist/utils/util'
4
+ import type { Rule } from '../../types'
5
+ import {
6
+ interactiveContentElementDefinition,
7
+ type InteractiveContent,
8
+ } from '../../util/helpers'
9
+
10
+ const ELEMENTS_WITHOUT_INTERACTIVE_CONTENT = ['button', 'a']
11
+
12
+ export const elementWithoutInteractiveContentRule: Rule<{
13
+ parentTag: string
14
+ invalidChild: InteractiveContent
15
+ }> = {
16
+ code: 'invalid element child',
17
+ level: 'warning',
18
+ category: 'Accessibility',
19
+ visit: (report, args) => {
20
+ if (args.nodeType !== 'component-node') {
21
+ return
22
+ }
23
+ const { value, component, path, files } = args
24
+ if (
25
+ value.type !== 'element' ||
26
+ !ELEMENTS_WITHOUT_INTERACTIVE_CONTENT.includes(value.tag)
27
+ ) {
28
+ return
29
+ }
30
+ // TODO: Consider memoizing this function to avoid repeated searches
31
+ const searchChildren = (
32
+ container: ToddleComponent<Function> | Component,
33
+ children: string[],
34
+ results: Array<InteractiveContent> = [],
35
+ ): Array<InteractiveContent> => {
36
+ return children.reduce((acc, childId) => {
37
+ const child = container.nodes[childId]
38
+ if (!isDefined(child) || child.type === 'text') {
39
+ return acc
40
+ }
41
+ if (child.type === 'element') {
42
+ // Check if the child element is an interactive content element
43
+ const interactiveElement = interactiveContentElementDefinition(child)
44
+ if (interactiveElement) {
45
+ // TODO: consider visiting this element's children instead of returning early
46
+ return [...acc, interactiveElement]
47
+ }
48
+ }
49
+ const allResults = [...acc]
50
+ if (child.type === 'component') {
51
+ const component = child.package
52
+ ? files.packages?.[child.package]?.components?.[child.name]
53
+ : files.components?.[child.name]
54
+ if (!component) {
55
+ return results
56
+ }
57
+ // Search children in the component's own nodes
58
+ allResults.push(
59
+ ...searchChildren(
60
+ component,
61
+ component.nodes['root']?.children ?? [],
62
+ acc,
63
+ ),
64
+ )
65
+ }
66
+ // Search children in slot/component/element:
67
+ return searchChildren(container, child.children, allResults)
68
+ }, results)
69
+ }
70
+ const childTags = searchChildren(component, value.children)
71
+ if (childTags.length > 0) {
72
+ childTags.forEach((ic) =>
73
+ report(path, {
74
+ parentTag: value.tag,
75
+ invalidChild: ic,
76
+ }),
77
+ )
78
+ }
79
+ },
80
+ }
@@ -160,6 +160,7 @@ function* visitNode(
160
160
  } & NodeType,
161
161
  state: ApplicationState | undefined,
162
162
  ): Generator<Result> {
163
+ performance.mark(`visitNode-${args.path.join('/')}`)
163
164
  const { rules, pathsToVisit, ...data } = args
164
165
  const { files, value, path, memo, nodeType } = data
165
166
  if (!shouldSearchPath(data.path, pathsToVisit)) {
@@ -168,6 +169,7 @@ function* visitNode(
168
169
 
169
170
  const results: Result[] = []
170
171
  for (const rule of rules) {
172
+ performance.mark(`rule-${rule.code}`)
171
173
  rule.visit(
172
174
  (path, details) => {
173
175
  results.push({
package/src/types.d.ts CHANGED
@@ -30,6 +30,7 @@ type Code =
30
30
  | 'duplicate route'
31
31
  | 'invalid api parser mode'
32
32
  | 'invalid api proxy body setting'
33
+ | 'invalid element child'
33
34
  | 'legacy action'
34
35
  | 'legacy api'
35
36
  | 'legacy formula'
@@ -135,6 +136,8 @@ export interface ApplicationState {
135
136
  projectDetails?: ToddleProject
136
137
  }
137
138
 
139
+ type MemoFn = <T>(key: string, fn: () => T) => T
140
+
138
141
  type Base = {
139
142
  files: Omit<ProjectFiles, 'config'> & Partial<Pick<ProjectFiles, 'config'>>
140
143
  /**
@@ -149,7 +152,7 @@ type Base = {
149
152
  * @param fn A function that returns the value to be memoized. This function is only called if the value is not already in the cache already.
150
153
  * @returns The value of the memoized function.
151
154
  */
152
- memo: <T>(key: string, fn: () => T) => T
155
+ memo: MemoFn
153
156
  }
154
157
 
155
158
  type ProjectFormulaNode = {
@@ -1,4 +1,8 @@
1
- import type { ActionModel } from '@nordcraft/core/dist/component/component.types'
1
+ import type {
2
+ ActionModel,
3
+ ElementNodeModel,
4
+ } from '@nordcraft/core/dist/component/component.types'
5
+ import { isDefined } from '@nordcraft/core/dist/utils/util'
2
6
 
3
7
  export function shouldSearchPath(
4
8
  path: (string | number)[],
@@ -43,3 +47,58 @@ const LEGACY_CUSTOM_ACTIONS = new Set([
43
47
  'TriggerEvent',
44
48
  'Set session cookies',
45
49
  ])
50
+
51
+ interface BaseInteractiveContent {
52
+ tag: string
53
+ }
54
+
55
+ interface InteractiveContentWithAttributeRequirement
56
+ extends BaseInteractiveContent {
57
+ whenAttributeIsPresent: string
58
+ }
59
+
60
+ interface InteractiveContentWithNegativeAttributeRequirement
61
+ extends BaseInteractiveContent {
62
+ whenAttributeIsNot: { attribute: string; value: string }
63
+ }
64
+
65
+ export type InteractiveContent =
66
+ | BaseInteractiveContent
67
+ | InteractiveContentWithAttributeRequirement
68
+ | InteractiveContentWithNegativeAttributeRequirement
69
+
70
+ const INTERACTIVE_CONTENT: InteractiveContent[] = [
71
+ { tag: 'button' },
72
+ { tag: 'details' },
73
+ { tag: 'embed' },
74
+ { tag: 'iframe' },
75
+ { tag: 'label' },
76
+ { tag: 'select' },
77
+ { tag: 'textarea' },
78
+ { tag: 'a', whenAttributeIsPresent: 'href' },
79
+ { tag: 'audio', whenAttributeIsPresent: 'controls' },
80
+ { tag: 'img', whenAttributeIsPresent: 'usemap' },
81
+ { tag: 'input', whenAttributeIsNot: { attribute: 'type', value: 'hidden' } },
82
+ { tag: 'object', whenAttributeIsPresent: 'usemap' },
83
+ { tag: 'video', whenAttributeIsPresent: 'controls' },
84
+ ]
85
+
86
+ export const interactiveContentElementDefinition = (
87
+ element: ElementNodeModel,
88
+ ) =>
89
+ INTERACTIVE_CONTENT.find((ic) => {
90
+ if (element.tag !== ic.tag) {
91
+ return false
92
+ }
93
+ if ('whenAttributeIsPresent' in ic) {
94
+ return isDefined(element.attrs[ic.whenAttributeIsPresent])
95
+ }
96
+ if ('whenAttributeIsNot' in ic) {
97
+ const attributeFormula = element.attrs[ic.whenAttributeIsNot.attribute]
98
+ return (
99
+ attributeFormula?.type === 'value' &&
100
+ attributeFormula.value === ic.whenAttributeIsNot.value
101
+ )
102
+ }
103
+ return true
104
+ })