topsyde-utils 1.0.7 → 1.0.8

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 CHANGED
@@ -177,28 +177,6 @@ To generate the index files:
177
177
  bun run generate-indexes
178
178
  ```
179
179
 
180
- ### Building the Package
181
-
182
- The build process is streamlined to perform several tasks in sequence:
183
-
184
- 1. Clean the dist directory
185
- 2. Generate index files
186
- 3. Compile TypeScript using Bun's fast bundler
187
- 4. Format generated index files
188
- 5. Generate TypeScript declaration files
189
-
190
- To build the package:
191
-
192
- ```bash
193
- bun run build
194
- ```
195
-
196
- For faster development builds (without type declarations or source maps):
197
-
198
- ```bash
199
- bun run build:fast
200
- ```
201
-
202
180
  ### Development Scripts
203
181
 
204
182
  - `bun run clean` - Remove the dist directory
@@ -207,27 +185,15 @@ bun run build:fast
207
185
  - `bun run lint` - Lint TypeScript files with ESLint (using cache)
208
186
  - `bun run test` - Run tests with Jest
209
187
  - `bun run generate-indexes` - Generate index files only
210
- - `bun run build:fast` - Quick build for development (no type declarations)
188
+ - `bun run build:ts` - Compile TypeScript files
189
+ - `bun run build:types` - Generate TypeScript declaration files
190
+ - `bun run build:prepare` - Clean, generate indexes, and format generated files
191
+ - `bun run build` - Complete build process (prepare, compile, generate types)
192
+ - `bun run version:bump` - Bump version without creating git tags
211
193
 
212
194
  ### Publishing
213
195
 
214
- To publish a new version of the package, you can use either of the following methods:
215
-
216
- #### Manual Version Specification
217
-
218
- ```bash
219
- ./scripts/publish.sh <version> [tag]
220
- ```
221
-
222
- For example:
223
- ```bash
224
- ./scripts/publish.sh 1.0.2
225
- ./scripts/publish.sh 1.1.0-beta beta
226
- ```
227
-
228
- #### Automated Version Increment
229
-
230
- For a more streamlined release process, use the release script which automatically increments the version number:
196
+ To publish a new version of the package, use the optimized release script:
231
197
 
232
198
  ```bash
233
199
  # Using the script directly
@@ -249,16 +215,31 @@ bun run release minor beta # Increment minor version with 'beta' tag
249
215
  The release script will:
250
216
  1. Calculate and display the new version number
251
217
  2. Ask for confirmation before proceeding
252
- 3. Update the version in package.json
253
- 4. Generate index files
254
- 5. Build the package
255
- 6. Publish to npm with the specified tag (defaults to 'latest')
218
+ 3. Run linting to ensure code quality
219
+ 4. Update the version in package.json
220
+ 5. Build the package with all optimizations
221
+ 6. Publish the package with the specified tag
222
+ 7. Display the time taken for the release process
256
223
 
257
- #### Naming Conventions
224
+ The script includes robust error handling and will exit on any failure, ensuring that the package is only published when all steps complete successfully.
225
+
226
+ ### Testing the Release Process
227
+
228
+ You can test the release process without actually publishing to npm using these commands:
229
+
230
+ ```bash
231
+ # Test the release process without building or publishing
232
+ bun run release:dry-run [patch|minor|major] [tag]
233
+
234
+ # Test the full release process including building but without publishing to npm
235
+ bun run release:test [patch|minor|major] [tag]
236
+ ```
258
237
 
259
- - Default exports from files directly in src are exported with their capitalized name (e.g., `app.ts` → `App`)
260
- - Default exports from files in subdirectories are exported with the directory name as a prefix (e.g., `router/route.ts` → `RouterRoute`)
261
- - Subdirectories are exported as modules with the capitalized directory name (e.g., `router/` → `Router`)
238
+ These test options are useful for:
239
+ - Verifying that the release script works correctly
240
+ - Testing the build process without affecting the npm registry
241
+ - Checking what files will be included in the published package
242
+ - Measuring the time taken for the release process
262
243
 
263
244
  ## License
264
245
 
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RESPONSE_METHOD_OPTIONS = exports.RESPONSE_INIT = void 0;
4
+ const RESPONSE_INIT = (status, headers) => {
5
+ return {
6
+ status: status ?? 200,
7
+ headers: {
8
+ "Content-Type": "application/json",
9
+ "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
10
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
11
+ "Access-Control-Allow-Credentials": "true",
12
+ },
13
+ };
14
+ };
15
+ exports.RESPONSE_INIT = RESPONSE_INIT;
16
+ exports.RESPONSE_METHOD_OPTIONS = {
17
+ name: "Access-Control-Max-Age",
18
+ value: "86400",
19
+ };
20
+ class Application {
21
+ static Response(data, status = 200, headers) {
22
+ const response = {
23
+ status: true,
24
+ data,
25
+ };
26
+ return Response.json(response, (0, exports.RESPONSE_INIT)(status, headers));
27
+ }
28
+ static Error(error, status = 200, headers) {
29
+ const response = {
30
+ status: false,
31
+ data: error,
32
+ error,
33
+ };
34
+ return Response.json(response, (0, exports.RESPONSE_INIT)(status, headers));
35
+ }
36
+ static Throw(error, status = 400, headers) {
37
+ return Response.json(error, (0, exports.RESPONSE_INIT)(status, headers));
38
+ }
39
+ }
40
+ exports.default = Application;
41
+ //# sourceMappingURL=application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":";;;AAEO,MAAM,aAAa,GAAG,CAAC,MAAe,EAAE,OAAqB,EAAgB,EAAE;IACrF,OAAO;QACN,MAAM,EAAE,MAAM,IAAI,GAAG;QACrB,OAAO,EAAE;YACR,cAAc,EAAE,kBAAkB;YAClC,8BAA8B,EAAE,oBAAoB;YACpD,8BAA8B,EAAE,6BAA6B;YAC7D,kCAAkC,EAAE,MAAM;SAC1C;KACD,CAAC;AACH,CAAC,CAAC;AAVW,QAAA,aAAa,iBAUxB;AAEW,QAAA,uBAAuB,GAAG;IACtC,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,OAAO;CACd,CAAC;AAEF,MAAM,WAAW;IACT,MAAM,CAAC,QAAQ,CAAI,IAAO,EAAE,MAAM,GAAG,GAAG,EAAE,OAAqB;QACrE,MAAM,QAAQ,GAA6B;YAC1C,MAAM,EAAE,IAAI;YACZ,IAAI;SACJ,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAA,qBAAa,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAuC,KAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,OAAqB;QACtG,MAAM,QAAQ,GAA6B;YAC1C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,KAAK;SACL,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAA,qBAAa,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAuC,KAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,OAAqB;QACtG,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAA,qBAAa,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;CACD;AAED,kBAAe,WAAW,CAAC"}
package/dist/consts.js ADDED
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LOG_COLORS = exports.DEFAULT_FALSE_RESPONSE = void 0;
4
+ exports.DEFAULT_FALSE_RESPONSE = "Something went wrong. Please try again later.";
5
+ exports.LOG_COLORS = {
6
+ reset: "\x1b[0m",
7
+ bright: "\x1b[1m",
8
+ dim: "\x1b[2m",
9
+ underscore: "\x1b[4m",
10
+ blink: "\x1b[5m",
11
+ reverse: "\x1b[7m",
12
+ hidden: "\x1b[8m",
13
+ text: {
14
+ black: "\x1b[30m",
15
+ red: "\x1b[31m",
16
+ green: "\x1b[32m",
17
+ yellow: "\x1b[33m",
18
+ blue: "\x1b[34m",
19
+ magenta: "\x1b[35m",
20
+ cyan: "\x1b[36m",
21
+ white: "\x1b[37m",
22
+ },
23
+ bg: {
24
+ black: "\x1b[40m",
25
+ red: "\x1b[41m",
26
+ green: "\x1b[42m",
27
+ yellow: "\x1b[43m",
28
+ blue: "\x1b[44m",
29
+ magenta: "\x1b[45m",
30
+ cyan: "\x1b[46m",
31
+ white: "\x1b[47m",
32
+ },
33
+ };
34
+ //# sourceMappingURL=consts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,sBAAsB,GAAG,+CAA+C,CAAC;AAEzE,QAAA,UAAU,GAAG;IACzB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,GAAG,EAAE,SAAS;IACd,UAAU,EAAE,SAAS;IACrB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IAEjB,IAAI,EAAE;QACL,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;KACjB;IACD,EAAE,EAAE;QACH,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;KACjB;CACD,CAAC"}
package/dist/enums.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.E_ENVIRONMENTS = exports.E_IS = void 0;
4
+ var E_IS;
5
+ (function (E_IS) {
6
+ E_IS["ARRAY"] = "array";
7
+ E_IS["OBJECT"] = "object";
8
+ E_IS["FUNCTION"] = "function";
9
+ E_IS["STRING"] = "string";
10
+ E_IS["NUMBER"] = "number";
11
+ E_IS["BOOLEAN"] = "boolean";
12
+ E_IS["REGEX"] = "regex";
13
+ })(E_IS || (exports.E_IS = E_IS = {}));
14
+ var E_ENVIRONMENTS;
15
+ (function (E_ENVIRONMENTS) {
16
+ E_ENVIRONMENTS["DEV"] = "development";
17
+ E_ENVIRONMENTS["PROD"] = "production";
18
+ })(E_ENVIRONMENTS || (exports.E_ENVIRONMENTS = E_ENVIRONMENTS = {}));
19
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":";;;AAAA,IAAY,IAQX;AARD,WAAY,IAAI;IACf,uBAAe,CAAA;IACf,yBAAiB,CAAA;IACjB,6BAAqB,CAAA;IACrB,yBAAiB,CAAA;IACjB,yBAAiB,CAAA;IACjB,2BAAmB,CAAA;IACnB,uBAAe,CAAA;AAChB,CAAC,EARW,IAAI,oBAAJ,IAAI,QAQf;AAED,IAAY,cAGX;AAHD,WAAY,cAAc;IACzB,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;AACpB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB"}
package/dist/errors.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WS_ERROR_CODE = exports.HTTP_ERROR_CODE = exports.ERROR_CODE = void 0;
4
+ // Error code enums
5
+ var ERROR_CODE;
6
+ (function (ERROR_CODE) {
7
+ ERROR_CODE[ERROR_CODE["NO_REQUEST"] = -1] = "NO_REQUEST";
8
+ ERROR_CODE[ERROR_CODE["UNKNOWN_ERROR"] = 0] = "UNKNOWN_ERROR";
9
+ ERROR_CODE[ERROR_CODE["INVALID_METHOD"] = 1] = "INVALID_METHOD";
10
+ ERROR_CODE[ERROR_CODE["INVALID_REQUEST"] = 2] = "INVALID_REQUEST";
11
+ ERROR_CODE[ERROR_CODE["INVALID_CONTROLLER"] = 3] = "INVALID_CONTROLLER";
12
+ ERROR_CODE[ERROR_CODE["INVALID_ACTION"] = 4] = "INVALID_ACTION";
13
+ ERROR_CODE[ERROR_CODE["NO_ACTION_IN_MAP"] = 5] = "NO_ACTION_IN_MAP";
14
+ ERROR_CODE[ERROR_CODE["NO_METHOD_HANDLER"] = 6] = "NO_METHOD_HANDLER";
15
+ ERROR_CODE[ERROR_CODE["INVALID_METHOD_INPUT"] = 7] = "INVALID_METHOD_INPUT";
16
+ ERROR_CODE[ERROR_CODE["REQ_BODY_EMPTY"] = 8] = "REQ_BODY_EMPTY";
17
+ })(ERROR_CODE || (exports.ERROR_CODE = ERROR_CODE = {}));
18
+ var HTTP_ERROR_CODE;
19
+ (function (HTTP_ERROR_CODE) {
20
+ HTTP_ERROR_CODE[HTTP_ERROR_CODE["OK"] = 200] = "OK";
21
+ HTTP_ERROR_CODE[HTTP_ERROR_CODE["BAD_REQUEST"] = 400] = "BAD_REQUEST";
22
+ HTTP_ERROR_CODE[HTTP_ERROR_CODE["UNAUTHORIZED"] = 401] = "UNAUTHORIZED";
23
+ HTTP_ERROR_CODE[HTTP_ERROR_CODE["FORBIDDEN"] = 403] = "FORBIDDEN";
24
+ HTTP_ERROR_CODE[HTTP_ERROR_CODE["NOT_FOUND"] = 404] = "NOT_FOUND";
25
+ HTTP_ERROR_CODE[HTTP_ERROR_CODE["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
26
+ })(HTTP_ERROR_CODE || (exports.HTTP_ERROR_CODE = HTTP_ERROR_CODE = {}));
27
+ var WS_ERROR_CODE;
28
+ (function (WS_ERROR_CODE) {
29
+ // WebSocket close event codes
30
+ WS_ERROR_CODE[WS_ERROR_CODE["NORMAL_CLOSURE"] = 1000] = "NORMAL_CLOSURE";
31
+ WS_ERROR_CODE[WS_ERROR_CODE["GOING_AWAY"] = 1001] = "GOING_AWAY";
32
+ WS_ERROR_CODE[WS_ERROR_CODE["PROTOCOL_ERROR"] = 1002] = "PROTOCOL_ERROR";
33
+ WS_ERROR_CODE[WS_ERROR_CODE["UNSUPPORTED_DATA"] = 1003] = "UNSUPPORTED_DATA";
34
+ WS_ERROR_CODE[WS_ERROR_CODE["NO_STATUS_RECEIVED"] = 1005] = "NO_STATUS_RECEIVED";
35
+ WS_ERROR_CODE[WS_ERROR_CODE["ABNORMAL_CLOSURE"] = 1006] = "ABNORMAL_CLOSURE";
36
+ WS_ERROR_CODE[WS_ERROR_CODE["INVALID_FRAME_PAYLOAD_DATA"] = 1007] = "INVALID_FRAME_PAYLOAD_DATA";
37
+ WS_ERROR_CODE[WS_ERROR_CODE["POLICY_VIOLATION"] = 1008] = "POLICY_VIOLATION";
38
+ WS_ERROR_CODE[WS_ERROR_CODE["MESSAGE_TOO_BIG"] = 1009] = "MESSAGE_TOO_BIG";
39
+ WS_ERROR_CODE[WS_ERROR_CODE["MISSING_EXTENSION"] = 1010] = "MISSING_EXTENSION";
40
+ WS_ERROR_CODE[WS_ERROR_CODE["INTERNAL_ERROR"] = 1011] = "INTERNAL_ERROR";
41
+ WS_ERROR_CODE[WS_ERROR_CODE["SERVICE_RESTART"] = 1012] = "SERVICE_RESTART";
42
+ WS_ERROR_CODE[WS_ERROR_CODE["TRY_AGAIN_LATER"] = 1013] = "TRY_AGAIN_LATER";
43
+ WS_ERROR_CODE[WS_ERROR_CODE["BAD_GATEWAY"] = 1014] = "BAD_GATEWAY";
44
+ WS_ERROR_CODE[WS_ERROR_CODE["TLS_HANDSHAKE"] = 1015] = "TLS_HANDSHAKE";
45
+ })(WS_ERROR_CODE || (exports.WS_ERROR_CODE = WS_ERROR_CODE = {}));
46
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,mBAAmB;AACnB,IAAY,UAWX;AAXD,WAAY,UAAU;IACrB,wDAAe,CAAA;IACf,6DAAiB,CAAA;IACjB,+DAAkB,CAAA;IAClB,iEAAmB,CAAA;IACnB,uEAAsB,CAAA;IACtB,+DAAkB,CAAA;IAClB,mEAAoB,CAAA;IACpB,qEAAqB,CAAA;IACrB,2EAAwB,CAAA;IACxB,+DAAkB,CAAA;AACnB,CAAC,EAXW,UAAU,0BAAV,UAAU,QAWrB;AAED,IAAY,eAOX;AAPD,WAAY,eAAe;IAC1B,mDAAQ,CAAA;IACR,qEAAiB,CAAA;IACjB,uEAAkB,CAAA;IAClB,iEAAe,CAAA;IACf,iEAAe,CAAA;IACf,yFAA2B,CAAA;AAC5B,CAAC,EAPW,eAAe,+BAAf,eAAe,QAO1B;AAED,IAAY,aAiBX;AAjBD,WAAY,aAAa;IACxB,8BAA8B;IAC9B,wEAAqB,CAAA;IACrB,gEAAiB,CAAA;IACjB,wEAAqB,CAAA;IACrB,4EAAuB,CAAA;IACvB,gFAAyB,CAAA;IACzB,4EAAuB,CAAA;IACvB,gGAAiC,CAAA;IACjC,4EAAuB,CAAA;IACvB,0EAAsB,CAAA;IACtB,8EAAwB,CAAA;IACxB,wEAAqB,CAAA;IACrB,0EAAsB,CAAA;IACtB,0EAAsB,CAAA;IACtB,kEAAkB,CAAA;IAClB,sEAAoB,CAAA;AACrB,CAAC,EAjBW,aAAa,6BAAb,aAAa,QAiBxB"}
package/dist/guards.js ADDED
@@ -0,0 +1,42 @@
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 lib_1 = __importDefault(require("./lib"));
7
+ class Guards {
8
+ static IsString(value, excludeNull = false) {
9
+ const output = lib_1.default.IsString(value);
10
+ return excludeNull ? !Guards.IsNil(value) && output : output;
11
+ }
12
+ static IsNumber(value, excludeNull = false) {
13
+ const output = lib_1.default.IsNumber(value);
14
+ return excludeNull ? !Guards.IsNil(value) && output : output;
15
+ }
16
+ static IsBoolean(value, excludeNull = false) {
17
+ const output = lib_1.default.GetType(value, true) === "boolean";
18
+ return excludeNull ? !Guards.IsNil(value) && output : output;
19
+ }
20
+ static IsArray(value, excludeNull = false) {
21
+ const output = lib_1.default.IsArray(value);
22
+ return excludeNull ? !Guards.IsNil(value) && output : output;
23
+ }
24
+ static IsObject(value, excludeNull = false) {
25
+ const output = lib_1.default.IsObject(value);
26
+ return excludeNull ? !Guards.IsNil(value) && output : output;
27
+ }
28
+ static IsFunction(value, excludeNull = false) {
29
+ const output = lib_1.default.IsFunction(value);
30
+ return excludeNull ? !Guards.IsNil(value) && output : output;
31
+ }
32
+ static IsNil(value) {
33
+ return lib_1.default.IsNil(value);
34
+ }
35
+ static IsType(obj, keys) {
36
+ if (!keys)
37
+ return !this.IsNil(obj);
38
+ return keys.every((key) => key in obj);
39
+ }
40
+ }
41
+ exports.default = Guards;
42
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../src/guards.ts"],"names":[],"mappings":";;;;;AACA,gDAAwB;AAExB,MAAM,MAAM;IAGJ,MAAM,CAAC,QAAQ,CAAC,KAAU,EAAE,WAAW,GAAG,KAAK;QACrD,MAAM,MAAM,GAAG,aAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC;IAIM,MAAM,CAAC,QAAQ,CAAC,KAAU,EAAE,WAAW,GAAG,KAAK;QACrD,MAAM,MAAM,GAAG,aAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC;IAIM,MAAM,CAAC,SAAS,CAAC,KAAU,EAAE,WAAW,GAAG,KAAK;QACtD,MAAM,MAAM,GAAG,aAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,SAAS,CAAC;QACtD,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC;IAIM,MAAM,CAAC,OAAO,CAAI,KAAU,EAAE,WAAW,GAAG,KAAK;QACvD,MAAM,MAAM,GAAG,aAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC;IAIM,MAAM,CAAC,QAAQ,CAAC,KAAU,EAAE,WAAW,GAAG,KAAK;QACrD,MAAM,MAAM,GAAG,aAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC;IAIM,MAAM,CAAC,UAAU,CAAC,KAAU,EAAE,WAAW,GAAG,KAAK;QACvD,MAAM,MAAM,GAAG,aAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,KAAU;QAC7B,OAAO,aAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAIM,MAAM,CAAC,MAAM,CAAI,GAAQ,EAAE,IAAkB;QACnD,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACxC,CAAC;CACD;AAED,kBAAe,MAAM,CAAC"}