@docupace/ihub-config 1.0.0

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 (116) hide show
  1. package/README.md +82 -0
  2. package/dist/config/config-injector.d.ts +24 -0
  3. package/dist/config/config-injector.d.ts.map +1 -0
  4. package/dist/config/config-injector.js +28 -0
  5. package/dist/config/config-injector.js.map +1 -0
  6. package/dist/config/template-processor.d.ts +25 -0
  7. package/dist/config/template-processor.d.ts.map +1 -0
  8. package/dist/config/template-processor.js +154 -0
  9. package/dist/config/template-processor.js.map +1 -0
  10. package/dist/config-extension.d.ts +11 -0
  11. package/dist/config-extension.d.ts.map +1 -0
  12. package/dist/config-extension.js +42 -0
  13. package/dist/config-extension.js.map +1 -0
  14. package/dist/config-providers/base-config.d.ts +8 -0
  15. package/dist/config-providers/base-config.d.ts.map +1 -0
  16. package/dist/config-providers/base-config.js +2 -0
  17. package/dist/config-providers/base-config.js.map +1 -0
  18. package/dist/config-providers/index.d.ts +5 -0
  19. package/dist/config-providers/index.d.ts.map +1 -0
  20. package/dist/config-providers/index.js +8 -0
  21. package/dist/config-providers/index.js.map +1 -0
  22. package/dist/config-resolvers/index.d.ts +15 -0
  23. package/dist/config-resolvers/index.d.ts.map +1 -0
  24. package/dist/config-resolvers/index.js +24 -0
  25. package/dist/config-resolvers/index.js.map +1 -0
  26. package/dist/config-service.d.ts +63 -0
  27. package/dist/config-service.d.ts.map +1 -0
  28. package/dist/config-service.js +515 -0
  29. package/dist/config-service.js.map +1 -0
  30. package/dist/env.d.ts +2 -0
  31. package/dist/env.d.ts.map +1 -0
  32. package/dist/env.js +3 -0
  33. package/dist/env.js.map +1 -0
  34. package/dist/globals.d.ts +30 -0
  35. package/dist/globals.d.ts.map +1 -0
  36. package/dist/globals.js +95 -0
  37. package/dist/globals.js.map +1 -0
  38. package/dist/index.d.ts +11 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +6 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/instance-config.d.ts +21 -0
  43. package/dist/instance-config.d.ts.map +1 -0
  44. package/dist/instance-config.js +74 -0
  45. package/dist/instance-config.js.map +1 -0
  46. package/dist/lib/file-system.d.ts +2 -0
  47. package/dist/lib/file-system.d.ts.map +1 -0
  48. package/dist/lib/file-system.js +11 -0
  49. package/dist/lib/file-system.js.map +1 -0
  50. package/dist/lib/filters.d.ts +7 -0
  51. package/dist/lib/filters.d.ts.map +1 -0
  52. package/dist/lib/filters.js +123 -0
  53. package/dist/lib/filters.js.map +1 -0
  54. package/dist/lib/param-helpers.d.ts +11 -0
  55. package/dist/lib/param-helpers.d.ts.map +1 -0
  56. package/dist/lib/param-helpers.js +54 -0
  57. package/dist/lib/param-helpers.js.map +1 -0
  58. package/dist/lib/replace-dots-outside-expressions.d.ts +2 -0
  59. package/dist/lib/replace-dots-outside-expressions.d.ts.map +1 -0
  60. package/dist/lib/replace-dots-outside-expressions.js +10 -0
  61. package/dist/lib/replace-dots-outside-expressions.js.map +1 -0
  62. package/dist/lib/sort.d.ts +2 -0
  63. package/dist/lib/sort.d.ts.map +1 -0
  64. package/dist/lib/sort.js +25 -0
  65. package/dist/lib/sort.js.map +1 -0
  66. package/dist/mappers/config-mapper.d.ts +8 -0
  67. package/dist/mappers/config-mapper.d.ts.map +1 -0
  68. package/dist/mappers/config-mapper.js +17 -0
  69. package/dist/mappers/config-mapper.js.map +1 -0
  70. package/dist/model/graphs/config/common.graphql +8 -0
  71. package/dist/model/graphs/config/fields.graphql +338 -0
  72. package/dist/model/graphs/config/menu.graphql +40 -0
  73. package/dist/model/graphs/config/mutation.graphql +30 -0
  74. package/dist/model/graphs/config/page.graphql +227 -0
  75. package/dist/model/graphs/config/panel.graphql +30 -0
  76. package/dist/model/graphs/config/query.graphql +55 -0
  77. package/dist/model/graphs/config/selectOptions.graphql +47 -0
  78. package/dist/model/graphs/config/table.graphql +97 -0
  79. package/dist/model/graphs/config/tests.graphql +16 -0
  80. package/dist/model/graphs/config/theme.graphql +41 -0
  81. package/dist/model/graphs/config/ui-components.graphql +11 -0
  82. package/dist/model/graphs/domains/scalars.graphql +3 -0
  83. package/dist/model/graphs/filter.graphql +5 -0
  84. package/dist/model/graphs/schema.graphql +7 -0
  85. package/dist/server.d.ts +2 -0
  86. package/dist/server.d.ts.map +1 -0
  87. package/dist/server.js +34 -0
  88. package/dist/server.js.map +1 -0
  89. package/dist/types/filter-types.d.ts +62 -0
  90. package/dist/types/filter-types.d.ts.map +1 -0
  91. package/dist/types/filter-types.js +28 -0
  92. package/dist/types/filter-types.js.map +1 -0
  93. package/dist/types/graphql.d.ts +74630 -0
  94. package/dist/types/graphql.d.ts.map +1 -0
  95. package/dist/types/graphql.js +94 -0
  96. package/dist/types/graphql.js.map +1 -0
  97. package/dist/types/types.d.ts +13 -0
  98. package/dist/types/types.d.ts.map +1 -0
  99. package/dist/types/types.js +2 -0
  100. package/dist/types/types.js.map +1 -0
  101. package/model/graphs/config/common.graphql +8 -0
  102. package/model/graphs/config/fields.graphql +338 -0
  103. package/model/graphs/config/menu.graphql +40 -0
  104. package/model/graphs/config/mutation.graphql +30 -0
  105. package/model/graphs/config/page.graphql +227 -0
  106. package/model/graphs/config/panel.graphql +30 -0
  107. package/model/graphs/config/query.graphql +55 -0
  108. package/model/graphs/config/selectOptions.graphql +47 -0
  109. package/model/graphs/config/table.graphql +97 -0
  110. package/model/graphs/config/tests.graphql +16 -0
  111. package/model/graphs/config/theme.graphql +41 -0
  112. package/model/graphs/config/ui-components.graphql +11 -0
  113. package/model/graphs/domains/scalars.graphql +3 -0
  114. package/model/graphs/filter.graphql +5 -0
  115. package/model/graphs/schema.graphql +7 -0
  116. package/package.json +63 -0
@@ -0,0 +1,227 @@
1
+ interface Page {
2
+ title: String
3
+ description: String
4
+ config: JSON
5
+ }
6
+
7
+ type OverviewPage implements Page {
8
+ title: String
9
+ description: String
10
+ domain: String
11
+ cards: [Card]
12
+ menuItems: [MenuItem]
13
+ config: JSON
14
+ tables: [Table]
15
+ }
16
+
17
+ type TablePage implements Page {
18
+ title: String
19
+ component: String
20
+ description: String
21
+ actionButton: ActionButton
22
+ table: AnyTable!
23
+ panel: Panel
24
+ config: JSON
25
+ }
26
+
27
+ type ComponentPage implements Page {
28
+ title: String
29
+ description: String
30
+ component: String
31
+ panel: Panel
32
+ config: JSON
33
+ }
34
+
35
+ type TabbedPage implements Page {
36
+ title: String
37
+ description: String
38
+ tabs: [Tab!]!
39
+ config: JSON
40
+ gqlQuery: GQLQuery
41
+ # TODO: Replace `mutations` (currently a JSON object used as { [mutationName: String]: GQLQuery }) with a properly typed map.
42
+ mutations: JSON
43
+ }
44
+
45
+ type DetailsPage implements Page {
46
+ title: String
47
+ description: String
48
+ panel: Panel
49
+ config: JSON
50
+ }
51
+
52
+ type DomainRecordTemplate implements Page {
53
+ title: String
54
+ description: String
55
+ sideMenu: SideMenu
56
+ viewer: Viewer
57
+ config: JSON
58
+ }
59
+
60
+ type PageLayout implements Page {
61
+ title: String
62
+ description: String
63
+ sideMenu: SideMenu
64
+ widgets: [ExternalWidget]
65
+ config: JSON
66
+ }
67
+
68
+ type DashboardPage implements Page {
69
+ panel: DashboardPanel
70
+ title: String
71
+ description: String
72
+ config: JSON
73
+ }
74
+
75
+ type ReportPage implements Page {
76
+ title: String
77
+ description: String
78
+ controlPanel: Panel
79
+ dashboardPanel: DashboardPanel
80
+ config: JSON
81
+ }
82
+
83
+ type AnyPage implements Page {
84
+ title: String
85
+ description: String
86
+ tables: [NamedTable!]
87
+ panels: [Panel!]
88
+ tabbedPages: [TabbedPage!]
89
+ config: JSON
90
+ }
91
+
92
+ type WizardPage implements Page {
93
+ description: String
94
+ title : String
95
+ dataSource: String
96
+ steps: [Step!]!
97
+ loadWizardByCustodian: [LoadWizardByCustodian]
98
+ defaultWizard: String
99
+ # TODO: Replace `mutations` (currently a JSON object used as { [mutationName: String]: GQLQuery }) with a properly typed map.
100
+ mutations: JSON
101
+ config: JSON
102
+ }
103
+
104
+ type LoadWizardByCustodian {
105
+ custodian: String
106
+ wizard: String
107
+ }
108
+
109
+ type Step {
110
+ id : String!
111
+ label : String!
112
+ icon: String
113
+ page : Page
114
+ visibilityCondition: String
115
+ pathUrl: String
116
+ }
117
+
118
+ type SideMenu {
119
+ headerCard: Card
120
+ menuItems: [MenuItem!]
121
+ dataCard: Card
122
+ }
123
+
124
+ type CardView {
125
+ queryName: String
126
+ card: Card!
127
+ groups: CardGroups
128
+ }
129
+
130
+ type CardGroups {
131
+ queryName: String!
132
+ titlePath: String!
133
+ configKeyPath: String!
134
+ dataKeyPath: String!
135
+ }
136
+
137
+ type Tab {
138
+ name: String!
139
+ label: String!
140
+ page: Page!
141
+ visibilityCondition: String
142
+ }
143
+
144
+ type DashboardPanel implements IPanel {
145
+ name: String
146
+ rows: [DashboardPanelRow!]
147
+ }
148
+
149
+ type DashboardPanelRow implements IPanelRow {
150
+ name: String!
151
+ title: String
152
+ titleVariant: String
153
+ layout: Number
154
+ hidden: Boolean
155
+ visibilityCondition: String
156
+ elements: [Widget!]
157
+ }
158
+
159
+ type Preview {
160
+ headerCard: Card
161
+ panel: Panel
162
+ }
163
+
164
+ interface ICard implements IElement {
165
+ name: String
166
+ component: String
167
+ config: JSON
168
+ }
169
+
170
+ interface QuickApp {
171
+ url: String
172
+ appPreference: String
173
+ target: Boolean
174
+ }
175
+
176
+ type CardRow {
177
+ name: String
178
+ paths: [String!]
179
+ expression: String
180
+ icon: String
181
+ component: String
182
+ }
183
+
184
+ type Card implements ICard & IRowElement & IElement {
185
+ name: String
186
+ component: String!
187
+ config: JSON
188
+ cols: Int
189
+ title: String
190
+ rows: [CardRow]
191
+ }
192
+
193
+ type Widget implements ICard & IRowElement & IElement & QuickApp {
194
+ id: String!
195
+ name: String
196
+ title: String
197
+ description: String
198
+ component: String
199
+ config: JSON
200
+ cols: Int
201
+ table: AnyTable
202
+ }
203
+
204
+ type ExternalWidget {
205
+ id: String
206
+ name: String
207
+ description: String
208
+ visibilityCondition: String
209
+ config: JSON
210
+ }
211
+
212
+ type ViewerOptions {
213
+ thumbnails: Boolean
214
+ pageNavigation: Boolean
215
+ lazyLoading: Boolean
216
+ }
217
+
218
+ type ViewerToolbar {
219
+ menuItems: [MenuItem!]!
220
+ actionButton: ActionButton
221
+ }
222
+
223
+ type Viewer {
224
+ documentActions: [MenuItem!]
225
+ options: ViewerOptions
226
+ toolbar: ViewerToolbar
227
+ }
@@ -0,0 +1,30 @@
1
+ interface IPanel {
2
+ name: String
3
+ rows: [IPanelRow!]
4
+ dataType: String
5
+ }
6
+
7
+ interface IPanelRow {
8
+ elements: [IRowElement!]
9
+ name: String
10
+ title: String
11
+ titleVariant: String
12
+ visibilityCondition: String
13
+ }
14
+
15
+ type Panel implements IPanel {
16
+ columns: Int
17
+ isGrouped: Boolean
18
+ name: String
19
+ rows: [PanelRow!]!
20
+ dataType: String
21
+ }
22
+
23
+ type PanelRow implements IPanelRow {
24
+ elements: [IRowElement!]
25
+ hasDivider: Boolean
26
+ name: String
27
+ title: String
28
+ titleVariant: String
29
+ visibilityCondition: String
30
+ }
@@ -0,0 +1,55 @@
1
+
2
+ type PageQuery {
3
+ getPageConfig(path : String) : Page
4
+ }
5
+
6
+ type WidgetQuery {
7
+ list(search: String) : [Widget!]
8
+ get(path : String) : Widget
9
+ }
10
+
11
+ type ThemeQuery {
12
+ get(path: String): Theme
13
+ }
14
+
15
+ type ConfigQuery {
16
+ pages : PageQuery
17
+ widgets : WidgetQuery
18
+ tests: TestQuery
19
+ themes: ThemeQuery
20
+ data : DataQuery
21
+ }
22
+
23
+ type DataQuery {
24
+ get(path : String) : [DataResult!]
25
+ list(path : String) : [String]
26
+ getSeedConfig(path: String): SeedConfigResult
27
+ }
28
+
29
+ type DataResult {
30
+ config: DataConfig
31
+ data: JSON!
32
+ }
33
+
34
+ type DataConfig {
35
+ severity: String
36
+ }
37
+
38
+ type SeedConfigResult {
39
+ typeName: String!
40
+ updateMethod: String
41
+ updateInputType: String
42
+ createMethod: String
43
+ createInputType: String
44
+ referenceByIdPaths: [String]
45
+ referencePaths: [String]
46
+ doNotUpdate: Boolean
47
+ doNotDelete: Boolean
48
+ uniqueColumns: [String]
49
+ }
50
+
51
+ type GQLQuery {
52
+ queryName: String
53
+ operationName: String
54
+ variableDefinitions: JSON
55
+ }
@@ -0,0 +1,47 @@
1
+ interface ISelectOptions {
2
+ type: String
3
+ }
4
+
5
+ type SelectOptionsFilter {
6
+ path: String
7
+ }
8
+
9
+ type QuerySelectOptions implements ISelectOptions {
10
+ type: String
11
+ labelProp: String # defaults to "name" in ui
12
+ valueProp: String # defaults to "id" in ui
13
+ queryName: String!
14
+ variableDefinitions: JSON
15
+ variables: JSON
16
+ paths: [String!]!
17
+ operationName: String
18
+ expression: String
19
+ maxRows: Int
20
+ variablesExpressions: JSON
21
+ responsePathPrefix: String
22
+ where: WhereFilterConfig
23
+ filter: SelectOptionsFilter
24
+ excludeId: Boolean
25
+ queryOnTyping: Boolean # if true, query will be triggered on typing
26
+ minLength: Int # minimum length of input to trigger query
27
+ }
28
+
29
+ type ValueSelectOptions implements ISelectOptions {
30
+ type: String
31
+ values: [SelectValue!]!
32
+ }
33
+
34
+ type SelectValue {
35
+ label: String!
36
+ value: JSON!
37
+ }
38
+
39
+ type DropdownSelectOptions implements ISelectOptions {
40
+ type: String
41
+ dropdownName: String!
42
+ }
43
+
44
+ type WhereFilterConfig {
45
+ type: String!
46
+ value: JSON
47
+ }
@@ -0,0 +1,97 @@
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
+ orderBy: [OrderBy!]
19
+ flattenDataKey: String
20
+ actionButton: ActionButton
21
+ pagingMode: String
22
+ maxRows: Int
23
+ pageSizeOptions: [Int!]
24
+ defaultPageSize: Int
25
+ useCardView: Boolean
26
+ whereFilter: WhereFilter
27
+ whereFilterName: String
28
+ emptyStateMessage: String
29
+ unstructuredData: Boolean
30
+ }
31
+
32
+ type OrderBy {
33
+ path: String!
34
+ orderType: OrderType!
35
+ }
36
+
37
+ type TableSelection {
38
+ enabled: Boolean
39
+ label: String
40
+ action: String
41
+ visibilityCondition: String
42
+ }
43
+
44
+ type Table implements ITable
45
+
46
+ type NamedTable implements ITable {
47
+ name: String
48
+ }
49
+
50
+ type TabbedTable {
51
+ tabs: [TableTab!]!
52
+ }
53
+
54
+ union AnyTable = Table | TabbedTable
55
+
56
+ type TableTab {
57
+ name : String!
58
+ label: String!
59
+ table: Table!
60
+ visibilityCondition: String
61
+ }
62
+
63
+ type TableFilter {
64
+ criteria: [TableCriteria!]!
65
+ }
66
+
67
+ type TableCriteria {
68
+ name: String!
69
+ label: String!
70
+ labelProp: String
71
+ path: String!
72
+ dataType: String
73
+ selectOptions: QuerySelectOptions
74
+ }
75
+
76
+ type Column {
77
+ name: String!
78
+ label: String!
79
+ visible: Boolean
80
+ paths: [String!]
81
+ expression: String
82
+ component: String
83
+ sortable: Boolean
84
+ flex: Float
85
+ }
86
+
87
+ type SimpleSearch {
88
+ filterType: String
89
+ searchBy: String
90
+ placeholder: String
91
+ selectOptions: QuerySelectOptions!
92
+ }
93
+
94
+ type WhereFilter {
95
+ type: String!
96
+ value: JSON!
97
+ }
@@ -0,0 +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
+
@@ -0,0 +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
+ }
@@ -0,0 +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
11
+ }
@@ -0,0 +1,3 @@
1
+ scalar Number
2
+
3
+ scalar JSON
@@ -0,0 +1,5 @@
1
+
2
+ enum OrderType {
3
+ ASC
4
+ DESC
5
+ }
@@ -0,0 +1,7 @@
1
+ type Query {
2
+ config: ConfigQuery
3
+ }
4
+
5
+ type Mutation {
6
+ config: ConfigMutation
7
+ }
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@docupace/ihub-config",
3
+ "version": "1.0.0",
4
+ "description": "Reusable config GraphQL extension and standalone server",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "keywords": [
8
+ "graphql",
9
+ "config",
10
+ "extension"
11
+ ],
12
+ "author": "",
13
+ "license": "ISC",
14
+ "dependencies": {
15
+ "@docupace/ihub-cache": "1.0.1",
16
+ "@docupace/ihub-core": "0.0.114-alpha.1",
17
+ "axios": "^1.13.5",
18
+ "cross-env": "^7.0.3",
19
+ "dotenv": "^16.4.1",
20
+ "graphql": "^16.8.1",
21
+ "js-yaml": "^4.1.0",
22
+ "lodash": "^4.17.21",
23
+ "pino": "^10.3.1",
24
+ "simple-git": "^3.22.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/jest": "^30.0.0",
28
+ "@types/lodash": "^4.17.7",
29
+ "@types/node": "^20.10.6",
30
+ "cpx": "^1.5.0",
31
+ "eslint": "8",
32
+ "jest": "^29.7.0",
33
+ "nock": "^13.5.6",
34
+ "pino-pretty": "^13.1.2",
35
+ "ts-jest": "^29.1.1",
36
+ "ts-node": "^10.9.1",
37
+ "tsx": "^4.11.2",
38
+ "typescript": "^5.3.3"
39
+ },
40
+ "types": "dist/index.d.ts",
41
+ "files": [
42
+ "dist",
43
+ "model",
44
+ "README.md",
45
+ ".env.example"
46
+ ],
47
+ "exports": {
48
+ ".": {
49
+ "types": "./dist/index.d.ts",
50
+ "default": "./dist/index.js"
51
+ }
52
+ },
53
+ "scripts": {
54
+ "test": "NODE_OPTIONS='--experimental-vm-modules' jest",
55
+ "test:coverage": "NODE_OPTIONS='--experimental-vm-modules' jest --coverage",
56
+ "start:dev": "cross-env NODE_ENV=development tsx watch --clear-screen --no-cache src/server.ts --log-level debug | pino-pretty",
57
+ "start": "node dist/server.js",
58
+ "build": "rm -rf dist && tsc && cpx \"model/**/*.yaml\" ./dist/model && cpx \"model/**/*.graphql\" ./dist/model",
59
+ "start:build": "rm -rf dist && tsc && cpx \"model/**/*.yaml\" ./dist/model && cpx \"model/**/*.graphql\" ./dist/model && node dist/server.js",
60
+ "lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\" \"tests/**/*.{js,jsx,ts,tsx}\" \"model/**/*.{js,jsx,ts,tsx}\"",
61
+ "lint:fix": "eslint --fix \"src/**/*.{js,jsx,ts,tsx}\" \"tests/**/*.{js,jsx,ts,tsx}\" \"model/**/*.{js,jsx,ts,tsx}\""
62
+ }
63
+ }