testeranto 0.62.0 → 0.70.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 (151) hide show
  1. package/README.md +42 -21
  2. package/dist/cjs-shim.js +2 -2
  3. package/dist/common/Node.js +7 -24
  4. package/dist/common/NodeWriter.js +7 -9
  5. package/dist/common/Project.js +103 -266
  6. package/dist/common/SubPackages/puppeteer.js +1 -1
  7. package/dist/common/SubPackages/react-dom/component/web.js +1 -1
  8. package/dist/common/SubPackages/react-dom/jsx/web.js +15 -7
  9. package/dist/common/SubPackages/react-test-renderer/MemoExoticComponent/node.js +1 -1
  10. package/dist/common/SubPackages/react-test-renderer/component/index.js +0 -1
  11. package/dist/common/SubPackages/react-test-renderer/fc/web.js +1 -1
  12. package/dist/common/SubPackages/react-test-renderer/jsx/index.js +1 -2
  13. package/dist/common/SubPackages/react-test-renderer/jsx/web.js +1 -1
  14. package/dist/common/SubPackages/react-test-renderer/jsx-promised/index.js +1 -1
  15. package/dist/common/Types.js +2 -32
  16. package/dist/common/Web.js +25 -18
  17. package/dist/common/electron.js +177 -107
  18. package/dist/common/esbuildConfigs/index.js +5 -5
  19. package/dist/common/esbuildConfigs/node.js +17 -15
  20. package/dist/common/esbuildConfigs/report.js +12 -47
  21. package/dist/common/esbuildConfigs/tests.js +0 -1
  22. package/dist/common/esbuildConfigs/web.js +14 -11
  23. package/dist/common/lib/abstractBase.js +13 -6
  24. package/dist/common/lib/basebuilder.js +11 -11
  25. package/dist/common/lib/classBuilder.js +2 -3
  26. package/dist/common/lib/core.js +37 -8
  27. package/dist/common/lib/index.js +10 -8
  28. package/dist/common/lib/types.js +2 -0
  29. package/dist/common/preload.js +15 -25
  30. package/dist/common/puppeteerConfiger.js +24 -0
  31. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  32. package/dist/module/Node.js +7 -24
  33. package/dist/module/NodeWriter.js +7 -9
  34. package/dist/module/Project.js +104 -267
  35. package/dist/module/SubPackages/puppeteer.js +1 -1
  36. package/dist/module/SubPackages/react/jsx/web.js +1 -1
  37. package/dist/module/SubPackages/react-dom/component/node.js +2 -2
  38. package/dist/module/SubPackages/react-dom/component/web.js +1 -1
  39. package/dist/module/SubPackages/react-dom/jsx/web.js +17 -9
  40. package/dist/module/SubPackages/react-test-renderer/MemoExoticComponent/node.js +1 -1
  41. package/dist/module/SubPackages/react-test-renderer/component/index.js +0 -1
  42. package/dist/module/SubPackages/react-test-renderer/fc/web.js +1 -1
  43. package/dist/module/SubPackages/react-test-renderer/jsx/index.js +1 -2
  44. package/dist/module/SubPackages/react-test-renderer/jsx/web.js +1 -1
  45. package/dist/module/SubPackages/react-test-renderer/jsx-promised/index.js +1 -1
  46. package/dist/module/Types.js +3 -30
  47. package/dist/module/Web.js +26 -19
  48. package/dist/module/electron.js +179 -109
  49. package/dist/module/esbuildConfigs/index.js +5 -5
  50. package/dist/module/esbuildConfigs/node.js +17 -15
  51. package/dist/module/esbuildConfigs/report.js +11 -48
  52. package/dist/module/esbuildConfigs/tests.js +0 -1
  53. package/dist/module/esbuildConfigs/web.js +14 -11
  54. package/dist/module/lib/abstractBase.js +13 -6
  55. package/dist/module/lib/basebuilder.js +11 -11
  56. package/dist/module/lib/classBuilder.js +2 -3
  57. package/dist/module/lib/core.js +39 -10
  58. package/dist/module/lib/index.js +10 -8
  59. package/dist/module/lib/types.js +1 -0
  60. package/dist/module/preload.js +12 -25
  61. package/dist/module/puppeteerConfiger.js +19 -0
  62. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  63. package/dist/types/Node.d.ts +3 -2
  64. package/dist/types/Project.d.ts +1 -2
  65. package/dist/types/SubPackages/puppeteer.d.ts +3 -3
  66. package/dist/types/SubPackages/react/component/node.d.ts +1 -1
  67. package/dist/types/SubPackages/react/component/web.d.ts +1 -1
  68. package/dist/types/SubPackages/react/jsx/index.d.ts +1 -1
  69. package/dist/types/SubPackages/react/jsx/node.d.ts +1 -1
  70. package/dist/types/SubPackages/react/jsx/web.d.ts +2 -2
  71. package/dist/types/SubPackages/react-dom/component/node.d.ts +2 -2
  72. package/dist/types/SubPackages/react-dom/component/web.d.ts +1 -1
  73. package/dist/types/SubPackages/react-dom/jsx/node.d.ts +1 -1
  74. package/dist/types/SubPackages/react-dom/jsx/web.d.ts +1 -1
  75. package/dist/types/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +1 -1
  76. package/dist/types/SubPackages/react-test-renderer/component/index.d.ts +1 -1
  77. package/dist/types/SubPackages/react-test-renderer/component/node.d.ts +1 -1
  78. package/dist/types/SubPackages/react-test-renderer/component/web.d.ts +1 -1
  79. package/dist/types/SubPackages/react-test-renderer/fc/node.d.ts +1 -1
  80. package/dist/types/SubPackages/react-test-renderer/fc/web.d.ts +1 -1
  81. package/dist/types/SubPackages/react-test-renderer/jsx/node.d.ts +1 -1
  82. package/dist/types/SubPackages/react-test-renderer/jsx/web.d.ts +3 -3
  83. package/dist/types/SubPackages/react-test-renderer/jsx-promised/index.d.ts +1 -1
  84. package/dist/types/SubPackages/react-test-renderer/jsx-promised/node.d.ts +1 -1
  85. package/dist/types/SubPackages/react-test-renderer/jsx-promised/web.d.ts +1 -1
  86. package/dist/types/Types.d.ts +19 -100
  87. package/dist/types/Web.d.ts +3 -2
  88. package/dist/types/esbuildConfigs/features.d.ts +1 -1
  89. package/dist/types/esbuildConfigs/index.d.ts +1 -1
  90. package/dist/types/esbuildConfigs/node.d.ts +1 -1
  91. package/dist/types/esbuildConfigs/report.d.ts +4 -0
  92. package/dist/types/esbuildConfigs/tests.d.ts +1 -1
  93. package/dist/types/esbuildConfigs/web.d.ts +1 -1
  94. package/dist/types/lib/abstractBase.d.ts +25 -24
  95. package/dist/types/lib/basebuilder.d.ts +8 -7
  96. package/dist/types/lib/classBuilder.d.ts +3 -2
  97. package/dist/types/lib/core.d.ts +3 -2
  98. package/dist/types/lib/index.d.ts +4 -3
  99. package/dist/types/lib/types.d.ts +70 -0
  100. package/dist/types/puppeteerConfiger.d.ts +4 -0
  101. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  102. package/package.json +4 -3
  103. package/src/Node.ts +24 -54
  104. package/src/NodeWriter.ts +21 -18
  105. package/src/Project.ts +165 -620
  106. package/src/Report.tsx +1 -1
  107. package/src/SubPackages/puppeteer.ts +19 -14
  108. package/src/SubPackages/react/component/node.ts +20 -32
  109. package/src/SubPackages/react/component/web.ts +20 -30
  110. package/src/SubPackages/react/jsx/index.ts +13 -24
  111. package/src/SubPackages/react/jsx/web.ts +10 -8
  112. package/src/SubPackages/react-dom/component/node.ts +17 -23
  113. package/src/SubPackages/react-dom/component/web.ts +30 -50
  114. package/src/SubPackages/react-dom/jsx/web.ts +41 -48
  115. package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +27 -37
  116. package/src/SubPackages/react-test-renderer/component/index.ts +16 -30
  117. package/src/SubPackages/react-test-renderer/component/node.ts +5 -11
  118. package/src/SubPackages/react-test-renderer/component/web.ts +5 -11
  119. package/src/SubPackages/react-test-renderer/fc/node.ts +36 -50
  120. package/src/SubPackages/react-test-renderer/fc/web.ts +37 -50
  121. package/src/SubPackages/react-test-renderer/jsx/index.ts +16 -21
  122. package/src/SubPackages/react-test-renderer/jsx/node.ts +6 -10
  123. package/src/SubPackages/react-test-renderer/jsx/web.ts +7 -7
  124. package/src/SubPackages/react-test-renderer/jsx-promised/index.ts +13 -16
  125. package/src/Types.ts +73 -307
  126. package/src/Web.ts +54 -53
  127. package/src/cjs-shim.js +2 -2
  128. package/src/electron.ts +258 -191
  129. package/src/esbuildConfigs/features.ts +3 -4
  130. package/src/esbuildConfigs/index.ts +8 -8
  131. package/src/esbuildConfigs/node.ts +21 -20
  132. package/src/esbuildConfigs/report.ts +15 -51
  133. package/src/esbuildConfigs/tests.ts +3 -9
  134. package/src/esbuildConfigs/web.ts +18 -18
  135. package/src/lib/abstractBase.ts +78 -125
  136. package/src/lib/basebuilder.ts +109 -134
  137. package/src/lib/classBuilder.ts +26 -45
  138. package/src/lib/core.ts +101 -69
  139. package/src/lib/index.ts +53 -52
  140. package/src/lib/types.ts +206 -0
  141. package/src/preload.ts +12 -28
  142. package/src/puppeteerConfiger.ts +26 -0
  143. package/src/web.html.ts +1 -1
  144. package/dist/common/lib/browser.js +0 -26
  145. package/dist/common/nodeWriterElectron.js +0 -55
  146. package/dist/module/lib/browser.js +0 -22
  147. package/dist/module/nodeWriterElectron.js +0 -52
  148. package/dist/types/lib/browser.d.ts +0 -6
  149. package/dist/types/nodeWriterElectron.d.ts +0 -2
  150. package/src/lib/browser.ts +0 -34
  151. package/src/nodeWriterElectron.ts +0 -71
@@ -1,45 +1,40 @@
1
+ import {
2
+ ITTestResourceRequest,
3
+ ITestJob,
4
+ ITLog,
5
+ ILogWriter,
6
+ ITTestResourceConfiguration,
7
+ } from ".";
8
+ import { IBaseTest, ITestSpecification } from "../Types.js";
1
9
 
2
10
  import {
3
- IBaseTest,
4
- ICheckKlasser,
5
- IGivenKlasser,
6
11
  ISuiteKlasser,
7
- ITestSpecification,
12
+ IGivenKlasser,
13
+ IWhenKlasser,
8
14
  IThenKlasser,
15
+ ICheckKlasser,
9
16
  IUtils,
10
- IWhenKlasser
11
- } from "../Types";
17
+ } from "./types.js";
12
18
 
13
19
  import {
14
-
15
20
  BaseCheck,
16
21
  BaseSuite,
17
22
  BaseWhen,
18
23
  BaseThen,
19
- BaseGiven
24
+ BaseGiven,
20
25
  } from "./abstractBase.js";
21
26
 
22
- import {
23
- ITTestResourceRequest,
24
- ITestJob,
25
- ITLog,
26
- ILogWriter,
27
- ITTestResourceConfiguration,
28
- } from ".";
29
27
  export abstract class BaseBuilder<
30
28
  ITestShape extends IBaseTest,
31
29
  SuiteExtensions,
32
30
  GivenExtensions,
33
31
  WhenExtensions,
34
32
  ThenExtensions,
35
- CheckExtensions,
33
+ CheckExtensions
36
34
  > {
37
-
38
35
  specs: any;
39
36
 
40
- assertThis: (t: any) => {
41
-
42
- }
37
+ assertThis: (t: ITestShape["then"]) => {};
43
38
 
44
39
  testResourceRequirement: ITTestResourceRequest;
45
40
  artifacts: Promise<unknown>[] = [];
@@ -52,7 +47,7 @@ export abstract class BaseBuilder<
52
47
  checkOverides: Record<keyof CheckExtensions, ICheckKlasser<ITestShape>>;
53
48
 
54
49
  constructor(
55
- public readonly input: ITestShape['iinput'],
50
+ public readonly input: ITestShape["iinput"],
56
51
  suitesOverrides: Record<keyof SuiteExtensions, ISuiteKlasser<ITestShape>>,
57
52
  givenOverides: Record<keyof GivenExtensions, IGivenKlasser<ITestShape>>,
58
53
  whenOverides: Record<keyof WhenExtensions, IWhenKlasser<ITestShape>>,
@@ -60,7 +55,7 @@ export abstract class BaseBuilder<
60
55
  checkOverides: Record<keyof CheckExtensions, ICheckKlasser<ITestShape>>,
61
56
  logWriter: ILogWriter,
62
57
  testResourceRequirement: ITTestResourceRequest,
63
- testSpecification: any,
58
+ testSpecification: any
64
59
  ) {
65
60
  this.artifacts = [];
66
61
  this.testResourceRequirement = testResourceRequirement;
@@ -76,116 +71,109 @@ export abstract class BaseBuilder<
76
71
  this.Given(),
77
72
  this.When(),
78
73
  this.Then(),
79
- this.Check(),
74
+ this.Check()
80
75
  );
81
76
 
82
- const suiteRunner = (
83
- suite: BaseSuite<ITestShape>,
84
- utils: IUtils
85
- ) =>
77
+ const suiteRunner =
78
+ (suite: BaseSuite<ITestShape>, utils: IUtils) =>
86
79
  async (
87
80
  testResourceConfiguration: ITTestResourceConfiguration,
88
81
  tLog: ITLog,
89
82
  utils: IUtils
90
- ): Promise<BaseSuite<
91
- ITestShape
92
- >> => {
83
+ ): Promise<BaseSuite<ITestShape>> => {
93
84
  return await suite.run(
94
85
  input,
95
86
  testResourceConfiguration,
96
- (
97
- fPath: string,
98
- value: unknown
99
- ) =>
87
+ (fPath: string, value: unknown) =>
100
88
  logWriter.testArtiFactoryfileWriter(tLog, (p: Promise<void>) => {
101
89
  this.artifacts.push(p);
102
- })(
103
- testResourceConfiguration.fs + "/" + fPath,
104
- value
105
- ),
90
+ })(testResourceConfiguration.fs + "/" + fPath, value),
106
91
  tLog,
107
92
  utils
108
93
  );
109
94
  };
110
95
 
111
- this.testJobs = this.specs.map((
112
- suite: BaseSuite<ITestShape>,
113
- utils: IUtils
114
- ) => {
115
- const runner = suiteRunner(suite, utils);
116
-
117
- return {
118
- test: suite,
119
- testResourceRequirement,
96
+ this.testJobs = this.specs.map(
97
+ (suite: BaseSuite<ITestShape>, utils: IUtils) => {
98
+ const runner = suiteRunner(suite, utils);
120
99
 
121
- toObj: () => {
122
- return suite.toObj();
123
- },
100
+ return {
101
+ test: suite,
102
+ testResourceRequirement,
124
103
 
125
- runner,
126
-
127
- receiveTestResourceConfig: async function (
128
- testResourceConfiguration = {
129
- name: "",
130
- fs: ".",
131
- ports: [],
132
- scheduled: false
104
+ toObj: () => {
105
+ return suite.toObj();
133
106
  },
134
- y: IUtils
135
- ) {
136
- console.log(
137
- `testResourceConfiguration ${JSON.stringify(
107
+
108
+ runner,
109
+
110
+ receiveTestResourceConfig: async function (
111
+ testResourceConfiguration = {
112
+ name: "",
113
+ fs: ".",
114
+ ports: [],
115
+ scheduled: false,
116
+ },
117
+ y: IUtils
118
+ ) {
119
+ console.log(
120
+ `testResourceConfiguration ${JSON.stringify(
121
+ testResourceConfiguration,
122
+ null,
123
+ 2
124
+ )}`
125
+ );
126
+
127
+ // await logWriter.mkdirSync(testResourceConfiguration.fs);
128
+ // if (!fs.existsSync(destFolder)) {
129
+ // fs.mkdirSync(destFolder, { recursive: true });
130
+ // }
131
+
132
+ logWriter.writeFileSync(
133
+ `${testResourceConfiguration.fs}/tests.json`,
134
+ JSON.stringify(this.toObj(), null, 2)
135
+ );
136
+
137
+ const logFilePath = `${testResourceConfiguration.fs}/log.txt`;
138
+
139
+ const access = await logWriter.createWriteStream(logFilePath);
140
+
141
+ const tLog = (...l: string[]) => access.write(`${l.toString()}\n`);
142
+
143
+ const suiteDone: BaseSuite<ITestShape> = await runner(
138
144
  testResourceConfiguration,
139
- null,
140
- 2
141
- )}`
142
- );
143
- await logWriter.mkdirSync(testResourceConfiguration.fs);
144
- logWriter.writeFileSync(
145
- `${testResourceConfiguration.fs}/tests.json`,
146
- JSON.stringify(this.toObj(), null, 2)
147
- );
148
-
149
- const logFilePath = `${testResourceConfiguration.fs}/log.txt`;
150
-
151
- const access = await logWriter.createWriteStream(logFilePath);
152
-
153
- const tLog = (...l: string[]) => {
154
- // console.log(...l);
155
- access.write(`${l.toString()}\n`);
156
- };
157
- const suiteDone: BaseSuite<
158
- ITestShape
159
- > = await runner(testResourceConfiguration, tLog, y);
160
- const resultsFilePath = (
161
- `${testResourceConfiguration.fs}/results.json`
162
- );
163
-
164
- logWriter.writeFileSync(
165
- resultsFilePath,
166
- JSON.stringify(suiteDone.toObj(), null, 2)
167
- );
168
-
169
- const logPromise = new Promise((res, rej) => {
170
- access.on("finish", () => { res(true); });
171
- })
172
- access.end();
173
-
174
- const numberOfFailures = Object.keys(suiteDone.givens).filter(
175
- (k) => {
176
- // console.log(`suiteDone.givens[k].error`, suiteDone.givens[k].error);
177
- return suiteDone.givens[k].error
178
- }
179
- ).length;
180
- console.log(`exiting gracefully with ${numberOfFailures} failures.`);
181
- return {
182
- failed: numberOfFailures,
183
- artifacts: this.artifacts || [],
184
- logPromise
185
- };
186
- },
187
- };
188
- });
145
+ tLog,
146
+ y
147
+ );
148
+
149
+ const logPromise = new Promise((res, rej) => {
150
+ access.on("finish", () => {
151
+ res(true);
152
+ });
153
+ });
154
+ access.end();
155
+
156
+ const numberOfFailures = Object.keys(suiteDone.givens).filter(
157
+ (k) => {
158
+ return suiteDone.givens[k].error;
159
+ }
160
+ ).length;
161
+ logWriter.writeFileSync(
162
+ `${testResourceConfiguration.fs}/exitcode`,
163
+ numberOfFailures.toString()
164
+ );
165
+ console.log(
166
+ `exiting gracefully with ${numberOfFailures} failures.`
167
+ );
168
+ return {
169
+ failed: numberOfFailures,
170
+ artifacts: this.artifacts || [],
171
+ logPromise,
172
+ };
173
+ },
174
+ };
175
+ }
176
+ );
189
177
  }
190
178
 
191
179
  Specs() {
@@ -200,26 +188,17 @@ export abstract class BaseBuilder<
200
188
  (
201
189
  name: string,
202
190
  features: string[],
203
- whens: BaseWhen<
204
- ITestShape
205
- >[],
206
- thens: BaseThen<
207
- ITestShape
208
- >[],
209
- gcb,
210
- ) => BaseGiven<
211
- ITestShape
212
- >
191
+ whens: BaseWhen<ITestShape>[],
192
+ thens: BaseThen<ITestShape>[],
193
+ gcb
194
+ ) => BaseGiven<ITestShape>
213
195
  > {
214
196
  return this.givenOverides;
215
197
  }
216
198
 
217
199
  When(): Record<
218
200
  keyof WhenExtensions,
219
- (arg0: ITestShape['istore'], ...arg1: any) =>
220
- BaseWhen<
221
- ITestShape
222
- >
201
+ (arg0: ITestShape["istore"], ...arg1: any) => BaseWhen<ITestShape>
223
202
  > {
224
203
  return this.whenOverides;
225
204
  }
@@ -227,11 +206,9 @@ export abstract class BaseBuilder<
227
206
  Then(): Record<
228
207
  keyof ThenExtensions,
229
208
  (
230
- selection: ITestShape['iselection'],
209
+ selection: ITestShape["iselection"],
231
210
  expectation: any
232
- ) => BaseThen<
233
- ITestShape
234
- >
211
+ ) => BaseThen<ITestShape>
235
212
  > {
236
213
  return this.thenOverides;
237
214
  }
@@ -244,10 +221,8 @@ export abstract class BaseBuilder<
244
221
  whens,
245
222
  thens,
246
223
  x
247
- ) => BaseCheck<
248
- ITestShape
249
- >
224
+ ) => BaseCheck<ITestShape>
250
225
  > {
251
226
  return this.checkOverides;
252
227
  }
253
- }
228
+ }
@@ -1,39 +1,27 @@
1
- import type {
1
+ import {
2
2
  IBaseTest,
3
- ICheckKlasser,
4
- IGivenKlasser,
5
- ISuiteKlasser,
6
3
  ITestImplementation,
7
4
  ITestSpecification,
8
- IThenKlasser,
9
- IWhenKlasser,
10
- } from "../Types";
5
+ } from "../Types.js";
11
6
 
7
+ import { BaseBuilder } from "./basebuilder.js";
12
8
 
9
+ import { ILogWriter, ITTestResourceRequest } from ".";
13
10
  import {
14
- BaseBuilder
15
- } from "./basebuilder.js";
16
-
17
- import {
18
- ILogWriter,
19
- ITTestResourceRequest
20
- } from ".";
11
+ ISuiteKlasser,
12
+ IGivenKlasser,
13
+ IWhenKlasser,
14
+ IThenKlasser,
15
+ ICheckKlasser,
16
+ } from "./types.js";
21
17
 
22
18
  export abstract class ClassBuilder<
23
19
  ITestShape extends IBaseTest
24
- > extends BaseBuilder<
25
- ITestShape,
26
- any,
27
- any,
28
- any,
29
- any,
30
- any
31
- > {
32
-
20
+ > extends BaseBuilder<ITestShape, any, any, any, any, any> {
33
21
  constructor(
34
22
  testImplementation: ITestImplementation<ITestShape, any>,
35
23
  testSpecification: ITestSpecification<ITestShape>,
36
- input: ITestShape['iinput'],
24
+ input: ITestShape["iinput"],
37
25
  suiteKlasser: ISuiteKlasser<ITestShape>,
38
26
  givenKlasser: IGivenKlasser<ITestShape>,
39
27
  whenKlasser: IWhenKlasser<ITestShape>,
@@ -56,28 +44,22 @@ export abstract class ClassBuilder<
56
44
  },
57
45
  {}
58
46
  );
59
- const classyGivens = Object.entries(testImplementation.givens)
60
- .reduce(
61
- (a, [key, givEn]) => {
62
- a[key] = (
47
+ const classyGivens = Object.entries(testImplementation.givens).reduce(
48
+ (a, [key, givEn]) => {
49
+ a[key] = (features, whens, thens, givEn) => {
50
+ return new givenKlasser.prototype.constructor(
51
+ key,
63
52
  features,
64
53
  whens,
65
54
  thens,
66
- givEn,
67
- ) => {
68
- return new (givenKlasser.prototype).constructor(
69
- key,
70
- features,
71
- whens,
72
- thens,
73
- testImplementation.givens[key],
74
- givEn
75
- );
76
- };
77
- return a;
78
- },
79
- {}
80
- );
55
+ testImplementation.givens[key],
56
+ givEn
57
+ );
58
+ };
59
+ return a;
60
+ },
61
+ {}
62
+ );
81
63
 
82
64
  const classyWhens = Object.entries(testImplementation.whens).reduce(
83
65
  (a, [key, whEn]: [string, (x) => any]) => {
@@ -133,5 +115,4 @@ export abstract class ClassBuilder<
133
115
  testSpecification
134
116
  );
135
117
  }
136
-
137
- }
118
+ }