@dbmason/postgres 0.1.0-alpha.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.
- package/README.md +11 -0
- package/dist/index.d.ts +216 -0
- package/dist/index.js +183 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +793 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/emitters/Table.emitter.ts","../src/emitters/Procedure.emitter.ts","../src/emitters/Function.emitter.ts","../src/emitters/View.emitter.ts","../src/emitters/Extension.emitter.ts","../src/emitters/Cron.emitter.ts","../src/emitters/Type.emitter.ts","../src/emitters/Role.emitter.ts","../src/emitters/Grant.emitter.ts","../src/emitters/Trigger.emitter.ts","../src/emitters/Policy.emitter.ts","../src/PostgresEmitter.ts","../src/PostgresDriver.ts","../src/introspectors/Table.introspector.ts","../src/introspectors/View.introspector.ts","../src/introspectors/Type.introspector.ts","../src/introspectors/Function.introspector.ts","../src/introspectors/Procedure.introspector.ts","../src/introspectors/Trigger.introspector.ts","../src/PostgresIntrospector.ts","../src/PostgresDialect.ts","../src/definitions/Policy.ts","../src/definitions/Procedure.ts","../src/definitions/Function.ts","../src/definitions/View.ts","../src/definitions/Type.ts","../src/definitions/Table.ts","../src/definitions/Trigger.ts","../src/definitions/Role.ts","../src/definitions/Grant.ts","../src/definitions/Extension.ts","../src/definitions/Cron.ts"],"sourcesContent":["import { TableNode, AnalyzedTableNode, ColumnNode, IndexNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: Table\n */\nexport class TableEmitter {\n static emit(action: string, node: AnalyzedTableNode, diff?: unknown): string {\n if (action === 'create') {\n return this.generateCreateTableSQL(node) + this.generateTableIndexes(node) + '\\n';\n } else if (action === 'alter' && diff) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const oldNode = (diff as any).old as TableNode;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // const newNode = (diff as any).new as TableNode;\n return this.generateAlterTableSQL(oldNode, node) + this.diffIndexes(oldNode, node) + '\\n';\n } else if (action === 'drop') {\n return `DROP TABLE \"${node.name}\" CASCADE;\\n`;\n }\n return '';\n }\n\n private static generateCreateTableSQL(node: AnalyzedTableNode): string {\n const columns = Object.values(node.columns).map(col => this.formatColumn(col)).join(',\\n ');\n const constraints = node.constraints.map(c => ` CONSTRAINT \"${c.name}\" ${c.definition}`).join(',\\n');\n \n const hasModule = node.module && node.module !== 'global';\n const fullName = hasModule ? `\"${node.module}\".\"${node.name}\"` : `\"${node.name}\"`;\n let sqlText = `-- Table: ${hasModule ? node.module + '.' : ''}${node.name}\\n`;\n sqlText += `CREATE TABLE ${fullName} (\\n ${columns}${constraints ? ',\\n' + constraints : ''}\\n);\\n`;\n\n if ((node.options as any)?.unlogged) {\n sqlText = sqlText.replace('CREATE TABLE', 'CREATE UNLOGGED TABLE');\n }\n return sqlText;\n }\n\n private static generateAlterTableSQL(oldNode: TableNode, newNode: AnalyzedTableNode): string {\n const changes: string[] = [];\n for (const [name, col] of Object.entries(newNode.columns)) {\n if (!oldNode.columns[name]) {\n changes.push(`ADD COLUMN \"${name}\" ${col.type}${col.notNull ? ' NOT NULL' : ''}`);\n }\n }\n if (changes.length === 0) return '';\n const hasModule = newNode.module && newNode.module !== 'global';\n const fullName = hasModule ? `\"${newNode.module}\".\"${newNode.name}\"` : `\"${newNode.name}\"`;\n return `ALTER TABLE ${fullName}\\n ${changes.join(',\\n ')};\\n`;\n }\n\n private static formatColumn(col: ColumnNode): string {\n let parts = [`\"${col.name}\" ${col.type}`];\n if (col.primaryKey) parts.push('PRIMARY KEY');\n else if (col.notNull) parts.push('NOT NULL');\n if (col.unique) parts.push('UNIQUE');\n if (col.default) parts.push(`DEFAULT ${col.default}`);\n if (col.references) {\n const hasRefModule = col.references.module && col.references.module !== 'global';\n const refTableName = hasRefModule ? `\"${col.references.module}\".\"${col.references.table}\"` : `\"${col.references.table}\"`;\n parts.push(`REFERENCES ${refTableName}(\"${col.references.column}\")`);\n if (col.references.onDelete) parts.push(`ON DELETE ${col.references.onDelete}`);\n }\n return parts.join(' ');\n }\n\n private static generateTableIndexes(node: AnalyzedTableNode): string {\n return node.indexes.map(idx => this.emitIndex({ ...idx, table: node.name, module: node.module })).join('');\n }\n\n private static emitIndex(node: IndexNode): string {\n const columns = node.columns.join(', ');\n const method = node.method ? ` USING ${node.method.toUpperCase()}` : '';\n const unique = node.unique ? 'UNIQUE ' : '';\n const where = node.where ? ` WHERE ${node.where}` : '';\n const expr = node.expression ? `(${node.expression})` : `(${columns})`;\n const hasModule = node.module && node.module !== 'global';\n const tableName = hasModule ? `\"${node.module}\".\"${node.table}\"` : `\"${node.table}\"`;\n return `CREATE ${unique}INDEX IF NOT EXISTS \"${node.name}\" ON ${tableName}${method} ${expr}${where};\\n`;\n }\n\n private static diffIndexes(oldNode: TableNode, newNode: AnalyzedTableNode): string {\n let sql = '';\n const oldIndexes = new Map(oldNode.indexes.map(idx => [idx.name, idx]));\n for (const newIdx of newNode.indexes) {\n if (!oldIndexes.has(newIdx.name)) {\n sql += this.emitIndex({ ...newIdx, table: newNode.name });\n }\n }\n return sql;\n }\n}\n","import { ProcedureNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: Procedure\n */\nexport class ProcedureEmitter {\n static emit(node: ProcedureNode): string {\n const argList = Object.entries(node.args)\n .map(([name, type]) => `\"${name}\" ${type}`)\n .join(', ');\n \n const hasModule = node.module && node.module !== 'global';\n const fullName = hasModule ? `\"${node.module}\".\"${node.name}\"` : `\"${node.name}\"`;\n \n return `CREATE OR REPLACE PROCEDURE ${fullName}(${argList})\\nAS $$\\n${node.body}\\n$$ LANGUAGE ${node.language};\\n\\n`;\n }\n}\n","import { FunctionNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: Function\n */\nexport class FunctionEmitter {\n static emit(node: FunctionNode): string {\n const argList = Object.entries(node.args)\n .map(([name, type]) => `\"${name}\" ${type}`)\n .join(', ');\n \n const hasModule = node.module && node.module !== 'global';\n const fullName = hasModule ? `\"${node.module}\".\"${node.name}\"` : `\"${node.name}\"`;\n \n return `CREATE OR REPLACE FUNCTION ${fullName}(${argList})\\nRETURNS ${node.returns} AS $$\\n${node.body}\\n$$ LANGUAGE ${node.language};\\n\\n`;\n }\n}\n","import { ViewNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: View\n */\nexport class ViewEmitter {\n static emit(node: ViewNode): string {\n const hasModule = node.module && node.module !== 'global';\n const fullName = hasModule ? `\"${node.module}\".\"${node.name}\"` : `\"${node.name}\"`;\n const kind = node.kind === 'MaterializedView' ? 'MATERIALIZED VIEW' : 'VIEW';\n \n return `CREATE OR REPLACE ${kind} ${fullName} AS\\n${node.query};\\n\\n`;\n }\n}\n","import { ExtensionNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: Extension\n */\nexport class ExtensionEmitter {\n static emit(node: ExtensionNode): string {\n let sql = `CREATE EXTENSION IF NOT EXISTS \"${node.name}\"`;\n if (node.schema) sql += ` SCHEMA \"${node.schema}\"`;\n if (node.version) sql += ` VERSION '${node.version}'`;\n return sql + ';\\n\\n';\n }\n}\n","import { CronNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: Cron\n */\nexport class CronEmitter {\n static emit(node: CronNode): string {\n return `SELECT cron.schedule('${node.name}', '${node.schedule}', $$ ${node.command} $$);\\n`;\n }\n}","import { TypeNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: Type\n */\nexport class TypeEmitter {\n static emit(node: TypeNode): string {\n let sql = '';\n if (node.type === 'enum') {\n const vals = (node.values || []).map(v => `'${v}'`).join(', ');\n sql = `CREATE TYPE \"${node.name}\" AS ENUM (${vals});`;\n } else {\n const fields = Object.entries(node.fields || {})\n .map(([name, type]) => ` \"${name}\" ${type}`)\n .join(',\\n');\n sql = `CREATE TYPE \"${node.name}\" AS (\\n${fields}\\n);`;\n }\n // Idiomatic Postgres \"IF NOT EXISTS\" for types\n return `DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = '${node.name}') THEN ${sql} END IF; END $$;\\n\\n`;\n }\n}\n","import { RoleNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: Role\n */\nexport class RoleEmitter {\n static emit(node: RoleNode): string {\n let options = '';\n if (node.options) {\n const opts = node.options;\n if (opts.superuser !== undefined) options += opts.superuser ? ' SUPERUSER' : ' NOSUPERUSER';\n if (opts.createdb !== undefined) options += opts.createdb ? ' CREATEDB' : ' NOCREATEDB';\n if (opts.createrole !== undefined) options += opts.createrole ? ' CREATEROLE' : ' NOCREATEROLE';\n if (opts.inherit !== undefined) options += opts.inherit ? ' INHERIT' : ' NOINHERIT';\n if (opts.login !== undefined) options += opts.login ? ' LOGIN' : ' NOLOGIN';\n if (opts.password) options += ` PASSWORD '${opts.password}'`;\n }\n return `DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = '${node.name}') THEN CREATE ROLE \"${node.name}\"${options}; END IF; END $$;\\n\\n`;\n }\n}\n","import { GrantNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: Grant\n */\nexport class GrantEmitter {\n static emit(node: GrantNode): string {\n return `GRANT ${node.privileges.join(', ')} ON ${node.on} \"${node.object}\" TO \"${node.to}\";\\n\\n`;\n }\n}\n","import { TriggerNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: Trigger\n */\nexport class TriggerEmitter {\n static emit(node: TriggerNode): string {\n return `CREATE TRIGGER \"${node.name}\"\\n ${node.when} ${node.events.join(' OR ')} ON \"${node.table}\"\\n FOR EACH ${node.forEach || 'ROW'}\\n EXECUTE FUNCTION ${node.functionName}(${(node.functionArgs || []).join(', ')});\\n\\n`;\n }\n}\n","import { PolicyNode } from '@dbmason/core';\n\n/**\n * Postgres SQL Emitter: Policy\n */\nexport class PolicyEmitter {\n static emit(node: PolicyNode): string {\n let sqlText = `-- Policy: ${node.name} on ${node.table}\\n`;\n if (node.method === 'rls') {\n sqlText += `ALTER TABLE \"${node.table}\" ENABLE ROW LEVEL SECURITY;\\n`;\n sqlText += `CREATE POLICY \"${node.name}\" ON \"${node.table}\" FOR ALL USING (${node.sql});\\n`;\n } else if (node.method === 'rbac' && node.rbac) {\n for (const perm of node.rbac) {\n sqlText += `GRANT ${perm.operations.join(', ')} ON TABLE \"${node.table}\" TO ${perm.roles.map(r => `\"${r}\"`).join(', ')};\\n`;\n }\n }\n return sqlText + '\\n';\n }\n}\n","import { \n ExecutionPlan, \n AnalyzedTableNode,\n ProcedureNode,\n FunctionNode,\n ViewNode,\n ExtensionNode,\n CronNode,\n TypeNode,\n RoleNode,\n GrantNode,\n TriggerNode,\n PolicyNode\n} from '@dbmason/core';\nimport { TableEmitter } from './emitters/Table.emitter';\nimport { ProcedureEmitter } from './emitters/Procedure.emitter';\nimport { FunctionEmitter } from './emitters/Function.emitter';\nimport { ViewEmitter } from './emitters/View.emitter';\nimport { ExtensionEmitter } from './emitters/Extension.emitter';\nimport { CronEmitter } from './emitters/Cron.emitter';\nimport { TypeEmitter } from './emitters/Type.emitter';\nimport { RoleEmitter } from './emitters/Role.emitter';\nimport { GrantEmitter } from './emitters/Grant.emitter';\nimport { TriggerEmitter } from './emitters/Trigger.emitter';\nimport { PolicyEmitter } from './emitters/Policy.emitter';\n\n/**\n * PostgresEmitter\n * \n * Orchestrates the conversion of an ExecutionPlan into Postgres SQL.\n */\nexport class PostgresEmitter {\n static emit(plan: ExecutionPlan): string {\n let sql = '-- Generated by @dbmason/postgres\\n\\n';\n\n // 1. Emit Schemas (Modules)\n const modules = new Set<string>();\n for (const step of plan) {\n if (step.node.module && step.node.module !== 'global') {\n modules.add(step.node.module);\n }\n }\n for (const mod of modules) {\n sql += `CREATE SCHEMA IF NOT EXISTS \"${mod}\";\\n`;\n }\n if (modules.size > 0) sql += '\\n';\n\n // 2. Emit Objects\n for (const step of plan) {\n switch (step.node.kind) {\n case 'Table':\n sql += TableEmitter.emit(step.action, step.node as any as AnalyzedTableNode, step.diff);\n break;\n case 'Procedure':\n sql += ProcedureEmitter.emit(step.node as any as ProcedureNode);\n break;\n case 'Function':\n sql += FunctionEmitter.emit(step.node as any as FunctionNode);\n break;\n case 'Extension':\n sql += ExtensionEmitter.emit(step.node as any as ExtensionNode);\n break;\n case 'Type':\n sql += TypeEmitter.emit(step.node as any as TypeNode);\n break;\n case 'View':\n case 'MaterializedView':\n sql += ViewEmitter.emit(step.node as any as ViewNode);\n break;\n case 'Cron':\n sql += CronEmitter.emit(step.node as any as CronNode);\n break;\n case 'Trigger':\n sql += TriggerEmitter.emit(step.node as any as TriggerNode);\n break;\n case 'Policy':\n sql += PolicyEmitter.emit(step.node as any as PolicyNode);\n break;\n case 'Role':\n sql += RoleEmitter.emit(step.node as any as RoleNode);\n break;\n case 'Grant':\n sql += GrantEmitter.emit(step.node as any as GrantNode);\n break;\n }\n }\n\n return sql;\n }\n}\n","import { Pool, PoolClient } from 'pg';\nimport { DbmasonDriver } from '@dbmason/core';\n\nexport class PostgresDriver implements DbmasonDriver {\n private pool: Pool;\n private client: PoolClient | null = null;\n\n constructor(connectionString: string) {\n this.pool = new Pool({ connectionString });\n }\n\n async connect(): Promise<void> {\n this.client = await this.pool.connect();\n }\n\n async close(): Promise<void> {\n if (this.client) {\n this.client.release();\n this.client = null;\n }\n await this.pool.end();\n }\n\n async query(sql: string, params?: any[]): Promise<unknown> {\n if (!this.client) throw new Error('Driver not connected');\n return this.client.query(sql, params);\n }\n\n async beginTransaction(): Promise<void> {\n await this.query('BEGIN');\n }\n\n async commitTransaction(): Promise<void> {\n await this.query('COMMIT');\n }\n\n async rollbackTransaction(): Promise<void> {\n await this.query('ROLLBACK');\n }\n}\n","import { TableNode, ColumnNode, IndexNode, ConstraintNode } from '@dbmason/core';\nimport { PostgresDriver } from '../PostgresDriver';\n\nexport class TableIntrospector {\n static async introspect(driver: PostgresDriver): Promise<Record<string, TableNode>> {\n const tableNodes: Record<string, TableNode> = {};\n\n // 1. Fetch Tables\n const tablesResult = await driver.query(`\n SELECT table_schema, table_name \n FROM information_schema.tables \n WHERE table_schema NOT IN ('information_schema', 'pg_catalog') \n AND table_type = 'BASE TABLE'\n `) as { rows: { table_schema: string; table_name: string }[] };\n\n for (const row of tablesResult.rows) {\n const schema = row.table_schema;\n const tableName = row.table_name;\n const columns = await this.introspectColumns(driver, schema, tableName);\n const indexes = await this.introspectIndexes(driver, schema, tableName);\n const constraints = await this.introspectConstraints(driver, schema, tableName);\n\n tableNodes[tableName] = {\n kind: 'Table',\n name: tableName,\n module: schema === 'public' ? 'global' : schema,\n columns,\n indexes,\n constraints, \n policies: [],\n triggers: []\n };\n }\n\n return tableNodes;\n }\n\n private static async introspectColumns(driver: PostgresDriver, schema: string, table: string): Promise<Record<string, ColumnNode>> {\n const columnsResult = await driver.query(`\n SELECT column_name, data_type, udt_name, is_nullable, column_default, is_identity\n FROM information_schema.columns \n WHERE table_schema = '${schema}' AND table_name = '${table}'\n `) as { rows: { column_name: string; data_type: string; udt_name: string; is_nullable: string; column_default: string; is_identity: string }[] };\n\n // Fetch PKs\n const pksResult = await driver.query(`\n SELECT kcu.column_name\n FROM information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n WHERE tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_schema = '${schema}' AND tc.table_name = '${table}'\n `) as { rows: { column_name: string }[] };\n const pks = new Set(pksResult.rows.map(r => r.column_name));\n\n const columns: Record<string, ColumnNode> = {};\n for (const row of columnsResult.rows) {\n let type = row.data_type === 'USER-DEFINED' ? row.udt_name : row.data_type;\n let defaultValue = row.column_default || undefined;\n \n // Detect SERIAL/BIGSERIAL\n if (defaultValue && defaultValue.includes('nextval')) {\n if (type.toLowerCase() === 'integer' || type.toLowerCase() === 'int4') {\n type = 'SERIAL';\n defaultValue = undefined;\n } else if (type.toLowerCase() === 'bigint' || type.toLowerCase() === 'int8') {\n type = 'BIGSERIAL';\n defaultValue = undefined;\n }\n }\n\n columns[row.column_name] = {\n kind: 'Column',\n name: row.column_name,\n type: type.toUpperCase(),\n notNull: row.is_nullable === 'NO',\n default: defaultValue,\n primaryKey: pks.has(row.column_name),\n // Map is_identity to options or similar if strict mapping exists, \n // but Dbmason defines identity/sequence via options usually.\n // For now, if we want to represent it, we might need to extend ColumnNode to support 'identity'.\n // Checking ColumnNode definition in Table.internal.ts:\n // options?: unknown;\n // We can put it there.\n options: row.is_identity === 'YES' ? { identity: true } : undefined\n };\n }\n return columns;\n }\n\n private static async introspectIndexes(driver: PostgresDriver, schema: string, table: string): Promise<IndexNode[]> {\n const result = await driver.query(`\n SELECT \n i.relname as index_name,\n a.attname as column_name,\n ix.indisunique as is_unique\n FROM pg_class t, pg_class i, pg_index ix, pg_attribute a, pg_namespace n\n WHERE t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relname = '${table}'\n AND n.oid = t.relnamespace\n AND n.nspname = '${schema}'\n ORDER BY i.relname\n `) as { rows: { index_name: string; column_name: string; is_unique: boolean }[] };\n\n // Group by index name\n const indexMap = new Map<string, IndexNode>();\n for (const row of result.rows) {\n if (!indexMap.has(row.index_name)) {\n indexMap.set(row.index_name, {\n kind: 'Index',\n name: row.index_name,\n table,\n columns: [],\n unique: row.is_unique\n });\n }\n indexMap.get(row.index_name)!.columns.push(row.column_name);\n }\n\n // Filter out PK indexes as they are implicit\n return Array.from(indexMap.values()).filter(idx => !idx.name.endsWith('_pkey'));\n }\n\n private static async introspectConstraints(driver: PostgresDriver, schema: string, table: string): Promise<ConstraintNode[]> {\n const constraints: ConstraintNode[] = [];\n\n // 1. Foreign Keys\n const fkResult = await driver.query(`\n SELECT\n tc.constraint_name,\n kcu.column_name,\n ccu.table_schema AS foreign_schema,\n ccu.table_name AS foreign_table,\n ccu.column_name AS foreign_column\n FROM information_schema.table_constraints AS tc\n JOIN information_schema.key_column_usage AS kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n JOIN information_schema.constraint_column_usage AS ccu\n ON ccu.constraint_name = tc.constraint_name\n AND ccu.table_schema = tc.table_schema\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_schema = '${schema}' AND tc.table_name = '${table}'\n `) as { rows: { constraint_name: string; column_name: string; foreign_schema: string; foreign_table: string; foreign_column: string }[] };\n\n for (const row of fkResult.rows) {\n // Construct definition string: FOREIGN KEY (col) REFERENCES table(col)\n const hasModule = row.foreign_schema && row.foreign_schema !== 'global' && row.foreign_schema !== 'public';\n const refTable = hasModule ? `\"${row.foreign_schema}\".\"${row.foreign_table}\"` : `\"${row.foreign_table}\"`;\n const definition = `FOREIGN KEY (\"${row.column_name}\") REFERENCES ${refTable}(\"${row.foreign_column}\")`;\n\n constraints.push({\n kind: 'Constraint',\n type: 'foreign_key',\n definition, \n name: row.constraint_name,\n table\n }); \n }\n\n // 2. Check Constraints\n const checkResult = await driver.query(`\n SELECT\n tc.constraint_name,\n cc.check_clause\n FROM information_schema.table_constraints tc\n JOIN information_schema.check_constraints cc\n ON tc.constraint_name = cc.constraint_name\n WHERE tc.constraint_type = 'CHECK'\n AND tc.table_schema = '${schema}' AND tc.table_name = '${table}'\n AND NOT (tc.constraint_name LIKE '%_not_null') -- Exclude internal NOT NULL checks\n `) as { rows: { constraint_name: string; check_clause: string }[] };\n\n for (const row of checkResult.rows) {\n constraints.push({\n kind: 'Constraint',\n type: 'check',\n name: row.constraint_name,\n table,\n definition: `CHECK (${row.check_clause})`\n });\n }\n\n // 3. Unique Constraints (Explicit constraints, not just unique indexes)\n const uniqueResult = await driver.query(`\n SELECT\n tc.constraint_name,\n kcu.column_name\n FROM information_schema.table_constraints AS tc\n JOIN information_schema.key_column_usage AS kcu\n ON tc.constraint_name = kcu.constraint_name\n AND tc.table_schema = kcu.table_schema\n WHERE tc.constraint_type = 'UNIQUE'\n AND tc.table_schema = '${schema}' AND tc.table_name = '${table}'\n `) as { rows: { constraint_name: string; column_name: string }[] };\n\n const uniqueMap = new Map<string, string[]>();\n for (const row of uniqueResult.rows) {\n if (!uniqueMap.has(row.constraint_name)) uniqueMap.set(row.constraint_name, []);\n uniqueMap.get(row.constraint_name)!.push(row.column_name);\n }\n\n for (const [name, columns] of uniqueMap) {\n constraints.push({\n kind: 'Constraint',\n type: 'unique',\n name,\n table,\n definition: `UNIQUE (${columns.map(c => `\"${c}\"`).join(', ')})`\n });\n }\n\n return constraints;\n }\n}\n","import { ViewNode, MaterializedViewNode } from '@dbmason/core';\nimport { PostgresDriver } from '../PostgresDriver';\n\nexport class ViewIntrospector {\n static async introspect(driver: PostgresDriver): Promise<{ views: Record<string, ViewNode>, materializedViews: Record<string, MaterializedViewNode> }> {\n const result = await driver.query(`\n SELECT\n n.nspname as schema,\n c.relname as name,\n pg_get_viewdef(c.oid, true) as definition,\n c.relkind as kind\n FROM pg_class c\n JOIN pg_namespace n ON n.oid = c.relnamespace\n WHERE c.relkind IN ('v', 'm')\n AND n.nspname NOT IN ('information_schema', 'pg_catalog')\n `) as { rows: { schema: string; name: string; definition: string; kind: string }[] };\n\n const views: Record<string, ViewNode> = {};\n const materializedViews: Record<string, MaterializedViewNode> = {};\n\n for (const row of result.rows) {\n const name = row.name;\n const module = row.schema === 'public' ? 'global' : row.schema;\n const query = row.definition.trim();\n \n if (row.kind === 'v') {\n views[name] = { kind: 'View', name, module, query };\n } else {\n materializedViews[name] = { kind: 'MaterializedView', name, module, query };\n }\n }\n\n return { views, materializedViews };\n }\n}\n","import { TypeNode } from '@dbmason/core';\nimport { PostgresDriver } from '../PostgresDriver';\n\nexport class TypeIntrospector {\n static async introspect(driver: PostgresDriver): Promise<Record<string, TypeNode>> {\n const result = await driver.query(`\n SELECT \n n.nspname as schema,\n t.typname as name,\n e.enumlabel as value\n FROM pg_type t\n JOIN pg_enum e ON t.oid = e.enumtypid\n JOIN pg_namespace n ON n.oid = t.typnamespace\n WHERE n.nspname NOT IN ('information_schema', 'pg_catalog')\n ORDER BY t.typname, e.enumsortorder\n `) as { rows: { schema: string; name: string; value: string }[] };\n\n const types: Record<string, TypeNode> = {};\n for (const row of result.rows) {\n const name = row.name;\n const module = row.schema === 'public' ? 'global' : row.schema;\n \n if (!types[name]) {\n types[name] = {\n kind: 'Type',\n name,\n module,\n type: 'enum',\n values: []\n };\n }\n types[name].values?.push(row.value);\n }\n return types;\n }\n}\n","import { FunctionNode } from '@dbmason/core';\nimport { PostgresDriver } from '../PostgresDriver';\n\nexport class FunctionIntrospector {\n static async introspect(driver: PostgresDriver): Promise<Record<string, FunctionNode>> {\n const result = await driver.query(`\n SELECT\n n.nspname as schema,\n p.proname as name,\n p.prosrc as body,\n l.lanname as language,\n pg_get_function_arguments(p.oid) as args,\n pg_get_function_result(p.oid) as returns\n FROM pg_proc p\n JOIN pg_namespace n ON n.oid = p.pronamespace\n JOIN pg_language l ON l.oid = p.prolang\n WHERE n.nspname NOT IN ('information_schema', 'pg_catalog')\n AND p.prokind = 'f'\n `) as { rows: { schema: string; name: string; body: string; language: string; args: string; returns: string }[] };\n\n const functions: Record<string, FunctionNode> = {};\n\n for (const row of result.rows) {\n const name = row.name;\n const module = row.schema === 'public' ? 'global' : row.schema;\n \n const args: Record<string, string> = {};\n if (row.args) {\n // heuristic parser for \"a integer, b text\" or \"integer, text\"\n const parts = row.args.split(',').map(p => p.trim());\n for (const part of parts) {\n const subParts = part.split(' ').map(s => s.trim()).filter(Boolean);\n if (subParts.length >= 2) {\n // Skip direction keywords if present\n if (['IN', 'OUT', 'INOUT', 'VARIADIC'].includes(subParts[0].toUpperCase())) {\n if (subParts.length >= 3) {\n args[subParts[1]] = subParts.slice(2).join(' ');\n }\n } else {\n args[subParts[0]] = subParts.slice(1).join(' ');\n }\n }\n }\n }\n \n const body = row.body; \n\n functions[name] = {\n kind: 'Function',\n name,\n module,\n args,\n returns: row.returns,\n language: row.language,\n body\n };\n }\n\n return functions;\n }\n}\n","import { ProcedureNode } from '@dbmason/core';\nimport { PostgresDriver } from '../PostgresDriver';\n\nexport class ProcedureIntrospector {\n static async introspect(driver: PostgresDriver): Promise<Record<string, ProcedureNode>> {\n const result = await driver.query(`\n SELECT\n n.nspname as schema,\n p.proname as name,\n p.prosrc as body,\n l.lanname as language,\n pg_get_function_arguments(p.oid) as args,\n pg_get_function_result(p.oid) as returns\n FROM pg_proc p\n JOIN pg_namespace n ON n.oid = p.pronamespace\n JOIN pg_language l ON l.oid = p.prolang\n WHERE n.nspname NOT IN ('information_schema', 'pg_catalog')\n AND p.prokind = 'p'\n `) as { rows: { schema: string; name: string; body: string; language: string; args: string; returns: string }[] };\n\n const procedures: Record<string, ProcedureNode> = {};\n\n for (const row of result.rows) {\n const name = row.name;\n const module = row.schema === 'public' ? 'global' : row.schema;\n \n const args: Record<string, string> = {};\n if (row.args) {\n const parts = row.args.split(',').map(p => p.trim());\n for (const part of parts) {\n const subParts = part.split(' ').map(s => s.trim()).filter(Boolean);\n if (subParts.length >= 2) {\n // Skip direction keywords if present\n if (['IN', 'OUT', 'INOUT', 'VARIADIC'].includes(subParts[0].toUpperCase())) {\n if (subParts.length >= 3) {\n args[subParts[1]] = subParts.slice(2).join(' ');\n }\n } else {\n args[subParts[0]] = subParts.slice(1).join(' ');\n }\n }\n }\n }\n \n const body = row.body; \n\n procedures[name] = {\n kind: 'Procedure',\n name,\n module,\n args,\n returns: row.returns,\n language: row.language,\n body\n };\n }\n\n return procedures;\n }\n}\n","import { TriggerNode } from '@dbmason/core';\nimport { PostgresDriver } from '../PostgresDriver';\n\nexport class TriggerIntrospector {\n static async introspect(driver: PostgresDriver): Promise<Record<string, TriggerNode>> {\n const result = await driver.query(`\n SELECT\n n.nspname as schema,\n t.tgname as name,\n c.relname as table_name,\n p.proname as function_name,\n t.tgtype as type,\n pg_get_triggerdef(t.oid) as definition\n FROM pg_trigger t\n JOIN pg_class c ON c.oid = t.tgrelid\n JOIN pg_namespace n ON n.oid = c.relnamespace\n JOIN pg_proc p ON p.oid = t.tgfoid\n WHERE n.nspname NOT IN ('information_schema', 'pg_catalog')\n AND NOT t.tgisinternal\n `) as { rows: { schema: string; name: string; table_name: string; function_name: string; type: number; definition: string }[] };\n\n const triggers: Record<string, TriggerNode> = {};\n\n for (const row of result.rows) {\n const name = row.name;\n const module = row.schema === 'public' ? 'global' : row.schema;\n \n // Extract timing and events from definition or type\n // pg_get_triggerdef returns comprehensive string e.g. \"CREATE TRIGGER ... BEFORE INSERT OR UPDATE ON ...\"\n // We can parse the definition or use bitmask in tgtype.\n // Simplified parsing of definition for now:\n const def = row.definition.toUpperCase();\n \n let when = 'BEFORE';\n if (def.includes('AFTER')) when = 'AFTER';\n else if (def.includes('INSTEAD OF')) when = 'INSTEAD OF';\n\n const events: string[] = [];\n if (def.includes('INSERT')) events.push('INSERT');\n if (def.includes('UPDATE')) events.push('UPDATE');\n if (def.includes('DELETE')) events.push('DELETE');\n if (def.includes('TRUNCATE')) events.push('TRUNCATE');\n\n const forEach = def.includes('FOR EACH ROW') ? 'ROW' : 'STATEMENT';\n \n // condition (WHEN clause) is harder to extract from regex without robust parser.\n // Leaving condition undefined for now.\n\n triggers[name] = {\n kind: 'Trigger',\n name,\n table: row.table_name,\n module,\n functionName: row.function_name,\n when,\n events,\n forEach\n };\n }\n\n return triggers;\n }\n}\n","import { DbmasonIntrospector, Snapshot } from '@dbmason/core';\nimport { PostgresDriver } from './PostgresDriver';\nimport { TableIntrospector } from './introspectors/Table.introspector';\nimport { ViewIntrospector } from './introspectors/View.introspector';\nimport { TypeIntrospector } from './introspectors/Type.introspector';\nimport { FunctionIntrospector } from './introspectors/Function.introspector';\nimport { ProcedureIntrospector } from './introspectors/Procedure.introspector';\nimport { TriggerIntrospector } from './introspectors/Trigger.introspector';\n\nexport class PostgresIntrospector implements DbmasonIntrospector {\n async introspect(connectionString: string): Promise<Snapshot> {\n const driver = new PostgresDriver(connectionString);\n await driver.connect();\n\n try {\n const tables = await TableIntrospector.introspect(driver);\n const { views, materializedViews } = await ViewIntrospector.introspect(driver);\n const types = await TypeIntrospector.introspect(driver);\n const functions = await FunctionIntrospector.introspect(driver);\n const procedures = await ProcedureIntrospector.introspect(driver);\n const triggers = await TriggerIntrospector.introspect(driver);\n \n return {\n tables,\n procedures,\n functions,\n views,\n materializedViews,\n types,\n crons: {},\n extensions: {},\n roles: {},\n grants: {},\n policies: {},\n triggers,\n hashes: {}\n };\n } finally {\n await driver.close();\n }\n }\n}\n\n","import { \n DbmasonDialect, \n DbmasonDriver,\n TableNode, \n AnalyzedTableNode, \n IndexNode,\n ExecutionPlan,\n DbmasonContext\n} from '@dbmason/core';\nimport { PostgresEmitter } from './PostgresEmitter';\nimport { PostgresDriver } from './PostgresDriver';\nimport { PostgresIntrospector } from './PostgresIntrospector';\n\nexport class PostgresDialect implements DbmasonDialect {\n readonly name = 'postgres';\n\n private ctx?: DbmasonContext;\n\n constructor() {}\n\n setContext(ctx: DbmasonContext) {\n this.ctx = ctx;\n }\n\n analyzeTable(table: TableNode): AnalyzedTableNode {\n const dependencies: string[] = [];\n\n // 1. Column Dependencies (References & Types)\n for (const col of Object.values(table.columns)) {\n if (col.references) {\n dependencies.push(`table:${col.references.table}`);\n }\n if (this.ctx && this.ctx.types.has(col.type)) {\n dependencies.push(`type:${col.type}`);\n }\n }\n\n // 2. RLS Coverage analysis (Postgres specific)\n const policies = this.ctx ? Array.from(this.ctx.policies.values())\n .filter(p => p.table === table.name || (p.module === table.module && p.table === table.name)) : [];\n \n const rlsEnabled = policies.length > 0;\n\n // 3. Normalize index names\n const analyzedIndexes = table.indexes.map((idx: IndexNode) => ({\n ...idx,\n name: idx.name || `idx_${table.name}_${idx.columns.join('_')}`\n }));\n\n return {\n ...table,\n indexes: analyzedIndexes,\n dependencies,\n rls: {\n enabled: rlsEnabled,\n policies\n }\n };\n }\n\n emit(plan: ExecutionPlan): string {\n return PostgresEmitter.emit(plan);\n }\n\n getDriver(connectionString: string): DbmasonDriver {\n return new PostgresDriver(connectionString);\n }\n \n introspector = new PostgresIntrospector();\n}\n","import { DbmasonContext, DbmasonScope } from '@dbmason/core';\nimport { internalDefinePolicy, PolicyNode, DbOperation } from '@dbmason/core';\nimport { TableReference, RoleReference } from '@dbmason/core';\n\nexport type PolicyKind = DbOperation;\n\nexport type RolePermissionInput = {\n roles: RoleReference[];\n allow: PolicyKind[];\n};\n\nexport interface PolicyInput {\n table?: TableReference;\n method: 'rls' | 'rbac';\n rbac?: RolePermissionInput[];\n sql?: string;\n}\n\nexport interface TablePolicyDefinitionInput extends PolicyInput {\n name: string;\n}\n\nexport function definePolicy(scope: DbmasonContext | DbmasonScope, name: string, input: PolicyInput): PolicyNode {\n return internalDefinePolicy(scope, name, input);\n}\n","import { DbmasonContext, DbmasonScope } from '@dbmason/core';\nimport { internalDefineProcedure } from '@dbmason/core';\nimport { ProcedureHandle, TypeReference, TableReference } from '@dbmason/core';\n\nexport interface PostgresProcedureInput {\n args?: Record<string, TypeReference>;\n returns?: TableReference | TypeReference | string;\n language?: 'plpgsql' | 'sql' | 'python' | 'javascript';\n body: string;\n}\n\nexport function defineProcedure(\n scope: DbmasonContext | DbmasonScope, \n name: string, \n input: PostgresProcedureInput\n): ProcedureHandle {\n return internalDefineProcedure(scope, name, input);\n}\n","import { DbmasonContext, DbmasonScope } from '@dbmason/core';\nimport { internalDefineFunction } from '@dbmason/core';\nimport { FunctionHandle, TypeReference, TableReference } from '@dbmason/core';\n\nexport interface PostgresFunctionInput {\n args?: Record<string, TypeReference>;\n returns?: TableReference | TypeReference | string;\n language?: 'plpgsql' | 'sql' | 'python' | 'javascript';\n body: string;\n}\n\nexport function defineFunction(\n scope: DbmasonContext | DbmasonScope, \n name: string, \n input: PostgresFunctionInput\n): FunctionHandle {\n return internalDefineFunction(scope, name, input);\n}\n","import { DbmasonContext, DbmasonScope } from '@dbmason/core';\nimport { internalDefineView, internalDefineMaterializedView } from '@dbmason/core';\n\nexport function defineView(\n scope: DbmasonContext | DbmasonScope, \n name: string, \n query: string\n): void {\n internalDefineView(scope, name, query);\n}\n\nexport function defineMaterializedView(\n scope: DbmasonContext | DbmasonScope, \n name: string, \n query: string\n): void {\n internalDefineMaterializedView(scope, name, query);\n}\n","import { DbmasonContext, DbmasonScope } from '@dbmason/core';\nimport { internalDefineEnum, internalDefineCompositeType } from '@dbmason/core';\nimport { TypeHandle, TypeReference } from '@dbmason/core';\n\nexport function defineEnum(scope: DbmasonContext | DbmasonScope, name: string, values: string[]): TypeHandle {\n return internalDefineEnum(scope, name, values);\n}\n\nexport function defineCompositeType(scope: DbmasonContext | DbmasonScope, name: string, fields: Record<string, TypeReference>): TypeHandle {\n return internalDefineCompositeType(scope, name, fields);\n}\n","import { DbmasonContext, DbmasonScope } from '@dbmason/core';\nimport { internalDefineTable, ColumnNode, IndexNode, ConstraintNode } from '@dbmason/core';\nimport { \n TableHandle, \n ColumnHandle, \n TableReference, \n RoleReference, \n resolveTable,\n resolveRole,\n ColumnReference,\n resolveColumn,\n ReferentialAction\n} from '@dbmason/core';\nimport { PolicyNode } from '@dbmason/core';\nimport { TablePolicyDefinitionInput } from './Policy';\nimport { TriggerNode } from '@dbmason/core';\nimport { TriggerInput } from './Trigger';\n\n/**\n * Postgres Index Helpers\n */\nexport type IndexMethod = 'btree' | 'hash' | 'gist' | 'gin' | 'brin' | 'spgist';\n\nfunction resolveColumns(refs: ColumnReference[]): string[] {\n return refs.map(ref => resolveColumn(ref).column);\n}\n\nexport const btree = (...columns: ColumnReference[]): IndexNode => ({\n kind: 'Index', name: '', table: '', columns: resolveColumns(columns), method: 'btree'\n});\nexport const gin = (...columns: ColumnReference[]): IndexNode => ({\n kind: 'Index', name: '', table: '', columns: resolveColumns(columns), method: 'gin'\n});\nexport const gist = (...columns: ColumnReference[]): IndexNode => ({\n kind: 'Index', name: '', table: '', columns: resolveColumns(columns), method: 'gist'\n});\nexport const hash = (...columns: ColumnReference[]): IndexNode => ({\n kind: 'Index', name: '', table: '', columns: resolveColumns(columns), method: 'hash'\n});\n\n/**\n * Postgres-specific Column Builder\n */\nexport class PostgresColumnBuilder {\n constructor(private readonly node: ColumnNode) {}\n\n primaryKey() {\n return new PostgresColumnBuilder({ ...this.node, primaryKey: true, notNull: true });\n }\n\n notNull() {\n return new PostgresColumnBuilder({ ...this.node, notNull: true });\n }\n\n unique() {\n return new PostgresColumnBuilder({ ...this.node, unique: true });\n }\n\n default(expr: string) {\n return new PostgresColumnBuilder({ ...this.node, default: expr });\n }\n\n defaultNow() {\n return new PostgresColumnBuilder({ ...this.node, default: 'NOW()' });\n }\n\n defaultUuid() {\n return new PostgresColumnBuilder({ ...this.node, default: 'gen_random_uuid()' });\n }\n\n check(expression: string) {\n return new PostgresColumnBuilder({ ...this.node, check: expression });\n }\n\n references(handle: ColumnReference, options?: { onDelete?: ReferentialAction, onUpdate?: ReferentialAction }): PostgresColumnBuilder;\n references(table: string, column: string, options?: { onDelete?: ReferentialAction, onUpdate?: ReferentialAction }): PostgresColumnBuilder;\n references(tableOrCol: ColumnReference | string, columnOrOptions?: string | { onDelete?: ReferentialAction, onUpdate?: ReferentialAction }, maybeOptions?: { onDelete?: ReferentialAction, onUpdate?: ReferentialAction }) {\n let tableName: string;\n let columnName: string;\n let options: { onDelete?: ReferentialAction, onUpdate?: ReferentialAction } | undefined;\n\n if (typeof tableOrCol !== 'string') {\n tableName = tableOrCol.tableName;\n columnName = tableOrCol.columnName;\n options = columnOrOptions as any;\n } else {\n tableName = tableOrCol;\n columnName = columnOrOptions as string;\n options = maybeOptions;\n }\n\n return new PostgresColumnBuilder({ \n ...this.node, \n references: {\n module: (tableOrCol as any).moduleName,\n table: tableName,\n column: columnName,\n onDelete: options?.onDelete,\n onUpdate: options?.onUpdate\n } \n });\n }\n\n build(): ColumnNode {\n return this.node;\n }\n}\n\n/**\n * Postgres Column Factories\n */\nexport const text = (name: string = '') => new PostgresColumnBuilder({ kind: 'Column', name, type: 'TEXT' });\nexport const uuid = (name: string = '') => new PostgresColumnBuilder({ kind: 'Column', name, type: 'UUID' });\nexport const timestamptz = (name: string = '') => new PostgresColumnBuilder({ kind: 'Column', name, type: 'TIMESTAMPTZ' });\nexport const timestamp = timestamptz;\nexport const jsonb = (name: string = '') => new PostgresColumnBuilder({ kind: 'Column', name, type: 'JSONB' });\nexport const integer = (name: string = '') => new PostgresColumnBuilder({ kind: 'Column', name, type: 'INTEGER' });\nexport const boolean = (name: string = '') => new PostgresColumnBuilder({ kind: 'Column', name, type: 'BOOLEAN' });\nexport const doublePrecision = (name: string = '') => new PostgresColumnBuilder({ kind: 'Column', name, type: 'DOUBLE PRECISION' });\nexport const decimal = (name: string = '') => new PostgresColumnBuilder({ kind: 'Column', name, type: 'DECIMAL' });\nexport const serial = (name: string = '') => new PostgresColumnBuilder({ kind: 'Column', name, type: 'SERIAL' });\nexport const bigserial = (name: string = '') => new PostgresColumnBuilder({ kind: 'Column', name, type: 'BIGSERIAL' });\n\nexport const custom = (type: unknown, name: string = '') => {\n const typeName = typeof type === 'string' ? type : \n ((type as any).moduleName && (type as any).moduleName !== 'global' ? `\"${(type as any).moduleName}\".\"${(type as any).typeName}\"` : (type as any).typeName);\n return new PostgresColumnBuilder({ kind: 'Column', name, type: typeName });\n};\n\nexport const enumType = custom;\n\nexport interface PostgresTableInput<C = Record<string, unknown>> {\n columns: C;\n constraints?: ConstraintNode[];\n indexes?: IndexNode[];\n policies?: (PolicyNode | TablePolicyDefinitionInput)[];\n triggers?: (TriggerNode | TriggerInput)[];\n migration?: 'safe' | 'destructive';\n options?: {\n unlogged?: boolean;\n inherits?: TableReference;\n realtime?: boolean | RoleReference[];\n };\n}\n\n/**\n * Postgres-specific defineTable\n */\nexport function defineTable<C extends Record<string, PostgresColumnBuilder | string | ColumnNode>>(\n scope: DbmasonContext | DbmasonScope,\n name: string,\n input: PostgresTableInput<C>\n): TableHandle & { [K in keyof C]: ColumnHandle } {\n // We add Postgres-specific processing here before calling internal\n const postgresInput = {\n ...input,\n options: input.options ? {\n ...input.options,\n inherits: input.options.inherits ? resolveTable(input.options.inherits) : undefined,\n realtime: Array.isArray(input.options.realtime) \n ? input.options.realtime.map(r => resolveRole(r)) \n : input.options.realtime\n } : undefined\n };\n\n return internalDefineTable(scope, name, postgresInput, (cols: C) => {\n const processed: Record<string, ColumnNode> = {};\n for (const [colName, colDef] of Object.entries(cols)) {\n if (colDef instanceof PostgresColumnBuilder) {\n const node = colDef.build();\n node.name = colName;\n processed[colName] = node;\n } else if (typeof colDef === 'string') {\n processed[colName] = { kind: 'Column', name: colName, type: colDef };\n } else {\n processed[colName] = { ...colDef as ColumnNode, name: colName };\n }\n }\n return processed;\n }) as TableHandle & { [K in keyof C]: ColumnHandle };\n}\n","import { DbmasonContext, DbmasonScope } from '@dbmason/core';\nimport { internalDefineTrigger, TriggerEvent, TriggerWhen, TriggerForEach } from '@dbmason/core';\nimport { ProcedureHandle, FunctionHandle } from '@dbmason/core';\n\nexport interface TriggerInput {\n when: TriggerWhen;\n events: TriggerEvent[];\n procedure: ProcedureHandle | FunctionHandle | string;\n forEach?: TriggerForEach;\n condition?: string;\n}\n\nexport function defineTrigger(\n scope: DbmasonContext | DbmasonScope, \n tableName: string, \n name: string, \n input: TriggerInput\n): void {\n internalDefineTrigger(scope, tableName, name, input);\n}\n","import { DbmasonContext, DbmasonScope } from '@dbmason/core';\nimport { internalDefineRole, RoleNode } from '@dbmason/core';\nimport { RoleHandle } from '@dbmason/core';\n\nexport function defineRole(scope: DbmasonContext | DbmasonScope, name: string, options?: RoleNode['options']): RoleHandle {\n return internalDefineRole(scope, name, options);\n}\n","import { DbmasonContext } from '@dbmason/core';\nimport { internalDefineGrant, GrantObjectKind } from '@dbmason/core';\nimport { TableReference, RoleReference } from '@dbmason/core';\n\nexport function defineGrant(\n ctx: DbmasonContext, \n to: RoleReference, \n privileges: string[], \n kind: GrantObjectKind, \n on: TableReference\n): void {\n return internalDefineGrant(ctx, to, privileges, kind, on);\n}\n","import { DbmasonContext, DbmasonScope } from '@dbmason/core';\nimport { internalDefineExtension } from '@dbmason/core';\n\nexport function defineExtension(scope: DbmasonContext | DbmasonScope, name: string, options?: { schema?: string, version?: string }): void {\n return internalDefineExtension(scope, name, options);\n}\n","import { DbmasonContext, DbmasonScope } from '@dbmason/core';\nimport { internalDefineCron } from '@dbmason/core';\n\nexport function defineCron(scope: DbmasonContext | DbmasonScope, name: string, schedule: string, command: string): void {\n return internalDefineCron(scope, name, schedule, command);\n}\n"],"names":["TableEmitter","action","node","diff","oldNode","columns","col","constraints","hasModule","fullName","sqlText","newNode","changes","name","parts","refTableName","idx","method","unique","where","expr","tableName","sql","oldIndexes","newIdx","ProcedureEmitter","argList","type","FunctionEmitter","ViewEmitter","ExtensionEmitter","CronEmitter","TypeEmitter","vals","v","fields","RoleEmitter","options","opts","GrantEmitter","TriggerEmitter","PolicyEmitter","perm","r","PostgresEmitter","plan","modules","step","mod","PostgresDriver","connectionString","Pool","params","TableIntrospector","driver","tableNodes","tablesResult","row","schema","indexes","table","columnsResult","pksResult","pks","defaultValue","result","indexMap","fkResult","refTable","definition","checkResult","uniqueResult","uniqueMap","c","ViewIntrospector","views","materializedViews","module","query","TypeIntrospector","types","FunctionIntrospector","functions","args","part","subParts","s","body","ProcedureIntrospector","procedures","TriggerIntrospector","triggers","def","when","events","forEach","PostgresIntrospector","tables","PostgresDialect","ctx","dependencies","policies","p","rlsEnabled","analyzedIndexes","definePolicy","scope","input","internalDefinePolicy","defineProcedure","internalDefineProcedure","defineFunction","internalDefineFunction","defineView","internalDefineView","defineMaterializedView","internalDefineMaterializedView","defineEnum","values","internalDefineEnum","defineCompositeType","internalDefineCompositeType","resolveColumns","refs","ref","resolveColumn","btree","gin","gist","hash","PostgresColumnBuilder","expression","tableOrCol","columnOrOptions","maybeOptions","columnName","text","uuid","timestamptz","timestamp","jsonb","integer","boolean","doublePrecision","decimal","serial","bigserial","custom","typeName","enumType","defineTable","postgresInput","resolveTable","resolveRole","internalDefineTable","cols","processed","colName","colDef","defineTrigger","internalDefineTrigger","defineRole","internalDefineRole","defineGrant","to","privileges","kind","on","internalDefineGrant","defineExtension","internalDefineExtension","defineCron","schedule","command","internalDefineCron"],"mappings":";;;AAKO,MAAMA,EAAa;AAAA,EACtB,OAAO,KAAKC,GAAgBC,GAAyBC,GAAwB;AACzE,QAAIF,MAAW;AACX,aAAO,KAAK,uBAAuBC,CAAI,IAAI,KAAK,qBAAqBA,CAAI,IAAI;AAAA;AACjF,QAAWD,MAAW,WAAWE,GAAM;AAEnC,YAAMC,IAAWD,EAAa;AAG9B,aAAO,KAAK,sBAAsBC,GAASF,CAAI,IAAI,KAAK,YAAYE,GAASF,CAAI,IAAI;AAAA;AAAA,IACzF,WAAWD,MAAW;AAClB,aAAO,eAAeC,EAAK,IAAI;AAAA;AAEnC,WAAO;AAAA,EACX;AAAA,EAEA,OAAe,uBAAuBA,GAAiC;AACnE,UAAMG,IAAU,OAAO,OAAOH,EAAK,OAAO,EAAE,IAAI,CAAAI,MAAO,KAAK,aAAaA,CAAG,CAAC,EAAE,KAAK;AAAA,GAAO,GACrFC,IAAcL,EAAK,YAAY,IAAI,OAAK,iBAAiB,EAAE,IAAI,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK;AAAA,CAAK,GAE9FM,IAAYN,EAAK,UAAUA,EAAK,WAAW,UAC3CO,IAAWD,IAAY,IAAIN,EAAK,MAAM,MAAMA,EAAK,IAAI,MAAM,IAAIA,EAAK,IAAI;AAC9E,QAAIQ,IAAU,aAAaF,IAAYN,EAAK,SAAS,MAAM,EAAE,GAAGA,EAAK,IAAI;AAAA;AACzE,WAAAQ,KAAW,gBAAgBD,CAAQ;AAAA,IAASJ,CAAO,GAAGE,IAAc;AAAA,IAAQA,IAAc,EAAE;AAAA;AAAA,GAEvFL,EAAK,SAAiB,aACvBQ,IAAUA,EAAQ,QAAQ,gBAAgB,uBAAuB,IAE9DA;AAAA,EACX;AAAA,EAEA,OAAe,sBAAsBN,GAAoBO,GAAoC;AACzF,UAAMC,IAAoB,CAAA;AAC1B,eAAW,CAACC,GAAMP,CAAG,KAAK,OAAO,QAAQK,EAAQ,OAAO;AACpD,MAAKP,EAAQ,QAAQS,CAAI,KACrBD,EAAQ,KAAK,eAAeC,CAAI,KAAKP,EAAI,IAAI,GAAGA,EAAI,UAAU,cAAc,EAAE,EAAE;AAGxF,WAAIM,EAAQ,WAAW,IAAU,KAG1B,eAFWD,EAAQ,UAAUA,EAAQ,WAAW,WAC1B,IAAIA,EAAQ,MAAM,MAAMA,EAAQ,IAAI,MAAM,IAAIA,EAAQ,IAAI,GACzD;AAAA,IAAOC,EAAQ,KAAK;AAAA,GAAO,CAAC;AAAA;AAAA,EAC9D;AAAA,EAEA,OAAe,aAAaN,GAAyB;AACjD,QAAIQ,IAAQ,CAAC,IAAIR,EAAI,IAAI,KAAKA,EAAI,IAAI,EAAE;AAKxC,QAJIA,EAAI,aAAYQ,EAAM,KAAK,aAAa,IACnCR,EAAI,WAASQ,EAAM,KAAK,UAAU,GACvCR,EAAI,UAAQQ,EAAM,KAAK,QAAQ,GAC/BR,EAAI,WAASQ,EAAM,KAAK,WAAWR,EAAI,OAAO,EAAE,GAChDA,EAAI,YAAY;AAEhB,YAAMS,IADeT,EAAI,WAAW,UAAUA,EAAI,WAAW,WAAW,WACpC,IAAIA,EAAI,WAAW,MAAM,MAAMA,EAAI,WAAW,KAAK,MAAM,IAAIA,EAAI,WAAW,KAAK;AACrH,MAAAQ,EAAM,KAAK,cAAcC,CAAY,KAAKT,EAAI,WAAW,MAAM,IAAI,GAC/DA,EAAI,WAAW,YAAUQ,EAAM,KAAK,aAAaR,EAAI,WAAW,QAAQ,EAAE;AAAA,IAClF;AACA,WAAOQ,EAAM,KAAK,GAAG;AAAA,EACzB;AAAA,EAEA,OAAe,qBAAqBZ,GAAiC;AACjE,WAAOA,EAAK,QAAQ,IAAI,OAAO,KAAK,UAAU,EAAE,GAAGc,GAAK,OAAOd,EAAK,MAAM,QAAQA,EAAK,OAAA,CAAQ,CAAC,EAAE,KAAK,EAAE;AAAA,EAC7G;AAAA,EAEA,OAAe,UAAUA,GAAyB;AAC9C,UAAMG,IAAUH,EAAK,QAAQ,KAAK,IAAI,GAChCe,IAASf,EAAK,SAAS,UAAUA,EAAK,OAAO,aAAa,KAAK,IAC/DgB,IAAShB,EAAK,SAAS,YAAY,IACnCiB,IAAQjB,EAAK,QAAQ,UAAUA,EAAK,KAAK,KAAK,IAC9CkB,IAAOlB,EAAK,aAAa,IAAIA,EAAK,UAAU,MAAM,IAAIG,CAAO,KAE7DgB,IADYnB,EAAK,UAAUA,EAAK,WAAW,WACnB,IAAIA,EAAK,MAAM,MAAMA,EAAK,KAAK,MAAM,IAAIA,EAAK,KAAK;AACjF,WAAO,UAAUgB,CAAM,wBAAwBhB,EAAK,IAAI,QAAQmB,CAAS,GAAGJ,CAAM,IAAIG,CAAI,GAAGD,CAAK;AAAA;AAAA,EACtG;AAAA,EAEA,OAAe,YAAYf,GAAoBO,GAAoC;AAC/E,QAAIW,IAAM;AACV,UAAMC,IAAa,IAAI,IAAInB,EAAQ,QAAQ,IAAI,CAAAY,MAAO,CAACA,EAAI,MAAMA,CAAG,CAAC,CAAC;AACtE,eAAWQ,KAAUb,EAAQ;AACzB,MAAKY,EAAW,IAAIC,EAAO,IAAI,MAC3BF,KAAO,KAAK,UAAU,EAAE,GAAGE,GAAQ,OAAOb,EAAQ,MAAM;AAGhE,WAAOW;AAAA,EACX;AACJ;ACpFO,MAAMG,EAAiB;AAAA,EAC1B,OAAO,KAAKvB,GAA6B;AACrC,UAAMwB,IAAU,OAAO,QAAQxB,EAAK,IAAI,EACnC,IAAI,CAAC,CAACW,GAAMc,CAAI,MAAM,IAAId,CAAI,KAAKc,CAAI,EAAE,EACzC,KAAK,IAAI;AAKd,WAAO,+BAHWzB,EAAK,UAAUA,EAAK,WAAW,WACpB,IAAIA,EAAK,MAAM,MAAMA,EAAK,IAAI,MAAM,IAAIA,EAAK,IAAI,GAEhC,IAAIwB,CAAO;AAAA;AAAA,EAAaxB,EAAK,IAAI;AAAA,cAAiBA,EAAK,QAAQ;AAAA;AAAA;AAAA,EACjH;AACJ;ACXO,MAAM0B,EAAgB;AAAA,EACzB,OAAO,KAAK1B,GAA4B;AACpC,UAAMwB,IAAU,OAAO,QAAQxB,EAAK,IAAI,EACnC,IAAI,CAAC,CAACW,GAAMc,CAAI,MAAM,IAAId,CAAI,KAAKc,CAAI,EAAE,EACzC,KAAK,IAAI;AAKd,WAAO,8BAHWzB,EAAK,UAAUA,EAAK,WAAW,WACpB,IAAIA,EAAK,MAAM,MAAMA,EAAK,IAAI,MAAM,IAAIA,EAAK,IAAI,GAEjC,IAAIwB,CAAO;AAAA,UAAcxB,EAAK,OAAO;AAAA,EAAWA,EAAK,IAAI;AAAA,cAAiBA,EAAK,QAAQ;AAAA;AAAA;AAAA,EACxI;AACJ;ACXO,MAAM2B,EAAY;AAAA,EACrB,OAAO,KAAK3B,GAAwB;AAEhC,UAAMO,IADYP,EAAK,UAAUA,EAAK,WAAW,WACpB,IAAIA,EAAK,MAAM,MAAMA,EAAK,IAAI,MAAM,IAAIA,EAAK,IAAI;AAG9E,WAAO,qBAFMA,EAAK,SAAS,qBAAqB,sBAAsB,MAEtC,IAAIO,CAAQ;AAAA,EAAQP,EAAK,KAAK;AAAA;AAAA;AAAA,EAClE;AACJ;ACRO,MAAM4B,EAAiB;AAAA,EAC1B,OAAO,KAAK5B,GAA6B;AACrC,QAAIoB,IAAM,mCAAmCpB,EAAK,IAAI;AACtD,WAAIA,EAAK,WAAQoB,KAAO,YAAYpB,EAAK,MAAM,MAC3CA,EAAK,YAASoB,KAAO,aAAapB,EAAK,OAAO,MAC3CoB,IAAM;AAAA;AAAA;AAAA,EACjB;AACJ;ACPO,MAAMS,EAAY;AAAA,EACrB,OAAO,KAAK7B,GAAwB;AAChC,WAAO,yBAAyBA,EAAK,IAAI,OAAOA,EAAK,QAAQ,SAASA,EAAK,OAAO;AAAA;AAAA,EACtF;AACJ;ACJO,MAAM8B,EAAY;AAAA,EACrB,OAAO,KAAK9B,GAAwB;AAChC,QAAIoB,IAAM;AACV,QAAIpB,EAAK,SAAS,QAAQ;AACtB,YAAM+B,KAAQ/B,EAAK,UAAU,CAAA,GAAI,IAAI,CAAAgC,MAAK,IAAIA,CAAC,GAAG,EAAE,KAAK,IAAI;AAC7D,MAAAZ,IAAM,gBAAgBpB,EAAK,IAAI,cAAc+B,CAAI;AAAA,IACrD,OAAO;AACH,YAAME,IAAS,OAAO,QAAQjC,EAAK,UAAU,CAAA,CAAE,EAC1C,IAAI,CAAC,CAACW,GAAMc,CAAI,MAAM,MAAMd,CAAI,KAAKc,CAAI,EAAE,EAC3C,KAAK;AAAA,CAAK;AACf,MAAAL,IAAM,gBAAgBpB,EAAK,IAAI;AAAA,EAAWiC,CAAM;AAAA;AAAA,IACpD;AAEA,WAAO,qEAAqEjC,EAAK,IAAI,WAAWoB,CAAG;AAAA;AAAA;AAAA,EACvG;AACJ;ACfO,MAAMc,EAAY;AAAA,EACrB,OAAO,KAAKlC,GAAwB;AAChC,QAAImC,IAAU;AACd,QAAInC,EAAK,SAAS;AACd,YAAMoC,IAAOpC,EAAK;AAClB,MAAIoC,EAAK,cAAc,WAAWD,KAAWC,EAAK,YAAY,eAAe,iBACzEA,EAAK,aAAa,WAAWD,KAAWC,EAAK,WAAW,cAAc,gBACtEA,EAAK,eAAe,WAAWD,KAAWC,EAAK,aAAa,gBAAgB,kBAC5EA,EAAK,YAAY,WAAWD,KAAWC,EAAK,UAAU,aAAa,eACnEA,EAAK,UAAU,WAAWD,KAAWC,EAAK,QAAQ,WAAW,aAC7DA,EAAK,aAAUD,KAAW,cAAcC,EAAK,QAAQ;AAAA,IAC7D;AACA,WAAO,sEAAsEpC,EAAK,IAAI,wBAAwBA,EAAK,IAAI,IAAImC,CAAO;AAAA;AAAA;AAAA,EACtI;AACJ;ACdO,MAAME,EAAa;AAAA,EACtB,OAAO,KAAKrC,GAAyB;AACjC,WAAO,SAASA,EAAK,WAAW,KAAK,IAAI,CAAC,OAAOA,EAAK,EAAE,KAAKA,EAAK,MAAM,SAASA,EAAK,EAAE;AAAA;AAAA;AAAA,EAC5F;AACJ;ACJO,MAAMsC,EAAe;AAAA,EACxB,OAAO,KAAKtC,GAA2B;AACnC,WAAO,mBAAmBA,EAAK,IAAI;AAAA,IAAQA,EAAK,IAAI,IAAIA,EAAK,OAAO,KAAK,MAAM,CAAC,QAAQA,EAAK,KAAK;AAAA,aAAiBA,EAAK,WAAW,KAAK;AAAA,qBAAwBA,EAAK,YAAY,KAAKA,EAAK,gBAAgB,CAAA,GAAI,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EAC7N;AACJ;ACJO,MAAMuC,EAAc;AAAA,EACvB,OAAO,KAAKvC,GAA0B;AAClC,QAAIQ,IAAU,cAAcR,EAAK,IAAI,OAAOA,EAAK,KAAK;AAAA;AACtD,QAAIA,EAAK,WAAW;AAChB,MAAAQ,KAAW,gBAAgBR,EAAK,KAAK;AAAA,GACrCQ,KAAW,kBAAkBR,EAAK,IAAI,SAASA,EAAK,KAAK,oBAAoBA,EAAK,GAAG;AAAA;AAAA,aAC9EA,EAAK,WAAW,UAAUA,EAAK;AACtC,iBAAWwC,KAAQxC,EAAK;AACpB,QAAAQ,KAAW,SAASgC,EAAK,WAAW,KAAK,IAAI,CAAC,cAAcxC,EAAK,KAAK,QAAQwC,EAAK,MAAM,IAAI,OAAK,IAAIC,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA;AAG9H,WAAOjC,IAAU;AAAA;AAAA,EACrB;AACJ;ACaO,MAAMkC,EAAgB;AAAA,EACzB,OAAO,KAAKC,GAA6B;AACrC,QAAIvB,IAAM;AAAA;AAAA;AAGV,UAAMwB,wBAAc,IAAA;AACpB,eAAWC,KAAQF;AACf,MAAIE,EAAK,KAAK,UAAUA,EAAK,KAAK,WAAW,YACzCD,EAAQ,IAAIC,EAAK,KAAK,MAAM;AAGpC,eAAWC,KAAOF;AACd,MAAAxB,KAAO,gCAAgC0B,CAAG;AAAA;AAE9C,IAAIF,EAAQ,OAAO,MAAGxB,KAAO;AAAA;AAG7B,eAAWyB,KAAQF;AACf,cAAQE,EAAK,KAAK,MAAA;AAAA,QACd,KAAK;AACD,UAAAzB,KAAOtB,EAAa,KAAK+C,EAAK,QAAQA,EAAK,MAAkCA,EAAK,IAAI;AACtF;AAAA,QACJ,KAAK;AACD,UAAAzB,KAAOG,EAAiB,KAAKsB,EAAK,IAA4B;AAC9D;AAAA,QACJ,KAAK;AACD,UAAAzB,KAAOM,EAAgB,KAAKmB,EAAK,IAA2B;AAC5D;AAAA,QACJ,KAAK;AACD,UAAAzB,KAAOQ,EAAiB,KAAKiB,EAAK,IAA4B;AAC9D;AAAA,QACJ,KAAK;AACD,UAAAzB,KAAOU,EAAY,KAAKe,EAAK,IAAuB;AACpD;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,UAAAzB,KAAOO,EAAY,KAAKkB,EAAK,IAAuB;AACpD;AAAA,QACJ,KAAK;AACD,UAAAzB,KAAOS,EAAY,KAAKgB,EAAK,IAAuB;AACpD;AAAA,QACJ,KAAK;AACD,UAAAzB,KAAOkB,EAAe,KAAKO,EAAK,IAA0B;AAC1D;AAAA,QACJ,KAAK;AACD,UAAAzB,KAAOmB,EAAc,KAAKM,EAAK,IAAyB;AACxD;AAAA,QACJ,KAAK;AACD,UAAAzB,KAAOc,EAAY,KAAKW,EAAK,IAAuB;AACpD;AAAA,QACJ,KAAK;AACD,UAAAzB,KAAOiB,EAAa,KAAKQ,EAAK,IAAwB;AACtD;AAAA,MAAA;AAIZ,WAAOzB;AAAA,EACX;AACJ;ACtFO,MAAM2B,EAAwC;AAAA,EAIjD,YAAYC,GAA0B;AAFtC,SAAQ,SAA4B,MAGhC,KAAK,OAAO,IAAIC,EAAK,EAAE,kBAAAD,GAAkB;AAAA,EAC7C;AAAA,EAEA,MAAM,UAAyB;AAC3B,SAAK,SAAS,MAAM,KAAK,KAAK,QAAA;AAAA,EAClC;AAAA,EAEA,MAAM,QAAuB;AACzB,IAAI,KAAK,WACL,KAAK,OAAO,QAAA,GACZ,KAAK,SAAS,OAElB,MAAM,KAAK,KAAK,IAAA;AAAA,EACpB;AAAA,EAEA,MAAM,MAAM5B,GAAa8B,GAAkC;AACvD,QAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,sBAAsB;AACxD,WAAO,KAAK,OAAO,MAAM9B,GAAK8B,CAAM;AAAA,EACxC;AAAA,EAEA,MAAM,mBAAkC;AACpC,UAAM,KAAK,MAAM,OAAO;AAAA,EAC5B;AAAA,EAEA,MAAM,oBAAmC;AACrC,UAAM,KAAK,MAAM,QAAQ;AAAA,EAC7B;AAAA,EAEA,MAAM,sBAAqC;AACvC,UAAM,KAAK,MAAM,UAAU;AAAA,EAC/B;AACJ;ACpCO,MAAMC,EAAkB;AAAA,EAC3B,aAAa,WAAWC,GAA4D;AAChF,UAAMC,IAAwC,CAAA,GAGxCC,IAAe,MAAMF,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,SAKvC;AAED,eAAWG,KAAOD,EAAa,MAAM;AACjC,YAAME,IAASD,EAAI,cACbpC,IAAYoC,EAAI,YAChBpD,IAAU,MAAM,KAAK,kBAAkBiD,GAAQI,GAAQrC,CAAS,GAChEsC,IAAU,MAAM,KAAK,kBAAkBL,GAAQI,GAAQrC,CAAS,GAChEd,IAAc,MAAM,KAAK,sBAAsB+C,GAAQI,GAAQrC,CAAS;AAE9E,MAAAkC,EAAWlC,CAAS,IAAI;AAAA,QACpB,MAAM;AAAA,QACN,MAAMA;AAAA,QACN,QAAQqC,MAAW,WAAW,WAAWA;AAAA,QACzC,SAAArD;AAAA,QACA,SAAAsD;AAAA,QACA,aAAApD;AAAA,QACA,UAAU,CAAA;AAAA,QACV,UAAU,CAAA;AAAA,MAAC;AAAA,IAEnB;AAEA,WAAOgD;AAAA,EACX;AAAA,EAEA,aAAqB,kBAAkBD,GAAwBI,GAAgBE,GAAoD;AAC/H,UAAMC,IAAgB,MAAMP,EAAO,MAAM;AAAA;AAAA;AAAA,oCAGbI,CAAM,uBAAuBE,CAAK;AAAA,SAC7D,GAGKE,IAAY,MAAMR,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qCAORI,CAAM,0BAA0BE,CAAK;AAAA,SACjE,GACKG,IAAM,IAAI,IAAID,EAAU,KAAK,IAAI,CAAAnB,MAAKA,EAAE,WAAW,CAAC,GAEpDtC,IAAsC,CAAA;AAC5C,eAAWoD,KAAOI,EAAc,MAAM;AAClC,UAAIlC,IAAO8B,EAAI,cAAc,iBAAiBA,EAAI,WAAWA,EAAI,WAC7DO,IAAeP,EAAI,kBAAkB;AAGzC,MAAIO,KAAgBA,EAAa,SAAS,SAAS,MAC3CrC,EAAK,kBAAkB,aAAaA,EAAK,YAAA,MAAkB,UAC3DA,IAAO,UACPqC,IAAe,WACRrC,EAAK,YAAA,MAAkB,YAAYA,EAAK,YAAA,MAAkB,YACjEA,IAAO,aACPqC,IAAe,UAIvB3D,EAAQoD,EAAI,WAAW,IAAI;AAAA,QACvB,MAAM;AAAA,QACN,MAAMA,EAAI;AAAA,QACV,MAAM9B,EAAK,YAAA;AAAA,QACX,SAAS8B,EAAI,gBAAgB;AAAA,QAC7B,SAASO;AAAA,QACT,YAAYD,EAAI,IAAIN,EAAI,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOnC,SAASA,EAAI,gBAAgB,QAAQ,EAAE,UAAU,OAAS;AAAA,MAAA;AAAA,IAElE;AACA,WAAOpD;AAAA,EACX;AAAA,EAEA,aAAqB,kBAAkBiD,GAAwBI,GAAgBE,GAAqC;AAChH,UAAMK,IAAS,MAAMX,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAWXM,CAAK;AAAA;AAAA,+BAELF,CAAM;AAAA;AAAA,SAE5B,GAGKQ,wBAAe,IAAA;AACrB,eAAWT,KAAOQ,EAAO;AACrB,MAAKC,EAAS,IAAIT,EAAI,UAAU,KAC5BS,EAAS,IAAIT,EAAI,YAAY;AAAA,QACzB,MAAM;AAAA,QACN,MAAMA,EAAI;AAAA,QACV,OAAAG;AAAA,QACA,SAAS,CAAA;AAAA,QACT,QAAQH,EAAI;AAAA,MAAA,CACf,GAELS,EAAS,IAAIT,EAAI,UAAU,EAAG,QAAQ,KAAKA,EAAI,WAAW;AAI9D,WAAO,MAAM,KAAKS,EAAS,OAAA,CAAQ,EAAE,OAAO,CAAAlD,MAAO,CAACA,EAAI,KAAK,SAAS,OAAO,CAAC;AAAA,EAClF;AAAA,EAEA,aAAqB,sBAAsBsC,GAAwBI,GAAgBE,GAA0C;AACzH,UAAMrD,IAAgC,CAAA,GAGhC4D,IAAW,MAAMb,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAeHI,CAAM,0BAA0BE,CAAK;AAAA,SACrE;AAED,eAAWH,KAAOU,EAAS,MAAM;AAG7B,YAAMC,IADYX,EAAI,kBAAkBA,EAAI,mBAAmB,YAAYA,EAAI,mBAAmB,WACrE,IAAIA,EAAI,cAAc,MAAMA,EAAI,aAAa,MAAM,IAAIA,EAAI,aAAa,KAC/FY,IAAa,iBAAiBZ,EAAI,WAAW,iBAAiBW,CAAQ,KAAKX,EAAI,cAAc;AAEnG,MAAAlD,EAAY,KAAK;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,YAAA8D;AAAA,QACA,MAAMZ,EAAI;AAAA,QACV,OAAAG;AAAA,MAAA,CACH;AAAA,IACL;AAGA,UAAMU,IAAc,MAAMhB,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAQNI,CAAM,0BAA0BE,CAAK;AAAA;AAAA,SAErE;AAED,eAAWH,KAAOa,EAAY;AACzB,MAAA/D,EAAY,KAAK;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAMkD,EAAI;AAAA,QACV,OAAAG;AAAA,QACA,YAAY,UAAUH,EAAI,YAAY;AAAA,MAAA,CACzC;AAIL,UAAMc,IAAe,MAAMjB,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCASPI,CAAM,0BAA0BE,CAAK;AAAA,SACrE,GAEKY,wBAAgB,IAAA;AACtB,eAAWf,KAAOc,EAAa;AAC3B,MAAKC,EAAU,IAAIf,EAAI,eAAe,KAAGe,EAAU,IAAIf,EAAI,iBAAiB,EAAE,GAC9Ee,EAAU,IAAIf,EAAI,eAAe,EAAG,KAAKA,EAAI,WAAW;AAG5D,eAAW,CAAC5C,GAAMR,CAAO,KAAKmE;AACzB,MAAAjE,EAAY,KAAK;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAAM;AAAA,QACA,OAAA+C;AAAA,QACA,YAAY,WAAWvD,EAAQ,IAAI,CAAAoE,MAAK,IAAIA,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,MAAA,CAC/D;AAGL,WAAOlE;AAAA,EACX;AACJ;ACxNO,MAAMmE,EAAiB;AAAA,EAC1B,aAAa,WAAWpB,GAA+H;AACnJ,UAAMW,IAAS,MAAMX,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUjC,GAEKqB,IAAkC,CAAA,GAClCC,IAA0D,CAAA;AAEhE,eAAWnB,KAAOQ,EAAO,MAAM;AAC3B,YAAMpD,IAAO4C,EAAI,MACXoB,IAASpB,EAAI,WAAW,WAAW,WAAWA,EAAI,QAClDqB,IAAQrB,EAAI,WAAW,KAAA;AAE7B,MAAIA,EAAI,SAAS,MACbkB,EAAM9D,CAAI,IAAI,EAAE,MAAM,QAAQ,MAAAA,GAAM,QAAAgE,GAAQ,OAAAC,EAAA,IAE5CF,EAAkB/D,CAAI,IAAI,EAAE,MAAM,oBAAoB,MAAAA,GAAM,QAAAgE,GAAQ,OAAAC,EAAA;AAAA,IAE5E;AAEA,WAAO,EAAE,OAAAH,GAAO,mBAAAC,EAAA;AAAA,EACpB;AACJ;AC/BO,MAAMG,EAAiB;AAAA,EAC1B,aAAa,WAAWzB,GAA2D;AAC/E,UAAMW,IAAS,MAAMX,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUjC,GAEK0B,IAAkC,CAAA;AACxC,eAAWvB,KAAOQ,EAAO,MAAM;AAC3B,YAAMpD,IAAO4C,EAAI,MACXoB,IAASpB,EAAI,WAAW,WAAW,WAAWA,EAAI;AAExD,MAAKuB,EAAMnE,CAAI,MACXmE,EAAMnE,CAAI,IAAI;AAAA,QACV,MAAM;AAAA,QACN,MAAAA;AAAA,QACA,QAAAgE;AAAA,QACA,MAAM;AAAA,QACN,QAAQ,CAAA;AAAA,MAAC,IAGjBG,EAAMnE,CAAI,EAAE,QAAQ,KAAK4C,EAAI,KAAK;AAAA,IACtC;AACA,WAAOuB;AAAA,EACX;AACJ;AChCO,MAAMC,EAAqB;AAAA,EAC9B,aAAa,WAAW3B,GAA+D;AACnF,UAAMW,IAAS,MAAMX,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAajC,GAEK4B,IAA0C,CAAA;AAEhD,eAAWzB,KAAOQ,EAAO,MAAM;AAC3B,YAAMpD,IAAO4C,EAAI,MACXoB,IAASpB,EAAI,WAAW,WAAW,WAAWA,EAAI,QAElD0B,IAA+B,CAAA;AACrC,UAAI1B,EAAI,MAAM;AAEV,cAAM3C,IAAQ2C,EAAI,KAAK,MAAM,GAAG,EAAE,IAAI,CAAA,MAAK,EAAE,KAAA,CAAM;AACnD,mBAAW2B,KAAQtE,GAAO;AACtB,gBAAMuE,IAAWD,EAAK,MAAM,GAAG,EAAE,IAAI,CAAAE,MAAKA,EAAE,KAAA,CAAM,EAAE,OAAO,OAAO;AAClE,UAAID,EAAS,UAAU,MAEf,CAAC,MAAM,OAAO,SAAS,UAAU,EAAE,SAASA,EAAS,CAAC,EAAE,YAAA,CAAa,IACjEA,EAAS,UAAU,MACnBF,EAAKE,EAAS,CAAC,CAAC,IAAIA,EAAS,MAAM,CAAC,EAAE,KAAK,GAAG,KAGlDF,EAAKE,EAAS,CAAC,CAAC,IAAIA,EAAS,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,QAG1D;AAAA,MACJ;AAEA,YAAME,IAAO9B,EAAI;AAEjB,MAAAyB,EAAUrE,CAAI,IAAI;AAAA,QACd,MAAM;AAAA,QACN,MAAAA;AAAA,QACA,QAAAgE;AAAA,QACA,MAAAM;AAAA,QACA,SAAS1B,EAAI;AAAA,QACb,UAAUA,EAAI;AAAA,QACd,MAAA8B;AAAA,MAAA;AAAA,IAER;AAEA,WAAOL;AAAA,EACX;AACJ;ACzDO,MAAMM,EAAsB;AAAA,EAC/B,aAAa,WAAWlC,GAAgE;AACpF,UAAMW,IAAS,MAAMX,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAajC,GAEKmC,IAA4C,CAAA;AAElD,eAAWhC,KAAOQ,EAAO,MAAM;AAC3B,YAAMpD,IAAO4C,EAAI,MACXoB,IAASpB,EAAI,WAAW,WAAW,WAAWA,EAAI,QAElD0B,IAA+B,CAAA;AACrC,UAAI1B,EAAI,MAAM;AACV,cAAM3C,IAAQ2C,EAAI,KAAK,MAAM,GAAG,EAAE,IAAI,CAAA,MAAK,EAAE,KAAA,CAAM;AACnD,mBAAW2B,KAAQtE,GAAO;AACtB,gBAAMuE,IAAWD,EAAK,MAAM,GAAG,EAAE,IAAI,CAAAE,MAAKA,EAAE,KAAA,CAAM,EAAE,OAAO,OAAO;AAClE,UAAID,EAAS,UAAU,MAEf,CAAC,MAAM,OAAO,SAAS,UAAU,EAAE,SAASA,EAAS,CAAC,EAAE,YAAA,CAAa,IACjEA,EAAS,UAAU,MACnBF,EAAKE,EAAS,CAAC,CAAC,IAAIA,EAAS,MAAM,CAAC,EAAE,KAAK,GAAG,KAGlDF,EAAKE,EAAS,CAAC,CAAC,IAAIA,EAAS,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,QAG1D;AAAA,MACJ;AAEA,YAAME,IAAO9B,EAAI;AAEjB,MAAAgC,EAAW5E,CAAI,IAAI;AAAA,QACf,MAAM;AAAA,QACN,MAAAA;AAAA,QACA,QAAAgE;AAAA,QACA,MAAAM;AAAA,QACA,SAAS1B,EAAI;AAAA,QACb,UAAUA,EAAI;AAAA,QACd,MAAA8B;AAAA,MAAA;AAAA,IAER;AAEA,WAAOE;AAAA,EACX;AACJ;ACxDO,MAAMC,EAAoB;AAAA,EAC7B,aAAa,WAAWpC,GAA8D;AAClF,UAAMW,IAAS,MAAMX,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcjC,GAEKqC,IAAwC,CAAA;AAE9C,eAAWlC,KAAOQ,EAAO,MAAM;AAC3B,YAAMpD,IAAO4C,EAAI,MACXoB,IAASpB,EAAI,WAAW,WAAW,WAAWA,EAAI,QAMlDmC,IAAMnC,EAAI,WAAW,YAAA;AAE3B,UAAIoC,IAAO;AACX,MAAID,EAAI,SAAS,OAAO,IAAGC,IAAO,UACzBD,EAAI,SAAS,YAAY,MAAGC,IAAO;AAE5C,YAAMC,IAAmB,CAAA;AACzB,MAAIF,EAAI,SAAS,QAAQ,KAAGE,EAAO,KAAK,QAAQ,GAC5CF,EAAI,SAAS,QAAQ,KAAGE,EAAO,KAAK,QAAQ,GAC5CF,EAAI,SAAS,QAAQ,KAAGE,EAAO,KAAK,QAAQ,GAC5CF,EAAI,SAAS,UAAU,KAAGE,EAAO,KAAK,UAAU;AAEpD,YAAMC,IAAUH,EAAI,SAAS,cAAc,IAAI,QAAQ;AAKvD,MAAAD,EAAS9E,CAAI,IAAI;AAAA,QACb,MAAM;AAAA,QACN,MAAAA;AAAA,QACA,OAAO4C,EAAI;AAAA,QACX,QAAAoB;AAAA,QACA,cAAcpB,EAAI;AAAA,QAClB,MAAAoC;AAAA,QACA,QAAAC;AAAA,QACA,SAAAC;AAAA,MAAA;AAAA,IAER;AAEA,WAAOJ;AAAA,EACX;AACJ;ACrDO,MAAMK,EAAoD;AAAA,EAC7D,MAAM,WAAW9C,GAA6C;AAC1D,UAAMI,IAAS,IAAIL,EAAeC,CAAgB;AAClD,UAAMI,EAAO,QAAA;AAEb,QAAI;AACA,YAAM2C,IAAS,MAAM5C,EAAkB,WAAWC,CAAM,GAClD,EAAE,OAAAqB,GAAO,mBAAAC,EAAA,IAAsB,MAAMF,EAAiB,WAAWpB,CAAM,GACvE0B,IAAQ,MAAMD,EAAiB,WAAWzB,CAAM,GAChD4B,IAAY,MAAMD,EAAqB,WAAW3B,CAAM,GACxDmC,IAAa,MAAMD,EAAsB,WAAWlC,CAAM,GAC1DqC,IAAW,MAAMD,EAAoB,WAAWpC,CAAM;AAE5D,aAAO;AAAA,QACH,QAAA2C;AAAA,QACA,YAAAR;AAAA,QACA,WAAAP;AAAA,QACA,OAAAP;AAAA,QACA,mBAAAC;AAAA,QACA,OAAAI;AAAA,QACA,OAAO,CAAA;AAAA,QACP,YAAY,CAAA;AAAA,QACZ,OAAO,CAAA;AAAA,QACP,QAAQ,CAAA;AAAA,QACR,UAAU,CAAA;AAAA,QACV,UAAAW;AAAA,QACA,QAAQ,CAAA;AAAA,MAAC;AAAA,IAEjB,UAAA;AACI,YAAMrC,EAAO,MAAA;AAAA,IACjB;AAAA,EACJ;AACJ;AC5BO,MAAM4C,GAA0C;AAAA,EAKnD,cAAc;AAJd,SAAS,OAAO,YAsDhB,KAAA,eAAe,IAAIF,EAAA;AAAA,EAlDJ;AAAA,EAEf,WAAWG,GAAqB;AAC5B,SAAK,MAAMA;AAAA,EACf;AAAA,EAEA,aAAavC,GAAqC;AAC9C,UAAMwC,IAAyB,CAAA;AAG/B,eAAW9F,KAAO,OAAO,OAAOsD,EAAM,OAAO;AACzC,MAAItD,EAAI,cACJ8F,EAAa,KAAK,SAAS9F,EAAI,WAAW,KAAK,EAAE,GAEjD,KAAK,OAAO,KAAK,IAAI,MAAM,IAAIA,EAAI,IAAI,KACvC8F,EAAa,KAAK,QAAQ9F,EAAI,IAAI,EAAE;AAK5C,UAAM+F,IAAW,KAAK,MAAM,MAAM,KAAK,KAAK,IAAI,SAAS,QAAQ,EAC5D,OAAO,CAAAC,MAAKA,EAAE,UAAU1C,EAAM,QAAS0C,EAAE,WAAW1C,EAAM,UAAU0C,EAAE,UAAU1C,EAAM,IAAK,IAAI,CAAA,GAE9F2C,IAAaF,EAAS,SAAS,GAG/BG,IAAkB5C,EAAM,QAAQ,IAAI,CAAC5C,OAAoB;AAAA,MAC3D,GAAGA;AAAA,MACH,MAAMA,EAAI,QAAQ,OAAO4C,EAAM,IAAI,IAAI5C,EAAI,QAAQ,KAAK,GAAG,CAAC;AAAA,IAAA,EAC9D;AAEF,WAAO;AAAA,MACH,GAAG4C;AAAA,MACH,SAAS4C;AAAA,MACT,cAAAJ;AAAA,MACA,KAAK;AAAA,QACD,SAASG;AAAA,QACT,UAAAF;AAAA,MAAA;AAAA,IACJ;AAAA,EAER;AAAA,EAEA,KAAKxD,GAA6B;AAC9B,WAAOD,EAAgB,KAAKC,CAAI;AAAA,EACpC;AAAA,EAEA,UAAUK,GAAyC;AAC/C,WAAO,IAAID,EAAeC,CAAgB;AAAA,EAC9C;AAGJ;AC/CO,SAASuD,GAAaC,GAAsC7F,GAAc8F,GAAgC;AAC7G,SAAOC,EAAqBF,GAAO7F,GAAM8F,CAAK;AAClD;ACbO,SAASE,GACZH,GACA7F,GACA8F,GACe;AACf,SAAOG,EAAwBJ,GAAO7F,GAAM8F,CAAK;AACrD;ACNO,SAASI,GACZL,GACA7F,GACA8F,GACc;AACd,SAAOK,EAAuBN,GAAO7F,GAAM8F,CAAK;AACpD;ACdO,SAASM,GACZP,GACA7F,GACAiE,GACI;AACJ,EAAAoC,EAAmBR,GAAO7F,GAAMiE,CAAK;AACzC;AAEO,SAASqC,GACZT,GACA7F,GACAiE,GACI;AACJ,EAAAsC,EAA+BV,GAAO7F,GAAMiE,CAAK;AACrD;ACbO,SAASuC,GAAWX,GAAsC7F,GAAcyG,GAA8B;AACzG,SAAOC,EAAmBb,GAAO7F,GAAMyG,CAAM;AACjD;AAEO,SAASE,GAAoBd,GAAsC7F,GAAcsB,GAAmD;AACvI,SAAOsF,EAA4Bf,GAAO7F,GAAMsB,CAAM;AAC1D;ACaA,SAASuF,EAAeC,GAAmC;AACvD,SAAOA,EAAK,IAAI,CAAAC,MAAOC,EAAcD,CAAG,EAAE,MAAM;AACpD;AAEO,MAAME,KAAQ,IAAIzH,OAA2C;AAAA,EAChE,MAAM;AAAA,EAAS,MAAM;AAAA,EAAI,OAAO;AAAA,EAAI,SAASqH,EAAerH,CAAO;AAAA,EAAG,QAAQ;AAClF,IACa0H,KAAM,IAAI1H,OAA2C;AAAA,EAC9D,MAAM;AAAA,EAAS,MAAM;AAAA,EAAI,OAAO;AAAA,EAAI,SAASqH,EAAerH,CAAO;AAAA,EAAG,QAAQ;AAClF,IACa2H,KAAO,IAAI3H,OAA2C;AAAA,EAC/D,MAAM;AAAA,EAAS,MAAM;AAAA,EAAI,OAAO;AAAA,EAAI,SAASqH,EAAerH,CAAO;AAAA,EAAG,QAAQ;AAClF,IACa4H,KAAO,IAAI5H,OAA2C;AAAA,EAC/D,MAAM;AAAA,EAAS,MAAM;AAAA,EAAI,OAAO;AAAA,EAAI,SAASqH,EAAerH,CAAO;AAAA,EAAG,QAAQ;AAClF;AAKO,MAAM6H,EAAsB;AAAA,EAC/B,YAA6BhI,GAAkB;AAAlB,SAAA,OAAAA;AAAA,EAAmB;AAAA,EAEhD,aAAa;AACT,WAAO,IAAIgI,EAAsB,EAAE,GAAG,KAAK,MAAM,YAAY,IAAM,SAAS,IAAM;AAAA,EACtF;AAAA,EAEA,UAAU;AACN,WAAO,IAAIA,EAAsB,EAAE,GAAG,KAAK,MAAM,SAAS,IAAM;AAAA,EACpE;AAAA,EAEA,SAAS;AACL,WAAO,IAAIA,EAAsB,EAAE,GAAG,KAAK,MAAM,QAAQ,IAAM;AAAA,EACnE;AAAA,EAEA,QAAQ9G,GAAc;AAClB,WAAO,IAAI8G,EAAsB,EAAE,GAAG,KAAK,MAAM,SAAS9G,GAAM;AAAA,EACpE;AAAA,EAEA,aAAa;AACT,WAAO,IAAI8G,EAAsB,EAAE,GAAG,KAAK,MAAM,SAAS,SAAS;AAAA,EACvE;AAAA,EAEA,cAAc;AACV,WAAO,IAAIA,EAAsB,EAAE,GAAG,KAAK,MAAM,SAAS,qBAAqB;AAAA,EACnF;AAAA,EAEA,MAAMC,GAAoB;AACtB,WAAO,IAAID,EAAsB,EAAE,GAAG,KAAK,MAAM,OAAOC,GAAY;AAAA,EACxE;AAAA,EAIA,WAAWC,GAAsCC,GAA2FC,GAA+E;AACvN,QAAIjH,GACAkH,GACAlG;AAEJ,WAAI,OAAO+F,KAAe,YACtB/G,IAAY+G,EAAW,WACvBG,IAAaH,EAAW,YACxB/F,IAAUgG,MAEVhH,IAAY+G,GACZG,IAAaF,GACbhG,IAAUiG,IAGP,IAAIJ,EAAsB;AAAA,MAC7B,GAAG,KAAK;AAAA,MACR,YAAY;AAAA,QACR,QAASE,EAAmB;AAAA,QAC5B,OAAO/G;AAAA,QACP,QAAQkH;AAAA,QACR,UAAUlG,GAAS;AAAA,QACnB,UAAUA,GAAS;AAAA,MAAA;AAAA,IACvB,CACH;AAAA,EACL;AAAA,EAEA,QAAoB;AAChB,WAAO,KAAK;AAAA,EAChB;AACJ;AAKO,MAAMmG,KAAO,CAAC3H,IAAe,OAAO,IAAIqH,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAM,OAAA,CAAQ,GAC9F4H,KAAO,CAAC5H,IAAe,OAAO,IAAIqH,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAM,OAAA,CAAQ,GAC9F6H,IAAc,CAAC7H,IAAe,OAAO,IAAIqH,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAM,cAAA,CAAe,GAC5G8H,KAAYD,GACZE,KAAQ,CAAC/H,IAAe,OAAO,IAAIqH,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAM,QAAA,CAAS,GAChGgI,KAAU,CAAChI,IAAe,OAAO,IAAIqH,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAM,UAAA,CAAW,GACpGiI,KAAU,CAACjI,IAAe,OAAO,IAAIqH,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAM,UAAA,CAAW,GACpGkI,KAAkB,CAAClI,IAAe,OAAO,IAAIqH,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAM,mBAAA,CAAoB,GACrHmI,KAAU,CAACnI,IAAe,OAAO,IAAIqH,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAM,UAAA,CAAW,GACpGoI,KAAS,CAACpI,IAAe,OAAO,IAAIqH,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAM,SAAA,CAAU,GAClGqI,KAAY,CAACrI,IAAe,OAAO,IAAIqH,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAM,YAAA,CAAa,GAExGsI,IAAS,CAACxH,GAAed,IAAe,OAAO;AACxD,QAAMuI,IAAW,OAAOzH,KAAS,WAAWA,IACtCA,EAAa,cAAeA,EAAa,eAAe,WAAW,IAAKA,EAAa,UAAU,MAAOA,EAAa,QAAQ,MAAOA,EAAa;AACrJ,SAAO,IAAIuG,EAAsB,EAAE,MAAM,UAAU,MAAArH,GAAM,MAAMuI,GAAU;AAC7E,GAEaC,KAAWF;AAmBjB,SAASG,GACZ5C,GACA7F,GACA8F,GAC8C;AAE9C,QAAM4C,IAAgB;AAAA,IAClB,GAAG5C;AAAA,IACH,SAASA,EAAM,UAAU;AAAA,MACrB,GAAGA,EAAM;AAAA,MACT,UAAUA,EAAM,QAAQ,WAAW6C,EAAa7C,EAAM,QAAQ,QAAQ,IAAI;AAAA,MAC1E,UAAU,MAAM,QAAQA,EAAM,QAAQ,QAAQ,IACxCA,EAAM,QAAQ,SAAS,IAAI,CAAAhE,MAAK8G,EAAY9G,CAAC,CAAC,IAC9CgE,EAAM,QAAQ;AAAA,IAAA,IACpB;AAAA,EAAA;AAGR,SAAO+C,EAAoBhD,GAAO7F,GAAM0I,GAAe,CAACI,MAAY;AAChE,UAAMC,IAAwC,CAAA;AAC9C,eAAW,CAACC,GAASC,CAAM,KAAK,OAAO,QAAQH,CAAI;AAC/C,UAAIG,aAAkB5B,GAAuB;AACzC,cAAMhI,IAAO4J,EAAO,MAAA;AACpB,QAAA5J,EAAK,OAAO2J,GACZD,EAAUC,CAAO,IAAI3J;AAAA,MACzB,MAAA,CAAW,OAAO4J,KAAW,WACzBF,EAAUC,CAAO,IAAI,EAAE,MAAM,UAAU,MAAMA,GAAS,MAAMC,EAAA,IAE5DF,EAAUC,CAAO,IAAI,EAAE,GAAGC,GAAsB,MAAMD,EAAA;AAG9D,WAAOD;AAAA,EACX,CAAC;AACL;ACxKO,SAASG,GACZrD,GACArF,GACAR,GACA8F,GACI;AACJ,EAAAqD,EAAsBtD,GAAOrF,GAAWR,GAAM8F,CAAK;AACvD;ACfO,SAASsD,GAAWvD,GAAsC7F,GAAcwB,GAA2C;AACtH,SAAO6H,EAAmBxD,GAAO7F,GAAMwB,CAAO;AAClD;ACFO,SAAS8H,GACZhE,GACAiE,GACAC,GACAC,GACAC,GACI;AACJ,SAAOC,EAAoBrE,GAAKiE,GAAIC,GAAYC,GAAMC,CAAE;AAC5D;ACTO,SAASE,GAAgB/D,GAAsC7F,GAAcwB,GAAuD;AACvI,SAAOqI,EAAwBhE,GAAO7F,GAAMwB,CAAO;AACvD;ACFO,SAASsI,GAAWjE,GAAsC7F,GAAc+J,GAAkBC,GAAuB;AACpH,SAAOC,EAAmBpE,GAAO7F,GAAM+J,GAAUC,CAAO;AAC5D;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dbmason/postgres",
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
|
+
"description": "Postgres Dialect for Dbmason.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"README.md"
|
|
10
|
+
],
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "vite build",
|
|
16
|
+
"test": "vitest run",
|
|
17
|
+
"clean": "rm -rf dist"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@dbmason/core": "0.1.0-alpha.1",
|
|
21
|
+
"pg": "^8.18.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^20.0.0",
|
|
25
|
+
"@types/pg": "^8.16.0",
|
|
26
|
+
"typescript": "^5.9.3",
|
|
27
|
+
"vite": "^7.3.1",
|
|
28
|
+
"vite-plugin-dts": "^4.5.4",
|
|
29
|
+
"vitest": "^4.0.18"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=18.0.0"
|
|
33
|
+
}
|
|
34
|
+
}
|