@docupace/ihub-config 1.1.21 → 1.1.22-admin.2
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/README.md +182 -182
- package/dist/config-extension.d.ts +23 -0
- package/dist/config-extension.d.ts.map +1 -1
- package/dist/config-extension.js +2 -0
- package/dist/config-extension.js.map +1 -1
- package/dist/config-service.d.ts +12 -3
- package/dist/config-service.d.ts.map +1 -1
- package/dist/config-service.js +128 -21
- package/dist/config-service.js.map +1 -1
- package/dist/mappers/config-mapper.d.ts.map +1 -1
- package/dist/mappers/config-mapper.js +1 -0
- package/dist/mappers/config-mapper.js.map +1 -1
- package/dist/model/graphs/config/common.graphql +7 -7
- package/dist/model/graphs/config/fields.graphql +412 -382
- package/dist/model/graphs/config/menu.graphql +60 -54
- package/dist/model/graphs/config/mutation.graphql +30 -30
- package/dist/model/graphs/config/page.graphql +263 -256
- package/dist/model/graphs/config/panel.graphql +30 -30
- package/dist/model/graphs/config/query.graphql +84 -84
- package/dist/model/graphs/config/rules.graphql +104 -104
- package/dist/model/graphs/config/selectOptions.graphql +48 -47
- package/dist/model/graphs/config/table.graphql +213 -182
- package/dist/model/graphs/config/tests.graphql +16 -16
- package/dist/model/graphs/config/theme.graphql +41 -41
- package/dist/model/graphs/config/ui-components.graphql +10 -10
- package/dist/model/graphs/domains/scalars.graphql +3 -3
- package/dist/model/graphs/filter.graphql +5 -5
- package/dist/model/graphs/schema.graphql +7 -7
- package/dist/types/graphql.d.ts +4 -2
- package/dist/types/graphql.d.ts.map +1 -1
- package/dist/types/graphql.js.map +1 -1
- package/model/graphs/config/common.graphql +7 -7
- package/model/graphs/config/fields.graphql +412 -382
- package/model/graphs/config/menu.graphql +60 -54
- package/model/graphs/config/mutation.graphql +30 -30
- package/model/graphs/config/page.graphql +263 -256
- package/model/graphs/config/panel.graphql +30 -30
- package/model/graphs/config/query.graphql +84 -84
- package/model/graphs/config/rules.graphql +104 -104
- package/model/graphs/config/selectOptions.graphql +48 -47
- package/model/graphs/config/table.graphql +213 -182
- package/model/graphs/config/tests.graphql +16 -16
- package/model/graphs/config/theme.graphql +41 -41
- package/model/graphs/config/ui-components.graphql +10 -10
- package/model/graphs/domains/scalars.graphql +3 -3
- package/model/graphs/filter.graphql +5 -5
- package/model/graphs/schema.graphql +7 -7
- package/package.json +81 -81
|
@@ -1,182 +1,213 @@
|
|
|
1
|
-
|
|
2
|
-
interface ITable {
|
|
3
|
-
dataType: String
|
|
4
|
-
selection: TableSelection
|
|
5
|
-
disableColumnSorting: Boolean
|
|
6
|
-
disableRowClick: Boolean
|
|
7
|
-
queryName: String!
|
|
8
|
-
operationName: String
|
|
9
|
-
variableDefinitions: JSON
|
|
10
|
-
variablesExpressions: JSON
|
|
11
|
-
filter: TableFilter
|
|
12
|
-
search: SimpleSearch
|
|
13
|
-
menuItems: [MenuItem!]
|
|
14
|
-
columns: [Column!]!
|
|
15
|
-
rowMenuItems: [MenuItem!]
|
|
16
|
-
preview: Preview
|
|
17
|
-
cardView: CardView
|
|
18
|
-
groupBy: GroupBy
|
|
19
|
-
orderBy: [OrderBy!]
|
|
20
|
-
flattenDataKey: String
|
|
21
|
-
actionButton: ActionButton
|
|
22
|
-
pagingMode: String
|
|
23
|
-
maxRows: Int
|
|
24
|
-
pageSizeOptions: [Int!]
|
|
25
|
-
defaultPageSize: Int
|
|
26
|
-
deferredLoad: Boolean
|
|
27
|
-
useCardView: Boolean
|
|
28
|
-
whereFilter: WhereFilter
|
|
29
|
-
whereFilterName: String
|
|
30
|
-
emptyStateMessage: String
|
|
31
|
-
unstructuredData: Boolean
|
|
32
|
-
toolbar: Toolbar
|
|
33
|
-
pagination: TablePagination
|
|
34
|
-
expandable: Expandable
|
|
35
|
-
totals: [TotalsItem!]
|
|
36
|
-
config: JSON
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
type
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
1
|
+
|
|
2
|
+
interface ITable {
|
|
3
|
+
dataType: String
|
|
4
|
+
selection: TableSelection
|
|
5
|
+
disableColumnSorting: Boolean
|
|
6
|
+
disableRowClick: Boolean
|
|
7
|
+
queryName: String!
|
|
8
|
+
operationName: String
|
|
9
|
+
variableDefinitions: JSON
|
|
10
|
+
variablesExpressions: JSON
|
|
11
|
+
filter: TableFilter
|
|
12
|
+
search: SimpleSearch
|
|
13
|
+
menuItems: [MenuItem!]
|
|
14
|
+
columns: [Column!]!
|
|
15
|
+
rowMenuItems: [MenuItem!]
|
|
16
|
+
preview: Preview
|
|
17
|
+
cardView: CardView
|
|
18
|
+
groupBy: GroupBy
|
|
19
|
+
orderBy: [OrderBy!]
|
|
20
|
+
flattenDataKey: String
|
|
21
|
+
actionButton: ActionButton
|
|
22
|
+
pagingMode: String
|
|
23
|
+
maxRows: Int
|
|
24
|
+
pageSizeOptions: [Int!]
|
|
25
|
+
defaultPageSize: Int
|
|
26
|
+
deferredLoad: Boolean
|
|
27
|
+
useCardView: Boolean
|
|
28
|
+
whereFilter: WhereFilter
|
|
29
|
+
whereFilterName: String
|
|
30
|
+
emptyStateMessage: String
|
|
31
|
+
unstructuredData: Boolean
|
|
32
|
+
toolbar: Toolbar
|
|
33
|
+
pagination: TablePagination
|
|
34
|
+
expandable: Expandable
|
|
35
|
+
totals: [TotalsItem!]
|
|
36
|
+
config: JSON
|
|
37
|
+
configPath: String
|
|
38
|
+
configurableAttributes: [ConfigurableAttribute!]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
"""One overridable sub-element of a config object identified by `configPath` — see the parent's own `configPath` field for how the two combine (`${configPath}#${configSubPath}`)."""
|
|
42
|
+
type ConfigurableAttribute {
|
|
43
|
+
name: String! # e.g. "columns", "filter" — matches the field name on the parent type
|
|
44
|
+
configPath: String! # copy of the parent object's own configPath, for convenience
|
|
45
|
+
configSubPath: String! # JSONPath relative to the parent object, e.g. "$.columns"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
type TotalsItem {
|
|
49
|
+
path: String!
|
|
50
|
+
label: String!
|
|
51
|
+
component: String
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
type GroupBy {
|
|
55
|
+
path: String
|
|
56
|
+
pathExpression: String
|
|
57
|
+
orderType: OrderType!
|
|
58
|
+
component: String
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
type OrderBy {
|
|
63
|
+
path: String!
|
|
64
|
+
orderType: OrderType!
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
type TableSelection {
|
|
68
|
+
enabled: Boolean
|
|
69
|
+
"""
|
|
70
|
+
Label for the single selection action. One-button shorthand, superseded by
|
|
71
|
+
actions.
|
|
72
|
+
"""
|
|
73
|
+
label: String @deprecated(reason: "Use actions instead.")
|
|
74
|
+
"""
|
|
75
|
+
Action dispatched by the single selection action. One-button shorthand,
|
|
76
|
+
superseded by actions. Ignored when actions is set.
|
|
77
|
+
"""
|
|
78
|
+
action: String @deprecated(reason: "Use actions instead.")
|
|
79
|
+
"""
|
|
80
|
+
Multiple actions rendered side by side in the selection bar. When set, this
|
|
81
|
+
takes precedence over the label/action pair.
|
|
82
|
+
"""
|
|
83
|
+
actions: [TableSelectionButton!]
|
|
84
|
+
disabledCondition: String
|
|
85
|
+
visibilityCondition: String
|
|
86
|
+
position: TablePinnedPosition
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
type TableSelectionButton {
|
|
90
|
+
label: String!
|
|
91
|
+
action: String!
|
|
92
|
+
visibilityCondition: String
|
|
93
|
+
disabledCondition: String
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
enum TablePinnedPosition {
|
|
97
|
+
RIGHT
|
|
98
|
+
LEFT
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
type Toolbar {
|
|
102
|
+
columns: ToolbarColumns
|
|
103
|
+
configureColumns: ToolbarColumns
|
|
104
|
+
configureFilters: ToolbarColumns
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
type ToolbarColumns {
|
|
108
|
+
enabled: Boolean
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
type TablePagination {
|
|
112
|
+
totalCount: TablePaginationTotalCount
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
type TablePaginationTotalCount {
|
|
116
|
+
enabled: Boolean
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
type Table implements ITable
|
|
120
|
+
|
|
121
|
+
type NamedTable implements ITable {
|
|
122
|
+
name: String
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
type TabbedTable {
|
|
126
|
+
tabs: [TableTab!]!
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
union AnyTable = Table | TabbedTable
|
|
130
|
+
|
|
131
|
+
type TableTab {
|
|
132
|
+
name : String!
|
|
133
|
+
label: String!
|
|
134
|
+
table: Table!
|
|
135
|
+
visibilityCondition: String
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
type TableFilter {
|
|
139
|
+
criteria: [TableCriteria!]!
|
|
140
|
+
variant: TableFilterVariant
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
type DateShortcuts {
|
|
144
|
+
enabled: Boolean
|
|
145
|
+
days: [Int!]
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
type TableCriteriaDate {
|
|
149
|
+
calendars: Int
|
|
150
|
+
disableFuture: Boolean
|
|
151
|
+
format: String
|
|
152
|
+
shortcuts: DateShortcuts
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
type TableCriteria {
|
|
156
|
+
name: String!
|
|
157
|
+
label: String!
|
|
158
|
+
labelProp: String
|
|
159
|
+
path: String!
|
|
160
|
+
component: String
|
|
161
|
+
config: JSON
|
|
162
|
+
dataType: String
|
|
163
|
+
date: TableCriteriaDate
|
|
164
|
+
defaultValue: String
|
|
165
|
+
multiple: Boolean
|
|
166
|
+
exactMatchEnabled: Boolean
|
|
167
|
+
operator: String
|
|
168
|
+
selectOptions: ISelectOptions
|
|
169
|
+
min: Float
|
|
170
|
+
max: Float
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
enum TableFilterVariant {
|
|
174
|
+
SIDEBAR
|
|
175
|
+
MODAL
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
type Column {
|
|
179
|
+
name: String!
|
|
180
|
+
label: String!
|
|
181
|
+
visible: Boolean
|
|
182
|
+
paths: [String!]
|
|
183
|
+
expression: String
|
|
184
|
+
component: String
|
|
185
|
+
sortable: Boolean
|
|
186
|
+
flex: Float
|
|
187
|
+
pinned: TablePinnedPosition
|
|
188
|
+
config: JSON
|
|
189
|
+
filter: ColumnFilter
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
type ColumnFilter {
|
|
193
|
+
operators: [String]
|
|
194
|
+
path: String
|
|
195
|
+
dataType: String
|
|
196
|
+
selectOptions: ISelectOptions
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
type SimpleSearch {
|
|
200
|
+
filterType: String
|
|
201
|
+
searchBy: String
|
|
202
|
+
placeholder: String
|
|
203
|
+
selectOptions: QuerySelectOptions!
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
type WhereFilter {
|
|
207
|
+
type: String!
|
|
208
|
+
value: JSON!
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
type Expandable {
|
|
212
|
+
component: String
|
|
213
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
type Test {
|
|
3
|
-
name : String!
|
|
4
|
-
description: String
|
|
5
|
-
configPath : String!
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
type TestResults {
|
|
9
|
-
items : [Test!]!
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
type TestQuery {
|
|
13
|
-
list(path : String!, search: String) : TestResults
|
|
14
|
-
getConfig(path : String) : JSON!
|
|
15
|
-
}
|
|
16
|
-
|
|
1
|
+
|
|
2
|
+
type Test {
|
|
3
|
+
name : String!
|
|
4
|
+
description: String
|
|
5
|
+
configPath : String!
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
type TestResults {
|
|
9
|
+
items : [Test!]!
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type TestQuery {
|
|
13
|
+
list(path : String!, search: String) : TestResults
|
|
14
|
+
getConfig(path : String) : JSON!
|
|
15
|
+
}
|
|
16
|
+
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
type Base64Image {
|
|
2
|
-
"Base64 encoded image data"
|
|
3
|
-
data: String!
|
|
4
|
-
"MIME type of the image (e.g. 'image/png', 'image/jpeg')"
|
|
5
|
-
mimeType: String!
|
|
6
|
-
"Unique hash of the image data for caching purposes"
|
|
7
|
-
hash: String!
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
type Theme {
|
|
11
|
-
name: String
|
|
12
|
-
"Base64 encoded logo image data"
|
|
13
|
-
logoImage: Base64Image
|
|
14
|
-
"""
|
|
15
|
-
@deprecated Use logoImage instead
|
|
16
|
-
SVG logo image data in string format
|
|
17
|
-
"""
|
|
18
|
-
logoSvg: String
|
|
19
|
-
"Base64 encoded sidebar logo image data"
|
|
20
|
-
sidebarLogoImage: Base64Image
|
|
21
|
-
"""
|
|
22
|
-
@deprecated Use sidebarLogoImage instead
|
|
23
|
-
SVG sidebar logo image data in string format
|
|
24
|
-
"""
|
|
25
|
-
sidebarLogoSvg: String
|
|
26
|
-
"Base64 encoded login logo image data"
|
|
27
|
-
loginLogoImage: Base64Image
|
|
28
|
-
"""
|
|
29
|
-
@deprecated Use loginLogoImage instead
|
|
30
|
-
SVG login logo image data in string format
|
|
31
|
-
"""
|
|
32
|
-
loginLogoSvg: String
|
|
33
|
-
"Base64 encoded login background image data"
|
|
34
|
-
loginBackgroundImage: Base64Image
|
|
35
|
-
"""
|
|
36
|
-
@deprecated Use loginBackgroundImage instead
|
|
37
|
-
SVG login background image data in string format
|
|
38
|
-
"""
|
|
39
|
-
loginBackgroundSvg: String
|
|
40
|
-
colors: JSON
|
|
41
|
-
}
|
|
1
|
+
type Base64Image {
|
|
2
|
+
"Base64 encoded image data"
|
|
3
|
+
data: String!
|
|
4
|
+
"MIME type of the image (e.g. 'image/png', 'image/jpeg')"
|
|
5
|
+
mimeType: String!
|
|
6
|
+
"Unique hash of the image data for caching purposes"
|
|
7
|
+
hash: String!
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
type Theme {
|
|
11
|
+
name: String
|
|
12
|
+
"Base64 encoded logo image data"
|
|
13
|
+
logoImage: Base64Image
|
|
14
|
+
"""
|
|
15
|
+
@deprecated Use logoImage instead
|
|
16
|
+
SVG logo image data in string format
|
|
17
|
+
"""
|
|
18
|
+
logoSvg: String
|
|
19
|
+
"Base64 encoded sidebar logo image data"
|
|
20
|
+
sidebarLogoImage: Base64Image
|
|
21
|
+
"""
|
|
22
|
+
@deprecated Use sidebarLogoImage instead
|
|
23
|
+
SVG sidebar logo image data in string format
|
|
24
|
+
"""
|
|
25
|
+
sidebarLogoSvg: String
|
|
26
|
+
"Base64 encoded login logo image data"
|
|
27
|
+
loginLogoImage: Base64Image
|
|
28
|
+
"""
|
|
29
|
+
@deprecated Use loginLogoImage instead
|
|
30
|
+
SVG login logo image data in string format
|
|
31
|
+
"""
|
|
32
|
+
loginLogoSvg: String
|
|
33
|
+
"Base64 encoded login background image data"
|
|
34
|
+
loginBackgroundImage: Base64Image
|
|
35
|
+
"""
|
|
36
|
+
@deprecated Use loginBackgroundImage instead
|
|
37
|
+
SVG login background image data in string format
|
|
38
|
+
"""
|
|
39
|
+
loginBackgroundSvg: String
|
|
40
|
+
colors: JSON
|
|
41
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
type TextElement implements IRowElement & IElement {
|
|
2
|
-
color: String
|
|
3
|
-
cols: Int
|
|
4
|
-
fontSize: String
|
|
5
|
-
name: String
|
|
6
|
-
sx: JSON
|
|
7
|
-
value: String
|
|
8
|
-
valueExpression: String
|
|
9
|
-
variant: String
|
|
10
|
-
visibilityCondition: String
|
|
1
|
+
type TextElement implements IRowElement & IElement {
|
|
2
|
+
color: String
|
|
3
|
+
cols: Int
|
|
4
|
+
fontSize: String
|
|
5
|
+
name: String
|
|
6
|
+
sx: JSON
|
|
7
|
+
value: String
|
|
8
|
+
valueExpression: String
|
|
9
|
+
variant: String
|
|
10
|
+
visibilityCondition: String
|
|
11
11
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
scalar Number
|
|
2
|
-
|
|
3
|
-
scalar JSON
|
|
1
|
+
scalar Number
|
|
2
|
+
|
|
3
|
+
scalar JSON
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
enum OrderType {
|
|
3
|
-
ASC
|
|
4
|
-
DESC
|
|
5
|
-
}
|
|
1
|
+
|
|
2
|
+
enum OrderType {
|
|
3
|
+
ASC
|
|
4
|
+
DESC
|
|
5
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
type Query {
|
|
2
|
-
config: ConfigQuery
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
type Mutation {
|
|
6
|
-
config: ConfigMutation
|
|
7
|
-
}
|
|
1
|
+
type Query {
|
|
2
|
+
config: ConfigQuery
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
type Mutation {
|
|
6
|
+
config: ConfigMutation
|
|
7
|
+
}
|