@hatk/hatk 0.0.1-alpha.36 → 0.0.1-alpha.38

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.
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Shared Cloudflare initialization logic used by both the standalone Worker
3
+ * entry and the SvelteKit handle hook.
4
+ */
5
+ import { D1Adapter } from "../database/adapters/d1.js";
6
+ import { initDatabase, migrateSchema } from "../database/db.js";
7
+ import { storeLexicons, discoverCollections, buildSchemas } from "../database/schema.js";
8
+ import { discoverViews } from "../views.js";
9
+ import { getDialect } from "../database/dialect.js";
10
+ import { setSearchPort } from "../database/fts.js";
11
+ import { initOAuth } from "../oauth/server.js";
12
+ import { parseSessionCookie, getSessionCookieName } from "../oauth/session.js";
13
+ import { createHandler, registerCoreHandlers } from "../server.js";
14
+ import { configureRelay } from "../xrpc.js";
15
+ import { callXrpc } from "../xrpc.js";
16
+ import { validateLexicons } from '@bigmoves/lexicon';
17
+ let handler = null;
18
+ let initPromise = null;
19
+ /**
20
+ * One-time initialization. Sets up D1 adapter, database schemas, XRPC
21
+ * handlers, OAuth, and the globalThis bridge for SvelteKit SSR.
22
+ */
23
+ async function initialize(env) {
24
+ const relay = env.HATK_RELAY || 'wss://bsky.network';
25
+ const plc = env.HATK_PLC || 'https://plc.directory';
26
+ configureRelay(relay);
27
+ const admins = env.HATK_ADMINS ? env.HATK_ADMINS.split(',').map((s) => s.trim()) : [];
28
+ // Load lexicons — injected at build time via virtual module
29
+ let lexicons;
30
+ try {
31
+ // @ts-expect-error — virtual module generated at build time
32
+ const lexiconModule = await import('virtual:hatk-lexicons');
33
+ lexicons = new Map(Object.entries(lexiconModule.default));
34
+ }
35
+ catch {
36
+ lexicons = new Map();
37
+ }
38
+ const lexiconErrors = validateLexicons([...lexicons.values()]);
39
+ if (lexiconErrors) {
40
+ for (const [nsid, errors] of Object.entries(lexiconErrors)) {
41
+ for (const err of errors) {
42
+ console.error(`[hatk] Invalid lexicon ${nsid}: ${err}`);
43
+ }
44
+ }
45
+ throw new Error('Invalid lexicons — check build output');
46
+ }
47
+ storeLexicons(lexicons);
48
+ const collections = env.HATK_COLLECTIONS
49
+ ? env.HATK_COLLECTIONS.split(',').map((s) => s.trim())
50
+ : discoverCollections(lexicons);
51
+ // Build schemas and init D1
52
+ discoverViews();
53
+ const engineDialect = getDialect('d1');
54
+ const { schemas, ddlStatements } = buildSchemas(lexicons, collections, engineDialect);
55
+ const adapter = new D1Adapter();
56
+ adapter.initWithBinding(env.DB);
57
+ setSearchPort(null);
58
+ await initDatabase(adapter, ':memory:', schemas, ddlStatements);
59
+ await migrateSchema(schemas);
60
+ // Register core XRPC handlers
61
+ const oauthConfig = env.HATK_OAUTH_ISSUER
62
+ ? {
63
+ issuer: env.HATK_OAUTH_ISSUER,
64
+ scopes: env.HATK_OAUTH_SCOPES ? env.HATK_OAUTH_SCOPES.split(',').map((s) => s.trim()) : ['read', 'write'],
65
+ clients: [],
66
+ }
67
+ : null;
68
+ registerCoreHandlers(collections, oauthConfig);
69
+ if (oauthConfig) {
70
+ await initOAuth(oauthConfig, plc, relay);
71
+ }
72
+ // Expose bridge for SvelteKit SSR
73
+ ;
74
+ globalThis.__hatk_callXrpc = callXrpc;
75
+ globalThis.__hatk_parseSessionCookie = parseSessionCookie;
76
+ globalThis.__hatk_sessionCookieName = getSessionCookieName();
77
+ // Create the request handler
78
+ handler = createHandler({
79
+ collections,
80
+ publicDir: null,
81
+ oauth: oauthConfig,
82
+ admins,
83
+ onResync: undefined,
84
+ });
85
+ }
86
+ /**
87
+ * Ensure initialization has completed. Concurrent calls share the same promise.
88
+ */
89
+ export function ensureInit(env) {
90
+ if (handler)
91
+ return Promise.resolve();
92
+ if (!initPromise) {
93
+ initPromise = initialize(env).catch((err) => {
94
+ initPromise = null;
95
+ throw err;
96
+ });
97
+ }
98
+ return initPromise;
99
+ }
100
+ /** Get the hatk request handler (only valid after init). */
101
+ export function getHandler() {
102
+ return handler;
103
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Cloudflare Worker entry point for hatk.
3
+ *
4
+ * Handles HTTP requests via the Workers fetch handler. The firehose indexer
5
+ * and backfill run in a companion Container — the Worker only serves the
6
+ * API and web UI.
7
+ *
8
+ * For SvelteKit apps, prefer using the handle hook from
9
+ * '@hatk/hatk/cloudflare/hooks' with adapter-cloudflare instead.
10
+ */
11
+ import { type CloudflareEnv } from './init.ts';
12
+ interface ContainerBinding {
13
+ resync(did: string): Promise<void>;
14
+ fetch(request: Request): Promise<Response>;
15
+ }
16
+ interface Env extends CloudflareEnv {
17
+ CONTAINER: ContainerBinding;
18
+ }
19
+ interface ExecutionContext {
20
+ waitUntil(promise: Promise<unknown>): void;
21
+ passThroughOnException(): void;
22
+ }
23
+ declare const _default: {
24
+ fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response>;
25
+ };
26
+ export default _default;
27
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cloudflare/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,WAAW,CAAA;AAGtE,UAAU,gBAAgB;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC3C;AAED,UAAU,GAAI,SAAQ,aAAa;IACjC,SAAS,EAAE,gBAAgB,CAAA;CAC5B;AAED,UAAU,gBAAgB;IACxB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;IAC1C,sBAAsB,IAAI,IAAI,CAAA;CAC/B;;mBAGsB,OAAO,OAAO,GAAG,OAAO,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;;AADnF,wBA2CC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Cloudflare Worker entry point for hatk.
3
+ *
4
+ * Handles HTTP requests via the Workers fetch handler. The firehose indexer
5
+ * and backfill run in a companion Container — the Worker only serves the
6
+ * API and web UI.
7
+ *
8
+ * For SvelteKit apps, prefer using the handle hook from
9
+ * '@hatk/hatk/cloudflare/hooks' with adapter-cloudflare instead.
10
+ */
11
+ import { ensureInit, getHandler } from "./init.js";
12
+ import { isHatkRoute } from "../adapter.js";
13
+ export default {
14
+ async fetch(request, env, ctx) {
15
+ try {
16
+ await ensureInit(env);
17
+ }
18
+ catch (err) {
19
+ return new Response(JSON.stringify({ error: 'Initialization failed', detail: err.message }), {
20
+ status: 500,
21
+ headers: { 'Content-Type': 'application/json' },
22
+ });
23
+ }
24
+ const url = new URL(request.url);
25
+ const handler = getHandler();
26
+ // Intercept admin resync to delegate to the Container via RPC
27
+ if (url.pathname === '/admin/repos/resync' && request.method === 'POST') {
28
+ try {
29
+ const body = await request.text();
30
+ const { dids } = body ? JSON.parse(body) : {};
31
+ if (Array.isArray(dids)) {
32
+ for (const did of dids) {
33
+ ctx.waitUntil(env.CONTAINER.resync(did));
34
+ }
35
+ return new Response(JSON.stringify({ resyncing: dids.length }), {
36
+ headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' },
37
+ });
38
+ }
39
+ }
40
+ catch (err) {
41
+ return new Response(JSON.stringify({ error: err.message }), {
42
+ status: 500,
43
+ headers: { 'Content-Type': 'application/json' },
44
+ });
45
+ }
46
+ }
47
+ // hatk routes → handler
48
+ if (isHatkRoute(url.pathname)) {
49
+ return handler(request);
50
+ }
51
+ // Everything else → 404 (use cloudflare/hooks for SvelteKit integration)
52
+ return new Response('Not found', { status: 404 });
53
+ },
54
+ };
@@ -0,0 +1,56 @@
1
+ import type { DatabasePort, BulkInserter, Dialect } from '../ports.ts';
2
+ /**
3
+ * D1 database adapter for Cloudflare Workers/Containers.
4
+ *
5
+ * D1 is SQLite under the hood but accessed via an HTTP-based binding API.
6
+ * Key differences from the SQLite adapter:
7
+ * - No raw transactions — uses d1.batch() for atomic multi-statement execution
8
+ * - No prepared statement reuse — each query is a fresh prepare+bind
9
+ * - Bulk inserts use batched INSERT statements instead of native appenders
10
+ */
11
+ /** Minimal D1 type definitions (matches Cloudflare's D1Database binding) */
12
+ interface D1Database {
13
+ prepare(sql: string): D1PreparedStatement;
14
+ batch<T = unknown>(statements: D1PreparedStatement[]): Promise<D1Result<T>[]>;
15
+ exec(sql: string): Promise<D1ExecResult>;
16
+ }
17
+ interface D1PreparedStatement {
18
+ bind(...values: unknown[]): D1PreparedStatement;
19
+ all<T = Record<string, unknown>>(): Promise<D1Result<T>>;
20
+ run(): Promise<D1Result>;
21
+ first<T = Record<string, unknown>>(column?: string): Promise<T | null>;
22
+ }
23
+ interface D1Result<T = unknown> {
24
+ results: T[];
25
+ success: boolean;
26
+ meta: Record<string, unknown>;
27
+ }
28
+ interface D1ExecResult {
29
+ count: number;
30
+ duration: number;
31
+ }
32
+ export declare class D1Adapter implements DatabasePort {
33
+ dialect: Dialect;
34
+ private db;
35
+ private txBuffer;
36
+ /**
37
+ * Initialize with an existing D1 binding (from env.DB in Worker/Container).
38
+ * The `path` argument is ignored — D1 bindings are configured in wrangler.jsonc.
39
+ */
40
+ open(_path: string): Promise<void>;
41
+ /** Set the D1 binding directly (called before open). */
42
+ initWithBinding(db: D1Database): void;
43
+ close(): void;
44
+ query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;
45
+ execute(sql: string, params?: unknown[]): Promise<void>;
46
+ executeMultiple(sql: string): Promise<void>;
47
+ beginTransaction(): Promise<void>;
48
+ commit(): Promise<void>;
49
+ rollback(): Promise<void>;
50
+ createBulkInserter(table: string, columns: string[], options?: {
51
+ onConflict?: 'ignore' | 'replace';
52
+ batchSize?: number;
53
+ }): Promise<BulkInserter>;
54
+ }
55
+ export {};
56
+ //# sourceMappingURL=d1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"d1.d.ts","sourceRoot":"","sources":["../../../src/database/adapters/d1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAEtE;;;;;;;;GAQG;AAEH,4EAA4E;AAC5E,UAAU,UAAU;IAClB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAA;IACzC,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC7E,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CACzC;AAED,UAAU,mBAAmB;IAC3B,IAAI,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAA;IAC/C,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;IACxB,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;CACvE;AAED,UAAU,QAAQ,CAAC,CAAC,GAAG,OAAO;IAC5B,OAAO,EAAE,CAAC,EAAE,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAmBD,qBAAa,SAAU,YAAW,YAAY;IAC5C,OAAO,EAAE,OAAO,CAAO;IAEvB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,QAAQ,CAAqC;IAErD;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,wDAAwD;IACxD,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAIrC,KAAK,IAAI,IAAI;IAIP,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAOrF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3D,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa3C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IASvB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAClE,OAAO,CAAC,YAAY,CAAC;CA+BzB"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Translate DuckDB-style $1, $2 placeholders to ? placeholders.
3
+ * Same logic as the SQLite adapter — D1 uses ? style.
4
+ */
5
+ function translateParams(sql, params) {
6
+ if (params.length === 0)
7
+ return { sql, params };
8
+ const expandedParams = [];
9
+ const translated = sql.replace(/\$(\d+)/g, (_match, numStr) => {
10
+ const idx = parseInt(numStr) - 1;
11
+ expandedParams.push(params[idx]);
12
+ return '?';
13
+ });
14
+ return { sql: translated, params: expandedParams };
15
+ }
16
+ export class D1Adapter {
17
+ dialect = 'd1';
18
+ db;
19
+ txBuffer = null;
20
+ /**
21
+ * Initialize with an existing D1 binding (from env.DB in Worker/Container).
22
+ * The `path` argument is ignored — D1 bindings are configured in wrangler.jsonc.
23
+ */
24
+ async open(_path) {
25
+ // D1 binding is injected via initWithBinding(), not opened by path.
26
+ // This is a no-op if already initialized.
27
+ if (!this.db) {
28
+ throw new Error('D1Adapter requires initWithBinding(db) before use');
29
+ }
30
+ }
31
+ /** Set the D1 binding directly (called before open). */
32
+ initWithBinding(db) {
33
+ this.db = db;
34
+ }
35
+ close() {
36
+ // D1 bindings don't need explicit cleanup
37
+ }
38
+ async query(sql, params = []) {
39
+ const t = translateParams(sql, params);
40
+ const stmt = t.params.length > 0 ? this.db.prepare(t.sql).bind(...t.params) : this.db.prepare(t.sql);
41
+ const result = await stmt.all();
42
+ return result.results;
43
+ }
44
+ async execute(sql, params = []) {
45
+ const t = translateParams(sql, params);
46
+ const stmt = t.params.length > 0 ? this.db.prepare(t.sql).bind(...t.params) : this.db.prepare(t.sql);
47
+ // If inside a transaction, buffer instead of executing
48
+ if (this.txBuffer !== null) {
49
+ this.txBuffer.push(stmt);
50
+ return;
51
+ }
52
+ await stmt.run();
53
+ }
54
+ async executeMultiple(sql) {
55
+ // D1's exec() can be unreliable with multi-statement SQL.
56
+ // Split on semicolons and run each statement via prepare().run().
57
+ const statements = sql
58
+ .split(';')
59
+ .map((s) => s.trim())
60
+ .filter((s) => s.length > 0);
61
+ for (const stmt of statements) {
62
+ await this.db.prepare(stmt).run();
63
+ }
64
+ }
65
+ async beginTransaction() {
66
+ this.txBuffer = [];
67
+ }
68
+ async commit() {
69
+ if (this.txBuffer === null)
70
+ return;
71
+ const statements = this.txBuffer;
72
+ this.txBuffer = null;
73
+ if (statements.length > 0) {
74
+ await this.db.batch(statements);
75
+ }
76
+ }
77
+ async rollback() {
78
+ this.txBuffer = null;
79
+ }
80
+ async createBulkInserter(table, columns, options) {
81
+ const placeholders = columns.map(() => '?').join(', ');
82
+ const conflict = options?.onConflict === 'ignore' ? ' OR IGNORE' : options?.onConflict === 'replace' ? ' OR REPLACE' : '';
83
+ const sqlTemplate = `INSERT${conflict} INTO ${table} (${columns.join(', ')}) VALUES (${placeholders})`;
84
+ const buffer = [];
85
+ const batchSize = options?.batchSize ?? 200; // smaller batches for D1 CPU limits
86
+ const db = this.db;
87
+ const flush = async () => {
88
+ if (buffer.length > 0) {
89
+ await db.batch(buffer);
90
+ buffer.length = 0;
91
+ }
92
+ };
93
+ return {
94
+ append(values) {
95
+ buffer.push(db.prepare(sqlTemplate).bind(...values));
96
+ if (buffer.length >= batchSize) {
97
+ flush();
98
+ }
99
+ },
100
+ async flush() {
101
+ await flush();
102
+ },
103
+ async close() {
104
+ await flush();
105
+ },
106
+ };
107
+ }
108
+ }
@@ -98,6 +98,8 @@ export declare function queryRecords(collection: string, opts?: QueryOpts): Prom
98
98
  }>;
99
99
  export declare function getRecordByUri(uri: string): Promise<any | null>;
100
100
  export declare function getRecordsByUris(collection: string, uris: string[]): Promise<any[]>;
101
+ /** Fetch records by URIs and return as a shaped Map keyed by URI. */
102
+ export declare function getRecordsMap<R = unknown>(collection: string, uris: string[]): Promise<Map<string, Row<R>>>;
101
103
  /**
102
104
  * Multi-phase search across any collection's records.
103
105
  *
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"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"}
@@ -479,7 +479,7 @@ export function buildInsertOp(collection, uri, cid, authorDid, record) {
479
479
  if (rawValue === undefined || rawValue === null) {
480
480
  values.push(null);
481
481
  }
482
- else if (col.sqlType === 'JSON') {
482
+ else if (col.isJson) {
483
483
  values.push(JSON.stringify(rawValue));
484
484
  }
485
485
  else {
@@ -514,7 +514,7 @@ export async function insertRecord(collection, uri, cid, authorDid, record) {
514
514
  if (raw === undefined || raw === null) {
515
515
  values.push(null);
516
516
  }
517
- else if (col.sqlType === 'JSON') {
517
+ else if (col.isJson) {
518
518
  values.push(JSON.stringify(raw));
519
519
  }
520
520
  else {
@@ -553,7 +553,7 @@ export async function insertRecord(collection, uri, cid, authorDid, record) {
553
553
  if (raw === undefined || raw === null) {
554
554
  values.push(null);
555
555
  }
556
- else if (col.sqlType === 'JSON') {
556
+ else if (col.isJson) {
557
557
  values.push(JSON.stringify(raw));
558
558
  }
559
559
  else {
@@ -577,7 +577,7 @@ export async function insertRecord(collection, uri, cid, authorDid, record) {
577
577
  if (raw === undefined || raw === null) {
578
578
  values.push(null);
579
579
  }
580
- else if (col.sqlType === 'JSON') {
580
+ else if (col.isJson) {
581
581
  values.push(JSON.stringify(raw));
582
582
  }
583
583
  else {
@@ -1020,6 +1020,19 @@ export async function getRecordsByUris(collection, uris) {
1020
1020
  const byUri = new Map(rows.map((r) => [r.uri, r]));
1021
1021
  return uris.map((u) => byUri.get(u)).filter(Boolean);
1022
1022
  }
1023
+ /** Fetch records by URIs and return as a shaped Map keyed by URI. */
1024
+ export async function getRecordsMap(collection, uris) {
1025
+ if (uris.length === 0)
1026
+ return new Map();
1027
+ const records = await getRecordsByUris(collection, uris);
1028
+ const map = new Map();
1029
+ for (const r of records) {
1030
+ const shaped = reshapeRow(r, r?.__childData, r?.__unionData);
1031
+ if (shaped)
1032
+ map.set(shaped.uri, shaped);
1033
+ }
1034
+ return map;
1035
+ }
1023
1036
  /**
1024
1037
  * Multi-phase search across any collection's records.
1025
1038
  *
@@ -1267,7 +1280,7 @@ export function reshapeRow(row, childData, unionData) {
1267
1280
  if (schema) {
1268
1281
  for (const col of schema.columns) {
1269
1282
  nameMap.set(col.name, col.originalName);
1270
- if (col.sqlType === 'JSON')
1283
+ if (col.isJson)
1271
1284
  jsonCols.add(col.name);
1272
1285
  }
1273
1286
  }
@@ -106,7 +106,7 @@ function computeFtsSchema(collection) {
106
106
  selectExprs.push(`t.${col.name}`);
107
107
  searchColNames.push(col.name);
108
108
  }
109
- else if ((col.sqlType === 'JSON' || col.sqlType === 'TEXT') && record?.properties) {
109
+ else if (col.isJson && record?.properties) {
110
110
  const prop = record.properties[col.originalName];
111
111
  if (prop?.type === 'blob')
112
112
  continue; // skip blobs
@@ -5,6 +5,7 @@ export interface ColumnDef {
5
5
  sqlType: string;
6
6
  notNull: boolean;
7
7
  isRef: boolean;
8
+ isJson: boolean;
8
9
  }
9
10
  export interface UnionBranchSchema {
10
11
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;CACrB;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AA8CD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CASlE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CASxE;AAID,wBAAgB,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAI9D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAExD;AAED,wBAAgB,cAAc,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC,CAEtE;AAED,iFAAiF;AACjF,wBAAgB,eAAe,IAAI,GAAG,EAAE,CAEvC;AAwHD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,GAAG,EACZ,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,GAAE,UAA2B,GACnC,WAAW,CA0Gb;AAGD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,UAA2B,GAAG,MAAM,CAoExG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,UAA2B,GACnC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BrD"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;CACrB;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AA+CD,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CASlE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CASxE;AAID,wBAAgB,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAI9D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAExD;AAED,wBAAgB,cAAc,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC,CAEtE;AAED,iFAAiF;AACjF,wBAAgB,eAAe,IAAI,GAAG,EAAE,CAEvC;AAyHD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,GAAG,EACZ,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,GAAE,UAA2B,GACnC,WAAW,CA+Gb;AAGD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,UAA2B,GAAG,MAAM,CAoExG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,UAA2B,GACnC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BrD"}
@@ -8,36 +8,36 @@ export function toSnakeCase(str) {
8
8
  function mapType(prop, dialect) {
9
9
  if (prop.type === 'string') {
10
10
  if (prop.format === 'datetime')
11
- return { sqlType: dialect.typeMap.timestamp, isRef: false };
11
+ return { sqlType: dialect.typeMap.timestamp, isRef: false, isJson: false };
12
12
  if (prop.format === 'at-uri')
13
- return { sqlType: dialect.typeMap.text, isRef: true };
14
- return { sqlType: dialect.typeMap.text, isRef: false };
13
+ return { sqlType: dialect.typeMap.text, isRef: true, isJson: false };
14
+ return { sqlType: dialect.typeMap.text, isRef: false, isJson: false };
15
15
  }
16
16
  if (prop.type === 'integer')
17
- return { sqlType: dialect.typeMap.integer, isRef: false };
17
+ return { sqlType: dialect.typeMap.integer, isRef: false, isJson: false };
18
18
  if (prop.type === 'boolean')
19
- return { sqlType: dialect.typeMap.boolean, isRef: false };
19
+ return { sqlType: dialect.typeMap.boolean, isRef: false, isJson: false };
20
20
  if (prop.type === 'bytes')
21
- return { sqlType: dialect.typeMap.blob, isRef: false };
21
+ return { sqlType: dialect.typeMap.blob, isRef: false, isJson: false };
22
22
  if (prop.type === 'cid-link')
23
- return { sqlType: dialect.typeMap.text, isRef: false };
23
+ return { sqlType: dialect.typeMap.text, isRef: false, isJson: false };
24
24
  if (prop.type === 'array')
25
- return { sqlType: dialect.jsonType, isRef: false };
25
+ return { sqlType: dialect.jsonType, isRef: false, isJson: true };
26
26
  if (prop.type === 'blob')
27
- return { sqlType: dialect.jsonType, isRef: false };
27
+ return { sqlType: dialect.jsonType, isRef: false, isJson: true };
28
28
  if (prop.type === 'union')
29
- return { sqlType: dialect.jsonType, isRef: false };
29
+ return { sqlType: dialect.jsonType, isRef: false, isJson: true };
30
30
  if (prop.type === 'unknown')
31
- return { sqlType: dialect.jsonType, isRef: false };
31
+ return { sqlType: dialect.jsonType, isRef: false, isJson: true };
32
32
  if (prop.type === 'object')
33
- return { sqlType: dialect.jsonType, isRef: false };
33
+ return { sqlType: dialect.jsonType, isRef: false, isJson: true };
34
34
  if (prop.type === 'ref') {
35
35
  // strongRef contains { uri, cid } — handled specially in generateTableSchema
36
36
  if (prop.ref === 'com.atproto.repo.strongRef')
37
- return { sqlType: 'STRONG_REF', isRef: true };
38
- return { sqlType: dialect.jsonType, isRef: false };
37
+ return { sqlType: 'STRONG_REF', isRef: true, isJson: false };
38
+ return { sqlType: dialect.jsonType, isRef: false, isJson: true };
39
39
  }
40
- return { sqlType: dialect.typeMap.text, isRef: false };
40
+ return { sqlType: dialect.typeMap.text, isRef: false, isJson: false };
41
41
  }
42
42
  // Recursively find all .json files in a directory
43
43
  function findJsonFiles(dir) {
@@ -182,7 +182,7 @@ function resolveUnionBranch(ref, collection, fieldName, defs, lexicons, dialect)
182
182
  const tableName = `"${collection}__${snakeField}_${branchName}"`;
183
183
  const columns = [];
184
184
  for (const [propName, prop] of Object.entries(propSource)) {
185
- const { sqlType, isRef } = mapType(prop, dialect);
185
+ const { sqlType, isRef, isJson } = mapType(prop, dialect);
186
186
  // Skip STRONG_REF expansion in branch tables — treat as JSON
187
187
  const finalType = sqlType === 'STRONG_REF' ? dialect.jsonType : sqlType;
188
188
  columns.push({
@@ -190,7 +190,8 @@ function resolveUnionBranch(ref, collection, fieldName, defs, lexicons, dialect)
190
190
  originalName: propName,
191
191
  sqlType: finalType,
192
192
  notNull: branchRequired.has(propName),
193
- isRef: finalType !== 'JSON' && isRef,
193
+ isRef: finalType !== dialect.jsonType && isRef,
194
+ isJson: isJson || sqlType === 'STRONG_REF',
194
195
  });
195
196
  }
196
197
  return { type: fullType, branchName, tableName, columns, isArray, arrayField, wrapperField };
@@ -229,6 +230,7 @@ export function generateTableSchema(nsid, lexicon, lexicons, dialect = DUCKDB_DI
229
230
  sqlType: dialect.jsonType,
230
231
  notNull: required.has(fieldName),
231
232
  isRef: false,
233
+ isJson: true,
232
234
  });
233
235
  continue;
234
236
  }
@@ -239,13 +241,14 @@ export function generateTableSchema(nsid, lexicon, lexicons, dialect = DUCKDB_DI
239
241
  const childColumns = [];
240
242
  const itemRequired = new Set(p.items?.required || lexicon.defs?.[p.items?.ref?.slice(1)]?.required || []);
241
243
  for (const [itemField, itemProp] of Object.entries(itemProps)) {
242
- const { sqlType, isRef } = mapType(itemProp, dialect);
244
+ const { sqlType, isRef, isJson } = mapType(itemProp, dialect);
243
245
  childColumns.push({
244
246
  name: toSnakeCase(itemField),
245
247
  originalName: itemField,
246
248
  sqlType,
247
249
  notNull: itemRequired.has(itemField),
248
250
  isRef,
251
+ isJson,
249
252
  });
250
253
  }
251
254
  const snakeField = toSnakeCase(fieldName);
@@ -258,7 +261,7 @@ export function generateTableSchema(nsid, lexicon, lexicons, dialect = DUCKDB_DI
258
261
  continue;
259
262
  }
260
263
  }
261
- const { sqlType, isRef } = mapType(p, dialect);
264
+ const { sqlType, isRef, isJson } = mapType(p, dialect);
262
265
  if (sqlType === 'STRONG_REF') {
263
266
  // Expand strongRef into two columns: {name}_uri and {name}_cid
264
267
  columns.push({
@@ -267,6 +270,7 @@ export function generateTableSchema(nsid, lexicon, lexicons, dialect = DUCKDB_DI
267
270
  sqlType: dialect.typeMap.text,
268
271
  notNull: required.has(fieldName),
269
272
  isRef: true,
273
+ isJson: false,
270
274
  });
271
275
  columns.push({
272
276
  name: toSnakeCase(fieldName) + '_cid',
@@ -274,6 +278,7 @@ export function generateTableSchema(nsid, lexicon, lexicons, dialect = DUCKDB_DI
274
278
  sqlType: dialect.typeMap.text,
275
279
  notNull: required.has(fieldName),
276
280
  isRef: false,
281
+ isJson: false,
277
282
  });
278
283
  }
279
284
  else {
@@ -283,6 +288,7 @@ export function generateTableSchema(nsid, lexicon, lexicons, dialect = DUCKDB_DI
283
288
  sqlType,
284
289
  notNull: required.has(fieldName),
285
290
  isRef,
291
+ isJson,
286
292
  });
287
293
  }
288
294
  }
@@ -331,7 +337,7 @@ export function generateCreateTableSQL(schema, dialect = DUCKDB_DIALECT) {
331
337
  childDDL.push(`CREATE INDEX IF NOT EXISTS idx_${childPrefix}_parent ON ${child.tableName}(parent_uri);`);
332
338
  childDDL.push(`CREATE INDEX IF NOT EXISTS idx_${childPrefix}_did ON ${child.tableName}(parent_did);`);
333
339
  for (const col of child.columns) {
334
- if (col.sqlType === 'JSON' || col.sqlType === 'BLOB')
340
+ if (col.isJson || col.sqlType === 'BLOB')
335
341
  continue;
336
342
  childDDL.push(`CREATE INDEX IF NOT EXISTS idx_${childPrefix}_${col.name} ON ${child.tableName}(${col.name});`);
337
343
  }
@@ -349,7 +355,7 @@ export function generateCreateTableSQL(schema, dialect = DUCKDB_DIALECT) {
349
355
  childDDL.push(`CREATE INDEX IF NOT EXISTS idx_${branchPrefix}_parent ON ${branch.tableName}(parent_uri);`);
350
356
  childDDL.push(`CREATE INDEX IF NOT EXISTS idx_${branchPrefix}_did ON ${branch.tableName}(parent_did);`);
351
357
  for (const col of branch.columns) {
352
- if (col.sqlType === 'JSON' || col.sqlType === 'BLOB')
358
+ if (col.isJson || col.sqlType === 'BLOB')
353
359
  continue;
354
360
  childDDL.push(`CREATE INDEX IF NOT EXISTS idx_${branchPrefix}_${col.name} ON ${branch.tableName}(${col.name});`);
355
361
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../src/hydrate.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEzC,YAAY,EAAE,GAAG,EAAE,CAAA;AAInB,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IACf,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9B,EAAE,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;KAAE,CAAA;IACtE,UAAU,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7F,MAAM,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1G,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5F,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IAC3D,OAAO,EAAE,CACP,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,OAAO,EACZ,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,GAAG,eAAe,KAC9D,MAAM,GAAG,SAAS,CAAA;CACxB;AAID,4EAA4E;AAC5E,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAoC5E;AAID,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,cAAc,CA4BzG"}
1
+ {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../src/hydrate.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEzC,YAAY,EAAE,GAAG,EAAE,CAAA;AAInB,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IACf,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9B,EAAE,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;KAAE,CAAA;IACtE,UAAU,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7F,MAAM,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1G,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5F,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IAC3D,OAAO,EAAE,CACP,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,OAAO,EACZ,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,GAAG,eAAe,KAC9D,MAAM,GAAG,SAAS,CAAA;CACxB;AAID,4EAA4E;AAC5E,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAoC5E;AAID,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,cAAc,CAmBzG"}