oakbun 0.5.1 → 0.5.2
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/adapter/postgres.d.ts.map +1 -1
- package/dist/adapter/postgres.js +1 -1
- package/dist/{chunk-HDJYYCSR.js → chunk-GHTAYIFD.js} +13 -5
- package/dist/chunk-GHTAYIFD.js.map +1 -0
- package/dist/cli/bin.js +5 -5
- package/dist/index.js +1 -1
- package/dist/{migrations-MWOFVTEL.js → migrations-WJ72RSDH.js} +12 -4
- package/package.json +1 -1
- package/dist/chunk-HDJYYCSR.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/adapter/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEtF,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/adapter/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEtF,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAoBD,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,OAAO,EAAG,UAAU,CAAS;IAItC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAK;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;gBAE5B,MAAM,EAAE,cAAc;IAe5B,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,YAAY,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAOhE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,YAAY,EAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAQzE,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
package/dist/adapter/postgres.js
CHANGED
|
@@ -8,6 +8,14 @@ var postgres_exports = {};
|
|
|
8
8
|
__export(postgres_exports, {
|
|
9
9
|
PostgresAdapter: () => PostgresAdapter
|
|
10
10
|
});
|
|
11
|
+
function toPositional(sql) {
|
|
12
|
+
let i = 0;
|
|
13
|
+
return sql.replace(/\?/g, () => `$${++i}`);
|
|
14
|
+
}
|
|
15
|
+
function unsafeCall(client, sql, params) {
|
|
16
|
+
const positional = toPositional(sql);
|
|
17
|
+
return params.length > 0 ? client.unsafe(positional, params) : client.unsafe(positional);
|
|
18
|
+
}
|
|
11
19
|
var PostgresAdapter;
|
|
12
20
|
var init_postgres = __esm({
|
|
13
21
|
"src/adapter/postgres.ts"() {
|
|
@@ -32,13 +40,13 @@ var init_postgres = __esm({
|
|
|
32
40
|
}
|
|
33
41
|
async query(sql, params = []) {
|
|
34
42
|
const t0 = performance.now();
|
|
35
|
-
const rows = await this.sql
|
|
43
|
+
const rows = await unsafeCall(this.sql, sql, params);
|
|
36
44
|
this.onQuery?.({ sql, params, durationMs: performance.now() - t0, type: "query" });
|
|
37
45
|
return rows;
|
|
38
46
|
}
|
|
39
47
|
async execute(sql, params = []) {
|
|
40
48
|
const t0 = performance.now();
|
|
41
|
-
const result = await this.sql
|
|
49
|
+
const result = await unsafeCall(this.sql, sql, params);
|
|
42
50
|
this.onQuery?.({ sql, params, durationMs: performance.now() - t0, type: "execute" });
|
|
43
51
|
const rowsAffected = typeof result?.count === "number" ? result.count : result?.length ?? 0;
|
|
44
52
|
return { rowsAffected };
|
|
@@ -47,9 +55,9 @@ var init_postgres = __esm({
|
|
|
47
55
|
return this.sql.begin(async (tx) => {
|
|
48
56
|
const txAdapter = {
|
|
49
57
|
dialect: "postgres",
|
|
50
|
-
query: (s, p = []) => tx
|
|
58
|
+
query: (s, p = []) => unsafeCall(tx, s, p),
|
|
51
59
|
execute: async (s, p = []) => {
|
|
52
|
-
const r = await tx
|
|
60
|
+
const r = await unsafeCall(tx, s, p);
|
|
53
61
|
const rowsAffected = typeof r?.count === "number" ? r.count : r?.length ?? 0;
|
|
54
62
|
return { rowsAffected };
|
|
55
63
|
},
|
|
@@ -74,4 +82,4 @@ export {
|
|
|
74
82
|
postgres_exports,
|
|
75
83
|
init_postgres
|
|
76
84
|
};
|
|
77
|
-
//# sourceMappingURL=chunk-
|
|
85
|
+
//# sourceMappingURL=chunk-GHTAYIFD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/adapter/postgres.ts"],"sourcesContent":["import type { VelnAdapter, BindingValue, ExecuteResult, QueryLogEntry } from './types'\n\nexport interface PostgresConfig {\n url: string\n max?: number\n idleTimeout?: number\n}\n\n// Bun.SQL.unsafe() requires $1, $2, ... positional placeholders — not the ? style\n// used by SQLite. Convert before every call.\nfunction toPositional(sql: string): string {\n let i = 0\n return sql.replace(/\\?/g, () => `$${++i}`)\n}\n\n// When there are no params, call unsafe(sql) without a second argument.\n// Passing an empty array causes Bun.SQL to parse the SQL for placeholders,\n// which misinterprets commas inside type expressions like NUMERIC(12,2).\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction unsafeCall(client: any, sql: string, params: BindingValue[]): any {\n const positional = toPositional(sql)\n return params.length > 0\n ? client.unsafe(positional, params)\n : client.unsafe(positional)\n}\n\nexport class PostgresAdapter implements VelnAdapter {\n readonly dialect = 'postgres' as const\n // Typed as any: Bun.SQL's instance type is not reliably exported across\n // bun-types versions and the class is a Bun global — no stable import path.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly sql: any\n onQuery?: (entry: QueryLogEntry) => void\n\n constructor(config: PostgresConfig) {\n if (config.max !== undefined && config.max < 1) {\n throw new Error(`PostgresAdapter: max connections must be at least 1, got ${config.max}`)\n }\n // Set DATABASE_URL if not already set — Bun.sql reads from environment\n if (!process.env['DATABASE_URL']) {\n process.env['DATABASE_URL'] = config.url\n }\n // @ts-ignore — Bun.SQL is a Bun global constructor, not in all bun-types versions\n this.sql = new Bun.SQL(config.url, {\n max: config.max ?? 10,\n idleTimeout: config.idleTimeout ?? 30,\n })\n }\n\n async query<T>(sql: string, params: BindingValue[] = []): Promise<T[]> {\n const t0 = performance.now()\n const rows = await unsafeCall(this.sql, sql, params) as T[]\n this.onQuery?.({ sql, params, durationMs: performance.now() - t0, type: 'query' })\n return rows\n }\n\n async execute(sql: string, params: BindingValue[] = []): Promise<ExecuteResult> {\n const t0 = performance.now()\n const result = await unsafeCall(this.sql, sql, params)\n this.onQuery?.({ sql, params, durationMs: performance.now() - t0, type: 'execute' })\n const rowsAffected = typeof result?.count === 'number' ? result.count : (result?.length ?? 0)\n return { rowsAffected } // lastInsertId not available without RETURNING clause\n }\n\n async transaction<T>(fn: (tx: VelnAdapter) => Promise<T>): Promise<T> {\n return this.sql.begin(async (tx: any) => {\n const txAdapter: VelnAdapter = {\n dialect: 'postgres',\n query: (s, p = []) => unsafeCall(tx, s, p),\n execute: async (s, p = []) => {\n const r = await unsafeCall(tx, s, p)\n const rowsAffected = typeof r?.count === 'number' ? r.count : (r?.length ?? 0)\n return { rowsAffected }\n },\n transaction: (innerFn) => innerFn(txAdapter), // nested: reuse same tx\n close: async () => {}, // no-op inside transaction\n }\n return fn(txAdapter)\n })\n }\n\n async close(): Promise<void> {\n await this.sql.end?.()\n }\n}\n"],"mappings":";;;;;;AAAA;AAAA;AAAA;AAAA;AAUA,SAAS,aAAa,KAAqB;AACzC,MAAI,IAAI;AACR,SAAO,IAAI,QAAQ,OAAO,MAAM,IAAI,EAAE,CAAC,EAAE;AAC3C;AAMA,SAAS,WAAW,QAAa,KAAa,QAA6B;AACzE,QAAM,aAAa,aAAa,GAAG;AACnC,SAAO,OAAO,SAAS,IACnB,OAAO,OAAO,YAAY,MAAM,IAChC,OAAO,OAAO,UAAU;AAC9B;AAxBA,IA0Ba;AA1Bb;AAAA;AA0BO,IAAM,kBAAN,MAA6C;AAAA,MACzC,UAAU;AAAA;AAAA;AAAA;AAAA,MAIF;AAAA,MACjB;AAAA,MAEA,YAAY,QAAwB;AAClC,YAAI,OAAO,QAAQ,UAAa,OAAO,MAAM,GAAG;AAC9C,gBAAM,IAAI,MAAM,4DAA4D,OAAO,GAAG,EAAE;AAAA,QAC1F;AAEA,YAAI,CAAC,QAAQ,IAAI,cAAc,GAAG;AAChC,kBAAQ,IAAI,cAAc,IAAI,OAAO;AAAA,QACvC;AAEA,aAAK,MAAM,IAAI,IAAI,IAAI,OAAO,KAAK;AAAA,UACjC,KAAK,OAAO,OAAO;AAAA,UACnB,aAAa,OAAO,eAAe;AAAA,QACrC,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,MAAS,KAAa,SAAyB,CAAC,GAAiB;AACrE,cAAM,KAAK,YAAY,IAAI;AAC3B,cAAM,OAAO,MAAM,WAAW,KAAK,KAAK,KAAK,MAAM;AACnD,aAAK,UAAU,EAAE,KAAK,QAAQ,YAAY,YAAY,IAAI,IAAI,IAAI,MAAM,QAAQ,CAAC;AACjF,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,QAAQ,KAAa,SAAyB,CAAC,GAA2B;AAC9E,cAAM,KAAK,YAAY,IAAI;AAC3B,cAAM,SAAS,MAAM,WAAW,KAAK,KAAK,KAAK,MAAM;AACrD,aAAK,UAAU,EAAE,KAAK,QAAQ,YAAY,YAAY,IAAI,IAAI,IAAI,MAAM,UAAU,CAAC;AACnF,cAAM,eAAe,OAAO,QAAQ,UAAU,WAAW,OAAO,QAAS,QAAQ,UAAU;AAC3F,eAAO,EAAE,aAAa;AAAA,MACxB;AAAA,MAEA,MAAM,YAAe,IAAiD;AACpE,eAAO,KAAK,IAAI,MAAM,OAAO,OAAY;AACvC,gBAAM,YAAyB;AAAA,YAC7B,SAAa;AAAA,YACb,OAAa,CAAC,GAAG,IAAI,CAAC,MAAM,WAAW,IAAI,GAAG,CAAC;AAAA,YAC/C,SAAa,OAAO,GAAG,IAAI,CAAC,MAAM;AAChC,oBAAM,IAAI,MAAM,WAAW,IAAI,GAAG,CAAC;AACnC,oBAAM,eAAe,OAAO,GAAG,UAAU,WAAW,EAAE,QAAS,GAAG,UAAU;AAC5E,qBAAO,EAAE,aAAa;AAAA,YACxB;AAAA,YACA,aAAa,CAAC,YAAY,QAAQ,SAAS;AAAA;AAAA,YAC3C,OAAa,YAAY;AAAA,YAAC;AAAA;AAAA,UAC5B;AACA,iBAAO,GAAG,SAAS;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,QAAuB;AAC3B,cAAM,KAAK,IAAI,MAAM;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;","names":[]}
|
package/dist/cli/bin.js
CHANGED
|
@@ -100,7 +100,7 @@ async function discoverCommands(config) {
|
|
|
100
100
|
|
|
101
101
|
// src/cli/commands/migrate/run.ts
|
|
102
102
|
async function migrateRun(_args, config) {
|
|
103
|
-
const { createMigrator } = await import("../migrations-
|
|
103
|
+
const { createMigrator } = await import("../migrations-WJ72RSDH.js");
|
|
104
104
|
const migrationsDir = config.migrations ?? "./migrations";
|
|
105
105
|
const adapter = await loadAdapter(config);
|
|
106
106
|
const migrator = createMigrator(adapter, { migrationsDir });
|
|
@@ -120,7 +120,7 @@ async function migrateRun(_args, config) {
|
|
|
120
120
|
|
|
121
121
|
// src/cli/commands/migrate/status.ts
|
|
122
122
|
async function migrateStatus(_args, config) {
|
|
123
|
-
const { createMigrator } = await import("../migrations-
|
|
123
|
+
const { createMigrator } = await import("../migrations-WJ72RSDH.js");
|
|
124
124
|
const migrationsDir = config.migrations ?? "./migrations";
|
|
125
125
|
const adapter = await loadAdapter(config);
|
|
126
126
|
const migrator = createMigrator(adapter, { migrationsDir });
|
|
@@ -175,7 +175,7 @@ async function discoverTables(config) {
|
|
|
175
175
|
|
|
176
176
|
// src/cli/commands/migrate/generate.ts
|
|
177
177
|
async function migrateGenerate(args, config) {
|
|
178
|
-
const { generateMigration } = await import("../migrations-
|
|
178
|
+
const { generateMigration } = await import("../migrations-WJ72RSDH.js");
|
|
179
179
|
const name = args[0];
|
|
180
180
|
const tables = await discoverTables(config);
|
|
181
181
|
if (tables.length === 0) {
|
|
@@ -202,7 +202,7 @@ async function migrateGenerate(args, config) {
|
|
|
202
202
|
|
|
203
203
|
// src/cli/commands/migrate/rollback.ts
|
|
204
204
|
async function migrateRollback(_args, config) {
|
|
205
|
-
const { createMigrator } = await import("../migrations-
|
|
205
|
+
const { createMigrator } = await import("../migrations-WJ72RSDH.js");
|
|
206
206
|
const migrationsDir = config.migrations ?? "./migrations";
|
|
207
207
|
const adapter = await loadAdapter(config);
|
|
208
208
|
const migrator = createMigrator(adapter, { migrationsDir });
|
|
@@ -443,7 +443,7 @@ async function tinker(_args, config) {
|
|
|
443
443
|
const { RequestEventQueue, EventBus } = await import("../events-LDXSK7ME.js");
|
|
444
444
|
const { createSystemCtx } = await import("../system-ctx-GPF44QCE.js");
|
|
445
445
|
const { instantiateServices } = await import("../service-W4V6TFWU.js");
|
|
446
|
-
const { createMigrator } = await import("../migrations-
|
|
446
|
+
const { createMigrator } = await import("../migrations-WJ72RSDH.js");
|
|
447
447
|
const hooks = new HookExecutor2();
|
|
448
448
|
hooks.setAdapter(adapter);
|
|
449
449
|
const velnDB = new VelnDB(adapter, hooks);
|
package/dist/index.js
CHANGED
|
@@ -14,6 +14,14 @@ var postgres_exports = {};
|
|
|
14
14
|
__export(postgres_exports, {
|
|
15
15
|
PostgresAdapter: () => PostgresAdapter
|
|
16
16
|
});
|
|
17
|
+
function toPositional(sql) {
|
|
18
|
+
let i = 0;
|
|
19
|
+
return sql.replace(/\?/g, () => `$${++i}`);
|
|
20
|
+
}
|
|
21
|
+
function unsafeCall(client, sql, params) {
|
|
22
|
+
const positional = toPositional(sql);
|
|
23
|
+
return params.length > 0 ? client.unsafe(positional, params) : client.unsafe(positional);
|
|
24
|
+
}
|
|
17
25
|
var PostgresAdapter;
|
|
18
26
|
var init_postgres = __esm({
|
|
19
27
|
"src/adapter/postgres.ts"() {
|
|
@@ -39,13 +47,13 @@ var init_postgres = __esm({
|
|
|
39
47
|
}
|
|
40
48
|
async query(sql, params = []) {
|
|
41
49
|
const t0 = performance.now();
|
|
42
|
-
const rows = await this.sql
|
|
50
|
+
const rows = await unsafeCall(this.sql, sql, params);
|
|
43
51
|
this.onQuery?.({ sql, params, durationMs: performance.now() - t0, type: "query" });
|
|
44
52
|
return rows;
|
|
45
53
|
}
|
|
46
54
|
async execute(sql, params = []) {
|
|
47
55
|
const t0 = performance.now();
|
|
48
|
-
const result = await this.sql
|
|
56
|
+
const result = await unsafeCall(this.sql, sql, params);
|
|
49
57
|
this.onQuery?.({ sql, params, durationMs: performance.now() - t0, type: "execute" });
|
|
50
58
|
const rowsAffected = typeof result?.count === "number" ? result.count : result?.length ?? 0;
|
|
51
59
|
return { rowsAffected };
|
|
@@ -54,9 +62,9 @@ var init_postgres = __esm({
|
|
|
54
62
|
return this.sql.begin(async (tx) => {
|
|
55
63
|
const txAdapter = {
|
|
56
64
|
dialect: "postgres",
|
|
57
|
-
query: (s, p = []) => tx
|
|
65
|
+
query: (s, p = []) => unsafeCall(tx, s, p),
|
|
58
66
|
execute: async (s, p = []) => {
|
|
59
|
-
const r = await tx
|
|
67
|
+
const r = await unsafeCall(tx, s, p);
|
|
60
68
|
const rowsAffected = typeof r?.count === "number" ? r.count : r?.length ?? 0;
|
|
61
69
|
return { rowsAffected };
|
|
62
70
|
},
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapter/postgres.ts"],"sourcesContent":["import type { VelnAdapter, BindingValue, ExecuteResult, QueryLogEntry } from './types'\n\nexport interface PostgresConfig {\n url: string\n max?: number\n idleTimeout?: number\n}\n\nexport class PostgresAdapter implements VelnAdapter {\n readonly dialect = 'postgres' as const\n // Typed as any: Bun.SQL's instance type is not reliably exported across\n // bun-types versions and the class is a Bun global — no stable import path.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly sql: any\n onQuery?: (entry: QueryLogEntry) => void\n\n constructor(config: PostgresConfig) {\n if (config.max !== undefined && config.max < 1) {\n throw new Error(`PostgresAdapter: max connections must be at least 1, got ${config.max}`)\n }\n // Set DATABASE_URL if not already set — Bun.sql reads from environment\n if (!process.env['DATABASE_URL']) {\n process.env['DATABASE_URL'] = config.url\n }\n // @ts-ignore — Bun.SQL is a Bun global constructor, not in all bun-types versions\n this.sql = new Bun.SQL(config.url, {\n max: config.max ?? 10,\n idleTimeout: config.idleTimeout ?? 30,\n })\n }\n\n async query<T>(sql: string, params: BindingValue[] = []): Promise<T[]> {\n const t0 = performance.now()\n // .unsafe() accepts a raw SQL string + positional params array\n const rows = await this.sql.unsafe(sql, params) as T[]\n this.onQuery?.({ sql, params, durationMs: performance.now() - t0, type: 'query' })\n return rows\n }\n\n async execute(sql: string, params: BindingValue[] = []): Promise<ExecuteResult> {\n const t0 = performance.now()\n const result = await this.sql.unsafe(sql, params)\n this.onQuery?.({ sql, params, durationMs: performance.now() - t0, type: 'execute' })\n // Bun.SQL result exposes .count for rows affected on DML statements\n const rowsAffected = typeof result?.count === 'number' ? result.count : (result?.length ?? 0)\n return { rowsAffected } // lastInsertId not available without RETURNING clause\n }\n\n async transaction<T>(fn: (tx: VelnAdapter) => Promise<T>): Promise<T> {\n return this.sql.begin(async (tx: any) => {\n const txAdapter: VelnAdapter = {\n dialect: 'postgres',\n query: (s, p = []) => tx.unsafe(s, p),\n execute: async (s, p = []) => {\n const r = await tx.unsafe(s, p)\n const rowsAffected = typeof r?.count === 'number' ? r.count : (r?.length ?? 0)\n return { rowsAffected }\n },\n transaction: (innerFn) => innerFn(txAdapter), // nested: reuse same tx\n close: async () => {}, // no-op inside transaction\n }\n return fn(txAdapter)\n })\n }\n\n async close(): Promise<void> {\n await this.sql.end?.()\n }\n}\n"],"mappings":";;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,IAQa;AARb;AAAA;AAQO,IAAM,kBAAN,MAA6C;AAAA,MACzC,UAAU;AAAA;AAAA;AAAA;AAAA,MAIF;AAAA,MACjB;AAAA,MAEA,YAAY,QAAwB;AAClC,YAAI,OAAO,QAAQ,UAAa,OAAO,MAAM,GAAG;AAC9C,gBAAM,IAAI,MAAM,4DAA4D,OAAO,GAAG,EAAE;AAAA,QAC1F;AAEA,YAAI,CAAC,QAAQ,IAAI,cAAc,GAAG;AAChC,kBAAQ,IAAI,cAAc,IAAI,OAAO;AAAA,QACvC;AAEA,aAAK,MAAM,IAAI,IAAI,IAAI,OAAO,KAAK;AAAA,UACjC,KAAK,OAAO,OAAO;AAAA,UACnB,aAAa,OAAO,eAAe;AAAA,QACrC,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,MAAS,KAAa,SAAyB,CAAC,GAAiB;AACrE,cAAM,KAAK,YAAY,IAAI;AAE3B,cAAM,OAAO,MAAM,KAAK,IAAI,OAAO,KAAK,MAAM;AAC9C,aAAK,UAAU,EAAE,KAAK,QAAQ,YAAY,YAAY,IAAI,IAAI,IAAI,MAAM,QAAQ,CAAC;AACjF,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,QAAQ,KAAa,SAAyB,CAAC,GAA2B;AAC9E,cAAM,KAAK,YAAY,IAAI;AAC3B,cAAM,SAAS,MAAM,KAAK,IAAI,OAAO,KAAK,MAAM;AAChD,aAAK,UAAU,EAAE,KAAK,QAAQ,YAAY,YAAY,IAAI,IAAI,IAAI,MAAM,UAAU,CAAC;AAEnF,cAAM,eAAe,OAAO,QAAQ,UAAU,WAAW,OAAO,QAAS,QAAQ,UAAU;AAC3F,eAAO,EAAE,aAAa;AAAA,MACxB;AAAA,MAEA,MAAM,YAAe,IAAiD;AACpE,eAAO,KAAK,IAAI,MAAM,OAAO,OAAY;AACvC,gBAAM,YAAyB;AAAA,YAC7B,SAAa;AAAA,YACb,OAAa,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC;AAAA,YAC1C,SAAa,OAAO,GAAG,IAAI,CAAC,MAAM;AAChC,oBAAM,IAAI,MAAM,GAAG,OAAO,GAAG,CAAC;AAC9B,oBAAM,eAAe,OAAO,GAAG,UAAU,WAAW,EAAE,QAAS,GAAG,UAAU;AAC5E,qBAAO,EAAE,aAAa;AAAA,YACxB;AAAA,YACA,aAAa,CAAC,YAAY,QAAQ,SAAS;AAAA;AAAA,YAC3C,OAAa,YAAY;AAAA,YAAC;AAAA;AAAA,UAC5B;AACA,iBAAO,GAAG,SAAS;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MAEA,MAAM,QAAuB;AAC3B,cAAM,KAAK,IAAI,MAAM;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;","names":[]}
|