@finos/legend-extension-dsl-data-space 10.0.2 → 10.0.4

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.
Files changed (67) hide show
  1. package/lib/components/DataSpaceDataAccess.d.ts.map +1 -1
  2. package/lib/components/DataSpaceDataAccess.js +11 -3
  3. package/lib/components/DataSpaceDataAccess.js.map +1 -1
  4. package/lib/components/DataSpaceDescription.d.ts +1 -1
  5. package/lib/components/DataSpaceDescription.d.ts.map +1 -1
  6. package/lib/components/DataSpaceDescription.js +8 -3
  7. package/lib/components/DataSpaceDescription.js.map +1 -1
  8. package/lib/components/DataSpaceDiagramViewer.d.ts +1 -1
  9. package/lib/components/DataSpaceDiagramViewer.d.ts.map +1 -1
  10. package/lib/components/DataSpaceDiagramViewer.js +22 -6
  11. package/lib/components/DataSpaceDiagramViewer.js.map +1 -1
  12. package/lib/components/DataSpaceModelsDocumentation.d.ts.map +1 -1
  13. package/lib/components/DataSpaceModelsDocumentation.js +11 -3
  14. package/lib/components/DataSpaceModelsDocumentation.js.map +1 -1
  15. package/lib/components/DataSpaceQuickStart.d.ts.map +1 -1
  16. package/lib/components/DataSpaceQuickStart.js +75 -61
  17. package/lib/components/DataSpaceQuickStart.js.map +1 -1
  18. package/lib/components/DataSpaceViewer.d.ts.map +1 -1
  19. package/lib/components/DataSpaceViewer.js +36 -14
  20. package/lib/components/DataSpaceViewer.js.map +1 -1
  21. package/lib/components/DataSpaceViewerActivityBar.d.ts.map +1 -1
  22. package/lib/components/DataSpaceViewerActivityBar.js +6 -7
  23. package/lib/components/DataSpaceViewerActivityBar.js.map +1 -1
  24. package/lib/components/DataSpaceWiki.d.ts.map +1 -1
  25. package/lib/components/DataSpaceWiki.js +11 -0
  26. package/lib/components/DataSpaceWiki.js.map +1 -1
  27. package/lib/graph-manager/action/analytics/DataSpaceAnalysis.d.ts +3 -1
  28. package/lib/graph-manager/action/analytics/DataSpaceAnalysis.d.ts.map +1 -1
  29. package/lib/graph-manager/action/analytics/DataSpaceAnalysis.js +3 -0
  30. package/lib/graph-manager/action/analytics/DataSpaceAnalysis.js.map +1 -1
  31. package/lib/graph-manager/protocol/pure/v1/V1_DSL_DataSpace_PureGraphManagerExtension.d.ts.map +1 -1
  32. package/lib/graph-manager/protocol/pure/v1/V1_DSL_DataSpace_PureGraphManagerExtension.js +7 -4
  33. package/lib/graph-manager/protocol/pure/v1/V1_DSL_DataSpace_PureGraphManagerExtension.js.map +1 -1
  34. package/lib/graph-manager/protocol/pure/v1/engine/analytics/V1_DataSpaceAnalysis.d.ts +4 -5
  35. package/lib/graph-manager/protocol/pure/v1/engine/analytics/V1_DataSpaceAnalysis.d.ts.map +1 -1
  36. package/lib/graph-manager/protocol/pure/v1/engine/analytics/V1_DataSpaceAnalysis.js +64 -62
  37. package/lib/graph-manager/protocol/pure/v1/engine/analytics/V1_DataSpaceAnalysis.js.map +1 -1
  38. package/lib/index.css +2 -2
  39. package/lib/index.css.map +1 -1
  40. package/lib/package.json +1 -1
  41. package/lib/stores/DSL_DataSpace_LegendApplicationPlugin_Extension.d.ts +1 -0
  42. package/lib/stores/DSL_DataSpace_LegendApplicationPlugin_Extension.d.ts.map +1 -1
  43. package/lib/stores/DataSpaceModelsDocumentationState.d.ts.map +1 -1
  44. package/lib/stores/DataSpaceModelsDocumentationState.js +1 -1
  45. package/lib/stores/DataSpaceModelsDocumentationState.js.map +1 -1
  46. package/lib/stores/DataSpaceViewerState.d.ts +38 -15
  47. package/lib/stores/DataSpaceViewerState.d.ts.map +1 -1
  48. package/lib/stores/DataSpaceViewerState.js +132 -62
  49. package/lib/stores/DataSpaceViewerState.js.map +1 -1
  50. package/lib/stores/query/DataSpaceQueryBuilderState.js +2 -2
  51. package/lib/stores/query/DataSpaceQueryBuilderState.js.map +1 -1
  52. package/package.json +13 -13
  53. package/src/components/DataSpaceDataAccess.tsx +27 -5
  54. package/src/components/DataSpaceDescription.tsx +22 -5
  55. package/src/components/DataSpaceDiagramViewer.tsx +49 -15
  56. package/src/components/DataSpaceModelsDocumentation.tsx +29 -5
  57. package/src/components/DataSpaceQuickStart.tsx +223 -211
  58. package/src/components/DataSpaceViewer.tsx +66 -12
  59. package/src/components/DataSpaceViewerActivityBar.tsx +6 -3
  60. package/src/components/DataSpaceWiki.tsx +14 -0
  61. package/src/graph-manager/action/analytics/DataSpaceAnalysis.ts +4 -0
  62. package/src/graph-manager/protocol/pure/v1/V1_DSL_DataSpace_PureGraphManagerExtension.ts +15 -3
  63. package/src/graph-manager/protocol/pure/v1/engine/analytics/V1_DataSpaceAnalysis.ts +112 -89
  64. package/src/stores/DSL_DataSpace_LegendApplicationPlugin_Extension.ts +5 -0
  65. package/src/stores/DataSpaceModelsDocumentationState.ts +1 -1
  66. package/src/stores/DataSpaceViewerState.ts +193 -73
  67. package/src/stores/query/DataSpaceQueryBuilderState.ts +2 -2
@@ -38,6 +38,7 @@ import {
38
38
  import {
39
39
  type DataSpaceViewerState,
40
40
  DATA_SPACE_VIEWER_ACTIVITY_MODE,
41
+ generateAnchorForActivity,
41
42
  } from '../stores/DataSpaceViewerState.js';
42
43
 
43
44
  const ActivityBarMenu = observer(
@@ -64,7 +65,7 @@ const ActivityBarMenu = observer(
64
65
  <MenuContentItem onClick={toggleExpandedMode}>
65
66
  {layoutState.isExpandedModeEnabled
66
67
  ? 'Disable Expanded Mode'
67
- : 'Enable Expanded Mode'}{' '}
68
+ : 'Enable Expanded Mode'}
68
69
  </MenuContentItem>
69
70
  </MenuContent>
70
71
  }
@@ -89,8 +90,10 @@ export const DataSpaceViewerActivityBar = observer(
89
90
  const changeActivity =
90
91
  (activity: DATA_SPACE_VIEWER_ACTIVITY_MODE): (() => void) =>
91
92
  (): void => {
92
- dataSpaceViewerState.setCurrentActivity(activity);
93
- dataSpaceViewerState.onZoneChange?.(activity);
93
+ dataSpaceViewerState.changeZone(
94
+ generateAnchorForActivity(activity),
95
+ true,
96
+ );
94
97
  };
95
98
 
96
99
  const wikiActivities: DataSpaceViewerActivityConfig[] = [
@@ -21,11 +21,25 @@ import { DataSpaceModelsDocumentation } from './DataSpaceModelsDocumentation.js'
21
21
  import { DataSpaceQuickStart } from './DataSpaceQuickStart.js';
22
22
  import { DataSpaceDataAccess } from './DataSpaceDataAccess.js';
23
23
  import { DataSpaceDescription } from './DataSpaceDescription.js';
24
+ import { useEffect } from 'react';
24
25
 
25
26
  export const DataSpaceWiki = observer(
26
27
  (props: { dataSpaceViewerState: DataSpaceViewerState }) => {
27
28
  const { dataSpaceViewerState } = props;
28
29
 
30
+ useEffect(() => {
31
+ if (
32
+ dataSpaceViewerState.layoutState.wikiNavigationCommand &&
33
+ dataSpaceViewerState.layoutState.isAllWikiPageFullyRendered
34
+ ) {
35
+ dataSpaceViewerState.layoutState.navigateWikiAnchor();
36
+ }
37
+ }, [
38
+ dataSpaceViewerState,
39
+ dataSpaceViewerState.layoutState.wikiNavigationCommand,
40
+ dataSpaceViewerState.layoutState.isAllWikiPageFullyRendered,
41
+ ]);
42
+
29
43
  return (
30
44
  <div className="data-space__viewer__wiki">
31
45
  <DataSpaceDescription dataSpaceViewerState={dataSpaceViewerState} />
@@ -19,6 +19,7 @@ import {
19
19
  type Mapping,
20
20
  type PackageableRuntime,
21
21
  type PureModel,
22
+ type DatasetSpecification,
22
23
  } from '@finos/legend-graph';
23
24
  import { prettyCONSTName, uuid } from '@finos/legend-shared';
24
25
  import type { DataSpaceSupportInfo } from '../../../graph/metamodel/pure/model/packageableElements/dataSpace/DSL_DataSpace_DataSpace.js';
@@ -31,6 +32,8 @@ export class DataSpaceExecutionContextAnalysisResult {
31
32
  mapping!: Mapping;
32
33
  defaultRuntime!: PackageableRuntime;
33
34
  compatibleRuntimes!: PackageableRuntime[];
35
+ // TODO: mapping coverage analysis
36
+ datasets: DatasetSpecification[] = [];
34
37
  }
35
38
 
36
39
  export class DataSpaceTaggedValueInfo {
@@ -158,6 +161,7 @@ export class DataSpaceExecutableAnalysisResult {
158
161
  executable!: string;
159
162
  info?: DataSpaceExecutableInfo | undefined;
160
163
  result!: DataSpaceExecutableResult;
164
+ datasets: DatasetSpecification[] = [];
161
165
  }
162
166
 
163
167
  export class DataSpaceAnalysisResult {
@@ -28,6 +28,8 @@ import {
28
28
  V1_EngineRuntime,
29
29
  V1_Class,
30
30
  GRAPH_MANAGER_EVENT,
31
+ V1_buildDatasetSpecification,
32
+ type PureProtocolProcessorPlugin,
31
33
  } from '@finos/legend-graph';
32
34
  import type { Entity } from '@finos/legend-storage';
33
35
  import {
@@ -68,12 +70,13 @@ import {
68
70
  } from '../../../action/analytics/DataSpaceAnalysis.js';
69
71
  import { DSL_DataSpace_PureGraphManagerExtension } from '../DSL_DataSpace_PureGraphManagerExtension.js';
70
72
  import {
71
- V1_DataSpaceAnalysisResult,
73
+ type V1_DataSpaceAnalysisResult,
72
74
  V1_DataSpaceAssociationDocumentationEntry,
73
75
  V1_DataSpaceClassDocumentationEntry,
74
76
  V1_DataSpaceEnumerationDocumentationEntry,
75
77
  V1_DataSpaceExecutableTDSResult,
76
78
  V1_DataSpaceServiceExecutableInfo,
79
+ V1_deserializeDataSpaceAnalysisResult,
77
80
  } from './engine/analytics/V1_DataSpaceAnalysis.js';
78
81
  import { getDiagram } from '@finos/legend-extension-dsl-diagram/graph';
79
82
 
@@ -141,13 +144,16 @@ export class V1_DSL_DataSpace_PureGraphManagerExtension extends DSL_DataSpace_Pu
141
144
  );
142
145
  }
143
146
  return this.buildDataSpaceAnalytics(
144
- V1_DataSpaceAnalysisResult.deserialize(analysisResult),
147
+ analysisResult,
148
+ this.graphManager.pluginManager.getPureProtocolProcessorPlugins(),
145
149
  );
146
150
  }
147
151
 
148
152
  private async buildDataSpaceAnalytics(
149
- analysisResult: V1_DataSpaceAnalysisResult,
153
+ json: PlainObject<V1_DataSpaceAnalysisResult>,
154
+ plugins: PureProtocolProcessorPlugin[],
150
155
  ): Promise<DataSpaceAnalysisResult> {
156
+ const analysisResult = V1_deserializeDataSpaceAnalysisResult(json, plugins);
151
157
  const result = new DataSpaceAnalysisResult();
152
158
  result.name = analysisResult.name;
153
159
  result.package = analysisResult.package;
@@ -310,6 +316,9 @@ export class V1_DSL_DataSpace_PureGraphManagerExtension extends DSL_DataSpace_Pu
310
316
  contextAnalysisResult.compatibleRuntimes = context.compatibleRuntimes.map(
311
317
  (runtime) => graph.getRuntime(runtime),
312
318
  );
319
+ contextAnalysisResult.datasets = context.datasets.map((dataset) =>
320
+ V1_buildDatasetSpecification(dataset, plugins),
321
+ );
313
322
  result.executionContextsIndex.set(
314
323
  contextAnalysisResult.name,
315
324
  contextAnalysisResult,
@@ -445,6 +454,9 @@ export class V1_DSL_DataSpace_PureGraphManagerExtension extends DSL_DataSpace_Pu
445
454
  executable.title = executableProtocol.title;
446
455
  executable.description = executableProtocol.description;
447
456
  executable.executable = executableProtocol.executable;
457
+ executable.datasets = executableProtocol.datasets.map((dataset) =>
458
+ V1_buildDatasetSpecification(dataset, plugins),
459
+ );
448
460
  if (
449
461
  executableProtocol.info instanceof V1_DataSpaceServiceExecutableInfo
450
462
  ) {
@@ -18,6 +18,9 @@ import {
18
18
  type V1_Multiplicity,
19
19
  V1_PureModelContextData,
20
20
  V1_multiplicityModelSchema,
21
+ type V1_DatasetSpecification,
22
+ type PureProtocolProcessorPlugin,
23
+ V1_deserializeDatasetSpecification,
21
24
  } from '@finos/legend-graph';
22
25
  import {
23
26
  SerializationFactory,
@@ -39,6 +42,7 @@ import {
39
42
  optional,
40
43
  primitive,
41
44
  SKIP,
45
+ type ModelSchema,
42
46
  } from 'serializr';
43
47
  import type { V1_DataSpaceSupportInfo } from '../../model/packageableElements/dataSpace/V1_DSL_DataSpace_DataSpace.js';
44
48
  import { V1_deserializeSupportInfo } from '../../transformation/pureProtocol/V1_DSL_DataSpace_ProtocolHelper.js';
@@ -76,19 +80,28 @@ class V1_DataSpaceExecutionContextAnalysisResult {
76
80
  mapping!: string;
77
81
  defaultRuntime!: string;
78
82
  compatibleRuntimes!: string[];
79
-
80
- static readonly serialization = new SerializationFactory(
81
- createModelSchema(V1_DataSpaceExecutionContextAnalysisResult, {
82
- compatibleRuntimes: list(primitive()),
83
- defaultRuntime: primitive(),
84
- description: optional(primitive()),
85
- mapping: primitive(),
86
- name: primitive(),
87
- title: optional(primitive()),
88
- }),
89
- );
83
+ datasets: V1_DatasetSpecification[] = [];
90
84
  }
91
85
 
86
+ const V1_dataSpaceExecutionContextAnalysisResultModelSchema = (
87
+ plugins: PureProtocolProcessorPlugin[],
88
+ ): ModelSchema<V1_DataSpaceExecutionContextAnalysisResult> =>
89
+ createModelSchema(V1_DataSpaceExecutionContextAnalysisResult, {
90
+ compatibleRuntimes: list(primitive()),
91
+ datasets: list(
92
+ custom(
93
+ () => SKIP,
94
+ (val: PlainObject<V1_DatasetSpecification>) =>
95
+ V1_deserializeDatasetSpecification(val, plugins),
96
+ ),
97
+ ),
98
+ defaultRuntime: primitive(),
99
+ description: optional(primitive()),
100
+ mapping: primitive(),
101
+ name: primitive(),
102
+ title: optional(primitive()),
103
+ });
104
+
92
105
  export class V1_DataSpaceBasicDocumentationEntry {
93
106
  name!: string;
94
107
  docs: string[] = [];
@@ -321,18 +334,27 @@ export class V1_DataSpaceExecutableAnalysisResult {
321
334
  executable!: string;
322
335
  info?: V1_DataSpaceExecutableInfo | undefined;
323
336
  result!: V1_DataSpaceExecutableResult;
324
-
325
- static readonly serialization = new SerializationFactory(
326
- createModelSchema(V1_DataSpaceExecutableAnalysisResult, {
327
- executable: primitive(),
328
- description: optional(primitive()),
329
- info: optionalCustom(() => SKIP, V1_deserializeDataSpaceExecutableInfo),
330
- result: custom(() => SKIP, V1_deserializeDataSpaceExecutableResult),
331
- title: primitive(),
332
- }),
333
- );
337
+ datasets: V1_DatasetSpecification[] = [];
334
338
  }
335
339
 
340
+ const V1_dataSpaceExecutableAnalysisResultModelSchema = (
341
+ plugins: PureProtocolProcessorPlugin[],
342
+ ): ModelSchema<V1_DataSpaceExecutableAnalysisResult> =>
343
+ createModelSchema(V1_DataSpaceExecutableAnalysisResult, {
344
+ datasets: list(
345
+ custom(
346
+ () => SKIP,
347
+ (val: PlainObject<V1_DatasetSpecification>) =>
348
+ V1_deserializeDatasetSpecification(val, plugins),
349
+ ),
350
+ ),
351
+ executable: primitive(),
352
+ description: optional(primitive()),
353
+ info: optionalCustom(() => SKIP, V1_deserializeDataSpaceExecutableInfo),
354
+ result: custom(() => SKIP, V1_deserializeDataSpaceExecutableResult),
355
+ title: primitive(),
356
+ });
357
+
336
358
  export class V1_DataSpaceAnalysisResult {
337
359
  name!: string;
338
360
  package!: string;
@@ -355,74 +377,75 @@ export class V1_DataSpaceAnalysisResult {
355
377
 
356
378
  executables: V1_DataSpaceExecutableAnalysisResult[] = [];
357
379
  diagrams: V1_DataSpaceDiagramAnalysisResult[] = [];
380
+ }
358
381
 
359
- private static readonly serialization = new SerializationFactory(
360
- createModelSchema(V1_DataSpaceAnalysisResult, {
361
- name: primitive(),
362
- package: primitive(),
363
- path: primitive(),
364
-
365
- taggedValues: list(object(V1_DataSpaceTaggedValueInfo)),
366
- stereotypes: list(object(V1_DataSpaceStereotypeInfo)),
367
-
368
- title: optional(primitive()),
369
- description: optional(primitive()),
370
-
371
- supportInfo: optionalCustom(
372
- () => SKIP,
373
- (val) => V1_deserializeSupportInfo(val),
374
- ),
375
-
376
- model: object(V1_PureModelContextData),
377
-
378
- executionContexts: list(
379
- object(V1_DataSpaceExecutionContextAnalysisResult),
380
- ),
381
- defaultExecutionContext: primitive(),
382
-
383
- elements: list(primitive()),
384
- elementDocs: list(
385
- custom(() => SKIP, V1_deserializeModelDocumentationEntry),
386
- ),
387
-
388
- featuredDiagrams: list(primitive()),
389
- diagrams: customListWithSchema(
390
- V1_DataSpaceDiagramAnalysisResult.serialization.schema,
391
- ),
392
- executables: customListWithSchema(
393
- V1_DataSpaceExecutableAnalysisResult.serialization.schema,
394
- ),
395
- }),
382
+ const V1_dataSpaceAnalysisResultModelSchema = (
383
+ plugins: PureProtocolProcessorPlugin[],
384
+ ): ModelSchema<V1_DataSpaceAnalysisResult> =>
385
+ createModelSchema(V1_DataSpaceAnalysisResult, {
386
+ name: primitive(),
387
+ package: primitive(),
388
+ path: primitive(),
389
+
390
+ taggedValues: list(object(V1_DataSpaceTaggedValueInfo)),
391
+ stereotypes: list(object(V1_DataSpaceStereotypeInfo)),
392
+
393
+ title: optional(primitive()),
394
+ description: optional(primitive()),
395
+
396
+ supportInfo: optionalCustom(
397
+ () => SKIP,
398
+ (val) => V1_deserializeSupportInfo(val),
399
+ ),
400
+
401
+ model: object(V1_PureModelContextData),
402
+
403
+ executionContexts: customListWithSchema(
404
+ V1_dataSpaceExecutionContextAnalysisResultModelSchema(plugins),
405
+ ),
406
+ defaultExecutionContext: primitive(),
407
+
408
+ elements: list(primitive()),
409
+ elementDocs: list(
410
+ custom(() => SKIP, V1_deserializeModelDocumentationEntry),
411
+ ),
412
+
413
+ featuredDiagrams: list(primitive()),
414
+ diagrams: customListWithSchema(
415
+ V1_DataSpaceDiagramAnalysisResult.serialization.schema,
416
+ ),
417
+ executables: customListWithSchema(
418
+ V1_dataSpaceExecutableAnalysisResultModelSchema(plugins),
419
+ ),
420
+ });
421
+
422
+ export const V1_deserializeDataSpaceAnalysisResult = (
423
+ json: PlainObject<V1_DataSpaceAnalysisResult>,
424
+ plugins: PureProtocolProcessorPlugin[],
425
+ ): V1_DataSpaceAnalysisResult => {
426
+ const result = deserialize(
427
+ V1_dataSpaceAnalysisResultModelSchema(plugins),
428
+ json,
396
429
  );
397
-
398
- static deserialize(
399
- json: PlainObject<V1_DataSpaceAnalysisResult>,
400
- ): V1_DataSpaceAnalysisResult {
401
- const result = deserialize(
402
- V1_DataSpaceAnalysisResult.serialization.schema,
403
- json,
404
- );
405
- /**
406
- * Featured diagrams will be transformed to diagrams, so here we nicely
407
- * auto-transform it for backward compatibility
408
- *
409
- * @backwardCompatibility
410
- */
411
- if (json.featuredDiagrams && Array.isArray(json.featuredDiagrams)) {
412
- const diagramResults = json.featuredDiagrams
413
- .map((featuredDiagram) => {
414
- if (isString(featuredDiagram)) {
415
- const diagramAnalysisResult =
416
- new V1_DataSpaceDiagramAnalysisResult();
417
- diagramAnalysisResult.title = '';
418
- diagramAnalysisResult.diagram = featuredDiagram;
419
- return diagramAnalysisResult;
420
- }
421
- return undefined;
422
- })
423
- .filter(isNonNullable);
424
- result.diagrams = result.diagrams.concat(diagramResults);
425
- }
426
- return result;
430
+ /**
431
+ * Featured diagrams will be transformed to diagrams, so here we nicely
432
+ * auto-transform it for backward compatibility
433
+ *
434
+ * @backwardCompatibility
435
+ */
436
+ if (json.featuredDiagrams && Array.isArray(json.featuredDiagrams)) {
437
+ const diagramResults = json.featuredDiagrams
438
+ .map((featuredDiagram) => {
439
+ if (isString(featuredDiagram)) {
440
+ const diagramAnalysisResult = new V1_DataSpaceDiagramAnalysisResult();
441
+ diagramAnalysisResult.title = '';
442
+ diagramAnalysisResult.diagram = featuredDiagram;
443
+ return diagramAnalysisResult;
444
+ }
445
+ return undefined;
446
+ })
447
+ .filter(isNonNullable);
448
+ result.diagrams = result.diagrams.concat(diagramResults);
427
449
  }
428
- }
450
+ return result;
451
+ };
@@ -25,6 +25,11 @@ export type TDSExecutableActionConfiguration = {
25
25
  key: string;
26
26
  title: string;
27
27
  icon?: React.ReactNode | undefined;
28
+ isSupported: (
29
+ dataSpaceViewerState: DataSpaceViewerState,
30
+ executableAnalysisResult: DataSpaceExecutableAnalysisResult,
31
+ tdsResult: DataSpaceExecutableTDSResult,
32
+ ) => boolean;
28
33
  renderer: (
29
34
  dataSpaceViewerState: DataSpaceViewerState,
30
35
  executableAnalysisResult: DataSpaceExecutableAnalysisResult,
@@ -345,7 +345,7 @@ export class DataSpaceViewerModelsDocumentationState {
345
345
  showSearchConfigurationMenu = false;
346
346
 
347
347
  // filter
348
- showFilterPanel = false;
348
+ showFilterPanel = true;
349
349
  typeFilterTreeData: TreeData<ModelsDocumentationFilterTreeNodeData>;
350
350
  packageFilterTreeData: TreeData<ModelsDocumentationFilterTreeNodeData>;
351
351
  filterTypes: string[] = [];