dwh-fetch 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # Typescript service for Digitronic Dwh interface
2
+
3
+
4
+ ### Usage
5
+
6
+ ```bash
7
+ yarn add dwh-fetch
8
+ ```
9
+
10
+ **Start coding!**
11
+
12
+ ### Features
13
+
14
+ - fetch DigiWEB variables as strings, or integers or as arrays
15
+ - map results of DigiWeb variables to objects using the `@Expression` decorator
16
+
17
+ ### Importing library
18
+
19
+ ```typescript
20
+ import DwhFetch from 'dwh-fetch'
21
+ ```
22
+
23
+
24
+ ### Examples
25
+
26
+
27
+ ```typescript
28
+ const dwh = new DwhFetch();
29
+
30
+ // fetch a simple variable to promise
31
+ dwh.fetchString('##000187').then(value => console.log(value));
32
+
33
+ (async () => {
34
+ // or with await ...
35
+ const value = await dwh.fetchString('##000187');
36
+ })();
37
+ ```
38
+
39
+ ```typescript
40
+ const dwh = new DwhFetch();
41
+
42
+ (async () => {
43
+
44
+ // fetch as Number to convert the result to number before returning
45
+ const aNumber = await dwh.fetchNumber('##000187');
46
+ const isNumber = aNumber instanceof Number; // true
47
+
48
+ })();
49
+ ```
50
+
51
+ ```typescript
52
+ const dwh = new DwhFetch();
53
+
54
+ (async () => {
55
+
56
+ // fetch as Number to convert the result to number before returning
57
+ const result = await dwh.fetch(['##A', '##B']);
58
+ console.log(result.accessRights); //current accessRights from the request
59
+ console.log(result.lines[0].success); //boolean indicates that request has been successful processed or not
60
+ console.log(result.lines[0].value); //value of ##A or errorCode if success is false
61
+ console.log(result.lines[1].success); //boolean indicates that request has been successful processed or not
62
+ console.log(result.lines[1].value); //value of ##B or errorCode if success is false
63
+
64
+ })();
65
+ ```
66
+
67
+ It's also possible to map values to objects and convert the results directly
68
+
69
+ ```typescript
70
+ interface Test {
71
+ timer: number;
72
+ firmware: string;
73
+ }
74
+
75
+ const expressions: ExpressionDefinitions<Test> = {
76
+ timer: Expression.integer('##000187'),
77
+ firmware: Expression.string('#$000199')
78
+ };
79
+ (async () => {
80
+ const dwhFetch = new DwhFetch();
81
+ const values: Test = await fetchExpressions(dwhFetch, expressions);
82
+ console.log(values);
83
+ })();
84
+
85
+ ```
86
+
87
+ This is also possible with array like expressions and using G= requests
88
+ ```typescript
89
+ import {
90
+ Expression,
91
+ ExpressionDefinitions,
92
+ fetchExpressions,
93
+ fetchIndexed
94
+ } from '../fetch-indexed';
95
+ import { DwhFetch } from '../dwh-fetch';
96
+
97
+ interface Test {
98
+ num: number;
99
+ str: string;
100
+ }
101
+
102
+ const expressions: ExpressionDefinitions<Test> = {
103
+ num: Expression.integer('##Module[##X].num'),
104
+ str: Expression.string('##Module[##X].str')
105
+ };
106
+ (async () => {
107
+ const dwhFetch = new DwhFetch();
108
+ const values: Test[] = await fetchIndexed(dwhFetch, '##Module.Count', expressions);
109
+ console.log(values);
110
+ })();
111
+
112
+ ```
113
+
114
+
@@ -0,0 +1 @@
1
+ export * from './index';
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ //this file is just here for compatibility with older versions
14
+ __exportStar(require("./index"), exports);
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHdoLWZldGNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2R3aC1mZXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSw4REFBOEQ7QUFDOUQsMENBQXdCIn0=
@@ -0,0 +1,5 @@
1
+ export * from './lib/backup/dwh-backup';
2
+ export * from './lib/dwh-fetch';
3
+ export * from './lib/DwhErrorCodes';
4
+ export * from './lib/fetch-indexed';
5
+ export * from './lib/update/dwh-update';
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./lib/backup/dwh-backup"), exports);
14
+ __exportStar(require("./lib/dwh-fetch"), exports);
15
+ __exportStar(require("./lib/DwhErrorCodes"), exports);
16
+ __exportStar(require("./lib/fetch-indexed"), exports);
17
+ __exportStar(require("./lib/update/dwh-update"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMERBQXdDO0FBQ3hDLGtEQUFnQztBQUNoQyxzREFBb0M7QUFDcEMsc0RBQW9DO0FBQ3BDLDBEQUF3QyJ9
@@ -0,0 +1,93 @@
1
+ export declare enum DwhErrorCode {
2
+ ERRORDW_PERIOD_NOT_AVAILABLE = -121,
3
+ ERRORDW_HTTP_USED_BY_ANOTHER = -120,
4
+ ERRORDW_IO_FILE_WR = -110,
5
+ ERRORDW_COM_BRUTE_FORCE = -107,
6
+ ERRORDW_COM_USED_BY_ANOTHER = -106,
7
+ ERRORDW_COM_WR_SECURITY_IS_NOT_OK = -105,
8
+ ERRORDW_COM_RD_SECURITY_IS_NOT_OK = -104,
9
+ ERRORDW_COM_TCPIP_NOT_CONMNECTED = -103,
10
+ ERRORDW_COM_RS232_NOT_CONMNECTED = -102,
11
+ ERRORDW_COM_RK512_CELL_NOT_DEFINED = -101,
12
+ ERRORDW_COM_CHACHE_FULL = -100,
13
+ ERRORDW_EMU_MISSING_INCLUDEFILE = -95,
14
+ ERRORDW_EMU_INCLUDEFILE_TO_DEEP = -94,
15
+ ERRORDW_EMU_INTERNAL_LOOP_ERR = -93,
16
+ ERRORDW_EMU_BUFOVR_COMMENT_PRINT = -92,
17
+ ERRORDW_EMU_NO_GIF_FILENAME = -91,
18
+ ERRORDW_EMU_EOF = -90,
19
+ ERRORDW_EMU_STR_SWITCH_COMMENT_NOT_A_DIGICASE = -89,
20
+ ERRORDW_EMU_STR_SWITCH_COMMENT_TO_LARGE_CASENR = -88,
21
+ ERRORDW_EMU_STR_SWITCH_COMMENT_BUFOVR = -87,
22
+ ERRORDW_EMU_BUFOVR_COMMENT_FILL_BUF = -86,
23
+ ERRORDW_EMU_MISSING_PARENTHESIZE_CLOSE = -85,
24
+ ERRORDW_EMU_MISSING_PARENTHESIZE_OPEN = -84,
25
+ ERRORDW_EMU_ENDWHILE_WITHOUT_WHILE = -83,
26
+ ERRORDW_EMU_DEEPEST_STACKLEVEL_REACHED = -82,
27
+ ERRORDW_EMU_BUFOVR_ANKER_DOESNT_FIT = -81,
28
+ ERRORDW_EMU_STR_USED_WHERE_STR_IS_NOT_SUPPORTED = -80,
29
+ ERRORDW_EMU_HTML_ATTRIBUTE_OPENED_BUT_NOT_CLOSED = -79,
30
+ ERRORDW_EMU_EXPECTED_TOKEN_MISSING = -78,
31
+ ERRORDW_EMU_BUFOVR_FILL_BUF = -77,
32
+ ERRORDW_EMU_BUFOVR_REPL_STR = -76,
33
+ ERRORDW_EMU_BUFOVR_REPL_MEM = -75,
34
+ ERRORDW_EMU_NOT_ENDING_EXPR = -74,
35
+ ERRORDW_EMU_EXPR_ERR = -73,
36
+ ERRORDW_EMU_NON_VALID_FILE = -72,
37
+ ERRORDW_EMU_BUFOVR = -71,
38
+ ERRORDW_SMTP_TIMEOUT = -61,
39
+ ERRORDW_SMTP_MALLOC = -60,
40
+ ERRORDW_HTT_PARAMETER_DIA_LOOP_OVERFLOW = -59,
41
+ ERRORDW_HTT_PARAMETER_ACCESS_FORBIDDEN = -58,
42
+ ERRORDW_HTT_PARAMETER_BUFFER_OVERFLOW = -57,
43
+ ERRORDW_HTT_PARAMETER_DIA_X_NOT_FOUND = -55,
44
+ ERRORDW_HTT_PARAMETER_NOT_DECODEABLE = -54,
45
+ ERRORDW_HTT_PARAMETER_HEAP_OVERFLOW = -53,
46
+ ERRORDW_HTT_DWH_CONNECT_LOST = -52,
47
+ ERRORDW_HTT_NO_FREE_DWH_CONNECT = -51,
48
+ ERRORDW_HTT_PARAMETER_EQ_NOT_FOUND = -50,
49
+ ERRORDW_EXP_NO_EXPRESSION = -49,
50
+ ERRORDW_EXP_ARRAYINDEX_TO_BIG = -48,
51
+ ERRORDW_EXP_SYMBOL_ARRAY_ERROR = -47,
52
+ ERRORDW_EXP_VARIABLE_NOT_TRANSFERED_PUT = -46,
53
+ ERRORDW_EXP_VARIABLE_NOT_TRANSFERED_GET = -45,
54
+ ERRORDW_EXP_SQL_ACCESS_ERROR = -43,
55
+ ERRORDW_EXP_DIV_BY_ZERO = -42,
56
+ ERRORDW_EXP_STRINGDW_HAS_NO_LENGHT = -41,
57
+ ERRORDW_EXP_STRING_FORMAT_WOULD_BE_TO_LONG = -40,
58
+ ERRORDW_EXP_STRING_URL_WOULD_BE_TO_LONG = -39,
59
+ ERRORDW_EXP_ZUWEISUNG_NOT_FOUND = -38,
60
+ ERRORDW_EXP_MACRO_INDEX_END_EXPECTED = -37,
61
+ ERRORDW_EXP_MACRO_PARSE_BUFFER_OVERFLOW = -36,
62
+ ERRORDW_EXP_UNEXPECTED_CHAR_AFTER_EXP = -35,
63
+ ERRORDW_EXP_MALLOC_OVERFLOW = -34,
64
+ ERRORDW_EXP_DOPPELPUNKT_EXPECTET = -33,
65
+ ERRORDW_EXP_STRING_ADD_WOULD_BE_TO_LONG = -32,
66
+ ERRORDW_EXP_OPERAND_FOR_VALUE_UNDEFINED = -31,
67
+ ERRORDW_EXP_OPERAND_FOR_STRING_UNDEFINED = -30,
68
+ ERRORDW_EXP_UNIOPERATOR_NOT_FOR_STRING = -29,
69
+ ERRORDW_EXP_KONSTANT_STRING_TO_LONG = -28,
70
+ ERRORDW_EXP_BRACKET_END_EXPECTED = -27,
71
+ ERRORDW_EXP_FUNCTION_UNDEFINED = -26,
72
+ ERRORDW_EXP_VARIABLE_NOT_DEFINED = -25,
73
+ ERRORDW_EXP_VARIABLE_STARTS_NOT_ALNUM = -24,
74
+ ERRORDW_EXP_FUNCT_BRACKET_END_EXPECTED = -23,
75
+ ERRORDW_EXP_NESTED_TO_DEEP = -22,
76
+ ERRORDW_EXP_INPUT_IN_PUT = -21,
77
+ ERRORDW_EXP_S7SYNTAX_UNDEFINED_TYPE = -20,
78
+ ERRORDW_EXP_S7SYNTAX_DOT_DB_EXPECTET = -19,
79
+ ERRORDW_EXP_S7SYNTAX_DB_EXPECTET = -18,
80
+ ERRORDW_EXP_POINT_IN_IP_EXPECTED = -17,
81
+ ERRORDW_EXP_DIGIT_OR_INDEX_EXPECTED = -16,
82
+ ERRORDW_EXP_INDEX_BRACKET_END_EXPECTED = -15,
83
+ ERRORDW_EXP_INDEX_NO_STRING = -14,
84
+ ERRORDW_EXP_FUNCT_PARAMETER_BRACKET_END_EXPECTED = -13,
85
+ ERRORDW_EXP_DBINXINY_SYNTAX = -12,
86
+ ERRORDW_EXP_VARIABLE_START_SYNTAXERROR = -11,
87
+ ERRORDW_EXP_BRACKET_END_NOT_FOUND = -10,
88
+ ERRORDW_UNDEFINED = -1,
89
+ ERRORDW_OK = 0,
90
+ ERRORDW_OK2 = 1,
91
+ ERRORDW_OK3 = 2
92
+ }
93
+ export declare function getDwhErrorString(code: number): string;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDwhErrorString = exports.DwhErrorCode = void 0;
4
+ // noinspection JSUnusedGlobalSymbols
5
+ var DwhErrorCode;
6
+ (function (DwhErrorCode) {
7
+ DwhErrorCode[DwhErrorCode["ERRORDW_PERIOD_NOT_AVAILABLE"] = -121] = "ERRORDW_PERIOD_NOT_AVAILABLE";
8
+ DwhErrorCode[DwhErrorCode["ERRORDW_HTTP_USED_BY_ANOTHER"] = -120] = "ERRORDW_HTTP_USED_BY_ANOTHER";
9
+ DwhErrorCode[DwhErrorCode["ERRORDW_IO_FILE_WR"] = -110] = "ERRORDW_IO_FILE_WR";
10
+ DwhErrorCode[DwhErrorCode["ERRORDW_COM_BRUTE_FORCE"] = -107] = "ERRORDW_COM_BRUTE_FORCE";
11
+ DwhErrorCode[DwhErrorCode["ERRORDW_COM_USED_BY_ANOTHER"] = -106] = "ERRORDW_COM_USED_BY_ANOTHER";
12
+ DwhErrorCode[DwhErrorCode["ERRORDW_COM_WR_SECURITY_IS_NOT_OK"] = -105] = "ERRORDW_COM_WR_SECURITY_IS_NOT_OK";
13
+ DwhErrorCode[DwhErrorCode["ERRORDW_COM_RD_SECURITY_IS_NOT_OK"] = -104] = "ERRORDW_COM_RD_SECURITY_IS_NOT_OK";
14
+ DwhErrorCode[DwhErrorCode["ERRORDW_COM_TCPIP_NOT_CONMNECTED"] = -103] = "ERRORDW_COM_TCPIP_NOT_CONMNECTED";
15
+ DwhErrorCode[DwhErrorCode["ERRORDW_COM_RS232_NOT_CONMNECTED"] = -102] = "ERRORDW_COM_RS232_NOT_CONMNECTED";
16
+ DwhErrorCode[DwhErrorCode["ERRORDW_COM_RK512_CELL_NOT_DEFINED"] = -101] = "ERRORDW_COM_RK512_CELL_NOT_DEFINED";
17
+ DwhErrorCode[DwhErrorCode["ERRORDW_COM_CHACHE_FULL"] = -100] = "ERRORDW_COM_CHACHE_FULL";
18
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_MISSING_INCLUDEFILE"] = -95] = "ERRORDW_EMU_MISSING_INCLUDEFILE";
19
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_INCLUDEFILE_TO_DEEP"] = -94] = "ERRORDW_EMU_INCLUDEFILE_TO_DEEP";
20
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_INTERNAL_LOOP_ERR"] = -93] = "ERRORDW_EMU_INTERNAL_LOOP_ERR";
21
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_BUFOVR_COMMENT_PRINT"] = -92] = "ERRORDW_EMU_BUFOVR_COMMENT_PRINT";
22
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_NO_GIF_FILENAME"] = -91] = "ERRORDW_EMU_NO_GIF_FILENAME";
23
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_EOF"] = -90] = "ERRORDW_EMU_EOF";
24
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_STR_SWITCH_COMMENT_NOT_A_DIGICASE"] = -89] = "ERRORDW_EMU_STR_SWITCH_COMMENT_NOT_A_DIGICASE";
25
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_STR_SWITCH_COMMENT_TO_LARGE_CASENR"] = -88] = "ERRORDW_EMU_STR_SWITCH_COMMENT_TO_LARGE_CASENR";
26
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_STR_SWITCH_COMMENT_BUFOVR"] = -87] = "ERRORDW_EMU_STR_SWITCH_COMMENT_BUFOVR";
27
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_BUFOVR_COMMENT_FILL_BUF"] = -86] = "ERRORDW_EMU_BUFOVR_COMMENT_FILL_BUF";
28
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_MISSING_PARENTHESIZE_CLOSE"] = -85] = "ERRORDW_EMU_MISSING_PARENTHESIZE_CLOSE";
29
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_MISSING_PARENTHESIZE_OPEN"] = -84] = "ERRORDW_EMU_MISSING_PARENTHESIZE_OPEN";
30
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_ENDWHILE_WITHOUT_WHILE"] = -83] = "ERRORDW_EMU_ENDWHILE_WITHOUT_WHILE";
31
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_DEEPEST_STACKLEVEL_REACHED"] = -82] = "ERRORDW_EMU_DEEPEST_STACKLEVEL_REACHED";
32
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_BUFOVR_ANKER_DOESNT_FIT"] = -81] = "ERRORDW_EMU_BUFOVR_ANKER_DOESNT_FIT";
33
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_STR_USED_WHERE_STR_IS_NOT_SUPPORTED"] = -80] = "ERRORDW_EMU_STR_USED_WHERE_STR_IS_NOT_SUPPORTED";
34
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_HTML_ATTRIBUTE_OPENED_BUT_NOT_CLOSED"] = -79] = "ERRORDW_EMU_HTML_ATTRIBUTE_OPENED_BUT_NOT_CLOSED";
35
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_EXPECTED_TOKEN_MISSING"] = -78] = "ERRORDW_EMU_EXPECTED_TOKEN_MISSING";
36
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_BUFOVR_FILL_BUF"] = -77] = "ERRORDW_EMU_BUFOVR_FILL_BUF";
37
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_BUFOVR_REPL_STR"] = -76] = "ERRORDW_EMU_BUFOVR_REPL_STR";
38
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_BUFOVR_REPL_MEM"] = -75] = "ERRORDW_EMU_BUFOVR_REPL_MEM";
39
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_NOT_ENDING_EXPR"] = -74] = "ERRORDW_EMU_NOT_ENDING_EXPR";
40
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_EXPR_ERR"] = -73] = "ERRORDW_EMU_EXPR_ERR";
41
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_NON_VALID_FILE"] = -72] = "ERRORDW_EMU_NON_VALID_FILE";
42
+ DwhErrorCode[DwhErrorCode["ERRORDW_EMU_BUFOVR"] = -71] = "ERRORDW_EMU_BUFOVR";
43
+ DwhErrorCode[DwhErrorCode["ERRORDW_SMTP_TIMEOUT"] = -61] = "ERRORDW_SMTP_TIMEOUT";
44
+ DwhErrorCode[DwhErrorCode["ERRORDW_SMTP_MALLOC"] = -60] = "ERRORDW_SMTP_MALLOC";
45
+ DwhErrorCode[DwhErrorCode["ERRORDW_HTT_PARAMETER_DIA_LOOP_OVERFLOW"] = -59] = "ERRORDW_HTT_PARAMETER_DIA_LOOP_OVERFLOW";
46
+ DwhErrorCode[DwhErrorCode["ERRORDW_HTT_PARAMETER_ACCESS_FORBIDDEN"] = -58] = "ERRORDW_HTT_PARAMETER_ACCESS_FORBIDDEN";
47
+ DwhErrorCode[DwhErrorCode["ERRORDW_HTT_PARAMETER_BUFFER_OVERFLOW"] = -57] = "ERRORDW_HTT_PARAMETER_BUFFER_OVERFLOW";
48
+ DwhErrorCode[DwhErrorCode["ERRORDW_HTT_PARAMETER_DIA_X_NOT_FOUND"] = -55] = "ERRORDW_HTT_PARAMETER_DIA_X_NOT_FOUND";
49
+ DwhErrorCode[DwhErrorCode["ERRORDW_HTT_PARAMETER_NOT_DECODEABLE"] = -54] = "ERRORDW_HTT_PARAMETER_NOT_DECODEABLE";
50
+ DwhErrorCode[DwhErrorCode["ERRORDW_HTT_PARAMETER_HEAP_OVERFLOW"] = -53] = "ERRORDW_HTT_PARAMETER_HEAP_OVERFLOW";
51
+ DwhErrorCode[DwhErrorCode["ERRORDW_HTT_DWH_CONNECT_LOST"] = -52] = "ERRORDW_HTT_DWH_CONNECT_LOST";
52
+ DwhErrorCode[DwhErrorCode["ERRORDW_HTT_NO_FREE_DWH_CONNECT"] = -51] = "ERRORDW_HTT_NO_FREE_DWH_CONNECT";
53
+ DwhErrorCode[DwhErrorCode["ERRORDW_HTT_PARAMETER_EQ_NOT_FOUND"] = -50] = "ERRORDW_HTT_PARAMETER_EQ_NOT_FOUND";
54
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_NO_EXPRESSION"] = -49] = "ERRORDW_EXP_NO_EXPRESSION";
55
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_ARRAYINDEX_TO_BIG"] = -48] = "ERRORDW_EXP_ARRAYINDEX_TO_BIG";
56
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_SYMBOL_ARRAY_ERROR"] = -47] = "ERRORDW_EXP_SYMBOL_ARRAY_ERROR";
57
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_VARIABLE_NOT_TRANSFERED_PUT"] = -46] = "ERRORDW_EXP_VARIABLE_NOT_TRANSFERED_PUT";
58
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_VARIABLE_NOT_TRANSFERED_GET"] = -45] = "ERRORDW_EXP_VARIABLE_NOT_TRANSFERED_GET";
59
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_SQL_ACCESS_ERROR"] = -43] = "ERRORDW_EXP_SQL_ACCESS_ERROR";
60
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_DIV_BY_ZERO"] = -42] = "ERRORDW_EXP_DIV_BY_ZERO";
61
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_STRINGDW_HAS_NO_LENGHT"] = -41] = "ERRORDW_EXP_STRINGDW_HAS_NO_LENGHT";
62
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_STRING_FORMAT_WOULD_BE_TO_LONG"] = -40] = "ERRORDW_EXP_STRING_FORMAT_WOULD_BE_TO_LONG";
63
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_STRING_URL_WOULD_BE_TO_LONG"] = -39] = "ERRORDW_EXP_STRING_URL_WOULD_BE_TO_LONG";
64
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_ZUWEISUNG_NOT_FOUND"] = -38] = "ERRORDW_EXP_ZUWEISUNG_NOT_FOUND";
65
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_MACRO_INDEX_END_EXPECTED"] = -37] = "ERRORDW_EXP_MACRO_INDEX_END_EXPECTED";
66
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_MACRO_PARSE_BUFFER_OVERFLOW"] = -36] = "ERRORDW_EXP_MACRO_PARSE_BUFFER_OVERFLOW";
67
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_UNEXPECTED_CHAR_AFTER_EXP"] = -35] = "ERRORDW_EXP_UNEXPECTED_CHAR_AFTER_EXP";
68
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_MALLOC_OVERFLOW"] = -34] = "ERRORDW_EXP_MALLOC_OVERFLOW";
69
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_DOPPELPUNKT_EXPECTET"] = -33] = "ERRORDW_EXP_DOPPELPUNKT_EXPECTET";
70
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_STRING_ADD_WOULD_BE_TO_LONG"] = -32] = "ERRORDW_EXP_STRING_ADD_WOULD_BE_TO_LONG";
71
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_OPERAND_FOR_VALUE_UNDEFINED"] = -31] = "ERRORDW_EXP_OPERAND_FOR_VALUE_UNDEFINED";
72
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_OPERAND_FOR_STRING_UNDEFINED"] = -30] = "ERRORDW_EXP_OPERAND_FOR_STRING_UNDEFINED";
73
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_UNIOPERATOR_NOT_FOR_STRING"] = -29] = "ERRORDW_EXP_UNIOPERATOR_NOT_FOR_STRING";
74
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_KONSTANT_STRING_TO_LONG"] = -28] = "ERRORDW_EXP_KONSTANT_STRING_TO_LONG";
75
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_BRACKET_END_EXPECTED"] = -27] = "ERRORDW_EXP_BRACKET_END_EXPECTED";
76
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_FUNCTION_UNDEFINED"] = -26] = "ERRORDW_EXP_FUNCTION_UNDEFINED";
77
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_VARIABLE_NOT_DEFINED"] = -25] = "ERRORDW_EXP_VARIABLE_NOT_DEFINED";
78
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_VARIABLE_STARTS_NOT_ALNUM"] = -24] = "ERRORDW_EXP_VARIABLE_STARTS_NOT_ALNUM";
79
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_FUNCT_BRACKET_END_EXPECTED"] = -23] = "ERRORDW_EXP_FUNCT_BRACKET_END_EXPECTED";
80
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_NESTED_TO_DEEP"] = -22] = "ERRORDW_EXP_NESTED_TO_DEEP";
81
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_INPUT_IN_PUT"] = -21] = "ERRORDW_EXP_INPUT_IN_PUT";
82
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_S7SYNTAX_UNDEFINED_TYPE"] = -20] = "ERRORDW_EXP_S7SYNTAX_UNDEFINED_TYPE";
83
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_S7SYNTAX_DOT_DB_EXPECTET"] = -19] = "ERRORDW_EXP_S7SYNTAX_DOT_DB_EXPECTET";
84
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_S7SYNTAX_DB_EXPECTET"] = -18] = "ERRORDW_EXP_S7SYNTAX_DB_EXPECTET";
85
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_POINT_IN_IP_EXPECTED"] = -17] = "ERRORDW_EXP_POINT_IN_IP_EXPECTED";
86
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_DIGIT_OR_INDEX_EXPECTED"] = -16] = "ERRORDW_EXP_DIGIT_OR_INDEX_EXPECTED";
87
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_INDEX_BRACKET_END_EXPECTED"] = -15] = "ERRORDW_EXP_INDEX_BRACKET_END_EXPECTED";
88
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_INDEX_NO_STRING"] = -14] = "ERRORDW_EXP_INDEX_NO_STRING";
89
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_FUNCT_PARAMETER_BRACKET_END_EXPECTED"] = -13] = "ERRORDW_EXP_FUNCT_PARAMETER_BRACKET_END_EXPECTED";
90
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_DBINXINY_SYNTAX"] = -12] = "ERRORDW_EXP_DBINXINY_SYNTAX";
91
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_VARIABLE_START_SYNTAXERROR"] = -11] = "ERRORDW_EXP_VARIABLE_START_SYNTAXERROR";
92
+ DwhErrorCode[DwhErrorCode["ERRORDW_EXP_BRACKET_END_NOT_FOUND"] = -10] = "ERRORDW_EXP_BRACKET_END_NOT_FOUND";
93
+ DwhErrorCode[DwhErrorCode["ERRORDW_UNDEFINED"] = -1] = "ERRORDW_UNDEFINED";
94
+ DwhErrorCode[DwhErrorCode["ERRORDW_OK"] = 0] = "ERRORDW_OK";
95
+ DwhErrorCode[DwhErrorCode["ERRORDW_OK2"] = 1] = "ERRORDW_OK2";
96
+ DwhErrorCode[DwhErrorCode["ERRORDW_OK3"] = 2] = "ERRORDW_OK3";
97
+ })(DwhErrorCode = exports.DwhErrorCode || (exports.DwhErrorCode = {}));
98
+ function getDwhErrorString(code) {
99
+ const ret = DwhErrorCode[code];
100
+ return ret || DwhErrorCode[DwhErrorCode.ERRORDW_UNDEFINED];
101
+ }
102
+ exports.getDwhErrorString = getDwhErrorString;
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHdoRXJyb3JDb2Rlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvRHdoRXJyb3JDb2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBcUM7QUFDckMsSUFBWSxZQWtHWDtBQWxHRCxXQUFZLFlBQVk7SUFDdEIsa0dBQW1DLENBQUE7SUFDbkMsa0dBQW1DLENBQUE7SUFFbkMsOEVBQXlCLENBQUE7SUFFekIsd0ZBQThCLENBQUE7SUFDOUIsZ0dBQWtDLENBQUE7SUFDbEMsNEdBQXdDLENBQUE7SUFDeEMsNEdBQXdDLENBQUE7SUFDeEMsMEdBQXVDLENBQUE7SUFDdkMsMEdBQXVDLENBQUE7SUFDdkMsOEdBQXlDLENBQUE7SUFDekMsd0ZBQThCLENBQUE7SUFFOUIsdUdBQXFDLENBQUE7SUFDckMsdUdBQXFDLENBQUE7SUFDckMsbUdBQW1DLENBQUE7SUFDbkMseUdBQXNDLENBQUE7SUFDdEMsK0ZBQWlDLENBQUE7SUFDakMsdUVBQXFCLENBQUE7SUFDckIsbUlBQW1ELENBQUE7SUFDbkQscUlBQW9ELENBQUE7SUFDcEQsbUhBQTJDLENBQUE7SUFDM0MsK0dBQXlDLENBQUE7SUFDekMscUhBQTRDLENBQUE7SUFDNUMsbUhBQTJDLENBQUE7SUFDM0MsNkdBQXdDLENBQUE7SUFDeEMscUhBQTRDLENBQUE7SUFDNUMsK0dBQXlDLENBQUE7SUFDekMsdUlBQXFELENBQUE7SUFDckQseUlBQXNELENBQUE7SUFDdEQsNkdBQXdDLENBQUE7SUFDeEMsK0ZBQWlDLENBQUE7SUFDakMsK0ZBQWlDLENBQUE7SUFDakMsK0ZBQWlDLENBQUE7SUFDakMsK0ZBQWlDLENBQUE7SUFDakMsaUZBQTBCLENBQUE7SUFDMUIsNkZBQWdDLENBQUE7SUFDaEMsNkVBQXdCLENBQUE7SUFFeEIsaUZBQTBCLENBQUE7SUFDMUIsK0VBQXlCLENBQUE7SUFFekIsdUhBQTZDLENBQUE7SUFDN0MscUhBQTRDLENBQUE7SUFDNUMsbUhBQTJDLENBQUE7SUFDM0MsbUhBQTJDLENBQUE7SUFDM0MsaUhBQTBDLENBQUE7SUFDMUMsK0dBQXlDLENBQUE7SUFDekMsaUdBQWtDLENBQUE7SUFDbEMsdUdBQXFDLENBQUE7SUFDckMsNkdBQXdDLENBQUE7SUFFeEMsMkZBQStCLENBQUE7SUFDL0IsbUdBQW1DLENBQUE7SUFDbkMscUdBQW9DLENBQUE7SUFDcEMsdUhBQTZDLENBQUE7SUFDN0MsdUhBQTZDLENBQUE7SUFDN0MsaUdBQWtDLENBQUE7SUFDbEMsdUZBQTZCLENBQUE7SUFDN0IsNkdBQXdDLENBQUE7SUFDeEMsNkhBQWdELENBQUE7SUFDaEQsdUhBQTZDLENBQUE7SUFDN0MsdUdBQXFDLENBQUE7SUFDckMsaUhBQTBDLENBQUE7SUFDMUMsdUhBQTZDLENBQUE7SUFDN0MsbUhBQTJDLENBQUE7SUFDM0MsK0ZBQWlDLENBQUE7SUFDakMseUdBQXNDLENBQUE7SUFDdEMsdUhBQTZDLENBQUE7SUFDN0MsdUhBQTZDLENBQUE7SUFDN0MseUhBQThDLENBQUE7SUFDOUMscUhBQTRDLENBQUE7SUFDNUMsK0dBQXlDLENBQUE7SUFDekMseUdBQXNDLENBQUE7SUFDdEMscUdBQW9DLENBQUE7SUFDcEMseUdBQXNDLENBQUE7SUFDdEMsbUhBQTJDLENBQUE7SUFDM0MscUhBQTRDLENBQUE7SUFDNUMsNkZBQWdDLENBQUE7SUFDaEMseUZBQThCLENBQUE7SUFDOUIsK0dBQXlDLENBQUE7SUFDekMsaUhBQTBDLENBQUE7SUFDMUMseUdBQXNDLENBQUE7SUFDdEMseUdBQXNDLENBQUE7SUFDdEMsK0dBQXlDLENBQUE7SUFDekMscUhBQTRDLENBQUE7SUFDNUMsK0ZBQWlDLENBQUE7SUFDakMseUlBQXNELENBQUE7SUFDdEQsK0ZBQWlDLENBQUE7SUFDakMscUhBQTRDLENBQUE7SUFDNUMsMkdBQXVDLENBQUE7SUFFdkMsMEVBQXNCLENBQUE7SUFDdEIsMkRBQWMsQ0FBQTtJQUNkLDZEQUFlLENBQUE7SUFDZiw2REFBZSxDQUFBO0FBQ2pCLENBQUMsRUFsR1csWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFrR3ZCO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBWTtJQUM1QyxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFIRCw4Q0FHQyJ9
@@ -0,0 +1,38 @@
1
+ import { Logger } from 'tslog';
2
+ import { DwhFetch, FileInfo } from '../dwh-fetch';
3
+ export interface BackupOptions {
4
+ /**
5
+ * Directory on the device to backup. Default is root directory '/'.
6
+ */
7
+ src?: string;
8
+ /**
9
+ * Handler will be executed before file download.
10
+ * Return true to download current file otherwise false.
11
+ * Default returns always true and all files will be downloaded.
12
+ */
13
+ processHandler?: (fileInfo: FileInfo) => boolean;
14
+ }
15
+ export declare class DwhBackup {
16
+ dwhFetch: DwhFetch;
17
+ private log;
18
+ /**
19
+ * DwhFetch Instance should be valid with authority token because it will be used to download files.
20
+ * @param dwhFetch
21
+ */
22
+ constructor(dwhFetch: DwhFetch, log?: Logger);
23
+ /**
24
+ * Downloads all files or specific directory from device into dst directory.
25
+ * @param dst Destination directory to save files into.
26
+ * @returns true when backup was successful.
27
+ */
28
+ backup(dst: string, opts?: BackupOptions): Promise<boolean>;
29
+ private logBackupResult;
30
+ /**
31
+ * Checks if directory exists.
32
+ * @param dst Destination directory to check.
33
+ * @returns true when directory exists.
34
+ */
35
+ private backupDirectoryExists;
36
+ private backupRecursively;
37
+ downloadFile(dst: string, src: string): Promise<boolean>;
38
+ }
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.DwhBackup = void 0;
23
+ const fs = __importStar(require("fs"));
24
+ const path_1 = require("path");
25
+ const tslog_1 = require("tslog");
26
+ class DwhBackup {
27
+ /**
28
+ * DwhFetch Instance should be valid with authority token because it will be used to download files.
29
+ * @param dwhFetch
30
+ */
31
+ constructor(dwhFetch, log = new tslog_1.Logger()) {
32
+ this.dwhFetch = dwhFetch;
33
+ this.log = log;
34
+ }
35
+ /**
36
+ * Downloads all files or specific directory from device into dst directory.
37
+ * @param dst Destination directory to save files into.
38
+ * @returns true when backup was successful.
39
+ */
40
+ async backup(dst, opts) {
41
+ var _a, _b;
42
+ this.log.info(`Backup started. Downloading files into ${dst}`);
43
+ if (!(await this.backupDirectoryExists(dst))) {
44
+ return this.logBackupResult(false);
45
+ }
46
+ const result = await this.backupRecursively(dst, {
47
+ src: (_a = opts === null || opts === void 0 ? void 0 : opts.src) !== null && _a !== void 0 ? _a : '/',
48
+ processHandler: (_b = opts === null || opts === void 0 ? void 0 : opts.processHandler) !== null && _b !== void 0 ? _b : (() => true),
49
+ });
50
+ return this.logBackupResult(result);
51
+ }
52
+ logBackupResult(result) {
53
+ if (result) {
54
+ this.log.info('Backup was successful');
55
+ }
56
+ else {
57
+ this.log.error('Backup failed');
58
+ }
59
+ return result;
60
+ }
61
+ /**
62
+ * Checks if directory exists.
63
+ * @param dst Destination directory to check.
64
+ * @returns true when directory exists.
65
+ */
66
+ async backupDirectoryExists(dst) {
67
+ try {
68
+ this.log.debug(`Checking directory if exists:`, dst);
69
+ const dstStat = await fs.promises.lstat(dst);
70
+ if (!dstStat.isDirectory()) {
71
+ this.log.error(`Destination ${dst} is not a directory`);
72
+ return false;
73
+ }
74
+ this.log.debug(`Destination is a directory`);
75
+ }
76
+ catch (e) {
77
+ this.log.error(`Directory check failed`, e);
78
+ return false;
79
+ }
80
+ return true;
81
+ }
82
+ async backupRecursively(dst, opts) {
83
+ if (!opts.src.endsWith('/')) {
84
+ opts.src += '/';
85
+ }
86
+ const fetchFilesPattern = opts.src + '*';
87
+ this.log.debug(`Fetching files:`, fetchFilesPattern);
88
+ const files = await this.dwhFetch.files(fetchFilesPattern);
89
+ this.log.debug(`Fetched:`, files.length);
90
+ for (const file of files) {
91
+ let result = true;
92
+ const newDstFile = path_1.join(dst, file.name);
93
+ const src = opts.src + file.name;
94
+ if (!opts.processHandler(file)) {
95
+ this.log.info(`Ignoring ${file.isDirectory ? 'directory' : 'file'} ${src}`);
96
+ continue;
97
+ }
98
+ if (file.isDirectory) {
99
+ this.log.info(`Creating directory ${newDstFile}`);
100
+ await fs.promises.mkdir(newDstFile);
101
+ this.log.info(`Directory created`);
102
+ result = await this.backupRecursively(newDstFile, Object.assign(Object.assign({}, opts), { src }));
103
+ }
104
+ else {
105
+ result = await this.downloadFile(newDstFile, src);
106
+ }
107
+ if (!result) {
108
+ this.log.debug(`Canceling download on failure`);
109
+ return false;
110
+ }
111
+ }
112
+ this.log.debug(`Downloading all files successful`);
113
+ return true;
114
+ }
115
+ async downloadFile(dst, src) {
116
+ this.log.info(`Downloading file ${src}.`);
117
+ return new Promise((resolve) => {
118
+ try {
119
+ const downloadStream = this.dwhFetch.downloadFile(src);
120
+ void downloadStream.on('error', (e) => {
121
+ this.log.error(`Download file stream error event:`, e);
122
+ resolve(false);
123
+ });
124
+ const stream = fs.createWriteStream(dst);
125
+ downloadStream.pipe(stream);
126
+ stream.on('finish', () => {
127
+ this.log.info(`Download file succeeded`);
128
+ return resolve(true);
129
+ });
130
+ stream.on('error', () => {
131
+ this.log.info(`Download file failed`);
132
+ return resolve(false);
133
+ });
134
+ }
135
+ catch (e) {
136
+ this.log.error(`Download file throw error:`, e);
137
+ resolve(false);
138
+ }
139
+ });
140
+ }
141
+ }
142
+ exports.DwhBackup = DwhBackup;
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHdoLWJhY2t1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYmFja3VwL2R3aC1iYWNrdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwrQkFBNEI7QUFDNUIsaUNBQStCO0FBZ0IvQixNQUFhLFNBQVM7SUFDcEI7OztPQUdHO0lBQ0gsWUFBbUIsUUFBa0IsRUFBVSxNQUFNLElBQUksY0FBTSxFQUFFO1FBQTlDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFlO0lBQUcsQ0FBQztJQUNyRTs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFXLEVBQUUsSUFBb0I7O1FBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9DLEdBQUcsUUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsR0FBRyxtQ0FBSSxHQUFHO1lBQ3JCLGNBQWMsUUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsY0FBYyxtQ0FBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztTQUNyRCxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFlO1FBQ3JDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLEdBQUcs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