@computec/uibase 1.0.2
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/dist/communication/HttpClient.d.ts +248 -0
- package/dist/communication/HttpClient.d.ts.map +1 -0
- package/dist/communication/HttpClient.js +355 -0
- package/dist/communication/HttpClientCacheOptions.d.ts +9 -0
- package/dist/communication/HttpClientCacheOptions.d.ts.map +1 -0
- package/dist/communication/HttpClientCacheOptions.js +25 -0
- package/dist/communication/IBaseHttpClientOptions.d.ts +17 -0
- package/dist/communication/IBaseHttpClientOptions.d.ts.map +1 -0
- package/dist/communication/IBaseHttpClientOptions.js +2 -0
- package/dist/helpers/ErrorHelper.d.ts +15 -0
- package/dist/helpers/ErrorHelper.d.ts.map +1 -0
- package/dist/helpers/ErrorHelper.js +37 -0
- package/dist/helpers/HttpClientHelper.d.ts +42 -0
- package/dist/helpers/HttpClientHelper.d.ts.map +1 -0
- package/dist/helpers/HttpClientHelper.js +175 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/models/AppEngineException.d.ts +11 -0
- package/dist/models/AppEngineException.d.ts.map +1 -0
- package/dist/models/AppEngineException.js +21 -0
- package/dist/models/BaseBusinessObject.d.ts +158 -0
- package/dist/models/BaseBusinessObject.d.ts.map +1 -0
- package/dist/models/BaseBusinessObject.js +187 -0
- package/dist/models/LocalStorage.d.ts +9 -0
- package/dist/models/LocalStorage.d.ts.map +1 -0
- package/dist/models/LocalStorage.js +54 -0
- package/dist/models/Session.d.ts +18 -0
- package/dist/models/Session.d.ts.map +1 -0
- package/dist/models/Session.js +5 -0
- package/dist/models/enums/HeadersContentTypeEnum.d.ts +8 -0
- package/dist/models/enums/HeadersContentTypeEnum.d.ts.map +1 -0
- package/dist/models/enums/HeadersContentTypeEnum.js +10 -0
- package/dist/models/enums/StorageTypeEnum.d.ts +5 -0
- package/dist/models/enums/StorageTypeEnum.d.ts.map +1 -0
- package/dist/models/enums/StorageTypeEnum.js +8 -0
- package/dist/models/interfaces/IAppEngineException.d.ts +7 -0
- package/dist/models/interfaces/IAppEngineException.d.ts.map +1 -0
- package/dist/models/interfaces/IAppEngineException.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/.library +15 -0
- package/dist-ui5/resources/computec/appengine/uibase/communication/HttpClient-dbg.js +485 -0
- package/dist-ui5/resources/computec/appengine/uibase/communication/HttpClient.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/communication/HttpClient.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/communication/HttpClientCacheOptions-dbg.js +41 -0
- package/dist-ui5/resources/computec/appengine/uibase/communication/HttpClientCacheOptions.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/communication/HttpClientCacheOptions.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/communication/IBaseHttpClientOptions-dbg.js +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/communication/IBaseHttpClientOptions.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/communication/IBaseHttpClientOptions.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/helpers/ErrorHelper-dbg.js +57 -0
- package/dist-ui5/resources/computec/appengine/uibase/helpers/ErrorHelper.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/helpers/ErrorHelper.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/helpers/HttpClientHelper-dbg.js +310 -0
- package/dist-ui5/resources/computec/appengine/uibase/helpers/HttpClientHelper.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/helpers/HttpClientHelper.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/index-dbg.js +43 -0
- package/dist-ui5/resources/computec/appengine/uibase/index.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/index.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/library-dbg.js +27 -0
- package/dist-ui5/resources/computec/appengine/uibase/library-preload.js +47 -0
- package/dist-ui5/resources/computec/appengine/uibase/library-preload.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/library.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/library.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/manifest.json +35 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/AppEngineException-dbg.js +37 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/AppEngineException.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/AppEngineException.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/BaseBusinessObject-dbg.js +231 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/BaseBusinessObject.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/BaseBusinessObject.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/LocalStorage-dbg.js +75 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/LocalStorage.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/LocalStorage.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/Session-dbg.js +15 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/Session.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/Session.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/enums/HeadersContentTypeEnum-dbg.js +14 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/enums/HeadersContentTypeEnum.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/enums/HeadersContentTypeEnum.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/enums/StorageTypeEnum-dbg.js +16 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/enums/StorageTypeEnum.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/enums/StorageTypeEnum.js.map +1 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/interfaces/IAppEngineException-dbg.js +7 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/interfaces/IAppEngineException.js +2 -0
- package/dist-ui5/resources/computec/appengine/uibase/models/interfaces/IAppEngineException.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export default class ErrorHelper {
|
|
2
|
+
/**
|
|
3
|
+
* @description Helper method that try to return Error type
|
|
4
|
+
* @returns
|
|
5
|
+
*/
|
|
6
|
+
static getError(error: any): Error;
|
|
7
|
+
/**
|
|
8
|
+
* Check if the error is an AppEngineException
|
|
9
|
+
* @deprecated **Use AppEngineException.is instead**
|
|
10
|
+
* @param error any object
|
|
11
|
+
* @returns boolean
|
|
12
|
+
*/
|
|
13
|
+
static isAppEngineException(error: any): error is import("..").IAppEngineException;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ErrorHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/ErrorHelper.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B;;;OAGG;WACW,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK;IAezC;;;;;OAKG;WACW,oBAAoB,CAAC,KAAK,EAAE,GAAG;CAG9C"}
|
|
@@ -0,0 +1,37 @@
|
|
|
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 AppEngineException_1 = __importDefault(require("../models/AppEngineException"));
|
|
7
|
+
class ErrorHelper {
|
|
8
|
+
/**
|
|
9
|
+
* @description Helper method that try to return Error type
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
static getError(error) {
|
|
13
|
+
var _a;
|
|
14
|
+
switch (true) {
|
|
15
|
+
case error instanceof Error:
|
|
16
|
+
return error;
|
|
17
|
+
case typeof error === "string":
|
|
18
|
+
return new Error(error);
|
|
19
|
+
case AppEngineException_1.default.is(error):
|
|
20
|
+
return new AppEngineException_1.default(error).error;
|
|
21
|
+
case (_a = error === null || error === void 0 ? void 0 : error.error) === null || _a === void 0 ? void 0 : _a.message:
|
|
22
|
+
return new Error(error.error.message);
|
|
23
|
+
default:
|
|
24
|
+
return error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if the error is an AppEngineException
|
|
29
|
+
* @deprecated **Use AppEngineException.is instead**
|
|
30
|
+
* @param error any object
|
|
31
|
+
* @returns boolean
|
|
32
|
+
*/
|
|
33
|
+
static isAppEngineException(error) {
|
|
34
|
+
return AppEngineException_1.default.is(error);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.default = ErrorHelper;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { IBasicHttpRequest } from "../communication/IBaseHttpClientOptions";
|
|
2
|
+
export default class HttpClientHelper {
|
|
3
|
+
static readonly FULL_URL_PATTERN: RegExp;
|
|
4
|
+
static readonly NOT_AUTHENTICATED_ERROR_NAME = "RESPONSE_NOT_AUTHENTICATED";
|
|
5
|
+
/**
|
|
6
|
+
* @throws Error if response is not ok with message based on status code or response
|
|
7
|
+
*/
|
|
8
|
+
static validateResponse(response: Response, restOptions: IBasicHttpRequest): Promise<boolean>;
|
|
9
|
+
/**
|
|
10
|
+
* @description Check if headers is an array of [string, string]
|
|
11
|
+
*/
|
|
12
|
+
static isHeadersArrayType(headers: HeadersInit): headers is [string, string][];
|
|
13
|
+
/**
|
|
14
|
+
* @description Fetch data based on response content type
|
|
15
|
+
* @param response from fetch
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
static fetchData(response: Response): Promise<any>;
|
|
19
|
+
/**
|
|
20
|
+
* @description prepares Url for fetch. If full url is provided, it will return it as is, otherwise it will append it to the current origin
|
|
21
|
+
* @param url
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
static getFullUrl(url?: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* @description Check if error is not authenticated
|
|
27
|
+
* @param error
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
static isNotAuthenticated: (error: Error) => boolean;
|
|
31
|
+
private static _validateResponseType;
|
|
32
|
+
private static _throwErrorBasedOnResponse;
|
|
33
|
+
private static _getAcceptedType;
|
|
34
|
+
private static _isJsonType;
|
|
35
|
+
private static _isFileType;
|
|
36
|
+
private static _isTextType;
|
|
37
|
+
private static _isNullType;
|
|
38
|
+
private static _fetchJsonData;
|
|
39
|
+
private static _fetchFileData;
|
|
40
|
+
private static _fetchTextData;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=HttpClientHelper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpClientHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/HttpClientHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAK5E,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,SAAmB;IACnD,MAAM,CAAC,QAAQ,CAAC,4BAA4B,gCAAgC;IAC5E;;OAEG;WACiB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB;IASvF;;OAEG;WACW,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;IAiBrF;;;;OAIG;WACW,SAAS,CAAC,QAAQ,EAAE,QAAQ;IAO1C;;;;OAIG;WACW,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM;IAMrC;;;;OAIG;IACH,OAAc,kBAAkB,GAAI,OAAO,KAAK,aACc;IAG9D,OAAO,CAAC,MAAM,CAAC,qBAAqB;mBAqBf,0BAA0B;IAyB/C,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAU/B,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,MAAM,CAAC,WAAW;mBAIL,cAAc;mBASd,cAAc;mBASd,cAAc;CASnC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const AppEngineException_1 = __importDefault(require("../models/AppEngineException"));
|
|
16
|
+
const ErrorHelper_1 = __importDefault(require("./ErrorHelper"));
|
|
17
|
+
const HeadersContentTypeEnum_1 = __importDefault(require("../models/enums/HeadersContentTypeEnum"));
|
|
18
|
+
class HttpClientHelper {
|
|
19
|
+
/**
|
|
20
|
+
* @throws Error if response is not ok with message based on status code or response
|
|
21
|
+
*/
|
|
22
|
+
static validateResponse(response, restOptions) {
|
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
yield this._throwErrorBasedOnResponse(response, restOptions);
|
|
26
|
+
}
|
|
27
|
+
this._validateResponseType(response, restOptions);
|
|
28
|
+
return true;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @description Check if headers is an array of [string, string]
|
|
33
|
+
*/
|
|
34
|
+
static isHeadersArrayType(headers) {
|
|
35
|
+
if (!Array.isArray(headers)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
for (let i = 0; i < headers.length; i++) {
|
|
39
|
+
if (!Array.isArray(headers[i]) || headers[i].length !== 2) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if (typeof headers[i][0] !== "string" || typeof headers[i][1] !== "string") {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @description Fetch data based on response content type
|
|
50
|
+
* @param response from fetch
|
|
51
|
+
* @returns
|
|
52
|
+
*/
|
|
53
|
+
static fetchData(response) {
|
|
54
|
+
const type = response.headers.get("Content-Type");
|
|
55
|
+
if (this._isJsonType(type))
|
|
56
|
+
return this._fetchJsonData(response);
|
|
57
|
+
if (this._isFileType(type))
|
|
58
|
+
return this._fetchFileData(response);
|
|
59
|
+
return this._fetchTextData(response);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @description prepares Url for fetch. If full url is provided, it will return it as is, otherwise it will append it to the current origin
|
|
63
|
+
* @param url
|
|
64
|
+
* @returns
|
|
65
|
+
*/
|
|
66
|
+
static getFullUrl(url) {
|
|
67
|
+
if (!url)
|
|
68
|
+
return "";
|
|
69
|
+
if (this.FULL_URL_PATTERN.test(url))
|
|
70
|
+
return url;
|
|
71
|
+
return `${window.location.origin}/${url}`;
|
|
72
|
+
}
|
|
73
|
+
//#region Private methods
|
|
74
|
+
static _validateResponseType(response, restOptions) {
|
|
75
|
+
const responseType = response.headers.get("Content-Type");
|
|
76
|
+
const acceptedType = this._getAcceptedType(restOptions.headers);
|
|
77
|
+
let valid = true;
|
|
78
|
+
if (acceptedType) {
|
|
79
|
+
const acceptedTypesArray = acceptedType.split(",");
|
|
80
|
+
valid = acceptedTypesArray.some((acceptedType) => (this._isJsonType(acceptedType) && this._isJsonType(responseType)) ||
|
|
81
|
+
(this._isTextType(acceptedType) && this._isTextType(responseType)) ||
|
|
82
|
+
(this._isFileType(acceptedType) && this._isFileType(responseType)) ||
|
|
83
|
+
(this._isNullType(acceptedType) && this._isNullType(responseType)));
|
|
84
|
+
}
|
|
85
|
+
if (!valid)
|
|
86
|
+
throw new Error(`Wrong content type. Accepted type for request: ${acceptedType}, received type in response: ${responseType}.`);
|
|
87
|
+
}
|
|
88
|
+
static _throwErrorBasedOnResponse(response, restOptions) {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
switch (response.status) {
|
|
91
|
+
case 401:
|
|
92
|
+
const error = new Error();
|
|
93
|
+
error.name = HttpClientHelper.NOT_AUTHENTICATED_ERROR_NAME;
|
|
94
|
+
error.message = response.statusText;
|
|
95
|
+
throw error;
|
|
96
|
+
case 0:
|
|
97
|
+
throw new Error("Server is not responding");
|
|
98
|
+
case 404:
|
|
99
|
+
throw new Error(`Not found ${restOptions.url}`);
|
|
100
|
+
case 405:
|
|
101
|
+
throw new Error(`Method ${restOptions.method} not allowed for endpoint: ${restOptions.url}`);
|
|
102
|
+
}
|
|
103
|
+
const result = yield this.fetchData(response);
|
|
104
|
+
if (AppEngineException_1.default.is(result))
|
|
105
|
+
throw new AppEngineException_1.default(result).error;
|
|
106
|
+
throw ErrorHelper_1.default.getError(result);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
static _getAcceptedType(headers) {
|
|
110
|
+
if (!headers)
|
|
111
|
+
return null;
|
|
112
|
+
if (headers instanceof Headers)
|
|
113
|
+
return headers.get("Accepted");
|
|
114
|
+
if (this.isHeadersArrayType(headers)) {
|
|
115
|
+
const accepted = headers.find(([key]) => key === "Accepted");
|
|
116
|
+
if (accepted !== undefined)
|
|
117
|
+
return accepted[1];
|
|
118
|
+
}
|
|
119
|
+
return headers["Accepted"];
|
|
120
|
+
}
|
|
121
|
+
static _isJsonType(type) {
|
|
122
|
+
return type === null || type === void 0 ? void 0 : type.includes(HeadersContentTypeEnum_1.default.Json);
|
|
123
|
+
}
|
|
124
|
+
static _isFileType(type) {
|
|
125
|
+
return type === null || type === void 0 ? void 0 : type.includes(HeadersContentTypeEnum_1.default.OctetStream);
|
|
126
|
+
}
|
|
127
|
+
static _isTextType(type) {
|
|
128
|
+
return type === null || type === void 0 ? void 0 : type.includes(HeadersContentTypeEnum_1.default.Text);
|
|
129
|
+
}
|
|
130
|
+
static _isNullType(type) {
|
|
131
|
+
return type === HeadersContentTypeEnum_1.default.Null || type === null;
|
|
132
|
+
}
|
|
133
|
+
static _fetchJsonData(response) {
|
|
134
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
135
|
+
try {
|
|
136
|
+
return yield response.json();
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
const err = ErrorHelper_1.default.getError(error);
|
|
140
|
+
throw new Error(`Could not load json data from response. ${err.message}`);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
static _fetchFileData(response) {
|
|
145
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
146
|
+
try {
|
|
147
|
+
return yield response.blob();
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
const err = ErrorHelper_1.default.getError(error);
|
|
151
|
+
throw new Error(`Could not load json data from response. ${err.message}`);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
static _fetchTextData(response) {
|
|
156
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
try {
|
|
158
|
+
return yield response.text();
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
const err = ErrorHelper_1.default.getError(error);
|
|
162
|
+
throw new Error(`Could not load text data from response. ${err.message}`);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
HttpClientHelper.FULL_URL_PATTERN = /^https?:\/\//i;
|
|
168
|
+
HttpClientHelper.NOT_AUTHENTICATED_ERROR_NAME = "RESPONSE_NOT_AUTHENTICATED";
|
|
169
|
+
/**
|
|
170
|
+
* @description Check if error is not authenticated
|
|
171
|
+
* @param error
|
|
172
|
+
* @returns
|
|
173
|
+
*/
|
|
174
|
+
HttpClientHelper.isNotAuthenticated = (error) => error.name === HttpClientHelper.NOT_AUTHENTICATED_ERROR_NAME;
|
|
175
|
+
exports.default = HttpClientHelper;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export { default as HttpClient } from './communication/HttpClient';
|
|
2
|
+
export * from './communication/HttpClient';
|
|
3
|
+
export { default as HttpClientCacheOptions } from './communication/HttpClientCacheOptions';
|
|
4
|
+
export * from './communication/HttpClientCacheOptions';
|
|
5
|
+
export * from './communication/IBaseHttpClientOptions';
|
|
6
|
+
export { default as ErrorHelper } from './helpers/ErrorHelper';
|
|
7
|
+
export * from './helpers/ErrorHelper';
|
|
8
|
+
export { default as HttpClientHelper } from './helpers/HttpClientHelper';
|
|
9
|
+
export * from './helpers/HttpClientHelper';
|
|
10
|
+
export { default as AppEngineException } from './models/AppEngineException';
|
|
11
|
+
export * from './models/AppEngineException';
|
|
12
|
+
export { default as BaseBusinessObject } from './models/BaseBusinessObject';
|
|
13
|
+
export * from './models/BaseBusinessObject';
|
|
14
|
+
export { default as HeadersContentTypeEnum } from './models/enums/HeadersContentTypeEnum';
|
|
15
|
+
export * from './models/enums/HeadersContentTypeEnum';
|
|
16
|
+
export * from './models/enums/StorageTypeEnum';
|
|
17
|
+
export { default as IAppEngineException } from './models/interfaces/IAppEngineException';
|
|
18
|
+
export * from './models/interfaces/IAppEngineException';
|
|
19
|
+
export { default as LocalStorage } from './models/LocalStorage';
|
|
20
|
+
export * from './models/LocalStorage';
|
|
21
|
+
export { default as Session } from './models/Session';
|
|
22
|
+
export * from './models/Session';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACnE,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAC3F,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/D,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACzE,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC1F,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACzF,cAAc,yCAAyC,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.Session = exports.LocalStorage = exports.HeadersContentTypeEnum = exports.BaseBusinessObject = exports.AppEngineException = exports.HttpClientHelper = exports.ErrorHelper = exports.HttpClientCacheOptions = exports.HttpClient = void 0;
|
|
21
|
+
var HttpClient_1 = require("./communication/HttpClient");
|
|
22
|
+
Object.defineProperty(exports, "HttpClient", { enumerable: true, get: function () { return __importDefault(HttpClient_1).default; } });
|
|
23
|
+
__exportStar(require("./communication/HttpClient"), exports);
|
|
24
|
+
var HttpClientCacheOptions_1 = require("./communication/HttpClientCacheOptions");
|
|
25
|
+
Object.defineProperty(exports, "HttpClientCacheOptions", { enumerable: true, get: function () { return __importDefault(HttpClientCacheOptions_1).default; } });
|
|
26
|
+
__exportStar(require("./communication/HttpClientCacheOptions"), exports);
|
|
27
|
+
__exportStar(require("./communication/IBaseHttpClientOptions"), exports);
|
|
28
|
+
var ErrorHelper_1 = require("./helpers/ErrorHelper");
|
|
29
|
+
Object.defineProperty(exports, "ErrorHelper", { enumerable: true, get: function () { return __importDefault(ErrorHelper_1).default; } });
|
|
30
|
+
__exportStar(require("./helpers/ErrorHelper"), exports);
|
|
31
|
+
var HttpClientHelper_1 = require("./helpers/HttpClientHelper");
|
|
32
|
+
Object.defineProperty(exports, "HttpClientHelper", { enumerable: true, get: function () { return __importDefault(HttpClientHelper_1).default; } });
|
|
33
|
+
__exportStar(require("./helpers/HttpClientHelper"), exports);
|
|
34
|
+
var AppEngineException_1 = require("./models/AppEngineException");
|
|
35
|
+
Object.defineProperty(exports, "AppEngineException", { enumerable: true, get: function () { return __importDefault(AppEngineException_1).default; } });
|
|
36
|
+
__exportStar(require("./models/AppEngineException"), exports);
|
|
37
|
+
var BaseBusinessObject_1 = require("./models/BaseBusinessObject");
|
|
38
|
+
Object.defineProperty(exports, "BaseBusinessObject", { enumerable: true, get: function () { return __importDefault(BaseBusinessObject_1).default; } });
|
|
39
|
+
__exportStar(require("./models/BaseBusinessObject"), exports);
|
|
40
|
+
var HeadersContentTypeEnum_1 = require("./models/enums/HeadersContentTypeEnum");
|
|
41
|
+
Object.defineProperty(exports, "HeadersContentTypeEnum", { enumerable: true, get: function () { return __importDefault(HeadersContentTypeEnum_1).default; } });
|
|
42
|
+
__exportStar(require("./models/enums/HeadersContentTypeEnum"), exports);
|
|
43
|
+
__exportStar(require("./models/enums/StorageTypeEnum"), exports);
|
|
44
|
+
__exportStar(require("./models/interfaces/IAppEngineException"), exports);
|
|
45
|
+
var LocalStorage_1 = require("./models/LocalStorage");
|
|
46
|
+
Object.defineProperty(exports, "LocalStorage", { enumerable: true, get: function () { return __importDefault(LocalStorage_1).default; } });
|
|
47
|
+
__exportStar(require("./models/LocalStorage"), exports);
|
|
48
|
+
var Session_1 = require("./models/Session");
|
|
49
|
+
Object.defineProperty(exports, "Session", { enumerable: true, get: function () { return __importDefault(Session_1).default; } });
|
|
50
|
+
__exportStar(require("./models/Session"), exports);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import IAppEngineException from "./interfaces/IAppEngineException";
|
|
2
|
+
export default class AppEngineException implements IAppEngineException {
|
|
3
|
+
Title?: string;
|
|
4
|
+
Detail?: string;
|
|
5
|
+
title?: string;
|
|
6
|
+
detail?: string;
|
|
7
|
+
constructor(error?: any);
|
|
8
|
+
get error(): Error;
|
|
9
|
+
static is(error: any): error is IAppEngineException;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=AppEngineException.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppEngineException.d.ts","sourceRoot":"","sources":["../../src/models/AppEngineException.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,kCAAkC,CAAC;AAEnE,MAAM,CAAC,OAAO,OAAO,kBAAmB,YAAW,mBAAmB;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEJ,KAAK,CAAC,EAAE,GAAG;IASvB,IAAI,KAAK,UAER;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,mBAAmB;CAOpD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class AppEngineException {
|
|
4
|
+
constructor(error) {
|
|
5
|
+
if (error) {
|
|
6
|
+
this.Title = error.Title;
|
|
7
|
+
this.Detail = error.Detail;
|
|
8
|
+
this.title = error.title;
|
|
9
|
+
this.detail = error.detail;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
get error() {
|
|
13
|
+
return new Error(this.Detail || this.detail);
|
|
14
|
+
}
|
|
15
|
+
static is(error) {
|
|
16
|
+
let isTitle = error["Title"] !== undefined || error["title"] !== undefined;
|
|
17
|
+
let isDetails = error["Detail"] !== undefined || error["detail"] !== undefined;
|
|
18
|
+
return isTitle && isDetails;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.default = AppEngineException;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
type BaseBusinessObjectConstructor<T extends BaseBusinessObject> = {
|
|
2
|
+
new (): T;
|
|
3
|
+
create<U extends T>(this: BaseBusinessObjectConstructor<U>, data: Record<string, unknown> | object): U;
|
|
4
|
+
createMany<U extends T>(this: BaseBusinessObjectConstructor<U>, data: Record<string, unknown>[] | object[]): U[];
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* @experimental
|
|
8
|
+
* It is possible that this class will be removed or change name in the future.
|
|
9
|
+
* @class
|
|
10
|
+
* @abstract
|
|
11
|
+
* This abstract class is used to transform data from the server to business logic.
|
|
12
|
+
* It's currently marked as experimental, which means it may change in the future.
|
|
13
|
+
*
|
|
14
|
+
* **Static methods**:
|
|
15
|
+
*
|
|
16
|
+
* @static {function} `create` - This method is used to create a new instance of the class filled with the provided data.
|
|
17
|
+
* @static {function} `createMany` - This method is used to create multiple new instances of the class filled with the provided data.
|
|
18
|
+
*
|
|
19
|
+
* **Methods and properties**:
|
|
20
|
+
*
|
|
21
|
+
* @property {boolean} `USE_RAW_DATA` - This property is used to determine if the instance should use the raw data from the server.
|
|
22
|
+
* @property {function} `fillData` - This method is used to fill the instance with data from the server.
|
|
23
|
+
* @property {function} `clone` - This abstract method should be implemented in child classes to clone the instance.
|
|
24
|
+
* @property {function} `toJSON` - This method is used to remove the _rawData property from the object before converting it to JSON.
|
|
25
|
+
* @property {function} `getField` - This method is used to retrieve the value of a specific field from the _rawData object.
|
|
26
|
+
* @property {function} `cleanRaw` - This method is to reset the _rawData property to an empty object.
|
|
27
|
+
*/
|
|
28
|
+
export default abstract class BaseBusinessObject {
|
|
29
|
+
/**
|
|
30
|
+
* This property is used to determine if the instance should use the raw data from the server.
|
|
31
|
+
* If set to true, the instance will store the raw data in the _rawData property.
|
|
32
|
+
* This property is set to false by default.
|
|
33
|
+
* @method getField - This method is used to retrieve the value of a specific field from the _rawData object.
|
|
34
|
+
*/
|
|
35
|
+
protected USE_RAW_DATA: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* This property is used to store the raw data from the server.
|
|
38
|
+
* It is an empty object by default.
|
|
39
|
+
* The property is only used if the USE_RAW_DATA property is set to true.
|
|
40
|
+
* _rawData can be usefull when you need initial data to be able to revert the object to its original state.
|
|
41
|
+
* @method getField - This method is used to retrieve the value of a specific field from the _rawData object.
|
|
42
|
+
* @private
|
|
43
|
+
* @type {Record<string, unknown>}
|
|
44
|
+
* @memberof BaseBusinessObject
|
|
45
|
+
*/
|
|
46
|
+
private _rawData;
|
|
47
|
+
/**
|
|
48
|
+
* This method is to reset the _rawData property to an empty object.
|
|
49
|
+
*
|
|
50
|
+
* **Recommendations**
|
|
51
|
+
*
|
|
52
|
+
* - Use this method aware that you will lose the initial data of the object.
|
|
53
|
+
* - **IMPORTANT** The method is recommended to use in `fillData` method when you don't use `getField` method in `toJSON` method.
|
|
54
|
+
* - It is useful when you need to clean the raw data from the object or you want to optimize the memory usage.
|
|
55
|
+
* @returns {}
|
|
56
|
+
*/
|
|
57
|
+
cleanRaw(): {};
|
|
58
|
+
/**
|
|
59
|
+
* Creates a new instance of the class filled with the provided data.
|
|
60
|
+
*
|
|
61
|
+
* @template T The type of the instance to create.
|
|
62
|
+
* @param {new () => T} this The constructor of the class to create an instance of.
|
|
63
|
+
* @param {Record<string, unknown>} data The data to fill the instance with.
|
|
64
|
+
* @returns {T} The new instance of the class filled with the provided data.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* // Example data from the server
|
|
68
|
+
* const data = { Code: 'US', Name: 'United States' };
|
|
69
|
+
*
|
|
70
|
+
* // Create a new Country instance filled with the data
|
|
71
|
+
* const country = Country.create(data);
|
|
72
|
+
*
|
|
73
|
+
* console.log(country.Code); // 'US'
|
|
74
|
+
* console.log(country.Name); // 'United States'
|
|
75
|
+
*/
|
|
76
|
+
static create<T extends BaseBusinessObject, U extends T>(this: BaseBusinessObjectConstructor<U>, data: Record<string, unknown> | object): U;
|
|
77
|
+
/**
|
|
78
|
+
* Creates multiple new instances of the class filled with the provided data.
|
|
79
|
+
*
|
|
80
|
+
* @template T The type of the instances to create.
|
|
81
|
+
* @param {new () => T} this The constructor of the class to create instances of.
|
|
82
|
+
* @param {Record<string, unknown>[]} data The array of data to fill the instances with.
|
|
83
|
+
* @returns {T[]} The new instances of the class filled with the provided data.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* // Example array of data from the server
|
|
87
|
+
* const dataArray = [{ Code: 'US', Name: 'United States' }, { Code: 'CA', Name: 'Canada' }];
|
|
88
|
+
*
|
|
89
|
+
* // Create new Country instances filled with the data
|
|
90
|
+
* const countries = Country.createMany(dataArray);
|
|
91
|
+
*
|
|
92
|
+
* console.log(countries[0].Code); // 'US'
|
|
93
|
+
* console.log(countries[0].Name); // 'United States'
|
|
94
|
+
* console.log(countries[1].Code); // 'CA'
|
|
95
|
+
* console.log(countries[1].Name); // 'Canada'
|
|
96
|
+
*/
|
|
97
|
+
static createMany<T extends BaseBusinessObject, U extends T>(this: BaseBusinessObjectConstructor<U>, data: Record<string, unknown>[] | object[]): U[];
|
|
98
|
+
/**
|
|
99
|
+
* This method is used to retrieve the value of a specific field from the _rawData object.
|
|
100
|
+
* It takes in a field parameter which represents the name of the field to retrieve.
|
|
101
|
+
* It tries to access the value of the field from the _rawData object using the provided field name.
|
|
102
|
+
* If the field exists, it returns the value casted to the specified type T.
|
|
103
|
+
* If the field does not exist or an error occurs, it returns null.
|
|
104
|
+
*
|
|
105
|
+
* @param field The name of the field to retrieve.
|
|
106
|
+
* @returns The value of the specified field casted to type T, or null if the field does not exist or an error occurs.
|
|
107
|
+
*/
|
|
108
|
+
protected getField<T = object>(field: string): T;
|
|
109
|
+
/**
|
|
110
|
+
* Fills the instance with data from the server.
|
|
111
|
+
*
|
|
112
|
+
* @param {Record<string, unknown>} data - The data from the server.
|
|
113
|
+
* @returns {BaseBusinessObject} The instance of the class filled with the server data.
|
|
114
|
+
*/
|
|
115
|
+
fillData(data: Record<string, unknown> | object): this;
|
|
116
|
+
/**
|
|
117
|
+
* Creates a clone of the instance.
|
|
118
|
+
*
|
|
119
|
+
* It is more optimized than structuredClone method. It is recommended to use this method when you don't need to deep clone the object.
|
|
120
|
+
*
|
|
121
|
+
* **Recommendations**
|
|
122
|
+
*
|
|
123
|
+
* - Use this method when you don't need to deep clone the object.
|
|
124
|
+
* - It is useful when you need to create a new instance of the class filled with the same data as the original instance.
|
|
125
|
+
* - Remember that the method doesn't clone the lower level objects.
|
|
126
|
+
*
|
|
127
|
+
* @returns {BaseBusinessObject} A clone of the instance.
|
|
128
|
+
*/
|
|
129
|
+
clone(): this;
|
|
130
|
+
/**
|
|
131
|
+
* Creates a structured clone of the instance.
|
|
132
|
+
*
|
|
133
|
+
* Simple method that use `create` method to create a new instance of the class filled with the same data as the original instance.
|
|
134
|
+
*
|
|
135
|
+
* It is more expensive than the `clone` method. It is recommended to use this method when you need to deep clone the object.
|
|
136
|
+
*
|
|
137
|
+
* **Important**
|
|
138
|
+
* - Remember that you decide what nested objects is cloned. Please check `fillData` method.
|
|
139
|
+
* - `fillData` method give possibility to clone nested objects that what you need to clone.
|
|
140
|
+
*
|
|
141
|
+
* **Recommendations**
|
|
142
|
+
*
|
|
143
|
+
* - Use this method when you need to deep clone the object.
|
|
144
|
+
* - The method is more expensive than the `clone` method.
|
|
145
|
+
*
|
|
146
|
+
* @returns {BaseBusinessObject} A clone of the instance.
|
|
147
|
+
*/
|
|
148
|
+
structuredClone(): this;
|
|
149
|
+
protected cloneInternal(objectToClone: unknown): this;
|
|
150
|
+
/**
|
|
151
|
+
* Remove the _rawData property from the object before converting it to JSON.
|
|
152
|
+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
|
|
153
|
+
* @returns Record<string, unknown>
|
|
154
|
+
*/
|
|
155
|
+
toJSON(): Record<string, unknown>;
|
|
156
|
+
}
|
|
157
|
+
export {};
|
|
158
|
+
//# sourceMappingURL=BaseBusinessObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseBusinessObject.d.ts","sourceRoot":"","sources":["../../src/models/BaseBusinessObject.ts"],"names":[],"mappings":"AAAA,KAAK,6BAA6B,CAAC,CAAC,SAAS,kBAAkB,IAAI;IACjE,QAAQ,CAAC,CAAC;IACV,MAAM,CAAC,CAAC,SAAS,CAAC,EAChB,IAAI,EAAE,6BAA6B,CAAC,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GACrC,CAAC,CAAC;IACL,UAAU,CAAC,CAAC,SAAS,CAAC,EACpB,IAAI,EAAE,6BAA6B,CAAC,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,GACzC,CAAC,EAAE,CAAC;CACR,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,kBAAkB;IAC9C;;;;;OAKG;IACH,SAAS,CAAC,YAAY,UAAS;IAC/B;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAA+B;IAE/C;;;;;;;;;OASG;IACI,QAAQ;IAGf;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,kBAAkB,EAAE,CAAC,SAAS,CAAC,EACrD,IAAI,EAAE,6BAA6B,CAAC,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GACrC,CAAC;IAMJ;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,kBAAkB,EAAE,CAAC,SAAS,CAAC,EACzD,IAAI,EAAE,6BAA6B,CAAC,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,GACzC,CAAC,EAAE;IAIN;;;;;;;;;OASG;IACH,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM;IAQ5C;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAU/C;;;;;;;;;;;;OAYG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;;;;;;;;;;;;;OAiBG;IACH,eAAe,IAAI,IAAI;IAMvB,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAIrD;;;;OAIG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAOlC"}
|