testeranto 0.125.3 → 0.129.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 (99) hide show
  1. package/README.md +248 -6
  2. package/dist/common/src/Node.js +5 -0
  3. package/dist/common/src/PM/base.js +6 -0
  4. package/dist/common/src/PM/index.js +0 -1
  5. package/dist/common/src/PM/main.js +84 -22
  6. package/dist/common/src/PM/web.js +1 -1
  7. package/dist/common/src/ReportServer.js +39 -2
  8. package/dist/common/src/build.js +41 -6
  9. package/dist/common/src/lib/abstractBase.js +22 -107
  10. package/dist/common/src/lib/basebuilder.js +20 -21
  11. package/dist/common/src/lib/classBuilder.js +12 -1
  12. package/dist/common/src/lib/core.js +1 -8
  13. package/dist/common/src/lib/index.js +2 -5
  14. package/dist/common/src/lib/pmProxy.js +294 -0
  15. package/dist/common/testeranto.config.js +43 -34
  16. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  17. package/dist/module/src/Node.js +5 -0
  18. package/dist/module/src/PM/base.js +6 -0
  19. package/dist/module/src/PM/index.js +0 -1
  20. package/dist/module/src/PM/main.js +84 -22
  21. package/dist/module/src/PM/web.js +1 -1
  22. package/dist/module/src/Project.js +6 -6
  23. package/dist/module/src/ReportClient.js +3 -3
  24. package/dist/module/src/ReportServer.js +39 -2
  25. package/dist/module/src/build.js +41 -6
  26. package/dist/module/src/lib/abstractBase.js +22 -107
  27. package/dist/module/src/lib/basebuilder.js +20 -21
  28. package/dist/module/src/lib/classBuilder.js +12 -1
  29. package/dist/module/src/lib/core.js +1 -8
  30. package/dist/module/src/lib/index.js +2 -5
  31. package/dist/module/src/lib/pmProxy.js +285 -0
  32. package/dist/module/testeranto.config.js +40 -34
  33. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  34. package/dist/prebuild/Project.css +1 -26
  35. package/dist/prebuild/Project.js +4 -4
  36. package/dist/prebuild/ReportClient.css +1 -26
  37. package/dist/prebuild/ReportClient.js +3 -3
  38. package/dist/prebuild/ReportServer.mjs +1 -2
  39. package/dist/prebuild/TestReport.css +1 -26
  40. package/dist/prebuild/build.mjs +42 -7
  41. package/dist/prebuild/run.mjs +95 -20
  42. package/dist/tsconfig.tsbuildinfo +1 -1
  43. package/dist/types/src/PM/web.d.ts +1 -1
  44. package/dist/types/src/Types.d.ts +2 -1
  45. package/dist/types/src/lib/abstractBase.d.ts +4 -6
  46. package/dist/types/src/lib/index.d.ts +1 -1
  47. package/dist/types/src/lib/pmProxy.d.ts +7 -0
  48. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  49. package/package.json +14 -7
  50. package/src/Init.ts +1 -0
  51. package/src/Node.ts +6 -0
  52. package/src/PM/base.ts +8 -0
  53. package/src/PM/index.ts +2 -7
  54. package/src/PM/main.ts +128 -26
  55. package/src/PM/web.ts +3 -3
  56. package/src/Project.tsx +6 -6
  57. package/src/ReportClient.tsx +3 -3
  58. package/src/ReportServer.ts +43 -2
  59. package/src/Types.ts +3 -2
  60. package/src/build.ts +47 -6
  61. package/src/lib/abstractBase.ts +45 -184
  62. package/src/lib/basebuilder.ts +25 -28
  63. package/src/lib/classBuilder.ts +13 -2
  64. package/src/lib/core.ts +10 -14
  65. package/src/lib/index.ts +6 -29
  66. package/src/lib/pmProxy.ts +366 -0
  67. package/testeranto/bundles/node/{react → redux}/metafile.json +186 -254
  68. package/testeranto/bundles/pure/redux/metafile.json +554 -0
  69. package/testeranto/bundles/web/redux/metafile.json +504 -0
  70. package/testeranto/bundles/web/{react/src/SubPackages/react-test-renderer/component → redux}/test/web.html +1 -1
  71. package/testeranto/index.html +1 -1
  72. package/testeranto/reports/{react → redux}/config.json +26 -10
  73. package/testeranto/reports/{react → redux}/index.html +5 -5
  74. package/testeranto/reports/redux/summary.json +20 -0
  75. package/testeranto.config.ts +46 -34
  76. package/tsc.log +3 -1
  77. package/testeranto/bundles/node/react/src/SubPackages/react-test-renderer/component/test/node.mjs +0 -24687
  78. package/testeranto/bundles/pure/react/metafile.json +0 -8
  79. package/testeranto/bundles/pure/react/src/SubPackages/react-test-renderer/component/test/pure.mjs +0 -24625
  80. package/testeranto/bundles/web/react/metafile.json +0 -8
  81. package/testeranto/bundles/web/react/src/SubPackages/react-test-renderer/component/test/web.mjs +0 -21290
  82. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/node/node/console_log.txt +0 -0
  83. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/bdd_errors.txt +0 -1
  84. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/featurePrompt.txt +0 -0
  85. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/lint_errors.json +0 -3381
  86. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/littleBoard.html +0 -20
  87. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/log.txt +0 -40
  88. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/prompt.txt +0 -24
  89. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/tests.json +0 -132
  90. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/pure/pure/type_errors.txt +0 -17
  91. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/bdd_errors.txt +0 -1
  92. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/console_log.txt +0 -1
  93. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/lint_errors.json +0 -2947
  94. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/littleBoard.html +0 -20
  95. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/log.txt +0 -40
  96. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/prompt.txt +0 -23
  97. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/tests.json +0 -132
  98. package/testeranto/reports/react/src/SubPackages/react-test-renderer/component/test/web/web/type_errors.txt +0 -18
  99. package/testeranto/reports/react/summary.json +0 -8
@@ -38,27 +38,26 @@ export class BaseBuilder {
38
38
  res(true);
39
39
  });
40
40
  const fails = suiteDone.fails;
41
- const b = await puppetMaster.writeFileSync(`bdd_errors.txt`, fails.toString());
42
- await puppetMaster.writeFileSync(`littleBoard.html`, `
43
- <!DOCTYPE html>
44
- <html lang="en">
45
-
46
- <head>
47
- <meta name="description" content="Webpage description goes here" />
48
- <meta charset="utf-8" />
49
- <title>kokomoBay - testeranto</title>
50
- <meta name="viewport" content="width=device-width, initial-scale=1" />
51
- <meta name="author" content="" />
52
-
53
- <link rel="stylesheet" href="/kokomoBay/testeranto/TestReport.css" />
54
- <script src="/kokomoBay/testeranto/TestReport.js"></script>
55
-
56
- </head>
57
-
58
- <body>
59
- <div id="root"/>
60
- </body>
61
- `);
41
+ await puppetMaster.writeFileSync(`bdd_errors.txt`, fails.toString());
42
+ // await puppetMaster.writeFileSync(
43
+ // `index.html`,
44
+ // `
45
+ // <!DOCTYPE html>
46
+ // <html lang="en">
47
+ // <head>
48
+ // <meta name="description" content="Webpage description goes here" />
49
+ // <meta charset="utf-8" />
50
+ // <title>kokomoBay - testeranto</title>
51
+ // <meta name="viewport" content="width=device-width, initial-scale=1" />
52
+ // <meta name="author" content="" />
53
+ // <link rel="stylesheet" href="/kokomoBay/testeranto/TestReport.css" />
54
+ // <script src="/kokomoBay/testeranto/TestReport.js"></script>
55
+ // </head>
56
+ // <body>
57
+ // <div id="root"/>
58
+ // </body>
59
+ // `
60
+ // );
62
61
  await puppetMaster.writeFileSync(`tests.json`, JSON.stringify(this.toObj(), null, 2));
63
62
  return {
64
63
  failed: fails > 0,
@@ -24,7 +24,18 @@ export class ClassBuilder extends BaseBuilder {
24
24
  }, {});
25
25
  const classyThens = Object.entries(testImplementation.thens).reduce((a, [key, thEn]) => {
26
26
  a[key] = (expected, x) => {
27
- return new thenKlasser.prototype.constructor(`${thEn.name}: ${expected && expected.toString()}`, thEn(expected));
27
+ return new thenKlasser.prototype.constructor(`${thEn.name}: ${expected && expected.toString()}`,
28
+ // () => {
29
+ // thEn(expected);
30
+ // // return new Promise((res), rej) => {
31
+ // // }
32
+ // // try {
33
+ // // thEn(expected);
34
+ // // } catch (c) {
35
+ // // console.log("mark99");
36
+ // // }
37
+ // },
38
+ thEn(expected));
28
39
  };
29
40
  return a;
30
41
  }, {});
@@ -39,14 +39,7 @@ export default class Testeranto extends ClassBuilder {
39
39
  }
40
40
  }, class Then extends BaseThen {
41
41
  async butThen(store, thenCB, testResource, pm) {
42
- return await fullTestInterface
43
- .butThen(store, thenCB, testResource, pm)
44
- .then((v) => {
45
- return v;
46
- }, (e) => {
47
- console.log(" ERROR ", e);
48
- throw e;
49
- });
42
+ return await fullTestInterface.butThen(store, thenCB, testResource, pm);
50
43
  }
51
44
  }, class Check extends BaseCheck {
52
45
  constructor(name, features, checkCallback, x, i, c) {
@@ -6,13 +6,10 @@ export const BaseTestInterface = {
6
6
  afterEach: async (s) => s,
7
7
  afterAll: (store) => undefined,
8
8
  butThen: async (store, thenCb) => {
9
- try {
10
- thenCb(store);
11
- }
12
- catch (e) { }
9
+ return thenCb(store);
13
10
  },
14
11
  andWhen: async (a) => a,
15
- assertThis: () => null,
12
+ assertThis: (x) => null,
16
13
  };
17
14
  export const DefaultTestInterface = (p) => {
18
15
  return Object.assign(Object.assign({}, BaseTestInterface), p);
@@ -0,0 +1,285 @@
1
+ const prxy = function (pm, mappings) {
2
+ return new Proxy(pm, {
3
+ get: (target, prop, receiver) => {
4
+ for (const mapping of mappings) {
5
+ const method = mapping[0];
6
+ const arger = mapping[1];
7
+ if (prop === method) {
8
+ return (x) => target[prop](arger(x));
9
+ }
10
+ }
11
+ return (...x) => target[prop](...x);
12
+ },
13
+ });
14
+ };
15
+ export const butThenProxy = (pm, filepath) => prxy(pm, [
16
+ [
17
+ "screencast",
18
+ (opts, p) => [
19
+ Object.assign(Object.assign({}, opts), { path: `${filepath}/butThen/${opts.path}` }),
20
+ p,
21
+ ],
22
+ ],
23
+ ["createWriteStream", (fp) => [`${filepath}/butThen/${fp}`]],
24
+ [
25
+ "writeFileSync",
26
+ (fp, contents) => [`${filepath}/butThen/${fp}`, contents],
27
+ ],
28
+ [
29
+ "customScreenShot",
30
+ (opts, p) => [
31
+ Object.assign(Object.assign({}, opts), { path: `${filepath}/butThen/${opts.path}` }),
32
+ p,
33
+ ],
34
+ ],
35
+ ]);
36
+ export const andWhenProxy = (pm, filepath) => prxy(pm, [
37
+ [
38
+ "screencast",
39
+ (opts, p) => [
40
+ Object.assign(Object.assign({}, opts), { path: `${filepath}/andWhen/${opts.path}` }),
41
+ p,
42
+ ],
43
+ ],
44
+ ["createWriteStream", (fp) => [`${filepath}/andWhen/${fp}`]],
45
+ ["writeFileSync", (fp, contents) => [`${filepath}/andWhen${fp}`, contents]],
46
+ [
47
+ "customScreenShot",
48
+ (opts, p) => [
49
+ Object.assign(Object.assign({}, opts), { path: `${filepath}/andWhen${opts.path}` }),
50
+ p,
51
+ ],
52
+ ],
53
+ ]);
54
+ export const afterEachProxy = (pm, suite, given) => prxy(pm, [
55
+ [
56
+ "screencast",
57
+ (opts, p) => [
58
+ Object.assign(Object.assign({}, opts), { path: `suite-${suite}/given-${given}/afterEach/${opts.path}` }),
59
+ p,
60
+ ],
61
+ ],
62
+ ["createWriteStream", (fp) => [`suite-${suite}/afterEach/${fp}`]],
63
+ [
64
+ "writeFileSync",
65
+ (fp, contents) => [
66
+ `suite-${suite}/given-${given}/afterEach/${fp}`,
67
+ contents,
68
+ ],
69
+ ],
70
+ [
71
+ "customScreenShot",
72
+ (opts, p) => [
73
+ Object.assign(Object.assign({}, opts), { path: `suite-${suite}/given-${given}/afterEach/${opts.path}` }),
74
+ p,
75
+ ],
76
+ ],
77
+ ]);
78
+ export const beforeEachProxy = (pm, suite) => prxy(pm, [
79
+ [
80
+ "screencast",
81
+ (opts, p) => [
82
+ Object.assign(Object.assign({}, opts), { path: `suite-${suite}/beforeEach/${opts.path}` }),
83
+ p,
84
+ ],
85
+ ],
86
+ [
87
+ "writeFileSync",
88
+ (fp, contents) => [`suite-${suite}/beforeEach/${fp}`, contents],
89
+ ],
90
+ [
91
+ "customScreenShot",
92
+ (opts, p) => [
93
+ Object.assign(Object.assign({}, opts), { path: `suite-${suite}/beforeEach/${opts.path}` }),
94
+ p,
95
+ ],
96
+ ],
97
+ ["createWriteStream", (fp) => [`suite-${suite}/beforeEach/${fp}`]],
98
+ ]);
99
+ export const beforeAllProxy = (pm, suite) => prxy(pm, [
100
+ [
101
+ "writeFileSync",
102
+ (fp, contents) => [`suite-${suite}/beforeAll/${fp}`, contents],
103
+ ],
104
+ [
105
+ "customScreenShot",
106
+ (opts, p) => [
107
+ Object.assign(Object.assign({}, opts), { path: `suite-${suite}/beforeAll/${opts.path}` }),
108
+ p,
109
+ ],
110
+ ],
111
+ ["createWriteStream", (fp) => [`suite-${suite}/beforeAll/${fp}`]],
112
+ ]);
113
+ export const afterAllProxy = (pm, suite) => prxy(pm, [
114
+ ["createWriteStream", (fp) => [`suite-${suite}/afterAll/${fp}`]],
115
+ [
116
+ "writeFileSync",
117
+ (fp, contents) => [`suite-${suite}/afterAll/${fp}`, contents],
118
+ ],
119
+ [
120
+ "customScreenShot",
121
+ (opts, p) => [
122
+ Object.assign(Object.assign({}, opts), { path: `suite-${suite}/afterAll/${opts.path}` }),
123
+ p,
124
+ ],
125
+ ],
126
+ ]);
127
+ /////////////////////////////////////////////////
128
+ // export const butThenProxy = (pm: IPM, filepath: string) => {
129
+ // return new Proxy(pm, {
130
+ // get: (target, prop, receiver) => {
131
+ // if (prop === "customScreenShot") {
132
+ // return (opts, p) =>
133
+ // target.customScreenShot(
134
+ // {
135
+ // ...opts,
136
+ // path: `${filepath}/${opts.path}`,
137
+ // },
138
+ // p
139
+ // );
140
+ // }
141
+ // if (prop === "writeFileSync") {
142
+ // return (fp, contents) => target[prop](`${filepath}/${fp}`, contents);
143
+ // }
144
+ // },
145
+ // });
146
+ // };
147
+ // export const andWhenProxy = (pm: IPM, filepath: string) => {
148
+ // return new Proxy(pm, {
149
+ // get(target, prop, receiver) {
150
+ // if (prop === "customScreenShot") {
151
+ // return (opts, p) =>
152
+ // target.customScreenShot(
153
+ // {
154
+ // ...opts,
155
+ // path: `${filepath}/${opts.path}`,
156
+ // },
157
+ // p
158
+ // );
159
+ // }
160
+ // if (prop === "writeFileSync") {
161
+ // return (fp, contents) =>
162
+ // target[prop](`${filepath}/andWhen/${fp}`, contents);
163
+ // }
164
+ // /* @ts-ignore:next-line */
165
+ // return Reflect.get(...arguments);
166
+ // },
167
+ // });
168
+ // };
169
+ // export const afterEachProxy = (pm: IPM, suite: string, given: string): IPM => {
170
+ // return new Proxy(pm, {
171
+ // get(target, prop, receiver) {
172
+ // if (prop === "customScreenShot") {
173
+ // return (opts, p) =>
174
+ // target.customScreenShot(
175
+ // {
176
+ // ...opts,
177
+ // path: `suite-${suite}/given-${given}/afterEach/${opts.path}`,
178
+ // },
179
+ // p
180
+ // );
181
+ // }
182
+ // if (prop === "writeFileSync") {
183
+ // return (fp, contents) =>
184
+ // target[prop](
185
+ // `suite-${suite}/given-${given}/afterEach/${fp}`,
186
+ // contents
187
+ // );
188
+ // }
189
+ // /* @ts-ignore:next-line */
190
+ // return Reflect.get(...arguments);
191
+ // },
192
+ // });
193
+ // };
194
+ // export const beforeAllProxy = (pm: IPM, suite: string): IPM => {
195
+ // return new Proxy(pm, {
196
+ // get(target, prop, receiver) {
197
+ // if (prop === "customScreenShot") {
198
+ // return (opts, p) =>
199
+ // target.customScreenShot(
200
+ // {
201
+ // ...opts,
202
+ // // path: `${filepath}/${opts.path}`,
203
+ // path: `suite-${suite}/beforeAll/${opts.path}`,
204
+ // },
205
+ // p
206
+ // );
207
+ // }
208
+ // if (prop === "writeFileSync") {
209
+ // return (fp, contents) =>
210
+ // target[prop](`suite-${suite}/beforeAll/${fp}`, contents);
211
+ // }
212
+ // /* @ts-ignore:next-line */
213
+ // return Reflect.get(...arguments);
214
+ // },
215
+ // });
216
+ // };
217
+ // export const beforeEachProxy = (pm: IPM, suite: string, given: string): IPM => {
218
+ // return new Proxy(pm, {
219
+ // get(target, prop, receiver) {
220
+ // // if (prop === "write") {
221
+ // // return (handle, contents) =>
222
+ // // target[prop](
223
+ // // `suite-${suiteNdx}/given-${key}/when/beforeEach/${fp}`,
224
+ // // contents
225
+ // // );
226
+ // // }
227
+ // if (prop === "createWriteStream") {
228
+ // return (fp) =>
229
+ // target[prop](`suite-${suite}/given-${given}/when/beforeEach/${fp}`);
230
+ // }
231
+ // if (prop === "writeFileSync") {
232
+ // return (fp, contents) =>
233
+ // target[prop](
234
+ // `suite-${suite}/given-${given}/when/beforeEach/${fp}`,
235
+ // contents
236
+ // );
237
+ // }
238
+ // if (prop === "customScreenShot") {
239
+ // return (opts, p) =>
240
+ // target.customScreenShot(
241
+ // {
242
+ // ...opts,
243
+ // path: `suite-${suite}/given-${given}/when/beforeEach/${opts.path}`,
244
+ // },
245
+ // p
246
+ // );
247
+ // }
248
+ // if (prop === "screencast") {
249
+ // return (opts, p) =>
250
+ // target.screencast(
251
+ // {
252
+ // ...opts,
253
+ // path: `suite-${suite}/given-${given}/when/beforeEach/${opts.path}`,
254
+ // },
255
+ // p
256
+ // );
257
+ // }
258
+ // /* @ts-ignore:next-line */
259
+ // return Reflect.get(...arguments);
260
+ // },
261
+ // });
262
+ // };
263
+ // export const afterAllProxy = (pm: IPM, suite: string): IPM => {
264
+ // return new Proxy(pm, {
265
+ // get(target, prop, receiver) {
266
+ // if (prop === "customScreenShot") {
267
+ // return (opts, p) =>
268
+ // target.customScreenShot(
269
+ // {
270
+ // ...opts,
271
+ // // path: `${filepath}/${opts.path}`,
272
+ // path: `suite-${suite}/afterAll/${opts.path}`,
273
+ // },
274
+ // p
275
+ // );
276
+ // }
277
+ // if (prop === "writeFileSync") {
278
+ // return (fp, contents) =>
279
+ // target[prop](`suite-${suite}/afterAll/${fp}`, contents);
280
+ // }
281
+ // /* @ts-ignore:next-line */
282
+ // return Reflect.get(...arguments);
283
+ // },
284
+ // });
285
+ // };
@@ -1,39 +1,45 @@
1
+ import redux from "testeranto_with_reduxjs_toolkit/testeranto.config";
1
2
  const config = {
2
3
  projects: {
3
- react: {
4
- src: "src",
5
- debugger: false,
6
- minify: false,
7
- clearScreen: false,
8
- externals: [],
9
- ports: [],
10
- featureIngestor: async function (s) {
11
- return "";
12
- },
13
- tests: [
14
- [
15
- "./src/SubPackages/react-test-renderer/component/test/node.ts",
16
- "node",
17
- { ports: 0 },
18
- [],
19
- ],
20
- // [
21
- // "./src/SubPackages/react-test-renderer/component/test/web.ts",
22
- // "web",
23
- // { ports: 0 },
24
- // [],
25
- // ],
26
- // [
27
- // "./src/SubPackages/react-test-renderer/component/test/pure.ts",
28
- // "pure",
29
- // { ports: 0 },
30
- // [],
31
- // ],
32
- ],
33
- webPlugins: [],
34
- nodePlugins: [],
35
- importPlugins: [],
36
- },
4
+ redux: Object.assign(Object.assign({}, redux.projects.allTests), { src: "node_modules/testeranto_with_reduxjs_toolkit" }),
5
+ // solidity: {
6
+ // ...solidity.projects.solidity,
7
+ // src: "node_modules/testeranto-solidity",
8
+ // },
9
+ // react: {
10
+ // src: "src",
11
+ // debugger: false,
12
+ // minify: false,
13
+ // clearScreen: false,
14
+ // externals: [],
15
+ // ports: [],
16
+ // featureIngestor: async function (s: string) {
17
+ // return "";
18
+ // },
19
+ // tests: [
20
+ // [
21
+ // "./src/SubPackages/react-test-renderer/component/test/node.ts",
22
+ // "node",
23
+ // { ports: 0 },
24
+ // [],
25
+ // ],
26
+ // // [
27
+ // // "./src/SubPackages/react-test-renderer/component/test/web.ts",
28
+ // // "web",
29
+ // // { ports: 0 },
30
+ // // [],
31
+ // // ],
32
+ // // [
33
+ // // "./src/SubPackages/react-test-renderer/component/test/pure.ts",
34
+ // // "pure",
35
+ // // { ports: 0 },
36
+ // // [],
37
+ // // ],
38
+ // ],
39
+ // webPlugins: [],
40
+ // nodePlugins: [],
41
+ // importPlugins: [],
42
+ // },
37
43
  },
38
44
  };
39
45
  export default config;