react-native-nitro-net 0.2.0 → 0.3.1

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.
Files changed (83) hide show
  1. package/README.md +70 -12
  2. package/android/libs/arm64-v8a/librust_c_net.so +0 -0
  3. package/android/libs/armeabi-v7a/librust_c_net.so +0 -0
  4. package/android/libs/x86/librust_c_net.so +0 -0
  5. package/android/libs/x86_64/librust_c_net.so +0 -0
  6. package/cpp/HybridHttpParser.hpp +67 -0
  7. package/cpp/HybridNetDriver.hpp +6 -0
  8. package/cpp/HybridNetServerDriver.hpp +7 -0
  9. package/cpp/HybridNetSocketDriver.hpp +27 -0
  10. package/cpp/NetBindings.hpp +15 -0
  11. package/ios/Frameworks/RustCNet.xcframework/Info.plist +5 -5
  12. package/ios/Frameworks/RustCNet.xcframework/ios-arm64/RustCNet.framework/RustCNet +0 -0
  13. package/ios/Frameworks/RustCNet.xcframework/ios-arm64_x86_64-simulator/RustCNet.framework/RustCNet +0 -0
  14. package/lib/Driver.d.ts +1 -0
  15. package/lib/Driver.d.ts.map +1 -0
  16. package/lib/Driver.js +2 -5
  17. package/lib/Net.nitro.d.ts +20 -0
  18. package/lib/Net.nitro.d.ts.map +1 -0
  19. package/lib/Net.nitro.js +4 -7
  20. package/lib/http.d.ts +204 -0
  21. package/lib/http.d.ts.map +1 -0
  22. package/lib/http.js +1126 -0
  23. package/lib/https.d.ts +25 -0
  24. package/lib/https.d.ts.map +1 -0
  25. package/lib/https.js +102 -0
  26. package/lib/index.d.ts +41 -160
  27. package/lib/index.d.ts.map +1 -0
  28. package/lib/index.js +11 -821
  29. package/lib/net.d.ts +197 -0
  30. package/lib/net.d.ts.map +1 -0
  31. package/lib/net.js +875 -0
  32. package/lib/tls.d.ts +23 -1
  33. package/lib/tls.d.ts.map +1 -0
  34. package/lib/tls.js +108 -54
  35. package/nitrogen/generated/android/RustCNet+autolinking.cmake +2 -0
  36. package/nitrogen/generated/android/RustCNetOnLoad.cpp +2 -0
  37. package/nitrogen/generated/android/c++/JHybridHttpParserSpec.cpp +54 -0
  38. package/nitrogen/generated/android/c++/JHybridHttpParserSpec.hpp +65 -0
  39. package/nitrogen/generated/android/c++/JHybridNetDriverSpec.cpp +9 -0
  40. package/nitrogen/generated/android/c++/JHybridNetDriverSpec.hpp +1 -0
  41. package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.cpp +4 -0
  42. package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.hpp +1 -0
  43. package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.cpp +9 -0
  44. package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.hpp +2 -0
  45. package/nitrogen/generated/android/c++/JNetConfig.hpp +7 -3
  46. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridHttpParserSpec.kt +58 -0
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetDriverSpec.kt +4 -0
  48. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetServerDriverSpec.kt +4 -0
  49. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetSocketDriverSpec.kt +8 -0
  50. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/NetConfig.kt +6 -3
  51. package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.cpp +17 -0
  52. package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.hpp +26 -0
  53. package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Umbrella.hpp +5 -0
  54. package/nitrogen/generated/ios/c++/HybridHttpParserSpecSwift.cpp +11 -0
  55. package/nitrogen/generated/ios/c++/HybridHttpParserSpecSwift.hpp +79 -0
  56. package/nitrogen/generated/ios/c++/HybridNetDriverSpecSwift.hpp +11 -0
  57. package/nitrogen/generated/ios/c++/HybridNetServerDriverSpecSwift.hpp +6 -0
  58. package/nitrogen/generated/ios/c++/HybridNetSocketDriverSpecSwift.hpp +14 -0
  59. package/nitrogen/generated/ios/swift/HybridHttpParserSpec.swift +56 -0
  60. package/nitrogen/generated/ios/swift/HybridHttpParserSpec_cxx.swift +131 -0
  61. package/nitrogen/generated/ios/swift/HybridNetDriverSpec.swift +1 -0
  62. package/nitrogen/generated/ios/swift/HybridNetDriverSpec_cxx.swift +15 -0
  63. package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec.swift +1 -0
  64. package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec_cxx.swift +11 -0
  65. package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec.swift +2 -0
  66. package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec_cxx.swift +36 -0
  67. package/nitrogen/generated/ios/swift/NetConfig.swift +19 -1
  68. package/nitrogen/generated/shared/c++/HybridHttpParserSpec.cpp +21 -0
  69. package/nitrogen/generated/shared/c++/HybridHttpParserSpec.hpp +63 -0
  70. package/nitrogen/generated/shared/c++/HybridNetDriverSpec.cpp +1 -0
  71. package/nitrogen/generated/shared/c++/HybridNetDriverSpec.hpp +4 -0
  72. package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.cpp +1 -0
  73. package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.hpp +1 -0
  74. package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.cpp +2 -0
  75. package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.hpp +2 -0
  76. package/nitrogen/generated/shared/c++/NetConfig.hpp +6 -2
  77. package/package.json +9 -7
  78. package/src/Net.nitro.ts +17 -0
  79. package/src/http.ts +1303 -0
  80. package/src/https.ts +125 -0
  81. package/src/index.ts +13 -874
  82. package/src/net.ts +1005 -0
  83. package/src/tls.ts +82 -6
package/lib/https.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ import * as http from './http';
2
+ import * as tls from './tls';
3
+ import { IncomingMessage } from './http';
4
+ export declare class Server extends tls.Server {
5
+ private _httpConnections;
6
+ maxHeaderSize: number;
7
+ maxRequestsPerSocket: number;
8
+ headersTimeout: number;
9
+ requestTimeout: number;
10
+ keepAliveTimeout: number;
11
+ constructor(options?: any, requestListener?: (req: http.IncomingMessage, res: http.ServerResponse) => void);
12
+ setTimeout(ms: number, callback?: () => void): this;
13
+ }
14
+ export declare function createServer(options?: any, requestListener?: (req: http.IncomingMessage, res: http.ServerResponse) => void): Server;
15
+ export declare class ClientRequest extends http.ClientRequest {
16
+ constructor(options: any, callback?: (res: http.IncomingMessage) => void);
17
+ }
18
+ export declare function request(urlOrOptions: string | URL | http.RequestOptions, optionsOrCallback?: http.RequestOptions | ((res: http.IncomingMessage) => void), callback?: (res: http.IncomingMessage) => void): ClientRequest;
19
+ export declare function get(urlOrOptions: string | URL | http.RequestOptions, optionsOrCallback?: http.RequestOptions | ((res: http.IncomingMessage) => void), callback?: (res: http.IncomingMessage) => void): ClientRequest;
20
+ export declare class Agent extends http.Agent {
21
+ constructor(options?: any);
22
+ }
23
+ export declare const globalAgent: Agent;
24
+ export { IncomingMessage };
25
+ //# sourceMappingURL=https.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"https.d.ts","sourceRoot":"","sources":["../src/https.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAA;AAC9B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAIxC,qBAAa,MAAO,SAAQ,GAAG,CAAC,MAAM;IAClC,OAAO,CAAC,gBAAgB,CAAkB;IACnC,aAAa,EAAE,MAAM,CAAS;IAC9B,oBAAoB,EAAE,MAAM,CAAK;IACjC,cAAc,EAAE,MAAM,CAAS;IAC/B,cAAc,EAAE,MAAM,CAAU;IAChC,gBAAgB,EAAE,MAAM,CAAQ;gBAE3B,OAAO,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI;IAkBnG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;CAK7D;AAED,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI,GAAG,MAAM,CAEnI;AAID,qBAAa,aAAc,SAAQ,IAAI,CAAC,aAAa;gBACrC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI;CAe3E;AAED,wBAAgB,OAAO,CACnB,YAAY,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,EAChD,iBAAiB,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,EAC/E,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI,GAC/C,aAAa,CA+Bf;AAED,wBAAgB,GAAG,CACf,YAAY,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,EAChD,iBAAiB,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,EAC/E,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI,GAC/C,aAAa,CAIf;AAID,qBAAa,KAAM,SAAQ,IAAI,CAAC,KAAK;gBACrB,OAAO,CAAC,EAAE,GAAG;CAG5B;AAED,eAAO,MAAM,WAAW,OAItB,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,CAAC"}
package/lib/https.js ADDED
@@ -0,0 +1,102 @@
1
+ import * as http from './http';
2
+ import * as tls from './tls';
3
+ import { IncomingMessage } from './http';
4
+ // ========== Server ==========
5
+ export class Server extends tls.Server {
6
+ constructor(options, requestListener) {
7
+ if (typeof options === 'function') {
8
+ requestListener = options;
9
+ options = {};
10
+ }
11
+ super(options);
12
+ this._httpConnections = new Set();
13
+ this.maxHeaderSize = 16384;
14
+ this.maxRequestsPerSocket = 0;
15
+ this.headersTimeout = 60000;
16
+ this.requestTimeout = 300000;
17
+ this.keepAliveTimeout = 5000;
18
+ if (requestListener) {
19
+ this.on('request', requestListener);
20
+ }
21
+ // Initialize HTTP connection setup for secure connections
22
+ this.on('secureConnection', (socket) => {
23
+ // @ts-ignore - access internal http logic
24
+ http.Server.prototype._setupHttpConnection.call(this, socket);
25
+ });
26
+ }
27
+ setTimeout(ms, callback) {
28
+ // @ts-ignore - access netServer via super's internal or cast
29
+ this._netServer.setTimeout(ms, callback);
30
+ return this;
31
+ }
32
+ }
33
+ export function createServer(options, requestListener) {
34
+ return new Server(options, requestListener);
35
+ }
36
+ // ========== ClientRequest ==========
37
+ export class ClientRequest extends http.ClientRequest {
38
+ constructor(options, callback) {
39
+ if (typeof options === 'string') {
40
+ options = new URL(options);
41
+ }
42
+ if (options instanceof URL) {
43
+ options = {
44
+ protocol: options.protocol,
45
+ hostname: options.hostname,
46
+ path: options.pathname + options.search,
47
+ port: options.port ? parseInt(options.port) : 443
48
+ };
49
+ }
50
+ options.protocol = 'https:';
51
+ super(options, callback);
52
+ }
53
+ }
54
+ export function request(urlOrOptions, optionsOrCallback, callback) {
55
+ let opts = {};
56
+ let cb = callback;
57
+ if (typeof urlOrOptions === 'string') {
58
+ const url = new URL(urlOrOptions);
59
+ opts = {
60
+ protocol: url.protocol,
61
+ hostname: url.hostname,
62
+ path: url.pathname + url.search,
63
+ port: url.port ? parseInt(url.port) : 443
64
+ };
65
+ }
66
+ else if (urlOrOptions instanceof URL) {
67
+ opts = {
68
+ protocol: urlOrOptions.protocol,
69
+ hostname: urlOrOptions.hostname,
70
+ path: urlOrOptions.pathname + urlOrOptions.search,
71
+ port: urlOrOptions.port ? parseInt(urlOrOptions.port) : 443
72
+ };
73
+ }
74
+ else {
75
+ opts = { ...urlOrOptions };
76
+ }
77
+ if (typeof optionsOrCallback === 'function') {
78
+ cb = optionsOrCallback;
79
+ }
80
+ else if (optionsOrCallback) {
81
+ opts = { ...opts, ...optionsOrCallback };
82
+ }
83
+ opts.protocol = 'https:';
84
+ return new ClientRequest(opts, cb);
85
+ }
86
+ export function get(urlOrOptions, optionsOrCallback, callback) {
87
+ const req = request(urlOrOptions, optionsOrCallback, callback);
88
+ req.end();
89
+ return req;
90
+ }
91
+ // ========== Agent ==========
92
+ export class Agent extends http.Agent {
93
+ constructor(options) {
94
+ super(options);
95
+ }
96
+ }
97
+ export const globalAgent = new Agent({
98
+ keepAlive: true,
99
+ scheduling: 'lifo',
100
+ timeout: 5000,
101
+ });
102
+ export { IncomingMessage };
package/lib/index.d.ts CHANGED
@@ -1,163 +1,44 @@
1
- import { Duplex, DuplexOptions } from 'readable-stream';
2
- import { EventEmitter } from 'eventemitter3';
3
- import type { NetSocketDriver, NetConfig } from './Net.nitro';
4
- declare function isIP(input: string): number;
5
- declare function isIPv4(input: string): boolean;
6
- declare function isIPv6(input: string): boolean;
7
- declare function setVerbose(enabled: boolean): void;
8
- declare function getDefaultAutoSelectFamily(): number;
9
- declare function setDefaultAutoSelectFamily(family: number): void;
10
- /**
11
- * Initialize the network module with custom configuration.
12
- * Must be called before any socket/server operations, or the config will be ignored.
13
- *
14
- * @param config Configuration options
15
- * @param config.workerThreads Number of worker threads (0 = use CPU core count)
16
- *
17
- * @example
18
- * ```ts
19
- * import { initWithConfig } from 'react-native-nitro-net';
20
- *
21
- * // Initialize with 4 worker threads
22
- * initWithConfig({ workerThreads: 4 });
23
- * ```
24
- */
25
- declare function initWithConfig(config: NetConfig): void;
26
- export declare class SocketAddress {
27
- readonly address: string;
28
- readonly family: 'ipv4' | 'ipv6';
29
- readonly port: number;
30
- readonly flowlabel: number;
31
- constructor(options: {
32
- address: string;
33
- family?: 'ipv4' | 'ipv6';
34
- port: number;
35
- flowlabel?: number;
36
- });
37
- }
38
- export declare class BlockList {
39
- private _rules;
40
- addAddress(address: string, family?: 'ipv4' | 'ipv6'): void;
41
- addRange(start: string, end: string, family?: 'ipv4' | 'ipv6'): void;
42
- addSubnet(net: string, prefix: number, family?: 'ipv4' | 'ipv6'): void;
43
- check(address: string, family?: 'ipv4' | 'ipv6'): boolean;
44
- }
45
- export interface SocketOptions extends DuplexOptions {
46
- fd?: any;
47
- allowHalfOpen?: boolean;
48
- readable?: boolean;
49
- writable?: boolean;
50
- path?: string;
51
- socketDriver?: NetSocketDriver;
52
- remoteFamily?: string;
53
- }
54
- export declare class Socket extends Duplex {
55
- protected _driver: NetSocketDriver | undefined;
56
- connecting: boolean;
57
- protected _connected: boolean;
58
- protected _hadError: boolean;
59
- remoteAddress?: string;
60
- remotePort?: number;
61
- remoteFamily?: string;
62
- localAddress?: string;
63
- localPort?: number;
64
- bytesRead: number;
65
- bytesWritten: number;
66
- autoSelectFamilyAttemptedAddresses: string[];
67
- private _autoSelectFamily;
68
- get localFamily(): string;
69
- get readyState(): string;
70
- get pending(): boolean;
71
- constructor(options?: SocketOptions);
72
- on(event: string | symbol, listener: (...args: any[]) => void): this;
73
- private _setupEvents;
74
- private _updateAddresses;
75
- address(): {
76
- port: number;
77
- family: string;
78
- address: string;
79
- } | null;
80
- connect(options: any, connectionListener?: () => void): this;
81
- private _connect;
82
- private _connectUnix;
83
- end(cb?: () => void): this;
84
- end(chunk: any, cb?: () => void): this;
85
- end(chunk: any, encoding: string, cb?: () => void): this;
86
- _write(chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
87
- _read(size: number): void;
88
- _final(callback: (error?: Error | null) => void): void;
89
- destroy(reason?: Error): this;
90
- _destroy(err: Error | null, callback: (error: Error | null) => void): void;
91
- setTimeout(msecs: number, callback?: () => void): this;
92
- /**
93
- * Pause the reading of data. That is, 'data' events will not be emitted.
94
- * Useful to throttle back an upload.
95
- */
96
- pause(): this;
97
- /**
98
- * Resume reading after a call to pause().
99
- */
100
- resume(): this;
101
- /**
102
- * Enable/disable the use of Nagle's algorithm.
103
- */
104
- setNoDelay(noDelay?: boolean): this;
105
- setKeepAlive(enable?: boolean, initialDelay?: number): this;
106
- ref(): this;
107
- unref(): this;
108
- /**
109
- * Set the encoding for the socket as a Readable Stream.
110
- * Use 'utf8', 'hex', etc.
111
- */
112
- setEncoding(encoding: BufferEncoding): this;
113
- get timeout(): number | undefined;
114
- get bufferSize(): number;
115
- resetAndDestroy(): this;
116
- }
117
- export declare class Server extends EventEmitter {
118
- private _driver;
119
- private _sockets;
120
- private _connections;
121
- private _maxConnections;
122
- private _dropMaxConnection;
123
- get maxConnections(): number;
124
- set maxConnections(value: number);
125
- get dropMaxConnection(): boolean;
126
- set dropMaxConnection(value: boolean);
127
- get listening(): boolean;
128
- constructor(options?: any, connectionListener?: (socket: Socket) => void);
129
- ref(): this;
130
- unref(): this;
131
- [Symbol.asyncDispose](): Promise<void>;
132
- listen(port?: any, host?: any, backlog?: any, callback?: any): this;
133
- close(callback?: (err?: Error) => void): this;
134
- address(): {
135
- port: number;
136
- family: string;
137
- address: string;
138
- } | null;
139
- getConnections(cb: (err: Error | null, count: number) => void): void;
140
- }
141
- export declare function createConnection(options: any, connectionListener?: () => void): Socket;
142
- export declare const connect: typeof createConnection;
143
- export declare function createServer(options?: any, connectionListener?: (socket: Socket) => void): Server;
144
- export * as tls from './tls';
145
- export { isIP, isIPv4, isIPv6, getDefaultAutoSelectFamily, setDefaultAutoSelectFamily, setVerbose, initWithConfig, };
146
- export type { NetConfig };
1
+ import * as net from './net';
2
+ import * as tls from './tls';
3
+ import * as http from './http';
4
+ import * as https from './https';
5
+ export * from './net';
6
+ export { tls, http, https };
147
7
  declare const _default: {
148
- Socket: typeof Socket;
149
- Server: typeof Server;
150
- SocketAddress: typeof SocketAddress;
151
- BlockList: typeof BlockList;
152
- createConnection: typeof createConnection;
153
- createServer: typeof createServer;
154
- connect: typeof createConnection;
155
- isIP: typeof isIP;
156
- isIPv4: typeof isIPv4;
157
- isIPv6: typeof isIPv6;
158
- getDefaultAutoSelectFamily: typeof getDefaultAutoSelectFamily;
159
- setDefaultAutoSelectFamily: typeof setDefaultAutoSelectFamily;
160
- setVerbose: typeof setVerbose;
161
- initWithConfig: typeof initWithConfig;
8
+ tls: typeof tls;
9
+ http: typeof http;
10
+ https: typeof https;
11
+ createConnection(options: any, connectionListener?: () => void): net.Socket;
12
+ createServer(options?: any, connectionListener?: (socket: net.Socket) => void): net.Server;
13
+ SocketAddress: typeof net.SocketAddress;
14
+ BlockList: typeof net.BlockList;
15
+ Socket: typeof net.Socket;
16
+ Server: typeof net.Server;
17
+ connect: typeof net.createConnection;
18
+ isIP: typeof net.isIP;
19
+ isIPv4: typeof net.isIPv4;
20
+ isIPv6: typeof net.isIPv6;
21
+ getDefaultAutoSelectFamily: typeof net.getDefaultAutoSelectFamily;
22
+ setDefaultAutoSelectFamily: typeof net.setDefaultAutoSelectFamily;
23
+ isVerbose: typeof net.isVerbose;
24
+ setVerbose: typeof net.setVerbose;
25
+ initWithConfig: typeof net.initWithConfig;
26
+ default: {
27
+ Socket: typeof net.Socket;
28
+ Server: typeof net.Server;
29
+ SocketAddress: typeof net.SocketAddress;
30
+ BlockList: typeof net.BlockList;
31
+ createConnection: typeof net.createConnection;
32
+ createServer: typeof net.createServer;
33
+ connect: typeof net.createConnection;
34
+ isIP: typeof net.isIP;
35
+ isIPv4: typeof net.isIPv4;
36
+ isIPv6: typeof net.isIPv6;
37
+ getDefaultAutoSelectFamily: typeof net.getDefaultAutoSelectFamily;
38
+ setDefaultAutoSelectFamily: typeof net.setDefaultAutoSelectFamily;
39
+ setVerbose: typeof net.setVerbose;
40
+ initWithConfig: typeof net.initWithConfig;
41
+ };
162
42
  };
163
43
  export default _default;
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,OAAO,CAAA;AAC5B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAA;AAC5B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAA;AAC9B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAEhC,cAAc,OAAO,CAAA;AACrB,OAAO,EACH,GAAG,EACH,IAAI,EACJ,KAAK,EACR,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAKE"}