@alwatr/nanotron-api-server 4.2.1 → 4.3.0

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/CHANGELOG.md CHANGED
@@ -3,6 +3,39 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.3.0](https://github.com/Alwatr/nanotron/compare/v4.2.2...v4.3.0) (2024-10-11)
7
+
8
+ ### Features
9
+
10
+ * update `import`s & packages based on the latest changes of `nanolib` & prevent `sideeffects` from `build` result ([1d234b8](https://github.com/Alwatr/nanotron/commit/1d234b83152fb246b793476898e9cf026aa52874)) by @mohammadhonarvar
11
+
12
+ ### Bug Fixes
13
+
14
+ * **api-server:** update types & `logger` & use `packageTracer` based on last changes of `nanolib` ([7ae4b52](https://github.com/Alwatr/nanotron/commit/7ae4b52e6fc26df56a14ab680ba34f819f88901a)) by @mohammadhonarvar
15
+
16
+ ### Code Refactoring
17
+
18
+ * update `import`s & packages based on the latest changes of `nanolib` ([7652b5d](https://github.com/Alwatr/nanotron/commit/7652b5d9cc69218f2ff28bda3d0d8f52f147c6f6)) by @mohammadhonarvar
19
+
20
+ ### Miscellaneous Chores
21
+
22
+ * edited README ([d707d38](https://github.com/Alwatr/nanotron/commit/d707d389e085dd320402521cb23af5805013d777)) by @ArmanAsadian
23
+
24
+ ### Dependencies update
25
+
26
+ * update ([834ffcc](https://github.com/Alwatr/nanotron/commit/834ffcc8f6de96cc11a1a6fa933f948b7813cde6)) by @mohammadhonarvar
27
+
28
+ ## [4.2.2](https://github.com/Alwatr/nanotron/compare/v4.2.1...v4.2.2) (2024-09-29)
29
+
30
+ ### Miscellaneous Chores
31
+
32
+ * **api-server:** change the license to AGPL-3.0 ([fa3347e](https://github.com/Alwatr/nanotron/commit/fa3347e005f926b4f17ccba0bbec19da3b5198ec)) by @ArmanAsadian
33
+
34
+ ### Dependencies update
35
+
36
+ * bump @types/node in the development-dependencies group ([9c8d7d5](https://github.com/Alwatr/nanotron/commit/9c8d7d518d9a5da2ea57ac2b210a8697267e6d3d)) by @dependabot[bot]
37
+ * update ([1c4ef63](https://github.com/Alwatr/nanotron/commit/1c4ef635fc969d4abd416aea2b954de674748da8)) by @AliMD
38
+
6
39
  ## [4.2.1](https://github.com/Alwatr/nanotron/compare/v4.2.0...v4.2.1) (2024-09-24)
7
40
 
8
41
  ### Dependencies update
package/README.md CHANGED
@@ -55,14 +55,14 @@ apiServer.defineRoute({
55
55
 
56
56
  ## Sponsors
57
57
 
58
- The following companies, organizations, and individuals support Nitrobase ongoing maintenance and development. Become a Sponsor to get your logo on our README and website.
58
+ The following companies, organizations, and individuals support Nanotron ongoing maintenance and development. Become a Sponsor to get your logo on our README and website.
59
59
 
60
60
  [![Exir Studio](https://avatars.githubusercontent.com/u/181194967?s=200&v=4)](https://exirstudio.com)
61
61
 
62
- ## License
62
+ ### Contributing
63
63
 
64
- This project is licensed under the AGPL-3.0 License.
64
+ Contributions are welcome! Please read our [contribution guidelines](https://github.com/Alwatr/.github/blob/next/CONTRIBUTING.md) before submitting a pull request.
65
65
 
66
- ## Contributing
66
+ ### License
67
67
 
68
- Contributions are welcome! Please feel free to submit issues and pull requests.
68
+ This project is licensed under the [AGPL-3.0 License](LICENSE).
@@ -1,8 +1,7 @@
1
1
  import { NanotronServerResponse } from './api-server-response.js';
2
2
  import type { DefineRouteOption, HttpRequestHeaders, NativeClientRequest, NativeServerResponse } from './type.js';
3
3
  import type { NanotronUrl } from './url.js';
4
- import type { Dictionary } from '@alwatr/type-helper';
5
- export declare class NanotronClientRequest<TSharedMeta extends Dictionary = Dictionary> {
4
+ export declare class NanotronClientRequest<TSharedMeta extends DictionaryOpt = DictionaryOpt> {
6
5
  readonly url: NanotronUrl;
7
6
  readonly serverResponse: NanotronServerResponse;
8
7
  readonly routeOption: Required<DefineRouteOption> | null;
@@ -25,7 +24,7 @@ export declare class NanotronClientRequest<TSharedMeta extends Dictionary = Dict
25
24
  readonly remoteAddress: string | null;
26
25
  get headers(): HttpRequestHeaders;
27
26
  private queryParams__?;
28
- get queryParams(): Dictionary<string>;
27
+ get queryParams(): DictionaryOpt<string>;
29
28
  constructor(url: NanotronUrl, nativeClientRequest: NativeClientRequest, nativeServerResponse: NativeServerResponse, routeOption: Required<DefineRouteOption> | null);
30
29
  getBodyRaw(): Promise<Buffer>;
31
30
  private getRemoteAddress__;
@@ -1 +1 @@
1
- {"version":3,"file":"api-client-request.d.ts","sourceRoot":"","sources":["../src/api-client-request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAGhE,OAAO,KAAK,EAAC,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,WAAW,CAAC;AAChH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAEpD,qBAAa,qBAAqB,CAAC,WAAW,SAAS,UAAU,GAAG,UAAU;IAC5E,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAE1B,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;IAEhD,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAEzD;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,EAAE,IAAI,CAAC;IAE1B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAqB;IAErD,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,OAAO,wCAAC;IAE3B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,IAAI,OAAO,IAAI,kBAAkB,CAEhC;IAED,OAAO,CAAC,aAAa,CAAC,CAAqB;IAC3C,IAAI,WAAW,IAAI,UAAU,CAAC,MAAM,CAAC,CAQpC;gBAGC,GAAG,EAAE,WAAW,EAChB,mBAAmB,EAAE,mBAAmB,EACxC,oBAAoB,EAAE,oBAAoB,EAC1C,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAkBjD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAwE7B,OAAO,CAAC,kBAAkB;CAG3B"}
1
+ {"version":3,"file":"api-client-request.d.ts","sourceRoot":"","sources":["../src/api-client-request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAGhE,OAAO,KAAK,EAAC,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,WAAW,CAAC;AAChH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAE1C,qBAAa,qBAAqB,CAAC,WAAW,SAAS,aAAa,GAAG,aAAa;IAClF,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAE1B,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;IAEhD,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAEzD;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,EAAE,IAAI,CAAC;IAE1B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAqB;IAErD,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,OAAO,wCAAC;IAE3B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,IAAI,OAAO,IAAI,kBAAkB,CAEhC;IAED,OAAO,CAAC,aAAa,CAAC,CAAwB;IAC9C,IAAI,WAAW,IAAI,aAAa,CAAC,MAAM,CAAC,CAQvC;gBAGC,GAAG,EAAE,WAAW,EAChB,mBAAmB,EAAE,mBAAmB,EACxC,oBAAoB,EAAE,oBAAoB,EAC1C,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAkBjD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAwE7B,OAAO,CAAC,kBAAkB;CAG3B"}
@@ -1,7 +1,6 @@
1
1
  import { type HttpStatusCode } from './const.js';
2
2
  import type { NanotronClientRequest } from './api-client-request.js';
3
3
  import type { HttpResponseHeaders, ErrorResponse, NativeServerResponse } from './type.js';
4
- import type { Json } from '@alwatr/type-helper';
5
4
  /**
6
5
  * Configuration options for the Nanotron Api Server Response.
7
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"api-server-response.d.ts","sourceRoot":"","sources":["../src/api-server-response.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,cAAc,EAAsC,MAAM,YAAY,CAAC;AAEpF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAC,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAC,MAAM,WAAW,CAAC;AACxF,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED,qBAAa,sBAAsB;IACjC,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;IAE9C,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IAEpC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAEtC,SAAS,CAAC,QAAQ,CAAC,OAAO,wCAAC;IAE3B,SAAS,CAAC,YAAY,UAAS;IAC/B,IAAI,WAAW,IAAI,OAAO,CAEzB;gBAEW,qBAAqB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB;IAgBpG,IAAI,UAAU,IAAI,cAAc,CAE/B;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,cAAc,EAEnC;IAED,SAAS,CAAC,aAAa;IAOvB,kBAAkB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAsBtD,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI;IAoCzD,SAAS,CAAC,YAAY,EAAE,IAAI,GAAG,IAAI;IAsBnC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAmCtC"}
1
+ {"version":3,"file":"api-server-response.d.ts","sourceRoot":"","sources":["../src/api-server-response.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,cAAc,EAAsC,MAAM,YAAY,CAAC;AAEpF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAC,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAC,MAAM,WAAW,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED,qBAAa,sBAAsB;IACjC,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;IAE9C,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IAEpC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAEtC,SAAS,CAAC,QAAQ,CAAC,OAAO,wCAAC;IAE3B,SAAS,CAAC,YAAY,UAAS;IAC/B,IAAI,WAAW,IAAI,OAAO,CAEzB;gBAEW,qBAAqB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB;IAgBpG,IAAI,UAAU,IAAI,cAAc,CAE/B;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,cAAc,EAEnC;IAED,SAAS,CAAC,aAAa;IAOvB,kBAAkB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAsBtD,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI;IAoCzD,SAAS,CAAC,YAAY,EAAE,IAAI,GAAG,IAAI;IAsBnC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAmCtC"}
@@ -1,6 +1,5 @@
1
1
  import { NanotronUrl } from './url.js';
2
2
  import type { DefineRouteOption, MatchType, NativeClientRequest, NativeServerResponse } from './type.js';
3
- import type { Dictionary } from '@alwatr/type-helper';
4
3
  import type { Duplex } from 'node:stream';
5
4
  /**
6
5
  * Configuration options for the NanotronApiServer.
@@ -78,12 +77,12 @@ export declare class NanotronApiServer {
78
77
  };
79
78
  protected readonly logger_: import("@alwatr/logger").AlwatrLogger;
80
79
  readonly httpServer: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
81
- protected readonly routeHandlerList__: Record<MatchType, Dictionary<Dictionary<Required<DefineRouteOption>>>>;
80
+ protected readonly routeHandlerList__: Record<MatchType, DictionaryOpt<DictionaryOpt<Required<DefineRouteOption>>>>;
82
81
  constructor(config?: Partial<NanotronApiServerConfig>);
83
82
  close(): void;
84
83
  protected getRouteOption_(url: NanotronUrl): Required<DefineRouteOption> | null;
85
84
  protected setRouteOption_(option: Required<DefineRouteOption>): void;
86
- defineRoute<TSharedMeta extends Dictionary = Dictionary>(option: DefineRouteOption<TSharedMeta>): void;
85
+ defineRoute<TSharedMeta extends DictionaryOpt = DictionaryOpt>(option: DefineRouteOption<TSharedMeta>): void;
87
86
  protected handleServerError_(error: NodeJS.ErrnoException): void;
88
87
  protected handleClientError_(err: NodeJS.ErrnoException, socket: Duplex): void;
89
88
  protected handleClientRequest_(nativeClientRequest: NativeClientRequest, nativeServerResponse: NativeServerResponse): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"api-server.d.ts","sourceRoot":"","sources":["../src/api-server.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAErC,OAAO,KAAK,EAAC,iBAAiB,EAAE,SAAS,EAAE,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,WAAW,CAAC;AAEvG,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAIxC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;IAE7B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,iBAAiB;IAC5B,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAUnF;IAEF,QAAQ,CAAC,OAAO;cA1ET,MAAM;cAON,MAAM;wBAOI,MAAM;wBASN,MAAM;0BAOJ,MAAM;qBAOX,OAAO;wBAOJ,OAAO;gBAOf,IAAI,MAAM,GAAG,GAAG,GAAG;mBAOhB,MAAM;MAgBD;IACjB,SAAS,CAAC,QAAQ,CAAC,OAAO,wCAAC;IAE3B,QAAQ,CAAC,UAAU,qGAAC;IAEpB,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAElG,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC;IA+CrD,KAAK,IAAI,IAAI;IAKb,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAuB/E,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAepE,WAAW,CAAC,WAAW,SAAS,UAAU,GAAG,UAAU,EAAE,MAAM,EAAE,iBAAiB,CAAC,WAAW,CAAC,GAAG,IAAI;IAYtG,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI;IAShE,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;cAoB9D,oBAAoB,CAClC,mBAAmB,EAAE,mBAAmB,EACxC,oBAAoB,EAAE,oBAAoB,GACzC,OAAO,CAAC,IAAI,CAAC;CA4CjB"}
1
+ {"version":3,"file":"api-server.d.ts","sourceRoot":"","sources":["../src/api-server.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAErC,OAAO,KAAK,EAAC,iBAAiB,EAAE,SAAS,EAAE,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,WAAW,CAAC;AACvG,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAIxC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;IAE7B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,iBAAiB;IAC5B,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAUnF;IAEF,QAAQ,CAAC,OAAO;cA1ET,MAAM;cAON,MAAM;wBAOI,MAAM;wBASN,MAAM;0BAOJ,MAAM;qBAOX,OAAO;wBAOJ,OAAO;gBAOf,IAAI,MAAM,GAAG,GAAG,GAAG;mBAOhB,MAAM;MAgBD;IACjB,SAAS,CAAC,QAAQ,CAAC,OAAO,wCAAC;IAE3B,QAAQ,CAAC,UAAU,qGAAC;IAEpB,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAExG,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC;IA+CrD,KAAK,IAAI,IAAI;IAKb,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAuB/E,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAepE,WAAW,CAAC,WAAW,SAAS,aAAa,GAAG,aAAa,EAAE,MAAM,EAAE,iBAAiB,CAAC,WAAW,CAAC,GAAG,IAAI;IAY5G,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI;IAShE,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;cAoB9D,oBAAoB,CAClC,mBAAmB,EAAE,mBAAmB,EACxC,oBAAoB,EAAE,oBAAoB,GACzC,OAAO,CAAC,IAAI,CAAC;CA4CjB"}