@loglayer/transport-opentelemetry 3.0.12 → 3.0.13

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/index.cjs CHANGED
@@ -1,30 +1,5 @@
1
- //#region rolldown:runtime
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
- key = keys[i];
11
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
- get: ((k) => from[k]).bind(null, key),
13
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
- });
15
- }
16
- return to;
17
- };
18
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
- value: mod,
20
- enumerable: true
21
- }) : target, mod));
22
-
23
- //#endregion
24
1
  let __loglayer_transport = require("@loglayer/transport");
25
- __loglayer_transport = __toESM(__loglayer_transport);
26
2
  let __opentelemetry_api_logs = require("@opentelemetry/api-logs");
27
- __opentelemetry_api_logs = __toESM(__opentelemetry_api_logs);
28
3
 
29
4
  //#region src/utils.ts
30
5
  const logLayerLevels = {
@@ -39,7 +14,7 @@ function getSeverityNumber(level) {
39
14
  return logLayerLevels[level] ?? __opentelemetry_api_logs.SeverityNumber.TRACE;
40
15
  }
41
16
  function emitLogRecord(record, logger) {
42
- const { message, level,...splat } = record;
17
+ const { message, level, ...splat } = record;
43
18
  const attributes = {};
44
19
  for (const key in splat) if (Object.hasOwn(splat, key)) attributes[key] = splat[key];
45
20
  const logRecord = {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["logLayerLevels: Record<string, number>","SeverityNumber","attributes: LogAttributes","logRecord: LogRecord","LoggerlessTransport","logs","error: any"],"sources":["../src/utils.ts","../src/OpenTelemetryTransport.ts"],"sourcesContent":["// This code is adapted from:\n// https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/packages/winston-transport/src/OpenTelemetryTransportV3.ts\n// Which is Copyright The OpenTelemetry Authors and licensed under the Apache License, Version 2.0.\n\nimport { type LogAttributes, type Logger, type LogRecord, SeverityNumber } from \"@opentelemetry/api-logs\";\n\nconst logLayerLevels: Record<string, number> = {\n fatal: SeverityNumber.FATAL,\n error: SeverityNumber.ERROR,\n warn: SeverityNumber.WARN,\n info: SeverityNumber.INFO,\n debug: SeverityNumber.DEBUG,\n trace: SeverityNumber.TRACE,\n};\n\nfunction getSeverityNumber(level: string): SeverityNumber {\n return logLayerLevels[level] ?? SeverityNumber.TRACE;\n}\n\nexport function emitLogRecord(record: Record<string, any>, logger: Logger): void {\n const { message, level, ...splat } = record;\n const attributes: LogAttributes = {};\n for (const key in splat) {\n if (Object.hasOwn(splat, key)) {\n attributes[key] = splat[key];\n }\n }\n const logRecord: LogRecord = {\n severityNumber: getSeverityNumber(level),\n severityText: level,\n body: message,\n attributes: attributes,\n };\n logger.emit(logRecord);\n}\n","import { LoggerlessTransport, type LoggerlessTransportConfig, type LogLayerTransportParams } from \"@loglayer/transport\";\nimport { type Logger, logs } from \"@opentelemetry/api-logs\";\nimport { emitLogRecord } from \"./utils.js\";\n\nexport interface OpenTelemetryTransportConfig extends LoggerlessTransportConfig {\n /**\n * Callback to handle errors that occur when logging\n */\n onError?: (error: any) => void;\n}\n\nexport class OpenTelemetryTransport extends LoggerlessTransport {\n private _logger: Logger;\n private onError?: (error: any) => void;\n\n constructor(config: OpenTelemetryTransportConfig = {}) {\n super(config);\n this._logger = logs.getLogger(\"loglayer\");\n this.onError = config.onError;\n }\n\n shipToLogger({ logLevel, messages, data, hasData }: LogLayerTransportParams) {\n const assembled = {\n level: logLevel,\n message: messages.join(\" \"),\n ...(hasData ? data : {}),\n };\n\n try {\n emitLogRecord(assembled, this._logger);\n } catch (error: any) {\n if (this.onError) {\n this.onError(error);\n }\n }\n\n return [assembled];\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,iBAAyC;CAC7C,OAAOC,wCAAe;CACtB,OAAOA,wCAAe;CACtB,MAAMA,wCAAe;CACrB,MAAMA,wCAAe;CACrB,OAAOA,wCAAe;CACtB,OAAOA,wCAAe;CACvB;AAED,SAAS,kBAAkB,OAA+B;AACxD,QAAO,eAAe,UAAUA,wCAAe;;AAGjD,SAAgB,cAAc,QAA6B,QAAsB;CAC/E,MAAM,EAAE,SAAS,MAAO,GAAG,UAAU;CACrC,MAAMC,aAA4B,EAAE;AACpC,MAAK,MAAM,OAAO,MAChB,KAAI,OAAO,OAAO,OAAO,IAAI,CAC3B,YAAW,OAAO,MAAM;CAG5B,MAAMC,YAAuB;EAC3B,gBAAgB,kBAAkB,MAAM;EACxC,cAAc;EACd,MAAM;EACM;EACb;AACD,QAAO,KAAK,UAAU;;;;;ACtBxB,IAAa,yBAAb,cAA4CC,yCAAoB;CAC9D,AAAQ;CACR,AAAQ;CAER,YAAY,SAAuC,EAAE,EAAE;AACrD,QAAM,OAAO;AACb,OAAK,UAAUC,8BAAK,UAAU,WAAW;AACzC,OAAK,UAAU,OAAO;;CAGxB,aAAa,EAAE,UAAU,UAAU,MAAM,WAAoC;EAC3E,MAAM,YAAY;GAChB,OAAO;GACP,SAAS,SAAS,KAAK,IAAI;GAC3B,GAAI,UAAU,OAAO,EAAE;GACxB;AAED,MAAI;AACF,iBAAc,WAAW,KAAK,QAAQ;WAC/BC,OAAY;AACnB,OAAI,KAAK,QACP,MAAK,QAAQ,MAAM;;AAIvB,SAAO,CAAC,UAAU"}
1
+ {"version":3,"file":"index.cjs","names":["logLayerLevels: Record<string, number>","SeverityNumber","attributes: LogAttributes","logRecord: LogRecord","LoggerlessTransport","logs","error: any"],"sources":["../src/utils.ts","../src/OpenTelemetryTransport.ts"],"sourcesContent":["// This code is adapted from:\n// https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/packages/winston-transport/src/OpenTelemetryTransportV3.ts\n// Which is Copyright The OpenTelemetry Authors and licensed under the Apache License, Version 2.0.\n\nimport { type LogAttributes, type Logger, type LogRecord, SeverityNumber } from \"@opentelemetry/api-logs\";\n\nconst logLayerLevels: Record<string, number> = {\n fatal: SeverityNumber.FATAL,\n error: SeverityNumber.ERROR,\n warn: SeverityNumber.WARN,\n info: SeverityNumber.INFO,\n debug: SeverityNumber.DEBUG,\n trace: SeverityNumber.TRACE,\n};\n\nfunction getSeverityNumber(level: string): SeverityNumber {\n return logLayerLevels[level] ?? SeverityNumber.TRACE;\n}\n\nexport function emitLogRecord(record: Record<string, any>, logger: Logger): void {\n const { message, level, ...splat } = record;\n const attributes: LogAttributes = {};\n for (const key in splat) {\n if (Object.hasOwn(splat, key)) {\n attributes[key] = splat[key];\n }\n }\n const logRecord: LogRecord = {\n severityNumber: getSeverityNumber(level),\n severityText: level,\n body: message,\n attributes: attributes,\n };\n logger.emit(logRecord);\n}\n","import { LoggerlessTransport, type LoggerlessTransportConfig, type LogLayerTransportParams } from \"@loglayer/transport\";\nimport { type Logger, logs } from \"@opentelemetry/api-logs\";\nimport { emitLogRecord } from \"./utils.js\";\n\nexport interface OpenTelemetryTransportConfig extends LoggerlessTransportConfig {\n /**\n * Callback to handle errors that occur when logging\n */\n onError?: (error: any) => void;\n}\n\nexport class OpenTelemetryTransport extends LoggerlessTransport {\n private _logger: Logger;\n private onError?: (error: any) => void;\n\n constructor(config: OpenTelemetryTransportConfig = {}) {\n super(config);\n this._logger = logs.getLogger(\"loglayer\");\n this.onError = config.onError;\n }\n\n shipToLogger({ logLevel, messages, data, hasData }: LogLayerTransportParams) {\n const assembled = {\n level: logLevel,\n message: messages.join(\" \"),\n ...(hasData ? data : {}),\n };\n\n try {\n emitLogRecord(assembled, this._logger);\n } catch (error: any) {\n if (this.onError) {\n this.onError(error);\n }\n }\n\n return [assembled];\n }\n}\n"],"mappings":";;;;AAMA,MAAMA,iBAAyC;CAC7C,OAAOC,wCAAe;CACtB,OAAOA,wCAAe;CACtB,MAAMA,wCAAe;CACrB,MAAMA,wCAAe;CACrB,OAAOA,wCAAe;CACtB,OAAOA,wCAAe;CACvB;AAED,SAAS,kBAAkB,OAA+B;AACxD,QAAO,eAAe,UAAUA,wCAAe;;AAGjD,SAAgB,cAAc,QAA6B,QAAsB;CAC/E,MAAM,EAAE,SAAS,OAAO,GAAG,UAAU;CACrC,MAAMC,aAA4B,EAAE;AACpC,MAAK,MAAM,OAAO,MAChB,KAAI,OAAO,OAAO,OAAO,IAAI,CAC3B,YAAW,OAAO,MAAM;CAG5B,MAAMC,YAAuB;EAC3B,gBAAgB,kBAAkB,MAAM;EACxC,cAAc;EACd,MAAM;EACM;EACb;AACD,QAAO,KAAK,UAAU;;;;;ACtBxB,IAAa,yBAAb,cAA4CC,yCAAoB;CAC9D,AAAQ;CACR,AAAQ;CAER,YAAY,SAAuC,EAAE,EAAE;AACrD,QAAM,OAAO;AACb,OAAK,UAAUC,8BAAK,UAAU,WAAW;AACzC,OAAK,UAAU,OAAO;;CAGxB,aAAa,EAAE,UAAU,UAAU,MAAM,WAAoC;EAC3E,MAAM,YAAY;GAChB,OAAO;GACP,SAAS,SAAS,KAAK,IAAI;GAC3B,GAAI,UAAU,OAAO,EAAE;GACxB;AAED,MAAI;AACF,iBAAc,WAAW,KAAK,QAAQ;WAC/BC,OAAY;AACnB,OAAI,KAAK,QACP,MAAK,QAAQ,MAAM;;AAIvB,SAAO,CAAC,UAAU"}
@@ -24,4 +24,4 @@ declare class OpenTelemetryTransport extends LoggerlessTransport {
24
24
  }
25
25
  //#endregion
26
26
  export { OpenTelemetryTransport, OpenTelemetryTransportConfig };
27
- //# sourceMappingURL=index.d.ts.map
27
+ //# sourceMappingURL=index.d.mts.map
@@ -14,7 +14,7 @@ function getSeverityNumber(level) {
14
14
  return logLayerLevels[level] ?? SeverityNumber.TRACE;
15
15
  }
16
16
  function emitLogRecord(record, logger) {
17
- const { message, level,...splat } = record;
17
+ const { message, level, ...splat } = record;
18
18
  const attributes = {};
19
19
  for (const key in splat) if (Object.hasOwn(splat, key)) attributes[key] = splat[key];
20
20
  const logRecord = {
@@ -53,4 +53,4 @@ var OpenTelemetryTransport = class extends LoggerlessTransport {
53
53
 
54
54
  //#endregion
55
55
  export { OpenTelemetryTransport };
56
- //# sourceMappingURL=index.js.map
56
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["logLayerLevels: Record<string, number>","attributes: LogAttributes","logRecord: LogRecord","error: any"],"sources":["../src/utils.ts","../src/OpenTelemetryTransport.ts"],"sourcesContent":["// This code is adapted from:\n// https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/packages/winston-transport/src/OpenTelemetryTransportV3.ts\n// Which is Copyright The OpenTelemetry Authors and licensed under the Apache License, Version 2.0.\n\nimport { type LogAttributes, type Logger, type LogRecord, SeverityNumber } from \"@opentelemetry/api-logs\";\n\nconst logLayerLevels: Record<string, number> = {\n fatal: SeverityNumber.FATAL,\n error: SeverityNumber.ERROR,\n warn: SeverityNumber.WARN,\n info: SeverityNumber.INFO,\n debug: SeverityNumber.DEBUG,\n trace: SeverityNumber.TRACE,\n};\n\nfunction getSeverityNumber(level: string): SeverityNumber {\n return logLayerLevels[level] ?? SeverityNumber.TRACE;\n}\n\nexport function emitLogRecord(record: Record<string, any>, logger: Logger): void {\n const { message, level, ...splat } = record;\n const attributes: LogAttributes = {};\n for (const key in splat) {\n if (Object.hasOwn(splat, key)) {\n attributes[key] = splat[key];\n }\n }\n const logRecord: LogRecord = {\n severityNumber: getSeverityNumber(level),\n severityText: level,\n body: message,\n attributes: attributes,\n };\n logger.emit(logRecord);\n}\n","import { LoggerlessTransport, type LoggerlessTransportConfig, type LogLayerTransportParams } from \"@loglayer/transport\";\nimport { type Logger, logs } from \"@opentelemetry/api-logs\";\nimport { emitLogRecord } from \"./utils.js\";\n\nexport interface OpenTelemetryTransportConfig extends LoggerlessTransportConfig {\n /**\n * Callback to handle errors that occur when logging\n */\n onError?: (error: any) => void;\n}\n\nexport class OpenTelemetryTransport extends LoggerlessTransport {\n private _logger: Logger;\n private onError?: (error: any) => void;\n\n constructor(config: OpenTelemetryTransportConfig = {}) {\n super(config);\n this._logger = logs.getLogger(\"loglayer\");\n this.onError = config.onError;\n }\n\n shipToLogger({ logLevel, messages, data, hasData }: LogLayerTransportParams) {\n const assembled = {\n level: logLevel,\n message: messages.join(\" \"),\n ...(hasData ? data : {}),\n };\n\n try {\n emitLogRecord(assembled, this._logger);\n } catch (error: any) {\n if (this.onError) {\n this.onError(error);\n }\n }\n\n return [assembled];\n }\n}\n"],"mappings":";;;;AAMA,MAAMA,iBAAyC;CAC7C,OAAO,eAAe;CACtB,OAAO,eAAe;CACtB,MAAM,eAAe;CACrB,MAAM,eAAe;CACrB,OAAO,eAAe;CACtB,OAAO,eAAe;CACvB;AAED,SAAS,kBAAkB,OAA+B;AACxD,QAAO,eAAe,UAAU,eAAe;;AAGjD,SAAgB,cAAc,QAA6B,QAAsB;CAC/E,MAAM,EAAE,SAAS,OAAO,GAAG,UAAU;CACrC,MAAMC,aAA4B,EAAE;AACpC,MAAK,MAAM,OAAO,MAChB,KAAI,OAAO,OAAO,OAAO,IAAI,CAC3B,YAAW,OAAO,MAAM;CAG5B,MAAMC,YAAuB;EAC3B,gBAAgB,kBAAkB,MAAM;EACxC,cAAc;EACd,MAAM;EACM;EACb;AACD,QAAO,KAAK,UAAU;;;;;ACtBxB,IAAa,yBAAb,cAA4C,oBAAoB;CAC9D,AAAQ;CACR,AAAQ;CAER,YAAY,SAAuC,EAAE,EAAE;AACrD,QAAM,OAAO;AACb,OAAK,UAAU,KAAK,UAAU,WAAW;AACzC,OAAK,UAAU,OAAO;;CAGxB,aAAa,EAAE,UAAU,UAAU,MAAM,WAAoC;EAC3E,MAAM,YAAY;GAChB,OAAO;GACP,SAAS,SAAS,KAAK,IAAI;GAC3B,GAAI,UAAU,OAAO,EAAE;GACxB;AAED,MAAI;AACF,iBAAc,WAAW,KAAK,QAAQ;WAC/BC,OAAY;AACnB,OAAI,KAAK,QACP,MAAK,QAAQ,MAAM;;AAIvB,SAAO,CAAC,UAAU"}
package/package.json CHANGED
@@ -1,21 +1,22 @@
1
1
  {
2
2
  "name": "@loglayer/transport-opentelemetry",
3
3
  "description": "OpenTelemetry transport for LogLayer for use with log processors.",
4
- "version": "3.0.12",
4
+ "version": "3.0.13",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
7
- "module": "./dist/index.js",
7
+ "module": "./dist/index.mjs",
8
8
  "exports": {
9
9
  "import": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
10
+ "types": "./dist/index.d.mts",
11
+ "import": "./dist/index.mjs"
12
12
  },
13
13
  "require": {
14
14
  "types": "./dist/index.d.cts",
15
15
  "require": "./dist/index.cjs"
16
16
  }
17
17
  },
18
- "types": "./dist/index.d.ts",
18
+ "types": "./dist/index.d.mts",
19
+ "sideEffects": false,
19
20
  "license": "MIT",
20
21
  "repository": {
21
22
  "type": "git",
@@ -33,7 +34,7 @@
33
34
  ],
34
35
  "dependencies": {
35
36
  "@opentelemetry/api-logs": "0.204.0",
36
- "@loglayer/transport": "2.3.10"
37
+ "@loglayer/transport": "2.3.11"
37
38
  },
38
39
  "devDependencies": {
39
40
  "@opentelemetry/api": "1.9.0",
@@ -43,16 +44,16 @@
43
44
  "@opentelemetry/sdk-node": "0.204.0",
44
45
  "@opentelemetry/sdk-trace-node": "2.1.0",
45
46
  "@opentelemetry/semantic-conventions": "1.37.0",
46
- "@types/express": "5.0.5",
47
- "@types/node": "24.10.1",
47
+ "@types/express": "5.0.6",
48
+ "@types/node": "24.10.2",
48
49
  "express": "5.1.0",
49
50
  "serialize-error": "12.0.0",
50
- "tsdown": "0.15.12",
51
- "tsx": "4.20.6",
51
+ "tsdown": "0.17.2",
52
+ "tsx": "4.21.0",
52
53
  "typescript": "5.9.3",
53
- "vitest": "4.0.9",
54
+ "vitest": "4.0.15",
54
55
  "@internal/tsconfig": "2.1.0",
55
- "loglayer": "8.1.0"
56
+ "loglayer": "8.1.1"
56
57
  },
57
58
  "bugs": "https://github.com/loglayer/loglayer/issues",
58
59
  "engines": {
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["logLayerLevels: Record<string, number>","attributes: LogAttributes","logRecord: LogRecord","error: any"],"sources":["../src/utils.ts","../src/OpenTelemetryTransport.ts"],"sourcesContent":["// This code is adapted from:\n// https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/packages/winston-transport/src/OpenTelemetryTransportV3.ts\n// Which is Copyright The OpenTelemetry Authors and licensed under the Apache License, Version 2.0.\n\nimport { type LogAttributes, type Logger, type LogRecord, SeverityNumber } from \"@opentelemetry/api-logs\";\n\nconst logLayerLevels: Record<string, number> = {\n fatal: SeverityNumber.FATAL,\n error: SeverityNumber.ERROR,\n warn: SeverityNumber.WARN,\n info: SeverityNumber.INFO,\n debug: SeverityNumber.DEBUG,\n trace: SeverityNumber.TRACE,\n};\n\nfunction getSeverityNumber(level: string): SeverityNumber {\n return logLayerLevels[level] ?? SeverityNumber.TRACE;\n}\n\nexport function emitLogRecord(record: Record<string, any>, logger: Logger): void {\n const { message, level, ...splat } = record;\n const attributes: LogAttributes = {};\n for (const key in splat) {\n if (Object.hasOwn(splat, key)) {\n attributes[key] = splat[key];\n }\n }\n const logRecord: LogRecord = {\n severityNumber: getSeverityNumber(level),\n severityText: level,\n body: message,\n attributes: attributes,\n };\n logger.emit(logRecord);\n}\n","import { LoggerlessTransport, type LoggerlessTransportConfig, type LogLayerTransportParams } from \"@loglayer/transport\";\nimport { type Logger, logs } from \"@opentelemetry/api-logs\";\nimport { emitLogRecord } from \"./utils.js\";\n\nexport interface OpenTelemetryTransportConfig extends LoggerlessTransportConfig {\n /**\n * Callback to handle errors that occur when logging\n */\n onError?: (error: any) => void;\n}\n\nexport class OpenTelemetryTransport extends LoggerlessTransport {\n private _logger: Logger;\n private onError?: (error: any) => void;\n\n constructor(config: OpenTelemetryTransportConfig = {}) {\n super(config);\n this._logger = logs.getLogger(\"loglayer\");\n this.onError = config.onError;\n }\n\n shipToLogger({ logLevel, messages, data, hasData }: LogLayerTransportParams) {\n const assembled = {\n level: logLevel,\n message: messages.join(\" \"),\n ...(hasData ? data : {}),\n };\n\n try {\n emitLogRecord(assembled, this._logger);\n } catch (error: any) {\n if (this.onError) {\n this.onError(error);\n }\n }\n\n return [assembled];\n }\n}\n"],"mappings":";;;;AAMA,MAAMA,iBAAyC;CAC7C,OAAO,eAAe;CACtB,OAAO,eAAe;CACtB,MAAM,eAAe;CACrB,MAAM,eAAe;CACrB,OAAO,eAAe;CACtB,OAAO,eAAe;CACvB;AAED,SAAS,kBAAkB,OAA+B;AACxD,QAAO,eAAe,UAAU,eAAe;;AAGjD,SAAgB,cAAc,QAA6B,QAAsB;CAC/E,MAAM,EAAE,SAAS,MAAO,GAAG,UAAU;CACrC,MAAMC,aAA4B,EAAE;AACpC,MAAK,MAAM,OAAO,MAChB,KAAI,OAAO,OAAO,OAAO,IAAI,CAC3B,YAAW,OAAO,MAAM;CAG5B,MAAMC,YAAuB;EAC3B,gBAAgB,kBAAkB,MAAM;EACxC,cAAc;EACd,MAAM;EACM;EACb;AACD,QAAO,KAAK,UAAU;;;;;ACtBxB,IAAa,yBAAb,cAA4C,oBAAoB;CAC9D,AAAQ;CACR,AAAQ;CAER,YAAY,SAAuC,EAAE,EAAE;AACrD,QAAM,OAAO;AACb,OAAK,UAAU,KAAK,UAAU,WAAW;AACzC,OAAK,UAAU,OAAO;;CAGxB,aAAa,EAAE,UAAU,UAAU,MAAM,WAAoC;EAC3E,MAAM,YAAY;GAChB,OAAO;GACP,SAAS,SAAS,KAAK,IAAI;GAC3B,GAAI,UAAU,OAAO,EAAE;GACxB;AAED,MAAI;AACF,iBAAc,WAAW,KAAK,QAAQ;WAC/BC,OAAY;AACnB,OAAI,KAAK,QACP,MAAK,QAAQ,MAAM;;AAIvB,SAAO,CAAC,UAAU"}