formflux 0.0.1

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 (38) hide show
  1. package/README.md +127 -0
  2. package/dist/EventHandlers.js +16 -0
  3. package/dist/EventHandlers.js.map +1 -0
  4. package/dist/ExtractContent.js +154 -0
  5. package/dist/ExtractContent.js.map +1 -0
  6. package/dist/FormFlux.Types.js +3 -0
  7. package/dist/FormFlux.Types.js.map +1 -0
  8. package/dist/FormFlux.js +472 -0
  9. package/dist/FormFlux.js.map +1 -0
  10. package/dist/FormFluxError.js +11 -0
  11. package/dist/FormFluxError.js.map +1 -0
  12. package/dist/SetBodyContentToReq.js +101 -0
  13. package/dist/SetBodyContentToReq.js.map +1 -0
  14. package/dist/SetFileContentToReqFile.js +69 -0
  15. package/dist/SetFileContentToReqFile.js.map +1 -0
  16. package/dist/WriteFileContent.js +125 -0
  17. package/dist/WriteFileContent.js.map +1 -0
  18. package/dist/declarations/EventHandlers.d.ts +7 -0
  19. package/dist/declarations/ExtractContent.d.ts +11 -0
  20. package/dist/declarations/FormFlux.Types.d.ts +51 -0
  21. package/dist/declarations/FormFlux.d.ts +16 -0
  22. package/dist/declarations/FormFluxError.d.ts +5 -0
  23. package/dist/declarations/SetBodyContentToReq.d.ts +10 -0
  24. package/dist/declarations/SetFileContentToReqFile.d.ts +11 -0
  25. package/dist/declarations/WriteFileContent.d.ts +17 -0
  26. package/dist/declarations/defaultOptions.d.ts +2 -0
  27. package/dist/declarations/helpers/resBodyMaker.d.ts +1 -0
  28. package/dist/declarations/setDatatoReqobj.d.ts +7 -0
  29. package/dist/declarations/setFileNameToBody.d.ts +10 -0
  30. package/dist/defaultOptions.js +13 -0
  31. package/dist/defaultOptions.js.map +1 -0
  32. package/dist/helpers/resBodyMaker.js +30 -0
  33. package/dist/helpers/resBodyMaker.js.map +1 -0
  34. package/dist/setDatatoReqobj.js +21 -0
  35. package/dist/setDatatoReqobj.js.map +1 -0
  36. package/dist/setFileNameToBody.js +102 -0
  37. package/dist/setFileNameToBody.js.map +1 -0
  38. package/package.json +45 -0
@@ -0,0 +1,472 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ExtractContent_1 = __importDefault(require("./ExtractContent"));
7
+ const WriteFileContent_1 = __importDefault(require("./WriteFileContent"));
8
+ const SetBodyContentToReq_1 = __importDefault(require("./SetBodyContentToReq"));
9
+ const setFileNameToBody_1 = __importDefault(require("./setFileNameToBody"));
10
+ const setDatatoReqobj_1 = __importDefault(require("./setDatatoReqobj"));
11
+ const EventHandlers_1 = __importDefault(require("./EventHandlers"));
12
+ const FormFluxError_1 = __importDefault(require("./FormFluxError"));
13
+ class Formflux {
14
+ static diskStorage(options) {
15
+ return {
16
+ any() {
17
+ return async function (req, res, next) {
18
+ let obj = {
19
+ "originalReq": "",
20
+ "modifiedReq": Buffer.from(""),
21
+ "data": [],
22
+ "content": [],
23
+ "metaData": [],
24
+ "mimeType": [],
25
+ "fieldNameBody": [],
26
+ "fileName": [],
27
+ "modifiedFileName": [],
28
+ "contentBody": [],
29
+ "fieldNameFile": [],
30
+ "filePath": [],
31
+ "filesize": [],
32
+ "streams": []
33
+ };
34
+ let buff = [];
35
+ let reqType = req.headers["content-type"];
36
+ if (reqType && !reqType.includes("multipart/form-data"))
37
+ throw new FormFluxError_1.default("Invalid Request Type.Expected multipart/form-data", 400);
38
+ let boundary = req.headers["content-type"]?.split("boundary=")[1];
39
+ req.on("data", (chunk) => {
40
+ buff.push(chunk);
41
+ });
42
+ req.on("end", () => {
43
+ try {
44
+ obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer
45
+ obj.data = obj.modifiedReq.toString("binary")?.split(`--${boundary}`); // separating the boundary
46
+ obj.data.pop();
47
+ obj.data.shift();
48
+ //*****Defaults*****
49
+ //To*********extract content
50
+ new ExtractContent_1.default(obj, options, null, null).extraction();
51
+ //To*********SetFileDataToReqObj
52
+ new setDatatoReqobj_1.default(obj).populate();
53
+ let writeBool = false;
54
+ let parseBool = false;
55
+ let checkCompletion = (writeComplete, parsecomplete) => {
56
+ if (writeComplete && parsecomplete)
57
+ next();
58
+ };
59
+ EventHandlers_1.default.on("parseEnd", (message) => {
60
+ parseBool = true;
61
+ checkCompletion(writeBool, parseBool);
62
+ });
63
+ EventHandlers_1.default.on("writeEnd", (message) => {
64
+ writeBool = true;
65
+ checkCompletion(writeBool, parseBool);
66
+ });
67
+ new WriteFileContent_1.default(req, obj, options, "any", "disk").writeContent();
68
+ if (options.attachFileToReqBody && options.attachFileToReqBody == true)
69
+ new setFileNameToBody_1.default(obj).setFileNames(req);
70
+ new SetBodyContentToReq_1.default(obj).setBody(req);
71
+ }
72
+ catch (err) {
73
+ next(err);
74
+ }
75
+ });
76
+ req.on("error", () => {
77
+ next(new FormFluxError_1.default("Error in recieving request", 500));
78
+ });
79
+ };
80
+ },
81
+ fields(optionFields) {
82
+ return async function (req, res, next) {
83
+ let obj = {
84
+ "originalReq": "",
85
+ "modifiedReq": Buffer.from(""),
86
+ "data": [],
87
+ "content": [],
88
+ "metaData": [],
89
+ "mimeType": [],
90
+ "fieldNameBody": [],
91
+ "fileName": [],
92
+ "modifiedFileName": [],
93
+ "contentBody": [],
94
+ "fieldNameFile": [],
95
+ "filePath": [],
96
+ "filesize": [],
97
+ "streams": []
98
+ };
99
+ let buff = [];
100
+ let reqType = req.headers["content-type"];
101
+ if (reqType && !reqType.includes("multipart/form-data"))
102
+ throw new FormFluxError_1.default("Invalid Request Type.Expected multipart/form-data", 400);
103
+ let boundary = req.headers["content-type"]?.split("boundary=")[1];
104
+ req.on("data", (chunk) => {
105
+ buff.push(chunk);
106
+ });
107
+ req.on("end", () => {
108
+ try {
109
+ obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer
110
+ obj.data = obj.modifiedReq.toString("binary")?.split(`--${boundary}`); // separating the boundary
111
+ obj.data.pop();
112
+ obj.data.shift();
113
+ //*****Defaults*****
114
+ //To*********extract content
115
+ new ExtractContent_1.default(obj, options, optionFields, null).extraction();
116
+ //To*********SetFileDataToReqObj
117
+ new setDatatoReqobj_1.default(obj).populate();
118
+ let writeBool = false;
119
+ let parseBool = false;
120
+ let checkCompletion = (writeComplete, parsecomplete) => {
121
+ if (writeComplete && parsecomplete)
122
+ next();
123
+ };
124
+ EventHandlers_1.default.on("parseEnd", (message) => {
125
+ parseBool = true;
126
+ checkCompletion(writeBool, parseBool);
127
+ });
128
+ EventHandlers_1.default.on("writeEnd", (message) => {
129
+ writeBool = true;
130
+ checkCompletion(writeBool, parseBool);
131
+ });
132
+ new WriteFileContent_1.default(req, obj, options, "fields", "disk").writeContent();
133
+ // new setFileContentToReq(obj).setFileNames(req);
134
+ if (options.attachFileToReqBody && options.attachFileToReqBody == true)
135
+ new setFileNameToBody_1.default(obj).setFileNames(req);
136
+ new SetBodyContentToReq_1.default(obj).setBody(req);
137
+ }
138
+ catch (err) {
139
+ next(err);
140
+ }
141
+ });
142
+ req.on("error", () => {
143
+ next(new FormFluxError_1.default("Error in recieving request", 500));
144
+ });
145
+ };
146
+ },
147
+ single(field) {
148
+ return async function (req, res, next) {
149
+ let obj = {
150
+ "originalReq": "",
151
+ "modifiedReq": Buffer.from(""),
152
+ "data": [],
153
+ "content": [],
154
+ "metaData": [],
155
+ "mimeType": [],
156
+ "fieldNameBody": [],
157
+ "fileName": [],
158
+ "modifiedFileName": [],
159
+ "contentBody": [],
160
+ "fieldNameFile": [],
161
+ "filePath": [],
162
+ "filesize": [],
163
+ "streams": []
164
+ };
165
+ let buff = [];
166
+ let reqType = req.headers["content-type"];
167
+ if (reqType && !reqType.includes("multipart/form-data"))
168
+ throw new FormFluxError_1.default("Invalid Request Type.Expected multipart/form-data", 400);
169
+ let boundary = req.headers["content-type"]?.split("boundary=")[1];
170
+ req.on("data", (chunk) => {
171
+ buff.push(chunk);
172
+ });
173
+ req.on("end", () => {
174
+ try {
175
+ obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer
176
+ obj.data = obj.modifiedReq.toString("binary")?.split(`--${boundary}`); // separating the boundary
177
+ obj.data.pop();
178
+ obj.data.shift();
179
+ //*****Defaults*****
180
+ //To*********extract content
181
+ new ExtractContent_1.default(obj, options, null, field).extraction();
182
+ //To*********SetFileDataToReqObj
183
+ new setDatatoReqobj_1.default(obj).populate();
184
+ let writeBool = false;
185
+ let parseBool = false;
186
+ let checkCompletion = (writeComplete, parsecomplete) => {
187
+ if (writeComplete && parsecomplete)
188
+ next();
189
+ };
190
+ EventHandlers_1.default.on("parseEnd", (message) => {
191
+ parseBool = true;
192
+ checkCompletion(writeBool, parseBool);
193
+ });
194
+ EventHandlers_1.default.on("writeEnd", (message) => {
195
+ writeBool = true;
196
+ checkCompletion(writeBool, parseBool);
197
+ });
198
+ new WriteFileContent_1.default(req, obj, options, "single", "disk").writeContent();
199
+ if (options.attachFileToReqBody && options.attachFileToReqBody == true)
200
+ new setFileNameToBody_1.default(obj).setFileNames(req);
201
+ new SetBodyContentToReq_1.default(obj).setBody(req);
202
+ }
203
+ catch (err) {
204
+ next(err);
205
+ }
206
+ });
207
+ req.on("error", () => {
208
+ next(new FormFluxError_1.default("Error in recieving request", 500));
209
+ });
210
+ };
211
+ },
212
+ };
213
+ }
214
+ static memoryStorage(options) {
215
+ return {
216
+ any() {
217
+ return async function (req, res, next) {
218
+ let obj = {
219
+ "originalReq": "",
220
+ "modifiedReq": Buffer.from(""),
221
+ "data": [],
222
+ "content": [],
223
+ "metaData": [],
224
+ "mimeType": [],
225
+ "fieldNameBody": [],
226
+ "fileName": [],
227
+ "modifiedFileName": [],
228
+ "contentBody": [],
229
+ "fieldNameFile": [],
230
+ "filePath": [],
231
+ "filesize": [],
232
+ "streams": []
233
+ };
234
+ let buff = [];
235
+ let reqType = req.headers["content-type"];
236
+ if (reqType && !reqType.includes("multipart/form-data"))
237
+ throw new FormFluxError_1.default("Invalid Request Type.Expected multipart/form-data", 400);
238
+ let boundary = req.headers["content-type"]?.split("boundary=")[1];
239
+ req.on("data", (chunk) => {
240
+ buff.push(chunk);
241
+ });
242
+ req.on("end", () => {
243
+ try {
244
+ obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer
245
+ obj.data = obj.modifiedReq.toString("binary")?.split(`--${boundary}`); // separating the boundary
246
+ obj.data.pop();
247
+ obj.data.shift();
248
+ //*****Defaults*****
249
+ //To*********extract content
250
+ new ExtractContent_1.default(obj, options, null, null).extraction();
251
+ //To*********SetFileDataToReqObj
252
+ new setDatatoReqobj_1.default(obj).populate();
253
+ let writeBool = false;
254
+ let parseBool = false;
255
+ let checkCompletion = (writeComplete, parsecomplete) => {
256
+ if (writeComplete && parsecomplete)
257
+ next();
258
+ };
259
+ EventHandlers_1.default.on("parseEnd", (message) => {
260
+ parseBool = true;
261
+ checkCompletion(writeBool, parseBool);
262
+ });
263
+ EventHandlers_1.default.on("writeEnd", (message) => {
264
+ writeBool = true;
265
+ checkCompletion(writeBool, parseBool);
266
+ });
267
+ new WriteFileContent_1.default(req, obj, options, "any", "memory").writeContent();
268
+ if (options.attachFileToReqBody && options.attachFileToReqBody == true)
269
+ new setFileNameToBody_1.default(obj).setFileNames(req);
270
+ new SetBodyContentToReq_1.default(obj).setBody(req);
271
+ }
272
+ catch (err) {
273
+ next(err);
274
+ }
275
+ });
276
+ req.on("error", () => {
277
+ next(new FormFluxError_1.default("Error in recieving request", 500));
278
+ });
279
+ };
280
+ },
281
+ fields(optionFields) {
282
+ return async function (req, res, next) {
283
+ let obj = {
284
+ "originalReq": "",
285
+ "modifiedReq": Buffer.from(""),
286
+ "data": [],
287
+ "content": [],
288
+ "metaData": [],
289
+ "mimeType": [],
290
+ "fieldNameBody": [],
291
+ "fileName": [],
292
+ "modifiedFileName": [],
293
+ "contentBody": [],
294
+ "fieldNameFile": [],
295
+ "filePath": [],
296
+ "filesize": [],
297
+ "streams": []
298
+ };
299
+ let buff = [];
300
+ let reqType = req.headers["content-type"];
301
+ if (reqType && !reqType.includes("multipart/form-data"))
302
+ throw new FormFluxError_1.default("Invalid Request Type.Expected multipart/form-data", 400);
303
+ let boundary = req.headers["content-type"]?.split("boundary=")[1];
304
+ req.on("data", (chunk) => {
305
+ buff.push(chunk);
306
+ });
307
+ req.on("end", () => {
308
+ try {
309
+ obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer
310
+ obj.data = obj.modifiedReq.toString("binary")?.split(`--${boundary}`); // separating the boundary
311
+ obj.data.pop();
312
+ obj.data.shift();
313
+ //*****Defaults*****
314
+ //To*********extract content
315
+ new ExtractContent_1.default(obj, options, optionFields, null).extraction();
316
+ //To*********SetFileDataToReqObj
317
+ new setDatatoReqobj_1.default(obj).populate();
318
+ let writeBool = false;
319
+ let parseBool = false;
320
+ let checkCompletion = (writeComplete, parsecomplete) => {
321
+ if (writeComplete && parsecomplete)
322
+ next();
323
+ };
324
+ EventHandlers_1.default.on("parseEnd", (message) => {
325
+ parseBool = true;
326
+ checkCompletion(writeBool, parseBool);
327
+ });
328
+ EventHandlers_1.default.on("writeEnd", (message) => {
329
+ writeBool = true;
330
+ checkCompletion(writeBool, parseBool);
331
+ });
332
+ new WriteFileContent_1.default(req, obj, options, "fields", "memory").writeContent();
333
+ if (options.attachFileToReqBody && options.attachFileToReqBody == true)
334
+ new setFileNameToBody_1.default(obj).setFileNames(req);
335
+ new SetBodyContentToReq_1.default(obj).setBody(req);
336
+ }
337
+ catch (err) {
338
+ next(err);
339
+ }
340
+ });
341
+ req.on("error", () => {
342
+ next(new FormFluxError_1.default("Error in recieving request", 500));
343
+ });
344
+ };
345
+ },
346
+ single(field) {
347
+ return async function (req, res, next) {
348
+ let obj = {
349
+ "originalReq": "",
350
+ "modifiedReq": Buffer.from(""),
351
+ "data": [],
352
+ "content": [],
353
+ "metaData": [],
354
+ "mimeType": [],
355
+ "fieldNameBody": [],
356
+ "fileName": [],
357
+ "modifiedFileName": [],
358
+ "contentBody": [],
359
+ "fieldNameFile": [],
360
+ "filePath": [],
361
+ "filesize": [],
362
+ "streams": []
363
+ };
364
+ let buff = [];
365
+ let reqType = req.headers["content-type"];
366
+ if (reqType && !reqType.includes("multipart/form-data"))
367
+ throw new FormFluxError_1.default("Invalid Request Type.Expected multipart/form-data", 400);
368
+ let boundary = req.headers["content-type"]?.split("boundary=")[1];
369
+ req.on("data", (chunk) => {
370
+ buff.push(chunk);
371
+ });
372
+ req.on("end", () => {
373
+ try {
374
+ obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer
375
+ obj.data = obj.modifiedReq.toString("binary")?.split(`--${boundary}`); // separating the boundary
376
+ obj.data.pop();
377
+ obj.data.shift();
378
+ //*****Defaults*****
379
+ //To*********extract content
380
+ new ExtractContent_1.default(obj, options, null, field).extraction();
381
+ //To*********SetFileDataToReqObj
382
+ new setDatatoReqobj_1.default(obj).populate();
383
+ let writeBool = false;
384
+ let parseBool = false;
385
+ let checkCompletion = (writeComplete, parsecomplete) => {
386
+ if (writeComplete && parsecomplete)
387
+ next();
388
+ };
389
+ EventHandlers_1.default.on("parseEnd", (message) => {
390
+ parseBool = true;
391
+ checkCompletion(writeBool, parseBool);
392
+ });
393
+ EventHandlers_1.default.on("writeEnd", (message) => {
394
+ writeBool = true;
395
+ checkCompletion(writeBool, parseBool);
396
+ });
397
+ new WriteFileContent_1.default(req, obj, options, "single", "memory").writeContent();
398
+ if (options.attachFileToReqBody && options.attachFileToReqBody == true)
399
+ new setFileNameToBody_1.default(obj).setFileNames(req);
400
+ new SetBodyContentToReq_1.default(obj).setBody(req);
401
+ }
402
+ catch (err) {
403
+ next(err);
404
+ }
405
+ });
406
+ req.on("error", () => {
407
+ next(new FormFluxError_1.default("Error in recieving request", 500));
408
+ });
409
+ };
410
+ },
411
+ };
412
+ }
413
+ bodyParser() {
414
+ return async function (req, res, next) {
415
+ let obj = {
416
+ "originalReq": "",
417
+ "modifiedReq": Buffer.from(""),
418
+ "data": [],
419
+ "content": [],
420
+ "metaData": [],
421
+ "mimeType": [],
422
+ "fieldNameBody": [],
423
+ "fileName": [],
424
+ "modifiedFileName": [],
425
+ "contentBody": [],
426
+ "fieldNameFile": [],
427
+ "filePath": [],
428
+ "filesize": [],
429
+ "streams": []
430
+ };
431
+ let buff = [];
432
+ let reqType = req.headers["content-type"];
433
+ if (reqType && !reqType.includes("multipart/form-data"))
434
+ throw new FormFluxError_1.default("Invalid Request Type.Expected multipart/form-data", 400);
435
+ let boundary = req.headers["content-type"]?.split("boundary=")[1];
436
+ req.on("data", (chunk) => {
437
+ buff.push(chunk);
438
+ });
439
+ req.on("end", () => {
440
+ try {
441
+ obj.modifiedReq = Buffer.concat(buff); // holding the concatinated buffer
442
+ obj.data = obj.modifiedReq.toString("binary")?.split(`--${boundary}`); // separating the boundary
443
+ obj.data.pop();
444
+ obj.data.shift();
445
+ //*****Defaults*****
446
+ //To*********extract content
447
+ new ExtractContent_1.default(obj, null, null, null).extraction();
448
+ //To*********SetFileDataToReqObj
449
+ let writeBool = false;
450
+ let parseBool = false;
451
+ let checkCompletion = (writeComplete, parsecomplete) => {
452
+ if (writeComplete && parsecomplete)
453
+ next();
454
+ };
455
+ EventHandlers_1.default.on("parseEnd", (message) => {
456
+ parseBool = true;
457
+ next();
458
+ });
459
+ new SetBodyContentToReq_1.default(obj).setBody(req);
460
+ }
461
+ catch (err) {
462
+ next(err);
463
+ }
464
+ });
465
+ req.on("error", () => {
466
+ next(new FormFluxError_1.default("Error in recieving request", 500));
467
+ });
468
+ };
469
+ }
470
+ }
471
+ exports.default = Formflux;
472
+ //# sourceMappingURL=FormFlux.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormFlux.js","sourceRoot":"","sources":["../src/FormFlux.ts"],"names":[],"mappings":";;;;;AAEA,sEAAkD;AAClD,0EAAkD;AAClD,gFAAqD;AACrD,4EAAoD;AACpD,wEAA+C;AAC/C,oEAA4C;AAC5C,oEAA4C;AAE5C,MAAM,QAAQ;IAEV,MAAM,CAAC,WAAW,CAAC,OAAgB;QAC/B,OAAO;YACH,GAAG;gBACC,OAAO,KAAK,WAAW,GAAY,EAAE,GAAa,EAAE,IAAkB;oBAClE,IAAI,GAAG,GAAW;wBACd,aAAa,EAAE,EAAE;wBACjB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,MAAM,EAAE,EAAE;wBACV,SAAS,EAAE,EAAE;wBACb,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,kBAAkB,EAAE,EAAE;wBACtB,aAAa,EAAE,EAAE;wBACjB,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,SAAS,EAAC,EAAE;qBAEf,CAAC;oBACF,IAAI,IAAI,GAAkB,EAAE,CAAC;oBAC7B,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;oBAC1C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;wBACnD,MAAM,IAAI,uBAAa,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;oBAEtF,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAElE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC,CAAC,CAAA;oBACF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;wBACf,IAAI,CAAC;4BACD,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;4BAEzE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,0BAA0B;4BACjG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BACf,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;4BAEjB,oBAAoB;4BACpB,4BAA4B;4BAC5B,IAAI,wBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;4BAE9D,gCAAgC;4BAChC,IAAI,yBAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;4BAEnC,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,eAAe,GAAG,CAAC,aAAsB,EAAE,aAAsB,EAAE,EAAE;gCACrE,IAAI,aAAa,IAAI,aAAa;oCAC9B,IAAI,EAAE,CAAC;4BACf,CAAC,CAAA;4BAED,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAEF,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAGF,IAAI,0BAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;4BACtE,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,IAAI,IAAI;gCAClE,IAAI,2BAAiB,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;4BAEjD,IAAI,6BAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAE3C,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACX,IAAI,CAAC,GAAG,CAAC,CAAC;wBACd,CAAC;oBACL,CAAC,CAAC,CAAA;oBAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;wBACb,IAAI,CAAC,IAAI,uBAAa,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;oBACnE,CAAC,CAAC,CAAA;gBAEN,CAAC,CAAA;YACL,CAAC;YACD,MAAM,CAAC,YAA0B;gBAC7B,OAAO,KAAK,WAAW,GAAY,EAAE,GAAa,EAAE,IAAkB;oBAClE,IAAI,GAAG,GAAW;wBACd,aAAa,EAAE,EAAE;wBACjB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,MAAM,EAAE,EAAE;wBACV,SAAS,EAAE,EAAE;wBACb,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,kBAAkB,EAAE,EAAE;wBACtB,aAAa,EAAE,EAAE;wBACjB,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,SAAS,EAAC,EAAE;qBAEf,CAAC;oBACF,IAAI,IAAI,GAAkB,EAAE,CAAC;oBAC7B,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;oBAC1C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;wBACnD,MAAM,IAAI,uBAAa,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;oBACtF,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAElE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC,CAAC,CAAA;oBACF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;wBACf,IAAI,CAAC;4BACD,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;4BAEzE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,0BAA0B;4BACjG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BACf,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;4BAEjB,oBAAoB;4BACpB,4BAA4B;4BAC5B,IAAI,wBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;4BAEtE,gCAAgC;4BAChC,IAAI,yBAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;4BAEnC,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,eAAe,GAAG,CAAC,aAAsB,EAAE,aAAsB,EAAE,EAAE;gCACrE,IAAI,aAAa,IAAI,aAAa;oCAC9B,IAAI,EAAE,CAAC;4BACf,CAAC,CAAA;4BAED,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAEF,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAGF,IAAI,0BAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;4BACzE,kDAAkD;4BAClD,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,IAAI,IAAI;gCAClE,IAAI,2BAAiB,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;4BAEjD,IAAI,6BAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAE3C,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACX,IAAI,CAAC,GAAG,CAAC,CAAA;wBACb,CAAC;oBACL,CAAC,CAAC,CAAA;oBAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;wBACb,IAAI,CAAC,IAAI,uBAAa,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;oBACnE,CAAC,CAAC,CAAA;gBACN,CAAC,CAAA;YACL,CAAC;YAED,MAAM,CAAC,KAAa;gBAChB,OAAO,KAAK,WAAW,GAAY,EAAE,GAAa,EAAE,IAAkB;oBAClE,IAAI,GAAG,GAAW;wBACd,aAAa,EAAE,EAAE;wBACjB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,MAAM,EAAE,EAAE;wBACV,SAAS,EAAE,EAAE;wBACb,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,kBAAkB,EAAE,EAAE;wBACtB,aAAa,EAAE,EAAE;wBACjB,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,SAAS,EAAC,EAAE;qBAEf,CAAC;oBACF,IAAI,IAAI,GAAkB,EAAE,CAAC;oBAC7B,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;oBAC1C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;wBACnD,MAAM,IAAI,uBAAa,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;oBACtF,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAElE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC,CAAC,CAAA;oBACF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;wBACf,IAAI,CAAC;4BACD,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;4BAEzE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,0BAA0B;4BACjG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BACf,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;4BAEjB,oBAAoB;4BACpB,4BAA4B;4BAC5B,IAAI,wBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;4BAE/D,gCAAgC;4BAChC,IAAI,yBAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;4BAEnC,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,eAAe,GAAG,CAAC,aAAsB,EAAE,aAAsB,EAAE,EAAE;gCACrE,IAAI,aAAa,IAAI,aAAa;oCAC9B,IAAI,EAAE,CAAC;4BACf,CAAC,CAAA;4BAED,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAEF,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAGF,IAAI,0BAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC;4BACzE,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,IAAI,IAAI;gCAClE,IAAI,2BAAiB,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;4BAEjD,IAAI,6BAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC3C,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACX,IAAI,CAAC,GAAG,CAAC,CAAC;wBACd,CAAC;oBACL,CAAC,CAAC,CAAA;oBAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;wBACb,IAAI,CAAC,IAAI,uBAAa,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;oBACnE,CAAC,CAAC,CAAA;gBACN,CAAC,CAAA;YACL,CAAC;SACJ,CAAA;IACL,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,OAAqB;QACtC,OAAO;YACH,GAAG;gBACC,OAAO,KAAK,WAAW,GAAY,EAAE,GAAa,EAAE,IAAkB;oBAClE,IAAI,GAAG,GAAW;wBACd,aAAa,EAAE,EAAE;wBACjB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,MAAM,EAAE,EAAE;wBACV,SAAS,EAAE,EAAE;wBACb,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,kBAAkB,EAAE,EAAE;wBACtB,aAAa,EAAE,EAAE;wBACjB,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,SAAS,EAAC,EAAE;qBAEf,CAAC;oBACF,IAAI,IAAI,GAAkB,EAAE,CAAC;oBAC7B,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;oBAC1C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;wBACnD,MAAM,IAAI,uBAAa,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;oBACtF,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAElE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC,CAAC,CAAA;oBACF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;wBACf,IAAI,CAAC;4BACD,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;4BAEzE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,0BAA0B;4BACjG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BACf,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;4BAEjB,oBAAoB;4BACpB,4BAA4B;4BAC5B,IAAI,wBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;4BAE9D,gCAAgC;4BAChC,IAAI,yBAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;4BAEnC,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,eAAe,GAAG,CAAC,aAAsB,EAAE,aAAsB,EAAE,EAAE;gCACrE,IAAI,aAAa,IAAI,aAAa;oCAC9B,IAAI,EAAE,CAAC;4BACf,CAAC,CAAA;4BAED,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAEF,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAGF,IAAI,0BAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,YAAY,EAAE,CAAC;4BACxE,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,IAAI,IAAI;gCAClE,IAAI,2BAAiB,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;4BAEjD,IAAI,6BAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC3C,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACX,IAAI,CAAC,GAAG,CAAC,CAAC;wBACd,CAAC;oBACL,CAAC,CAAC,CAAA;oBAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;wBACb,IAAI,CAAC,IAAI,uBAAa,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;oBACnE,CAAC,CAAC,CAAA;gBACN,CAAC,CAAA;YACL,CAAC;YACD,MAAM,CAAC,YAA0B;gBAC7B,OAAO,KAAK,WAAW,GAAY,EAAE,GAAa,EAAE,IAAkB;oBAClE,IAAI,GAAG,GAAW;wBACd,aAAa,EAAE,EAAE;wBACjB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,MAAM,EAAE,EAAE;wBACV,SAAS,EAAE,EAAE;wBACb,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,kBAAkB,EAAE,EAAE;wBACtB,aAAa,EAAE,EAAE;wBACjB,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,SAAS,EAAC,EAAE;qBAEf,CAAC;oBACF,IAAI,IAAI,GAAkB,EAAE,CAAC;oBAC7B,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;oBAC1C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;wBACnD,MAAM,IAAI,uBAAa,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;oBACtF,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAElE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC,CAAC,CAAA;oBACF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;wBACf,IAAI,CAAC;4BACD,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;4BAEzE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,0BAA0B;4BACjG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BACf,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;4BAEjB,oBAAoB;4BACpB,4BAA4B;4BAC5B,IAAI,wBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;4BAEtE,gCAAgC;4BAChC,IAAI,yBAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;4BAEnC,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,eAAe,GAAG,CAAC,aAAsB,EAAE,aAAsB,EAAE,EAAE;gCACrE,IAAI,aAAa,IAAI,aAAa;oCAC9B,IAAI,EAAE,CAAC;4BACf,CAAC,CAAA;4BAED,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAEF,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAGF,IAAI,0BAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,YAAY,EAAE,CAAC;4BAC3E,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,IAAI,IAAI;gCAClE,IAAI,2BAAiB,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;4BAEjD,IAAI,6BAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC3C,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACX,IAAI,CAAC,GAAG,CAAC,CAAA;wBACb,CAAC;oBACL,CAAC,CAAC,CAAA;oBAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;wBACb,IAAI,CAAC,IAAI,uBAAa,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;oBACnE,CAAC,CAAC,CAAA;gBACN,CAAC,CAAA;YACL,CAAC;YACD,MAAM,CAAC,KAAa;gBAChB,OAAO,KAAK,WAAW,GAAY,EAAE,GAAa,EAAE,IAAkB;oBAClE,IAAI,GAAG,GAAW;wBACd,aAAa,EAAE,EAAE;wBACjB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,MAAM,EAAE,EAAE;wBACV,SAAS,EAAE,EAAE;wBACb,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,kBAAkB,EAAE,EAAE;wBACtB,aAAa,EAAE,EAAE;wBACjB,eAAe,EAAE,EAAE;wBACnB,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,EAAE;wBACd,SAAS,EAAC,EAAE;qBAEf,CAAC;oBACF,IAAI,IAAI,GAAkB,EAAE,CAAC;oBAC7B,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;oBAC1C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;wBACnD,MAAM,IAAI,uBAAa,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;oBACtF,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAElE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC,CAAC,CAAA;oBACF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;wBACf,IAAI,CAAC;4BACD,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;4BAEzE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,0BAA0B;4BACjG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BACf,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;4BAEjB,oBAAoB;4BACpB,4BAA4B;4BAC5B,IAAI,wBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;4BAE/D,gCAAgC;4BAChC,IAAI,yBAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;4BAEnC,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,SAAS,GAAY,KAAK,CAAC;4BAC/B,IAAI,eAAe,GAAG,CAAC,aAAsB,EAAE,aAAsB,EAAE,EAAE;gCACrE,IAAI,aAAa,IAAI,aAAa;oCAC9B,IAAI,EAAE,CAAC;4BACf,CAAC,CAAA;4BAED,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAEF,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;gCACrC,SAAS,GAAG,IAAI,CAAC;gCACjB,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAC1C,CAAC,CAAC,CAAA;4BAEF,IAAI,0BAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,YAAY,EAAE,CAAC;4BAC3E,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,IAAI,IAAI;gCAClE,IAAI,2BAAiB,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;4BAEjD,IAAI,6BAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC3C,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACX,IAAI,CAAC,GAAG,CAAC,CAAC;wBACd,CAAC;oBACL,CAAC,CAAC,CAAA;oBAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;wBACb,IAAI,CAAC,IAAI,uBAAa,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;oBACnE,CAAC,CAAC,CAAA;gBACN,CAAC,CAAA;YACL,CAAC;SACJ,CAAA;IACL,CAAC;IAEA,UAAU;QACC,OAAO,KAAK,WAAW,GAAY,EAAE,GAAa,EAAE,IAAkB;YAClE,IAAI,GAAG,GAAW;gBACd,aAAa,EAAE,EAAE;gBACjB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,EAAE,EAAE;gBACV,SAAS,EAAE,EAAE;gBACb,UAAU,EAAE,EAAE;gBACd,UAAU,EAAE,EAAE;gBACd,eAAe,EAAE,EAAE;gBACnB,UAAU,EAAE,EAAE;gBACd,kBAAkB,EAAE,EAAE;gBACtB,aAAa,EAAE,EAAE;gBACjB,eAAe,EAAE,EAAE;gBACnB,UAAU,EAAE,EAAE;gBACd,UAAU,EAAE,EAAE;gBACd,SAAS,EAAC,EAAE;aAEf,CAAC;YACF,IAAI,IAAI,GAAkB,EAAE,CAAC;YAC7B,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACnD,MAAM,IAAI,uBAAa,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;YAEtF,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAElE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC;oBACD,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;oBAEzE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,0BAA0B;oBACjG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACf,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAEjB,oBAAoB;oBACpB,4BAA4B;oBAC5B,IAAI,wBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;oBAE3D,gCAAgC;oBAChC,IAAI,SAAS,GAAY,KAAK,CAAC;oBAC/B,IAAI,SAAS,GAAY,KAAK,CAAC;oBAC/B,IAAI,eAAe,GAAG,CAAC,aAAsB,EAAE,aAAsB,EAAE,EAAE;wBACrE,IAAI,aAAa,IAAI,aAAa;4BAC9B,IAAI,EAAE,CAAC;oBACf,CAAC,CAAA;oBAED,uBAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;wBACrC,SAAS,GAAG,IAAI,CAAC;wBACjB,IAAI,EAAE,CAAC;oBACX,CAAC,CAAC,CAAA;oBAEF,IAAI,6BAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAE3C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,IAAI,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;YACL,CAAC,CAAC,CAAA;YAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACb,IAAI,CAAC,IAAI,uBAAa,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC,CAAC,CAAA;QACN,CAAC,CAAA;IACb,CAAC;CAEJ;AAED,kBAAe,QAAQ,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class FormfluxError extends Error {
4
+ constructor(message, statusCode = 500) {
5
+ super(message);
6
+ this.name = "FormfluxError";
7
+ this.statusCode = statusCode;
8
+ }
9
+ }
10
+ exports.default = FormfluxError;
11
+ //# sourceMappingURL=FormFluxError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormFluxError.js","sourceRoot":"","sources":["../src/FormFluxError.ts"],"names":[],"mappings":";;AAAA,MAAM,aAAc,SAAQ,KAAK;IAE7B,YAAY,OAAe,EAAC,aAAmB,GAAG;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAC,UAAU,CAAC;IAC/B,CAAC;CACJ;AAGD,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const EventHandlers_1 = __importDefault(require("./EventHandlers"));
7
+ const resBodyMaker_1 = __importDefault(require("./helpers/resBodyMaker"));
8
+ const FormFluxError_1 = __importDefault(require("./FormFluxError"));
9
+ class setContentToBody {
10
+ constructor(obj) {
11
+ this.obj = obj;
12
+ }
13
+ setBody(req) {
14
+ try {
15
+ req.body = req.body ? req.body : {};
16
+ if (this.obj.contentBody.length > 0) {
17
+ for (let i = 0; i < this.obj.contentBody.length; i++) {
18
+ if (/\[.*\]/.test(this.obj.fieldNameBody[i])) {
19
+ this.nestedData(req, this.obj.fieldNameBody[i], this.obj.contentBody[i]);
20
+ }
21
+ else
22
+ req.body[`${this.obj.fieldNameBody[i]}`] = this.obj.contentBody[i];
23
+ }
24
+ }
25
+ EventHandlers_1.default.emitMessage("parseEnd", "parse commplete");
26
+ }
27
+ catch (err) {
28
+ throw new FormFluxError_1.default("Error in parsing form data.Invalid Format!", 400);
29
+ }
30
+ }
31
+ nestedData(req, fieldName, data) {
32
+ let outer = fieldName.substring(0, fieldName.indexOf("["));
33
+ let inners = fieldName.substring(fieldName.indexOf("["));
34
+ let i = 0;
35
+ let current;
36
+ let prev;
37
+ let temp = inners.match(/\[([^\]]+)\]/g).map(s => s.slice(1, -1)); // [a,b,c] => [a,b,c]
38
+ if (!req.body[`${outer}`]) {
39
+ for (let i = temp.length - 1; i >= 0; i--) {
40
+ if (!isNaN(temp[i])) {
41
+ if (!prev) {
42
+ current = [data];
43
+ prev = current;
44
+ }
45
+ else {
46
+ current = [prev];
47
+ prev = current;
48
+ }
49
+ }
50
+ else {
51
+ if (!prev) {
52
+ current = { [`${temp[i]}`]: data };
53
+ prev = current;
54
+ }
55
+ else {
56
+ current = { [`${temp[i]}`]: prev };
57
+ prev = current;
58
+ }
59
+ }
60
+ }
61
+ req.body[`${outer}`] = current;
62
+ }
63
+ else {
64
+ temp.unshift(outer);
65
+ this.getNestedField(req, req.body, temp, temp[temp.length - 1], data, 0, req.body);
66
+ }
67
+ }
68
+ // mapping.....
69
+ getNestedField(req, obj, posArr, keySearch, data, i, prevObj) {
70
+ if (i == posArr.length - 1) { // reached last position set the value
71
+ if (Array.isArray(obj)) {
72
+ if (!isNaN(posArr[i])) { // if the current position is a number then it is an array
73
+ obj[posArr[i]] ? obj[posArr[i]] = data : obj.push(data);
74
+ return;
75
+ }
76
+ else {
77
+ obj[posArr[i]] = data; // needs some checking
78
+ return;
79
+ }
80
+ }
81
+ else { // it is an objct
82
+ obj[posArr[i]] = data;
83
+ return;
84
+ }
85
+ }
86
+ if (!obj[posArr[i]]) {
87
+ if (!isNaN(posArr[i])) {
88
+ obj[posArr[i]] = (0, resBodyMaker_1.default)(posArr, i + 1, data); // create the rest
89
+ return;
90
+ }
91
+ else {
92
+ obj[posArr[i]] = (0, resBodyMaker_1.default)(posArr, i + 1, data);
93
+ return;
94
+ }
95
+ }
96
+ prevObj = obj[posArr[i]];
97
+ this.getNestedField(req, obj[posArr[i]], posArr, keySearch, data, i + 1, prevObj);
98
+ }
99
+ }
100
+ exports.default = setContentToBody;
101
+ //# sourceMappingURL=SetBodyContentToReq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetBodyContentToReq.js","sourceRoot":"","sources":["../src/SetBodyContentToReq.ts"],"names":[],"mappings":"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"}