dirsql 0.2.1 → 0.2.3
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/dirsql.node +0 -0
- package/dist/index.d.ts +65 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -46
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dirsql.node
CHANGED
|
Binary file
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,29 @@ export interface TableDef {
|
|
|
9
9
|
/** If true, reject rows with columns not declared in `ddl`. */
|
|
10
10
|
strict?: boolean;
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Options accepted by the {@link DirSQL} constructor.
|
|
14
|
+
*
|
|
15
|
+
* At least one of `root` or `config` must be supplied. When both are set,
|
|
16
|
+
* the explicit `root` wins over any `[dirsql].root` declared in the config
|
|
17
|
+
* file (a warning is emitted by the native layer).
|
|
18
|
+
*/
|
|
19
|
+
export interface DirSQLOptions {
|
|
20
|
+
/** Root directory to scan. */
|
|
21
|
+
root?: string;
|
|
22
|
+
/** Programmatic table definitions. Each table's `extract` runs in-process. */
|
|
23
|
+
tables?: TableDef[];
|
|
24
|
+
/** Glob patterns (relative to `root`) to ignore. */
|
|
25
|
+
ignore?: string[];
|
|
26
|
+
/**
|
|
27
|
+
* Path to a `.dirsql.toml` config file. Its `[[table]]` entries are
|
|
28
|
+
* appended to any programmatic `tables`; its `[dirsql].ignore` patterns
|
|
29
|
+
* are appended to any explicit `ignore`. If the config declares a
|
|
30
|
+
* `[dirsql].root` and no explicit `root` is given, it is resolved
|
|
31
|
+
* relative to the config file's parent directory.
|
|
32
|
+
*/
|
|
33
|
+
config?: string;
|
|
34
|
+
}
|
|
12
35
|
/** A row-level event emitted by the file watcher. */
|
|
13
36
|
export interface RowEvent {
|
|
14
37
|
/**
|
|
@@ -29,8 +52,7 @@ interface NativeDirSQL {
|
|
|
29
52
|
pollEvents(timeoutMs: number): Promise<RowEvent[]>;
|
|
30
53
|
}
|
|
31
54
|
interface NativeDirSQLConstructor {
|
|
32
|
-
|
|
33
|
-
fromConfig(configPath: string): NativeDirSQL;
|
|
55
|
+
openAsync(root: string | null, tables: TableDef[] | null, ignore: string[] | null, config: string | null): Promise<NativeDirSQL>;
|
|
34
56
|
}
|
|
35
57
|
interface CoreModule {
|
|
36
58
|
DirSQL: NativeDirSQLConstructor;
|
|
@@ -47,61 +69,70 @@ export declare function __setCoreForTesting(fake: CoreModule | null): void;
|
|
|
47
69
|
/**
|
|
48
70
|
* Ephemeral SQL index over a local directory.
|
|
49
71
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
72
|
+
* The constructor is overloaded: pass a config-file path directly, or an
|
|
73
|
+
* options object with any combination of `root`, `tables`, `ignore`, and
|
|
74
|
+
* `config`.
|
|
75
|
+
*
|
|
76
|
+
* Constructing a `DirSQL` returns immediately; the directory scan, file
|
|
77
|
+
* reads, and initial row extraction run asynchronously. `db.ready`
|
|
78
|
+
* resolves once construction has completed, and every method (including
|
|
79
|
+
* {@link query}, {@link startWatcher}, {@link pollEvents}, and
|
|
80
|
+
* {@link watch}) transparently awaits `ready` before doing any work, so
|
|
81
|
+
* callers can start using the instance immediately:
|
|
56
82
|
*
|
|
57
83
|
* ```ts
|
|
58
|
-
*
|
|
59
|
-
*
|
|
84
|
+
* // From a config file:
|
|
85
|
+
* const db = new DirSQL("./my-config.toml");
|
|
86
|
+
*
|
|
87
|
+
* // Programmatic:
|
|
88
|
+
* const db2 = new DirSQL({ root: "./data", tables: [...] });
|
|
89
|
+
*
|
|
90
|
+
* await db.ready; // optional: wait for the initial scan explicitly
|
|
60
91
|
* const rows = await db.query("SELECT ...");
|
|
61
92
|
* for await (const event of db.watch()) { ... }
|
|
62
93
|
* ```
|
|
94
|
+
*
|
|
95
|
+
* The scan runs on the libuv threadpool, so constructing a `DirSQL` does
|
|
96
|
+
* not block the JS event loop even for large directories.
|
|
63
97
|
*/
|
|
64
98
|
export declare class DirSQL {
|
|
65
99
|
/**
|
|
66
|
-
* Resolves once the initial directory scan
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* uniformly across SDKs.
|
|
100
|
+
* Resolves once the initial directory scan + row extraction have
|
|
101
|
+
* completed, or rejects if construction failed. Every other method on
|
|
102
|
+
* this class implicitly awaits `ready`, so awaiting it explicitly is
|
|
103
|
+
* only necessary when a caller needs to observe construction errors
|
|
104
|
+
* synchronously (without issuing a query first).
|
|
72
105
|
*/
|
|
73
106
|
readonly ready: Promise<void>;
|
|
74
107
|
private _inner;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
* The root directory is derived from the config file's parent. Tables
|
|
80
|
-
* are parsed using the built-in parser for each format declared in the
|
|
81
|
-
* config. No JS `extract` callback is required.
|
|
82
|
-
*/
|
|
83
|
-
static fromConfig(configPath: string): DirSQL;
|
|
108
|
+
/** Construct from a `.dirsql.toml` config-file path. */
|
|
109
|
+
constructor(configPath: string);
|
|
110
|
+
/** Construct from structured options. */
|
|
111
|
+
constructor(options: DirSQLOptions);
|
|
84
112
|
/**
|
|
85
113
|
* Execute a SQL query and return results as an array of row objects.
|
|
86
114
|
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
115
|
+
* Awaits the initial scan if it has not yet finished, then runs the
|
|
116
|
+
* query on the libuv threadpool, so the JS event loop stays responsive
|
|
117
|
+
* even for large result sets or long-running queries.
|
|
89
118
|
*/
|
|
90
119
|
query(sql: string): Promise<Record<string, unknown>[]>;
|
|
91
120
|
/**
|
|
92
121
|
* Start the file watcher. Must be called before {@link pollEvents}.
|
|
93
122
|
* Idempotent — safe to call multiple times.
|
|
94
123
|
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
124
|
+
* Awaits the initial scan if it has not yet finished, then runs on the
|
|
125
|
+
* libuv threadpool so the JS event loop stays responsive while the
|
|
126
|
+
* watcher is being initialized.
|
|
97
127
|
*/
|
|
98
128
|
startWatcher(): Promise<void>;
|
|
99
129
|
/**
|
|
100
130
|
* Poll for file change events, blocking up to `timeoutMs` for the first
|
|
101
131
|
* event. Returns all events observed in the window (possibly empty).
|
|
102
132
|
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
133
|
+
* Awaits the initial scan if it has not yet finished, then runs on the
|
|
134
|
+
* libuv threadpool so the JS event loop stays responsive for the
|
|
135
|
+
* duration of the poll timeout.
|
|
105
136
|
*/
|
|
106
137
|
pollEvents(timeoutMs: number): Promise<RowEvent[]>;
|
|
107
138
|
/**
|
|
@@ -111,9 +142,9 @@ export declare class DirSQL {
|
|
|
111
142
|
* for await (const event of db.watch()) { ... }
|
|
112
143
|
* ```
|
|
113
144
|
*
|
|
114
|
-
*
|
|
115
|
-
* bounded native poll each cycle. The iterator
|
|
116
|
-
* out of the `for await` loop to stop.
|
|
145
|
+
* Awaits the initial scan on first iteration, starts the underlying
|
|
146
|
+
* watcher, then awaits a bounded native poll each cycle. The iterator
|
|
147
|
+
* runs indefinitely; break out of the `for await` loop to stop.
|
|
117
148
|
*/
|
|
118
149
|
watch(): AsyncGenerator<RowEvent, void, unknown>;
|
|
119
150
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAiBA,iEAAiE;AACjE,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC1E,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB;;;;OAIG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAGD,UAAU,YAAY;IACpB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IACvD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CACpD;AAED,UAAU,uBAAuB;IAC/B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAiBA,iEAAiE;AACjE,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC1E,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB;;;;OAIG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAGD,UAAU,YAAY;IACpB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IACvD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CACpD;AAED,UAAU,uBAAuB;IAC/B,SAAS,CACP,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EACzB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EACvB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1B;AAID,UAAU,UAAU;IAClB,MAAM,EAAE,uBAAuB,CAAC;CACjC;AA0BD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAEjE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,MAAM;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAG9B,OAAO,CAAC,MAAM,CAAgB;IAE9B,wDAAwD;gBAC5C,UAAU,EAAE,MAAM;IAC9B,yCAAyC;gBAC7B,OAAO,EAAE,aAAa;IAgBlC;;;;;;OAMG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAK5D;;;;;;;OAOG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC;;;;;;;OAOG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKxD;;;;;;;;;;OAUG;IACI,KAAK,IAAI,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;CAaxD"}
|
package/dist/index.js
CHANGED
|
@@ -48,80 +48,84 @@ export function __setCoreForTesting(fake) {
|
|
|
48
48
|
/**
|
|
49
49
|
* Ephemeral SQL index over a local directory.
|
|
50
50
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
51
|
+
* The constructor is overloaded: pass a config-file path directly, or an
|
|
52
|
+
* options object with any combination of `root`, `tables`, `ignore`, and
|
|
53
|
+
* `config`.
|
|
54
|
+
*
|
|
55
|
+
* Constructing a `DirSQL` returns immediately; the directory scan, file
|
|
56
|
+
* reads, and initial row extraction run asynchronously. `db.ready`
|
|
57
|
+
* resolves once construction has completed, and every method (including
|
|
58
|
+
* {@link query}, {@link startWatcher}, {@link pollEvents}, and
|
|
59
|
+
* {@link watch}) transparently awaits `ready` before doing any work, so
|
|
60
|
+
* callers can start using the instance immediately:
|
|
57
61
|
*
|
|
58
62
|
* ```ts
|
|
59
|
-
*
|
|
60
|
-
*
|
|
63
|
+
* // From a config file:
|
|
64
|
+
* const db = new DirSQL("./my-config.toml");
|
|
65
|
+
*
|
|
66
|
+
* // Programmatic:
|
|
67
|
+
* const db2 = new DirSQL({ root: "./data", tables: [...] });
|
|
68
|
+
*
|
|
69
|
+
* await db.ready; // optional: wait for the initial scan explicitly
|
|
61
70
|
* const rows = await db.query("SELECT ...");
|
|
62
71
|
* for await (const event of db.watch()) { ... }
|
|
63
72
|
* ```
|
|
73
|
+
*
|
|
74
|
+
* The scan runs on the libuv threadpool, so constructing a `DirSQL` does
|
|
75
|
+
* not block the JS event loop even for large directories.
|
|
64
76
|
*/
|
|
65
77
|
export class DirSQL {
|
|
66
78
|
/**
|
|
67
|
-
* Resolves once the initial directory scan
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* uniformly across SDKs.
|
|
79
|
+
* Resolves once the initial directory scan + row extraction have
|
|
80
|
+
* completed, or rejects if construction failed. Every other method on
|
|
81
|
+
* this class implicitly awaits `ready`, so awaiting it explicitly is
|
|
82
|
+
* only necessary when a caller needs to observe construction errors
|
|
83
|
+
* synchronously (without issuing a query first).
|
|
73
84
|
*/
|
|
74
85
|
ready;
|
|
86
|
+
// Initialized by `ready`. Do NOT touch before awaiting `ready`.
|
|
75
87
|
_inner;
|
|
76
|
-
constructor(
|
|
88
|
+
constructor(arg) {
|
|
89
|
+
const options = typeof arg === "string" ? { config: arg } : arg;
|
|
77
90
|
const Ctor = getCore().DirSQL;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
this.ready = Promise.resolve();
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Load a {@link DirSQL} instance from a `.dirsql.toml` config file.
|
|
86
|
-
*
|
|
87
|
-
* The root directory is derived from the config file's parent. Tables
|
|
88
|
-
* are parsed using the built-in parser for each format declared in the
|
|
89
|
-
* config. No JS `extract` callback is required.
|
|
90
|
-
*/
|
|
91
|
-
static fromConfig(configPath) {
|
|
92
|
-
const instance = Object.create(DirSQL.prototype);
|
|
93
|
-
const writable = instance;
|
|
94
|
-
writable._inner = getCore().DirSQL.fromConfig(configPath);
|
|
95
|
-
writable.ready = Promise.resolve();
|
|
96
|
-
return instance;
|
|
91
|
+
const openPromise = Ctor.openAsync(options.root ?? null, options.tables ?? null, options.ignore ?? null, options.config ?? null);
|
|
92
|
+
this.ready = openPromise.then((inner) => {
|
|
93
|
+
this._inner = inner;
|
|
94
|
+
});
|
|
97
95
|
}
|
|
98
96
|
/**
|
|
99
97
|
* Execute a SQL query and return results as an array of row objects.
|
|
100
98
|
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
99
|
+
* Awaits the initial scan if it has not yet finished, then runs the
|
|
100
|
+
* query on the libuv threadpool, so the JS event loop stays responsive
|
|
101
|
+
* even for large result sets or long-running queries.
|
|
103
102
|
*/
|
|
104
|
-
query(sql) {
|
|
103
|
+
async query(sql) {
|
|
104
|
+
await this.ready;
|
|
105
105
|
return this._inner.query(sql);
|
|
106
106
|
}
|
|
107
107
|
/**
|
|
108
108
|
* Start the file watcher. Must be called before {@link pollEvents}.
|
|
109
109
|
* Idempotent — safe to call multiple times.
|
|
110
110
|
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
111
|
+
* Awaits the initial scan if it has not yet finished, then runs on the
|
|
112
|
+
* libuv threadpool so the JS event loop stays responsive while the
|
|
113
|
+
* watcher is being initialized.
|
|
113
114
|
*/
|
|
114
|
-
startWatcher() {
|
|
115
|
+
async startWatcher() {
|
|
116
|
+
await this.ready;
|
|
115
117
|
return this._inner.startWatcher();
|
|
116
118
|
}
|
|
117
119
|
/**
|
|
118
120
|
* Poll for file change events, blocking up to `timeoutMs` for the first
|
|
119
121
|
* event. Returns all events observed in the window (possibly empty).
|
|
120
122
|
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
+
* Awaits the initial scan if it has not yet finished, then runs on the
|
|
124
|
+
* libuv threadpool so the JS event loop stays responsive for the
|
|
125
|
+
* duration of the poll timeout.
|
|
123
126
|
*/
|
|
124
|
-
pollEvents(timeoutMs) {
|
|
127
|
+
async pollEvents(timeoutMs) {
|
|
128
|
+
await this.ready;
|
|
125
129
|
return this._inner.pollEvents(timeoutMs);
|
|
126
130
|
}
|
|
127
131
|
/**
|
|
@@ -131,11 +135,12 @@ export class DirSQL {
|
|
|
131
135
|
* for await (const event of db.watch()) { ... }
|
|
132
136
|
* ```
|
|
133
137
|
*
|
|
134
|
-
*
|
|
135
|
-
* bounded native poll each cycle. The iterator
|
|
136
|
-
* out of the `for await` loop to stop.
|
|
138
|
+
* Awaits the initial scan on first iteration, starts the underlying
|
|
139
|
+
* watcher, then awaits a bounded native poll each cycle. The iterator
|
|
140
|
+
* runs indefinitely; break out of the `for await` loop to stop.
|
|
137
141
|
*/
|
|
138
142
|
async *watch() {
|
|
143
|
+
await this.ready;
|
|
139
144
|
await this._inner.startWatcher();
|
|
140
145
|
while (true) {
|
|
141
146
|
// Native `pollEvents` now runs on the libuv threadpool and returns a
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,yEAAyE;AACzE,0EAA0E;AAC1E,UAAU;AACV,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAC1E,mEAAmE;AACnE,yEAAyE;AACzE,uDAAuD;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,yEAAyE;AACzE,0EAA0E;AAC1E,UAAU;AACV,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAC1E,mEAAmE;AACnE,yEAAyE;AACzE,uDAAuD;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA2EjC,sEAAsE;AACtE,kEAAkE;AAClE,IAAI,IAAI,GAAsB,IAAI,CAAC;AAEnC;;;;;;GAMG;AACH,SAAS,cAAc;IACrB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,OAAO,eAAe,CAAC,WAAW,CAAe,CAAC;AACpD,CAAC;AAED,SAAS,OAAO;IACd,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,cAAc,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,IAAI,GAAG,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,OAAO,MAAM;IACjB;;;;;;OAMG;IACM,KAAK,CAAgB;IAE9B,gEAAgE;IACxD,MAAM,CAAgB;IAM9B,YAAY,GAA2B;QACrC,MAAM,OAAO,GACX,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAChC,OAAO,CAAC,IAAI,IAAI,IAAI,EACpB,OAAO,CAAC,MAAM,IAAI,IAAI,EACtB,OAAO,CAAC,MAAM,IAAI,IAAI,EACtB,OAAO,CAAC,MAAM,IAAI,IAAI,CACvB,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,GAAW;QACrB,MAAM,IAAI,CAAC,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,MAAM,IAAI,CAAC,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,CAAC,KAAK;QACV,MAAM,IAAI,CAAC,KAAK,CAAC;QACjB,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACjC,OAAO,IAAI,EAAE,CAAC;YACZ,qEAAqE;YACrE,gEAAgE;YAChE,sEAAsE;YACtE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|