@dbmason/core 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 +17 -0
- package/dist/DbmasonContext-Baf-v6-B.mjs +31 -0
- package/dist/DbmasonContext-Baf-v6-B.mjs.map +1 -0
- package/dist/DbmasonContext-Dw0gG7AV.js +2 -0
- package/dist/DbmasonContext-Dw0gG7AV.js.map +1 -0
- package/dist/ast/nodes.d.ts +192 -0
- package/dist/ast/nodes.d.ts.map +1 -0
- package/dist/cli/commands/client.d.ts +2 -0
- package/dist/cli/commands/client.d.ts.map +1 -0
- package/dist/cli/commands/generate.d.ts +2 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/migrate.d.ts +2 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/pull.d.ts +2 -0
- package/dist/cli/commands/pull.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +81 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/index.mjs +929 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/client/generateClientMetadata.d.ts +8 -0
- package/dist/client/generateClientMetadata.d.ts.map +1 -0
- package/dist/client/standaloneGenerator.d.ts +5 -0
- package/dist/client/standaloneGenerator.d.ts.map +1 -0
- package/dist/compiler/DbmasonContext.d.ts +74 -0
- package/dist/compiler/DbmasonContext.d.ts.map +1 -0
- package/dist/compiler/Dialect.d.ts +25 -0
- package/dist/compiler/Dialect.d.ts.map +1 -0
- package/dist/compiler/Introspector.d.ts +5 -0
- package/dist/compiler/Introspector.d.ts.map +1 -0
- package/dist/compiler/SnapshotBuilder.d.ts +5 -0
- package/dist/compiler/SnapshotBuilder.d.ts.map +1 -0
- package/dist/compiler/analyzers/dependency.resolver.d.ts +11 -0
- package/dist/compiler/analyzers/dependency.resolver.d.ts.map +1 -0
- package/dist/compiler/analyzers/schema.analyzer.d.ts +11 -0
- package/dist/compiler/analyzers/schema.analyzer.d.ts.map +1 -0
- package/dist/compiler/compile.d.ts +18 -0
- package/dist/compiler/compile.d.ts.map +1 -0
- package/dist/compiler/diff.d.ts +25 -0
- package/dist/compiler/diff.d.ts.map +1 -0
- package/dist/definitions/Cron.d.ts +2 -0
- package/dist/definitions/Cron.d.ts.map +1 -0
- package/dist/definitions/Extension.d.ts +2 -0
- package/dist/definitions/Extension.d.ts.map +1 -0
- package/dist/definitions/Function.d.ts +2 -0
- package/dist/definitions/Function.d.ts.map +1 -0
- package/dist/definitions/Grant.d.ts +2 -0
- package/dist/definitions/Grant.d.ts.map +1 -0
- package/dist/definitions/Module.d.ts +2 -0
- package/dist/definitions/Module.d.ts.map +1 -0
- package/dist/definitions/Policy.d.ts +2 -0
- package/dist/definitions/Policy.d.ts.map +1 -0
- package/dist/definitions/Procedure.d.ts +2 -0
- package/dist/definitions/Procedure.d.ts.map +1 -0
- package/dist/definitions/Role.d.ts +2 -0
- package/dist/definitions/Role.d.ts.map +1 -0
- package/dist/definitions/Table.d.ts +4 -0
- package/dist/definitions/Table.d.ts.map +1 -0
- package/dist/definitions/Trigger.d.ts +2 -0
- package/dist/definitions/Trigger.d.ts.map +1 -0
- package/dist/definitions/Type.d.ts +2 -0
- package/dist/definitions/Type.d.ts.map +1 -0
- package/dist/definitions/View.d.ts +3 -0
- package/dist/definitions/View.d.ts.map +1 -0
- package/dist/definitions/collectors/Cron.internal.d.ts +6 -0
- package/dist/definitions/collectors/Cron.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Extension.internal.d.ts +9 -0
- package/dist/definitions/collectors/Extension.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Function.internal.d.ts +8 -0
- package/dist/definitions/collectors/Function.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Grant.internal.d.ts +8 -0
- package/dist/definitions/collectors/Grant.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Policy.internal.d.ts +7 -0
- package/dist/definitions/collectors/Policy.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Procedure.internal.d.ts +8 -0
- package/dist/definitions/collectors/Procedure.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Role.internal.d.ts +8 -0
- package/dist/definitions/collectors/Role.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Table.internal.d.ts +23 -0
- package/dist/definitions/collectors/Table.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Trigger.internal.d.ts +5 -0
- package/dist/definitions/collectors/Trigger.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/Type.internal.d.ts +11 -0
- package/dist/definitions/collectors/Type.internal.d.ts.map +1 -0
- package/dist/definitions/collectors/View.internal.d.ts +10 -0
- package/dist/definitions/collectors/View.internal.d.ts.map +1 -0
- package/dist/definitions/handles.d.ts +121 -0
- package/dist/definitions/handles.d.ts.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +353 -0
- package/dist/index.mjs.map +1 -0
- package/dist/templates/cli/auth.cli.template.ts +95 -0
- package/dist/templates/cli/minimal.cli.template.ts +5 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +38 -0
- package/templates/cli/auth.cli.template.ts +95 -0
- package/templates/cli/minimal.cli.template.ts +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/cli/commands/init.ts","../../src/compiler/analyzers/dependency.resolver.ts","../../src/compiler/analyzers/schema.analyzer.ts","../../src/compiler/diff.ts","../../src/compiler/compile.ts","../../src/client/generateClientMetadata.ts","../../src/compiler/SnapshotBuilder.ts","../../src/cli/commands/generate.ts","../../src/cli/commands/migrate.ts","../../src/client/standaloneGenerator.ts","../../src/cli/commands/client.ts","../../src/cli/commands/pull.ts","../../src/cli/index.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\n\nexport function initCommand(projectName: string, options: any) {\n const projectPath = path.resolve(process.cwd(), projectName);\n if (fs.existsSync(projectPath)) {\n console.error(`Directory ${projectName} already exists.`);\n process.exit(1);\n }\n\n fs.mkdirSync(projectPath);\n const srcDir = path.join(projectPath, 'src');\n fs.mkdirSync(srcDir);\n fs.mkdirSync(path.join(projectPath, 'migrations'));\n const dbmasonDir = path.join(projectPath, 'dbmason');\n fs.mkdirSync(dbmasonDir);\n\n const templatesDir = path.resolve(__dirname, '../../templates/cli');\n const templateName = (options.template || 'auth').toLowerCase();\n \n // Check if it's a valid template file name format or just a name\n const templateFileName = templateName.endsWith('.ts') ? templateName : `${templateName}.ts`;\n const templatePath = path.join(templatesDir, templateFileName);\n\n if (!fs.existsSync(templatePath)) {\n console.error(`Template '${templateName}' not found in ${templatesDir}`);\n process.exit(1);\n }\n\n const schemaContent = fs.readFileSync(templatePath, 'utf8');\n\n fs.writeFileSync(path.join(dbmasonDir, 'schema.ts'), schemaContent.trim());\n\n const helpersContent = `import { DbmasonContext, definePolicy, DbOperation, TableReference } from '@dbmason/postgres';\n\n/**\n * RLS Helper: Restricts WHICH ROWS a user can see.\n */\nexport function defineRLSPolicy(ctx: DbmasonContext, table: TableReference, name: string) {\n definePolicy(table, name, {\n method: 'rls',\n sql: \\\\\\`(SELECT role FROM users WHERE id = current_setting('app.user_id')::uuid) = 'admin'\\\\\\`\n });\n}\n\n/**\n * RBAC Helper: Restricts WHICH ACTIONS (SELECT, INSERT, etc.) a role can perform.\n */\nexport function defineRBACPolicy(ctx: DbmasonContext, table: TableReference, role: string, operations: DbOperation[]) {\n definePolicy(table, \\\\\\`\\\\\\${role}_rbac\\\\\\`, {\n method: 'rbac',\n rbac: [{ roles: [role], operations }]\n });\n}\n`;\n fs.writeFileSync(path.join(dbmasonDir, 'helpers.ts'), helpersContent.trim());\n\n const indexContent = `import { DbmasonContext } from '@dbmason/core';\nimport { PostgresDialect } from '@dbmason/postgres';\nimport { setupSchema } from './schema';\n\nconst ctx = new DbmasonContext();\n\n// Setup Authentication (Tables, Procedures, Crons)\nsetupSchema(ctx);\n\nexport const dialect = new PostgresDialect(ctx);\nexport default ctx;\n`;\n fs.writeFileSync(path.join(dbmasonDir, 'index.ts'), indexContent.trim());\n\n const dockerComposeContent = `\nservices:\n db:\n image: postgres:latest\n environment:\n POSTGRES_USER: postgres\n POSTGRES_PASSWORD: postgres\n POSTGRES_DB: postgres\n ports:\n - \"5432:5432\"\n volumes:\n - pgdata:/var/lib/postgresql/data\n\nvolumes:\n pgdata:\n`;\n fs.writeFileSync(path.join(projectPath, 'docker-compose.yml'), dockerComposeContent.trim());\n\n const envContent = `DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres`;\n fs.writeFileSync(path.join(projectPath, '.env'), envContent.trim());\n\n const tsConfig = {\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"CommonJS\",\n \"moduleResolution\": \"node\",\n \"esModuleInterop\": true,\n \"resolveJsonModule\": true,\n \"skipLibCheck\": true,\n \"strict\": true,\n \"outDir\": \"./dist\",\n \"rootDir\": \"./\"\n }\n };\n fs.writeFileSync(path.join(projectPath, 'tsconfig.json'), JSON.stringify(tsConfig, null, 2));\n\n const packageJson = {\n \"name\": projectName,\n \"version\": \"1.0.0\",\n \"scripts\": {\n \"generate\": \"dbmason generate\",\n \"migrate\": \"dbmason migrate\",\n \"db:up\": \"docker compose up -d\",\n \"db:down\": \"docker compose down\"\n },\n \"dependencies\": {\n \"@dbmason/core\": \"file:../packages/core\",\n \"@dbmason/postgres\": \"file:../packages/postgres\",\n \"pg\": \"^8.11.0\",\n \"dotenv\": \"^16.3.1\"\n },\n \"devDependencies\": {\n \"typescript\": \"^5.0.0\",\n \"ts-node\": \"^10.9.1\"\n }\n };\n fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2));\n\n console.log(`Dbmason project ${projectName} initialized with default Auth template.`);\n \n try {\n console.log('Installing dependencies...');\n execSync('npm install', { cwd: projectPath, stdio: 'inherit' });\n console.log('Dependencies installed successfully.');\n } catch (error) {\n console.error('Failed to install dependencies:', error);\n }\n}\n","import { TableNode, ColumnNode } from '../../ast/nodes';\nimport { DbmasonContext } from '../DbmasonContext';\n\n/**\n * DependencyResolver\n */\nexport class DependencyResolver {\n constructor(private ctx: DbmasonContext) {}\n\n resolveOrder(): string[] {\n const order: string[] = [];\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n for (const extName of this.ctx.extensions.keys()) order.push(`extension:${extName}`);\n for (const roleName of this.ctx.roles.keys()) order.push(`role:${roleName}`);\n\n const typeNodes = Array.from(this.ctx.types.keys());\n for (const typeName of typeNodes) {\n this.visit(`type:${typeName}`, visited, visiting, order);\n }\n\n const tableNodes = Array.from(this.ctx.tables.keys());\n for (const tableName of tableNodes) {\n this.visit(`table:${tableName}`, visited, visiting, order);\n }\n\n for (const viewName of this.ctx.views.keys()) order.push(`view:${viewName}`);\n for (const procName of this.ctx.procedures.keys()) order.push(`procedure:${procName}`);\n for (const funcName of this.ctx.functions.keys()) order.push(`function:${funcName}`);\n for (const cronName of this.ctx.crons.keys()) order.push(`cron:${cronName}`);\n for (const policyName of this.ctx.policies.keys()) order.push(`policy:${policyName}`);\n for (const triggerName of this.ctx.triggers.keys()) order.push(`trigger:${triggerName}`);\n for (const grantName of this.ctx.grants.keys()) order.push(`grant:${grantName}`);\n\n return order;\n }\n\n private visit(id: string, visited: Set<string>, visiting: Set<string>, order: string[]) {\n if (visited.has(id)) return;\n if (visiting.has(id)) throw new Error(`Circular dependency detected: ${id}`);\n\n visiting.add(id);\n\n const [kind, name] = id.split(':');\n \n if (kind === 'table') {\n const table = this.ctx.tables.get(name);\n if (table) {\n for (const col of Object.values(table.columns)) {\n if (col.references) {\n this.visit(`table:${col.references.table}`, visited, visiting, order);\n }\n if (this.ctx.types.has(col.type)) {\n this.visit(`type:${col.type}`, visited, visiting, order);\n }\n }\n }\n }\n\n visiting.delete(id);\n visited.add(id);\n order.push(id);\n }\n}\n","import { AnalyzedSchema, AnalyzedTableNode } from '../../ast/nodes';\nimport { DbmasonContext } from '../DbmasonContext';\nimport { DbmasonDialect } from '../Dialect';\nimport { DependencyResolver } from './dependency.resolver';\n\nexport class SchemaAnalyzer {\n private dependencyResolver: DependencyResolver;\n\n constructor(private ctx: DbmasonContext, private dialect: DbmasonDialect) {\n this.dependencyResolver = new DependencyResolver(ctx);\n }\n\n analyze(): AnalyzedSchema {\n const analyzedTables = new Map<string, AnalyzedTableNode>();\n\n // 1. Primary Analysis (Tables delegated to Dialect)\n for (const [name, table] of this.ctx.tables.entries()) {\n analyzedTables.set(name, this.dialect.analyzeTable(table));\n }\n\n // 2. Resolve Initial Order\n const order = this.dependencyResolver.resolveOrder();\n\n // 3. Construct Intermediate Schema (Processed Truth)\n const schema: AnalyzedSchema = {\n tables: analyzedTables,\n types: new Map(this.ctx.types),\n views: new Map(this.ctx.views),\n materializedViews: new Map(this.ctx.materializedViews),\n procedures: new Map(this.ctx.procedures),\n functions: new Map(this.ctx.functions),\n extensions: new Map(this.ctx.extensions),\n roles: new Map(this.ctx.roles),\n grants: new Map(this.ctx.grants),\n crons: new Map(this.ctx.crons),\n policies: new Map(this.ctx.policies),\n triggers: new Map(this.ctx.triggers),\n order\n };\n\n return schema;\n }\n}\n","import { AnalyzedSchema, ExecutionPlan, PlanStep, Snapshot } from '../ast/nodes';\n\n/**\n * Planner (Diff)\n * \n * The intelligence that decides \"what should happen\".\n */\nexport class Planner {\n constructor(private analyzedSchema: AnalyzedSchema, private oldSnapshot?: Snapshot) {}\n\n plan(): ExecutionPlan {\n const plan: ExecutionPlan = [];\n\n // 1. Plan Additions & Updates (topological order)\n for (const id of this.analyzedSchema.order) {\n const [kind, name] = id.split(':');\n \n switch (kind) {\n case 'extension':\n this.planExtension(name, plan);\n break;\n case 'type':\n this.planType(name, plan);\n break;\n case 'table':\n this.planTable(name, plan);\n break;\n case 'view':\n this.planView(name, plan);\n break;\n case 'procedure':\n this.planProcedure(name, plan);\n break;\n case 'function':\n this.planFunction(name, plan);\n break;\n case 'cron':\n this.planCron(name, plan);\n break;\n case 'policy':\n this.planPolicy(name, plan);\n break;\n case 'trigger':\n this.planTrigger(name, plan);\n break;\n case 'role':\n this.planRole(name, plan);\n break;\n case 'grant':\n this.planGrant(name, plan);\n break;\n }\n }\n\n // 2. Plan Deletions\n if (this.oldSnapshot) {\n this.planDeletions(plan);\n }\n\n return plan;\n }\n\n private planExtension(name: string, plan: ExecutionPlan) {\n const node = this.analyzedSchema.extensions.get(name);\n const oldNode = this.oldSnapshot?.extensions[name];\n if (node && (!oldNode || JSON.stringify(node) !== JSON.stringify(oldNode))) {\n plan.push({ action: 'create', node });\n }\n }\n\n private planType(name: string, plan: ExecutionPlan) {\n const node = this.analyzedSchema.types.get(name);\n const oldNode = this.oldSnapshot?.types[name];\n if (node && (!oldNode || JSON.stringify(node) !== JSON.stringify(oldNode))) {\n plan.push({ action: 'create', node });\n }\n }\n\n private planTable(name: string, plan: ExecutionPlan) {\n const newNode = this.analyzedSchema.tables.get(name);\n if (!newNode) return;\n\n const oldNode = this.oldSnapshot?.tables[name];\n\n if (!oldNode) {\n plan.push({ action: 'create', node: newNode });\n } else {\n // Simple stringify comparison for now, can be improved\n if (JSON.stringify(newNode) !== JSON.stringify(oldNode)) {\n plan.push({ action: 'alter', node: newNode, diff: { old: oldNode } });\n }\n }\n }\n\n private planView(name: string, plan: ExecutionPlan) {\n const node = this.analyzedSchema.views.get(name);\n if (!node) return;\n \n const oldNode = this.oldSnapshot?.views[name];\n if (!oldNode || JSON.stringify(node) !== JSON.stringify(oldNode)) {\n plan.push({ action: 'replace', node });\n }\n }\n\n private planProcedure(name: string, plan: ExecutionPlan) {\n const node = this.analyzedSchema.procedures.get(name);\n if (!node) return;\n\n const oldHash = this.oldSnapshot?.hashes?.[name];\n const newHash = require('crypto').createHash('md5').update((node as any).body).digest('hex');\n\n if (!oldHash || oldHash !== newHash) {\n plan.push({ action: 'replace', node });\n }\n }\n\n private planFunction(name: string, plan: ExecutionPlan) {\n const node = this.analyzedSchema.functions.get(name);\n if (!node) return;\n\n const oldHash = this.oldSnapshot?.hashes?.[name];\n const newHash = require('crypto').createHash('md5').update((node as any).body).digest('hex');\n\n if (!oldHash || oldHash !== newHash) {\n plan.push({ action: 'replace', node });\n }\n }\n\n private planCron(name: string, plan: ExecutionPlan) {\n const node = this.analyzedSchema.crons.get(name);\n const oldNode = this.oldSnapshot?.crons[name];\n if (node && (!oldNode || JSON.stringify(node) !== JSON.stringify(oldNode))) {\n plan.push({ action: 'create', node });\n }\n }\n\n private planPolicy(name: string, plan: ExecutionPlan) {\n const node = this.analyzedSchema.policies.get(name);\n const oldNode = this.oldSnapshot?.policies?.[name];\n if (node && (!oldNode || JSON.stringify(node) !== JSON.stringify(oldNode))) {\n plan.push({ action: 'create', node });\n }\n }\n\n private planTrigger(name: string, plan: ExecutionPlan) {\n const node = this.analyzedSchema.triggers.get(name);\n const oldNode = this.oldSnapshot?.triggers?.[name];\n if (node && (!oldNode || JSON.stringify(node) !== JSON.stringify(oldNode))) {\n plan.push({ action: 'create', node });\n }\n }\n\n private planRole(name: string, plan: ExecutionPlan) {\n const node = this.analyzedSchema.roles.get(name);\n const oldNode = this.oldSnapshot?.roles?.[name];\n if (node && (!oldNode || JSON.stringify(node) !== JSON.stringify(oldNode))) {\n plan.push({ action: 'create', node });\n }\n }\n\n private planGrant(name: string, plan: ExecutionPlan) {\n const node = this.analyzedSchema.grants.get(name);\n const oldNode = this.oldSnapshot?.grants?.[name];\n if (node && (!oldNode || JSON.stringify(node) !== JSON.stringify(oldNode))) {\n plan.push({ action: 'create', node });\n }\n }\n\n private planDeletions(plan: ExecutionPlan) {\n for (const name of Object.keys(this.oldSnapshot!.tables)) {\n if (!this.analyzedSchema.tables.has(name)) {\n plan.push({ action: 'drop', node: this.oldSnapshot!.tables[name] });\n }\n }\n for (const name of Object.keys(this.oldSnapshot!.roles || {})) {\n if (!this.analyzedSchema.roles.has(name)) {\n plan.push({ action: 'drop', node: this.oldSnapshot!.roles[name] });\n }\n }\n }\n}\n","import { DbmasonContext } from './DbmasonContext';\nimport { SchemaAnalyzer } from './analyzers/schema.analyzer';\nimport { Planner } from './diff';\nimport { Snapshot } from '../ast/nodes';\nimport { DbmasonDialect } from './Dialect';\n\n/**\n * Compiler\n * \n * Top-level orchestrator for the Canonical Architecture.\n */\nexport class Compiler {\n constructor(private ctx: DbmasonContext, private dialect: DbmasonDialect) {}\n\n /**\n * compile\n */\n compile(oldSnapshot?: Snapshot): string {\n // 1. Analyze (Recorded Intent -> Semantic Truth)\n const analyzer = new SchemaAnalyzer(this.ctx, this.dialect);\n const truth = analyzer.analyze();\n\n // 2. Plan (Truth -> Change Intent)\n const planner = new Planner(truth, oldSnapshot!);\n const plan = planner.plan();\n\n // 3. Emit (Plan -> SQL text)\n return this.dialect.emit(plan);\n }\n}\n","import { AnalyzedSchema } from '../ast/nodes';\nimport { TableNode } from '../ast/nodes';\nimport { FunctionNode } from '../ast/nodes';\nimport { ProcedureNode } from '../ast/nodes';\nimport { TypeNode } from '../ast/nodes';\nimport { ViewNode } from '../ast/nodes';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * generateClientMetadata - Hierarchical Metadata Generator\n */\nexport function generateClientMetadata(schema: AnalyzedSchema, outputDir: string) {\n const root = {\n tables: {} as any,\n procedures: {} as any,\n functions: {} as any,\n views: {} as any,\n types: {} as any,\n modules: {} as any\n };\n\n function ensureModule(modulePath?: string): any {\n if (!modulePath || modulePath === 'global') return root;\n const parts = modulePath.split('.');\n \n let current = root;\n for (const part of parts) {\n if (!current.modules[part]) {\n current.modules[part] = { \n tables: {}, \n procedures: {}, \n functions: {}, \n views: {}, \n types: {},\n modules: {} \n };\n }\n current = current.modules[part];\n }\n return current;\n }\n\n function cleanType(type?: string): string {\n if (!type) return 'any';\n // Remove escaped quotes: \\\"schema\\\".\\\"table\\\" -> schema.table\n // Then wrap in single quotes if it contains a dot for clarity: SETOF 'schema.table'\n let clean = type.replace(/\\\\\"/g, '').replace(/\"/g, '');\n if (clean.toUpperCase().startsWith('SETOF ')) {\n const inner = clean.substring(6).trim();\n return `SETOF '${inner}'`;\n }\n return clean;\n }\n\n // 1. Process Tables\n for (const table of schema.tables.values() as IterableIterator<TableNode>) {\n const mod = ensureModule(table.module);\n mod.tables[table.name] = {\n name: table.name,\n module: table.module,\n columns: Object.fromEntries(\n Object.entries(table.columns as any).map(([name, col]: [string, any]) => [name, {\n type: cleanType(col.type),\n primaryKey: !!col.primaryKey,\n notNull: !!col.notNull\n }])\n )\n };\n }\n\n // 2. Process Procedures\n for (const proc of schema.procedures.values() as IterableIterator<ProcedureNode>) {\n const mod = ensureModule(proc.module);\n mod.procedures[proc.name] = {\n kind: proc.kind,\n name: proc.name,\n module: proc.module,\n args: Object.fromEntries(\n Object.entries(proc.args as any).map(([name, type]: [string, any]) => [name, cleanType(type)])\n ),\n returns: cleanType(proc.returns)\n };\n }\n\n // 3. Process Functions\n for (const fn of schema.functions.values() as IterableIterator<FunctionNode>) {\n const mod = ensureModule(fn.module);\n mod.functions[fn.name] = {\n kind: fn.kind,\n name: fn.name,\n module: fn.module,\n args: Object.fromEntries(\n Object.entries(fn.args as any).map(([name, type]: [string, any]) => [name, cleanType(type)])\n ),\n returns: cleanType(fn.returns)\n };\n }\n\n // 4. Process Views\n for (const view of schema.views.values() as IterableIterator<ViewNode>) {\n const mod = ensureModule(view.module);\n mod.views[view.name] = {\n name: view.name,\n module: view.module,\n columns: {} // Views might not have analyzed columns yet in all paths\n };\n }\n\n // 5. Process Types (Enums, Composites)\n for (const type of schema.types.values() as IterableIterator<TypeNode>) {\n const mod = ensureModule(type.module);\n mod.types[type.name] = {\n name: type.name,\n kind: type.type,\n module: type.module,\n values: type.values,\n fields: type.fields ? Object.fromEntries(\n Object.entries(type.fields).map(([name, type]: [string, any]) => [name, cleanType(type)])\n ) : undefined\n };\n }\n\n const configPath = path.join(outputDir, 'dbmason.metadata.json');\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n fs.writeFileSync(configPath, JSON.stringify(root, null, 2));\n\n return { configPath };\n}\n","import { Snapshot, AnalyzedSchema } from '../ast/nodes';\nimport * as crypto from 'crypto';\n\nexport class SnapshotBuilder {\n static build(truth: AnalyzedSchema): Snapshot {\n const hashes: Record<string, string> = {};\n const allCodeNodes = new Map([...truth.procedures, ...truth.functions]);\n for (const [pName, proc] of allCodeNodes.entries()) {\n const body = (proc as any).body || '';\n hashes[pName] = crypto.createHash('md5').update(body).digest('hex');\n }\n \n return {\n tables: Object.fromEntries(truth.tables),\n procedures: Object.fromEntries(truth.procedures),\n functions: Object.fromEntries(truth.functions),\n views: Object.fromEntries(truth.views),\n materializedViews: Object.fromEntries(truth.materializedViews),\n types: Object.fromEntries(truth.types),\n crons: Object.fromEntries(truth.crons),\n extensions: Object.fromEntries(truth.extensions),\n roles: Object.fromEntries(truth.roles),\n grants: Object.fromEntries(truth.grants),\n policies: Object.fromEntries(truth.policies),\n triggers: Object.fromEntries(truth.triggers),\n hashes\n };\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { DbmasonContext } from '../../compiler/DbmasonContext';\nimport { Compiler } from '../../compiler/compile';\nimport { Snapshot } from '../../ast/nodes';\nimport { SchemaAnalyzer } from '../../compiler/analyzers/schema.analyzer';\nimport { generateClientMetadata } from '../../client/generateClientMetadata';\nimport { SnapshotBuilder } from '../../compiler/SnapshotBuilder';\n\nexport async function generateCommand(name?: string, options: any = {}) {\n const configPath = path.resolve(process.cwd(), 'dbmason/index.ts');\n if (!fs.existsSync(configPath)) {\n console.error('dbmason/index.ts not found.');\n process.exit(1);\n }\n\n try {\n require('ts-node').register({ transpileOnly: true });\n const configModule = require(configPath);\n const ctx: DbmasonContext = configModule.default || configModule.ctx;\n let dialect = configModule.dialect;\n\n if (!(ctx instanceof DbmasonContext) && (ctx as any)?.constructor?.name !== 'DbmasonContext') {\n throw new Error('dbmason/index.ts must export a DbmasonContext.');\n }\n\n // Try to get dialect from context config if not exported directly\n if (!dialect && (ctx as any).config?.dialect) {\n dialect = (ctx as any).config.dialect;\n }\n\n if (!dialect) {\n throw new Error('dbmason/index.ts must export a \"dialect\" or pass it to DbmasonContext constructor.');\n }\n\n // 1. Analysis\n const analyzer = new SchemaAnalyzer(ctx, dialect);\n const truth = analyzer.analyze();\n\n // 2. Planning & Emission\n const hiddenSnapshotDir = path.resolve(process.cwd(), 'node_modules/@dbmason/core');\n const hiddenSnapshotPath = path.join(hiddenSnapshotDir, '.dbmason-snapshot.json');\n\n let oldSnapshot: Snapshot | undefined;\n if (fs.existsSync(hiddenSnapshotPath)) {\n oldSnapshot = JSON.parse(fs.readFileSync(hiddenSnapshotPath, 'utf8'));\n }\n\n const compiler = new Compiler(ctx, dialect);\n const sql = compiler.compile(oldSnapshot);\n\n const sqlWithoutComments = sql.split('\\n').filter(line => !line.trim().startsWith('--')).join('\\n').trim();\n if (sqlWithoutComments) {\n if (sqlWithoutComments.toLowerCase().includes('drop table') || sqlWithoutComments.toLowerCase().includes('drop column')) {\n if (!options.allowDestructive) {\n console.error('Destructive changes detected! Use --allow-destructive to confirm.');\n process.exit(1);\n }\n }\n\n if (options.dry) {\n console.log('-- Dry Run Output (No files written) --');\n console.log(sql);\n return;\n }\n\n const migrationsDir = path.resolve(process.cwd(), ctx.config.paths?.migrations || 'migrations');\n if (!fs.existsSync(migrationsDir)) fs.mkdirSync(migrationsDir, { recursive: true });\n const filename = `${Date.now()}_${name || 'migration'}.sql`;\n fs.writeFileSync(path.join(migrationsDir, filename), sql);\n\n // Calculate new snapshot (Internal Only)\n const currentSnapshot = SnapshotBuilder.build(truth);\n \n if (!fs.existsSync(hiddenSnapshotDir)) fs.mkdirSync(hiddenSnapshotDir, { recursive: true });\n fs.writeFileSync(hiddenSnapshotPath, JSON.stringify(currentSnapshot, null, 2));\n\n console.log(`Generated migration: ${path.relative(process.cwd(), path.join(migrationsDir, filename))}`);\n } else {\n console.log('No changes detected.');\n }\n\n // 3. Export Metadata for Client (Immediate Feedback)\n const outputDir = ctx.config.paths?.client ? path.resolve(process.cwd(), ctx.config.paths.client) : process.cwd();\n generateClientMetadata(truth, outputDir);\n\n } catch (e: any) {\n console.error('Generation failed:', e.message);\n process.exit(1);\n }\n}\n","import * as path from 'path';\nimport * as fs from 'fs';\nimport { DbmasonContext } from '../../compiler/DbmasonContext';\nimport { DbmasonDriver } from '../../compiler/Dialect';\n\n/**\n * MigrationRunner - Kernel utility for executing SQL migrations using a Dialect Driver.\n */\nclass MigrationRunner {\n private migrationDir: string;\n\n constructor(private driver: DbmasonDriver, migrationDir: string = 'migrations') {\n this.migrationDir = path.resolve(process.cwd(), migrationDir);\n }\n\n async runMigrations() {\n await this.driver.connect();\n try {\n // 1. Ensure tracking table exists\n await this.driver.query(`\n CREATE TABLE IF NOT EXISTS dbmason_migrations (\n id SERIAL PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n applied_at TIMESTAMPTZ DEFAULT NOW()\n );\n `);\n\n // 2. Get applied migrations\n const appliedResult = await this.driver.query(`SELECT name FROM dbmason_migrations`) as { rows: { name: string }[] };\n const appliedNames = new Set(appliedResult.rows.map(r => r.name));\n\n if (!fs.existsSync(this.migrationDir)) return;\n const files = fs.readdirSync(this.migrationDir).sort();\n \n for (const file of files) {\n if (file.endsWith('.sql') && !appliedNames.has(file)) {\n const sql = fs.readFileSync(path.join(this.migrationDir, file), 'utf-8');\n console.log(`Running migration: ${file}`);\n \n await this.driver.beginTransaction();\n try {\n await this.driver.query(sql);\n await this.driver.query(`INSERT INTO dbmason_migrations (name) VALUES ($1)`, [file]);\n await this.driver.commitTransaction();\n } catch (e) {\n await this.driver.rollbackTransaction();\n console.error(`Error in migration ${file}:`, e);\n throw e;\n }\n } else if (file.endsWith('.sql')) {\n // console.log(`Skipping applied migration: ${file}`);\n }\n }\n } finally {\n await this.driver.close();\n }\n }\n}\n\nexport async function migrateCommand(options: any = {}) {\n const configPath = path.resolve(process.cwd(), 'dbmason/index.ts');\n \n // Load .env manually if it exists\n const envPath = path.resolve(process.cwd(), '.env');\n if (fs.existsSync(envPath)) {\n const envContent = fs.readFileSync(envPath, 'utf8');\n for (const line of envContent.split('\\n')) {\n const [key, ...values] = line.split('=');\n if (key && values.length > 0) {\n process.env[key.trim()] = values.join('=').trim().replace(/^['\"]|['\"]$/g, '');\n }\n }\n }\n\n if (!fs.existsSync(configPath)) {\n console.error('dbmason/index.ts not found.');\n process.exit(1);\n }\n\n try {\n require('ts-node').register({ transpileOnly: true });\n const configModule = require(configPath);\n const ctx: DbmasonContext = configModule.default || configModule.ctx;\n let dialect = configModule.dialect;\n\n // Try to get dialect from context config\n if (!dialect && (ctx as any).config?.dialect) {\n dialect = (ctx as any).config.dialect;\n }\n\n if (!dialect) {\n throw new Error('dbmason/index.ts must export a \"dialect\" or pass it to DbmasonContext constructor.');\n }\n\n const connectionString = (ctx as any).config?.connectionString || process.env.DATABASE_URL;\n if (!connectionString) {\n throw new Error('Connection string not found. Please configure it in DbmasonContext or set DATABASE_URL.');\n }\n\n const driver = dialect.getDriver(connectionString);\n\n // 1. Run Migrations\n console.log('Applying migrations to database...');\n const migrationsDir = (ctx as any).config?.paths?.migrations;\n const runner = new MigrationRunner(driver, migrationsDir);\n await runner.runMigrations();\n\n console.log('Migration completed successfully.');\n } catch (e: any) {\n console.error('Migration failed:', e.message);\n process.exit(1);\n }\n}\n","export interface GeneratorOptions {\n lang: 'typescript';\n}\n\ninterface TypeRegistry {\n types: Map<string, string>; // pgTypeName -> tsTypeName\n}\n\nexport function generateStandaloneClient(config: any, options: GeneratorOptions): string {\n const registry: TypeRegistry = {\n types: new Map()\n };\n\n // 0. Pre-collect all types to handle cross-references correctly\n collectAllTypes(config, registry);\n\n const lines: string[] = [\n \"// Generated by @dbmason/core - DO NOT EDIT DIRECTLY\",\n 'import { Pool, PoolConfig, QueryResult, QueryResultRow } from \"pg\";',\n \"\",\n `/**\n * Base Client Logic (Bundled)\n */`,\n BASE_CLIENT_LOGIC.join('\\n'),\n \"\",\n \"/**\",\n \" * Internal Helper Types\",\n \" */\",\n \"export type Trigger = void; // Type alias for procedure returns\",\n \"\",\n \"/**\",\n \" * Database Schema Types & Enums\",\n \" */\"\n ];\n\n // 1. Generate Custom Types & Enums\n generateAllTypes(config, lines, registry);\n\n lines.push(\"\");\n lines.push(\"/**\");\n lines.push(\" * Database Table & View Interfaces\", \" */\");\n\n // 2. Generate Table & View Interfaces\n generateAllInterfaces(config, lines, registry, \"\");\n\n lines.push(\"\");\n lines.push(\"/**\");\n lines.push(\" * Typed DbmasonClient\", \" */\");\n lines.push(\"export class DbmasonClient extends StandaloneDbmasonClient {\");\n lines.push(\" constructor(options?: StandaloneDbmasonClientOptions) {\");\n lines.push(\" super(options);\");\n lines.push(\" }\");\n lines.push(\"\");\n\n // 3. Generate Root Level Accessors\n generateAccessors(config, lines, 1, registry);\n\n lines.push(\"}\");\n lines.push(\"\");\n\n return lines.join('\\n');\n}\n\nfunction resolveTypeName(name: string, prefix: string): string {\n const cleanName = name.replace(/['\"]/g, '');\n const parts = cleanName.split('.');\n \n // If it's already qualified (e.g. \"auth.user_status\"), just PascalCase it\n if (parts.length > 1) {\n return toPascalCase(parts.join('_'));\n }\n \n // If we have a prefix, ensure it's normalized for string checks\n const p = prefix.endsWith('_') ? prefix : (prefix ? prefix + '_' : '');\n const snakeCaseName = toSnakeCase(cleanName);\n \n // Avoid double prefixing\n if (p && (snakeCaseName.startsWith(p) || cleanName.startsWith(p))) {\n return toPascalCase(cleanName);\n }\n \n return toPascalCase(p + cleanName);\n}\n\nfunction collectAllTypes(node: any, registry: TypeRegistry, prefix = \"\") {\n if (node.types) {\n for (const [name, type] of Object.entries(node.types as Record<string, any>)) {\n const tsName = resolveTypeName(name, prefix);\n registry.types.set(name, tsName);\n // Also store qualified names if we are in a module\n if (prefix) {\n const modPath = prefix.replace(/_$/, '').replace(/_/g, '.');\n registry.types.set(`${modPath}.${name}`, tsName);\n }\n }\n }\n\n if (node.modules) {\n for (const [modName, mod] of Object.entries(node.modules)) {\n collectAllTypes(mod, registry, prefix + modName + \"_\");\n }\n }\n}\n\nfunction generateAllTypes(node: any, lines: string[], registry: TypeRegistry, prefix = \"\") {\n if (node.types) {\n for (const [name, type] of Object.entries(node.types as Record<string, any>)) {\n const typeName = registry.types.get(name) || resolveTypeName(name, prefix);\n if (type.kind === 'enum' && type.values) {\n const union = type.values.map((v: string) => `'${v}'`).join(' | ');\n lines.push(`export type ${typeName} = ${union};`);\n } else if (type.kind === 'composite' && type.fields) {\n lines.push(`export interface ${typeName} {`);\n for (const [fName, fType] of Object.entries(type.fields)) {\n lines.push(` ${fName}: ${mapPgTypeToTs(fType as string, registry, prefix)};`);\n }\n lines.push(`}`);\n }\n }\n }\n\n if (node.modules) {\n for (const [modName, mod] of Object.entries(node.modules)) {\n generateAllTypes(mod, lines, registry, prefix + modName + \"_\");\n }\n }\n}\n\nfunction generateAllInterfaces(node: any, lines: string[], registry: TypeRegistry, prefix = \"\") {\n const objects = { ...(node.tables || {}), ...(node.views || {}) };\n for (const [name, obj] of Object.entries(objects)) {\n const o = obj as any;\n const interfaceName = resolveTypeName(name, prefix);\n lines.push(`export interface ${interfaceName} {`);\n if (o.columns && Object.keys(o.columns).length > 0) {\n for (const [colName, col] of Object.entries(o.columns as Record<string, any>)) {\n const tsType = mapPgTypeToTs(col.type, registry, prefix);\n lines.push(` ${colName}${col.notNull ? '' : '?'}: ${tsType};`);\n }\n } else {\n lines.push(` [key: string]: any;`);\n }\n lines.push(`}`);\n lines.push(\"\");\n }\n\n if (node.modules) {\n for (const [modName, mod] of Object.entries(node.modules)) {\n generateAllInterfaces(mod, lines, registry, prefix + modName + \"_\");\n }\n }\n}\n\nfunction generateAccessors(node: any, lines: string[], indent: number, registry: TypeRegistry, prefix = \"\") {\n const space = \" \".repeat(indent);\n\n if (node.tables) {\n for (const [name] of Object.entries(node.tables as Record<string, any>)) {\n const interfaceName = resolveTypeName(name, prefix);\n lines.push(`${space}get ${name}() {`);\n lines.push(`${space} return this.getTableHandler<${interfaceName}>(\"${prefix ? prefix.replace(/_/g, '.') + '.' + name : name}\");`);\n lines.push(`${space}}`);\n lines.push(\"\");\n }\n }\n\n if (node.views) {\n for (const [name] of Object.entries(node.views as Record<string, any>)) {\n const interfaceName = resolveTypeName(name, prefix);\n lines.push(`${space}get ${name}() {`);\n lines.push(`${space} return this.getTableHandler<${interfaceName}>(\"${prefix ? prefix.replace(/_/g, '.') + '.' + name : name}\");`);\n lines.push(`${space}}`);\n lines.push(\"\");\n }\n }\n\n const procs = { ...(node.procedures || {}), ...(node.functions || {}) };\n for (const [name, proc] of Object.entries(procs)) {\n const argType = generateProcedureArgs(proc, registry, prefix);\n const returnType = generateProcedureReturn(proc, registry, prefix);\n const callParams = argType === 'void' ? 'undefined' : 'params';\n const argTypesJson = JSON.stringify((proc as any).args);\n \n const isProc = (proc as any).kind === 'Procedure' && (proc as any).returns.toLowerCase() === 'void';\n \n lines.push(`${space}async ${name}(params?: ${argType}): Promise<${returnType}> {`);\n lines.push(`${space} return this.rpc(\"${prefix ? prefix.replace(/_/g, '.') + '.' + name : name}\", ${callParams}, ${argTypesJson}, ${isProc}) as any;`);\n lines.push(`${space}}`);\n lines.push(\"\");\n }\n\n if (node.modules) {\n for (const [modName, mod] of Object.entries(node.modules as Record<string, any>)) {\n lines.push(`${space}get ${modName}() {`);\n lines.push(`${space} const self = this;`);\n lines.push(`${space} return {`);\n generateModuleAccessors(mod, lines, indent + 2, registry, prefix ? `${prefix}.${modName}` : modName);\n lines.push(`${space} };`);\n lines.push(`${space}}`);\n lines.push(\"\");\n }\n }\n}\n\nfunction generateModuleAccessors(node: any, lines: string[], indent: number, registry: TypeRegistry, fullPrefix: string) {\n const space = \" \".repeat(indent);\n const snakePrefix = fullPrefix.replace(/\\./g, '_') + \"_\";\n\n if (node.tables) {\n for (const [name] of Object.entries(node.tables as Record<string, any>)) {\n const interfaceName = resolveTypeName(name, snakePrefix);\n lines.push(`${space}get ${name}() { return self.getTableHandler<${interfaceName}>(\"${fullPrefix}.${name}\"); },`);\n }\n }\n\n if (node.views) {\n for (const [name] of Object.entries(node.views as Record<string, any>)) {\n const interfaceName = resolveTypeName(name, snakePrefix);\n lines.push(`${space}get ${name}() { return self.getTableHandler<${interfaceName}>(\"${fullPrefix}.${name}\"); },`);\n }\n }\n\n const procs = { ...(node.procedures || {}), ...(node.functions || {}) };\n for (const [name, proc] of Object.entries(procs)) {\n const argType = generateProcedureArgs(proc, registry, snakePrefix);\n const returnType = generateProcedureReturn(proc, registry, snakePrefix);\n const argTypesJson = JSON.stringify((proc as any).args);\n const isProc = (proc as any).kind === 'Procedure' && (proc as any).returns.toLowerCase() === 'void';\n lines.push(`${space}${name}(params?: ${argType}): Promise<${returnType}> { return self.rpc(\"${fullPrefix}.${name}\", params, ${argTypesJson}, ${isProc}) as any; },`);\n }\n\n if (node.modules) {\n for (const [modName, mod] of Object.entries(node.modules as Record<string, any>)) {\n lines.push(`${space}get ${modName}() {`);\n lines.push(`${space} return {`);\n generateModuleAccessors(mod, lines, indent + 2, registry, `${fullPrefix}.${modName}`);\n lines.push(`${space} };`);\n lines.push(`${space}},`);\n }\n }\n}\n\nfunction generateProcedureArgs(proc: any, registry: TypeRegistry, prefix: string): string {\n if (!proc.args || Object.keys(proc.args).length === 0) return 'void';\n \n const parts = [];\n for (const [name, type] of Object.entries(proc.args)) {\n const t = type as string;\n const isOptional = t.toLowerCase().includes('default');\n const cleanType = t.split(' ')[0];\n parts.push(`${name}${isOptional ? '?' : ''}: ${mapPgTypeToTs(cleanType, registry, prefix)}`);\n }\n return `{ ${parts.join(', ')} }`;\n}\n\nfunction generateProcedureReturn(proc: any, registry: TypeRegistry, prefix: string): string {\n const ret = proc.returns as string || 'any';\n const isSetOf = ret.toLowerCase().includes('setof');\n const baseType = ret.replace(/setof/i, '').replace(/'/g, '').trim();\n \n const finalType = mapPgTypeToTs(baseType, registry, prefix);\n if (finalType.toLowerCase() === 'trigger') return 'Trigger';\n return isSetOf ? `${finalType}[]` : finalType;\n}\n\nfunction mapPgTypeToTs(pgType: string, registry: TypeRegistry, prefix = \"\"): string {\n const type = pgType.toLowerCase().replace(/['\"]/g, '').trim();\n \n // 0. Check Registry first (Exact Match)\n if (registry.types.has(type)) return registry.types.get(type)!;\n\n // 1. Numeric Types\n if (\n type.includes('serial') || \n type.includes('int') || \n type.includes('float') || \n type.includes('double') || \n type.includes('numeric') ||\n type.includes('decimal') ||\n type.includes('real') ||\n type.includes('money')\n ) return 'number';\n\n // 2. Boolean\n if (type.includes('bool')) return 'boolean';\n\n // 3. JSON/Document Types\n if (type.includes('json')) return 'any';\n\n // 4. Date/Time Types\n if (type.includes('date') || type.includes('timestamp')) return 'Date | string';\n\n // 5. Special Types\n if (type === 'void') return 'void';\n\n // 6. String/Standard types\n const standardTypes = ['text', 'varchar', 'char', 'uuid', 'bytea', 'interval', 'xml', 'point', 'line', 'lseg', 'box', 'path', 'polygon', 'circle', 'cidr', 'inet', 'macaddr'];\n if (standardTypes.some(s => type.includes(s))) return 'string';\n\n // 7. Custom Types (Fallback to name resolution)\n return resolveTypeName(type, prefix);\n}\n\nfunction toPascalCase(str: string): string {\n if (!str) return 'Any';\n return str.replace(/['\"]/g, '').split(/[\\._-]/).filter(Boolean).map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');\n}\n\nfunction toSnakeCase(str: string): string {\n return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`).replace(/^_/, '');\n}\n\nconst BASE_CLIENT_LOGIC = [\n \"export interface StandaloneDbmasonClientOptions {\",\n \" returnCase?: 'camel' | 'pascal' | 'snake';\",\n \" poolConfig?: PoolConfig;\",\n \"}\",\n \"\",\n \"export type TableMethods<T> = {\",\n \" create: (data: Partial<T>) => Promise<T[]>;\",\n \" read: (filter?: Partial<T>) => Promise<T[]>;\",\n \" update: (data: Partial<T>, filter: Partial<T>) => Promise<T[]>;\",\n \" delete: (filter: Partial<T>) => Promise<T[]>;\",\n \" list: (options?: { where?: Partial<T>; limit?: number; orderBy?: string }) => Promise<T[]>;\",\n \"};\",\n \"\",\n \"export class StandaloneDbmasonClient {\",\n \" private pool: Pool;\",\n \" private returnCase: 'camel' | 'pascal' | 'snake';\",\n \"\",\n \" constructor(options?: StandaloneDbmasonClientOptions) {\",\n \" this.returnCase = options?.returnCase || 'camel';\",\n \" this.pool = new Pool(options?.poolConfig || {\",\n \" connectionString: process.env.DATABASE_URL\",\n \" });\",\n \" }\",\n \"\",\n \" protected getTableHandler<T>(tableName: string): TableMethods<T> {\",\n \" return {\",\n \" create: (data: Partial<T>) => this.create<T>(tableName, data),\",\n \" read: (filter?: Partial<T>) => this.read<T>(tableName, filter),\",\n \" update: (data: Partial<T>, filter: Partial<T>) => this.update<T>(tableName, data, filter),\",\n \" delete: (filter: Partial<T>) => this.delete<T>(tableName, filter),\",\n \" list: (options?: { where?: Partial<T> }) => this.read<T>(tableName, options?.where),\",\n \" };\",\n \" }\",\n \"\",\n \" async query<T extends QueryResultRow = any>(sql: string, params?: any[]): Promise<QueryResult<T>> {\",\n \" return this.pool.query<T>(sql, params);\",\n \" }\",\n \"\",\n \" async sql<T extends QueryResultRow = any>(text: string, params?: any[]): Promise<T[]> {\",\n \" const result = await this.pool.query<T>(text, params);\",\n \" return this.formatReturn(result.rows);\",\n \" }\",\n \"\",\n \" async rpc<T = any>(procName: string, params?: Record<string, any>, types?: Record<string, string>, isProcedure?: boolean): Promise<T[]> {\",\n \" const argNames = Object.keys(params || {});\",\n \" const argValues = Object.values(params || {});\",\n \"\",\n \" if (argNames.length === 0) {\",\n \" const sql = isProcedure ? `CALL ${procName}()` : `SELECT * FROM ${procName}()`;\",\n \" const result = await this.pool.query(sql);\",\n \" return this.formatReturn(result.rows as T[]);\",\n \" }\",\n \"\",\n \" const placeholders = argNames.map((_, i) => {\",\n \" const cast = types && argNames[i] && types[argNames[i]] ? `::${types[argNames[i]]}` : '';\",\n \" return `$${i + 1}${cast}`;\",\n \" }).join(', ');\",\n \" \",\n \" const sql = isProcedure ? `CALL ${procName}(${placeholders})` : `SELECT * FROM ${procName}(${placeholders})`;\",\n \" const result = await this.pool.query(sql, argValues);\",\n \" return this.formatReturn(result.rows as T[]);\",\n \" }\",\n \"\",\n \" async create<T = any>(table: string, data: Partial<T>): Promise<T[]> {\",\n \" return this.rpc<T>(`${table}_create`, { p_input: data });\",\n \" }\",\n \"\",\n \" async read<T = any>(table: string, filter: Partial<T> = {}): Promise<T[]> {\",\n \" return this.rpc<T>(`${table}_read`, { p_filter: filter });\",\n \" }\",\n \"\",\n \" async update<T = any>(table: string, data: Partial<T>, filter: Partial<T>): Promise<T[]> {\",\n \" return this.rpc<T>(`${table}_update`, { p_input: data, p_filter: filter });\",\n \" }\",\n \"\",\n \" async delete<T = any>(table: string, filter: Partial<T>): Promise<T[]> {\",\n \" return this.rpc<T>(`${table}_delete`, { p_filter: filter });\",\n \" }\",\n \"\",\n \" private formatReturn<T>(data: T): T {\",\n \" if (this.returnCase === 'snake') return data;\",\n \" return convertKeysDeep(data, this.returnCase) as T;\",\n \" }\",\n \"\",\n \" async connect() { return Promise.resolve(); }\",\n \" async disconnect() { return this.close(); }\",\n \"\",\n \" async close() {\",\n \" await this.pool.end();\",\n \" }\",\n \"}\",\n \"\",\n \"function convertKeysDeep(obj: any, targetCase: 'camel' | 'pascal' | 'snake'): any {\",\n \" if (Array.isArray(obj)) return obj.map(v => convertKeysDeep(v, targetCase));\",\n \" if (obj !== null && typeof obj === 'object' && !(obj instanceof Date)) {\",\n \" return Object.fromEntries(\",\n \" Object.entries(obj).map(([key, value]) => [\",\n \" convertCase(key, targetCase),\",\n \" convertKeysDeep(value, targetCase)\",\n \" ])\",\n \" );\",\n \" }\",\n \" return obj;\",\n \"}\",\n \"\",\n \"function convertCase(str: string, targetCase: 'camel' | 'pascal' | 'snake'): string {\",\n \" const parts = str.split('_');\",\n \" if (targetCase === 'snake') return parts.join('_');\",\n \" if (targetCase === 'camel') return parts[0] + parts.slice(1).map(p => p.charAt(0).toUpperCase() + p.slice(1)).join('');\",\n \" if (targetCase === 'pascal') return parts.map(p => p.charAt(0).toUpperCase() + p.slice(1)).join('');\",\n \" return str;\",\n \"}\"\n];\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { generateStandaloneClient } from '../../client/standaloneGenerator';\n\nexport async function clientCommand(options: any) {\n const configPath = path.resolve(process.cwd(), options.config || 'src/generated/dbmason.config.json');\n const outputPath = path.resolve(process.cwd(), options.output || 'src/generated-client.ts');\n\n if (!fs.existsSync(configPath)) {\n console.error(`Metadata file not found: ${configPath}`);\n console.info('Run \"dbmason generate\" first to produce the metadata file.');\n process.exit(1);\n }\n\n try {\n const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));\n \n console.log(`Generating ${options.lang || 'typescript'} client...`);\n \n const clientCode = generateStandaloneClient(config, {\n lang: (options.lang as any) || 'typescript'\n });\n\n const outputDir = path.dirname(outputPath);\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n fs.writeFileSync(outputPath, clientCode);\n console.log(`Client generated successfully: ${outputPath}`);\n\n } catch (e: any) {\n console.error('Client generation failed:', e.message);\n process.exit(1);\n }\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { \n Snapshot, \n TableNode, \n ViewNode, \n FunctionNode, \n ProcedureNode, \n TriggerNode, \n TypeNode,\n ConstraintNode,\n IndexNode\n} from '../../ast/nodes';\nimport { DbmasonContext } from '../../compiler/DbmasonContext';\nimport { SchemaAnalyzer } from '../../compiler/analyzers/schema.analyzer';\nimport { SnapshotBuilder } from '../../compiler/SnapshotBuilder';\nimport { Compiler } from '../../compiler/compile';\n\nexport async function pullCommand(options: any = {}) {\n console.log('Starting introspection...');\n\n const configPath = path.resolve(process.cwd(), 'dbmason/index.ts');\n if (!fs.existsSync(configPath)) {\n console.error('dbmason/index.ts not found.');\n process.exit(1);\n }\n\n const schemaPath = path.resolve(process.cwd(), 'dbmason/schema.ts');\n if (!fs.existsSync(schemaPath)) {\n fs.writeFileSync(schemaPath, '// Initial empty schema\\n');\n }\n\n try {\n require('ts-node').register({ transpileOnly: true });\n const configModule = require(configPath);\n const ctx: DbmasonContext = configModule.default || configModule.ctx;\n let dialect = configModule.dialect;\n\n if (!(ctx instanceof DbmasonContext) && (ctx as any)?.constructor?.name !== 'DbmasonContext') {\n throw new Error('dbmason/index.ts must export a DbmasonContext.');\n }\n\n // Try to get dialect from context config\n if (!dialect && (ctx as any).config?.dialect) {\n dialect = (ctx as any).config.dialect;\n }\n\n if (!dialect) {\n throw new Error('dbmason/index.ts must export a \"dialect\" or pass it to DbmasonContext constructor.');\n }\n\n if (!dialect.introspector) {\n throw new Error(`Dialect ${dialect.name} does not support introspection.`);\n }\n\n const connectionString = (ctx as any).config?.connectionString;\n if (!connectionString) {\n throw new Error('DbmasonContext must have a \"connectionString\" configured for introspection.');\n }\n\n // 1. Introspect\n const snapshot = await dialect.introspector.introspect(connectionString);\n\n // 2. Save Snapshot\n const hiddenSnapshotDir = path.resolve(process.cwd(), 'node_modules/@dbmason/core');\n const hiddenSnapshotPath = path.join(hiddenSnapshotDir, '.dbmason-snapshot.json');\n \n if (!fs.existsSync(hiddenSnapshotDir)) fs.mkdirSync(hiddenSnapshotDir, { recursive: true });\n fs.writeFileSync(hiddenSnapshotPath, JSON.stringify(snapshot, null, 2));\n console.log(`Snapshot saved to ${path.relative(process.cwd(), hiddenSnapshotPath)}`);\n\n const schemaCode = generateSchemaCode(snapshot);\n const schemaPath = path.resolve(process.cwd(), 'dbmason/schema.ts');\n fs.writeFileSync(schemaPath, schemaCode);\n console.log(`Schema written to ${path.relative(process.cwd(), schemaPath)}`);\n\n // 3.5 Normalize Snapshot (Sync DSL truth with memory)\n // This ensures that 'generate' after 'pull' sees NO changes due to formatting/normalization\n delete require.cache[require.resolve(schemaPath)];\n delete require.cache[require.resolve(configPath)];\n const syncConfig = require(configPath);\n const syncCtx = syncConfig.default || syncConfig.ctx;\n const analyzer = new SchemaAnalyzer(syncCtx, dialect);\n const truth = analyzer.analyze();\n const normalizedSnapshot = SnapshotBuilder.build(truth);\n fs.writeFileSync(hiddenSnapshotPath, JSON.stringify(normalizedSnapshot, null, 2));\n\n // 4. Baseline (Optional)\n if (options.init) {\n console.log('Baselining existing schema...');\n\n const migrationsDir = path.resolve(process.cwd(), (ctx as any).config.paths?.migrations || 'migrations');\n if (!fs.existsSync(migrationsDir)) {\n fs.mkdirSync(migrationsDir, { recursive: true });\n } else {\n // Remove existing migrations to start fresh\n const files = fs.readdirSync(migrationsDir);\n for (const file of files) {\n if (file.endsWith('.sql')) {\n fs.unlinkSync(path.join(migrationsDir, file));\n }\n }\n console.log('Cleared existing migrations.');\n }\n \n // Reload the config to populate the context with the new schema entries\n // We clear the cache for schema.ts and index.ts to ensure we see the new exports\n delete require.cache[require.resolve(schemaPath)];\n delete require.cache[require.resolve(configPath)];\n const refreshedConfig = require(configPath);\n const refreshedCtx = refreshedConfig.default || refreshedConfig.ctx;\n\n const compiler = new Compiler(refreshedCtx, dialect);\n const sql = compiler.compile(undefined); // No old snapshot = CREATE EVERYTHING\n \n const filename = `${Date.now()}_init.sql`;\n fs.writeFileSync(path.join(migrationsDir, filename), sql);\n console.log(`Created baseline migration: ${path.relative(process.cwd(), path.join(migrationsDir, filename))}`);\n\n // Mark as applied in DB\n const driver = dialect.getDriver(connectionString);\n await driver.connect();\n try {\n await driver.query(`\n CREATE TABLE IF NOT EXISTS dbmason_migrations (\n id SERIAL PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n applied_at TIMESTAMPTZ DEFAULT NOW()\n );\n `);\n await driver.query(`INSERT INTO dbmason_migrations (name) VALUES ($1)`, [filename]);\n console.log('Marked baseline migration as applied in database.');\n } finally {\n await driver.close();\n }\n }\n\n } catch (e: any) {\n console.error('Pull failed:', e.message);\n process.exit(1);\n }\n}\n\nconst indent = (n: number) => ' '.repeat(n);\n\nfunction generateSchemaCode(snapshot: Snapshot): string {\n const lines: string[] = [];\n const imports = new Set([\n 'defineTable', 'defineView', 'defineEnum', 'defineFunction', 'defineProcedure', 'defineTrigger',\n 'text', 'integer', 'boolean', 'timestamp', 'jsonb', 'uuid', 'custom' \n ]);\n \n lines.push(`import { \\n${indent(1)}${Array.from(imports).join(`,\\n${indent(1)}`)}\\n} from '@dbmason/postgres';`);\n lines.push(`import ctx from './index';\\n`);\n\n // 1. Types (Enums)\n if (snapshot.types) {\n for (const [name, typeNode] of Object.entries(snapshot.types)) {\n const type = typeNode as TypeNode;\n if (type.type === 'enum') {\n lines.push(`export const ${name} = defineEnum(ctx, '${name}', [${type.values?.map(v => `'${v}'`).join(', ')}]);\\n`);\n }\n }\n }\n\n // 2. Tables\n for (const [tableName, tableNode] of Object.entries(snapshot.tables)) {\n if (tableName === 'dbmason_migrations') continue;\n const t = tableNode as TableNode;\n lines.push(`export const ${tableName} = defineTable(ctx, '${tableName}', {`);\n lines.push(`${indent(1)}columns: {`);\n\n for (const [colName, col] of Object.entries(t.columns || {})) {\n const column = col as any; // ColumnNode\n let colDef = `${indent(2)}${colName}: `;\n \n // Map types\n const type = column.type.toLowerCase();\n if (type === 'text' || type === 'varchar') colDef += `text()`;\n else if (type === 'integer' || type === 'int4') colDef += `integer()`;\n else if (type === 'boolean' || type === 'bool') colDef += `boolean()`;\n else if (type === 'uuid') colDef += `uuid()`;\n else if (type === 'jsonb') colDef += `jsonb()`;\n else if (type.includes('timestamp')) colDef += `timestamp()`;\n else colDef += `custom('${column.type}')`;\n\n // Modifiers\n if (column.notNull) colDef += `.notNull()`;\n if (column.default) {\n const escapedDefault = column.default.replace(/\"/g, '\\\\\"');\n colDef += `.default(\"${escapedDefault}\")`; \n }\n if (column.primaryKey) colDef += `.primaryKey()`;\n\n lines.push(`${colDef},`);\n }\n lines.push(`${indent(1)}},`);\n\n // Table Options: Constraints, Indexes, etc.\n const constraints = t.constraints || [];\n const indexes = t.indexes || [];\n \n if (constraints.length > 0 || indexes.length > 0) {\n if (constraints.length > 0) {\n lines.push(`${indent(1)}constraints: [`);\n for (const c of constraints) {\n const constraint = c as ConstraintNode;\n lines.push(`${indent(2)}{ kind: 'Constraint', type: '${constraint.type}', name: '${constraint.name}', definition: \\`${constraint.definition}\\`, table: '${tableName}' },`);\n }\n lines.push(`${indent(1)}],`);\n }\n // Indexes\n if (indexes.length > 0) {\n lines.push(`${indent(1)}indexes: [`);\n for (const idx of indexes) {\n const index = idx as IndexNode;\n lines.push(`${indent(2)}{ kind: 'Index', name: '${index.name}', table: '${tableName}', columns: ${JSON.stringify(index.columns)}, unique: ${index.unique} },`);\n }\n lines.push(`${indent(1)}],`);\n }\n }\n\n lines.push(`});\\n`);\n }\n\n // 3. Views\n if (snapshot.views) {\n for (const [name, viewNode] of Object.entries(snapshot.views)) {\n const view = viewNode as ViewNode;\n lines.push(`export const ${name} = defineView(ctx, '${name}', \\`${view.query.replace(/`/g, '\\\\`')}\\`);\\n`);\n }\n }\n\n // 4. Procedures\n if (snapshot.procedures) {\n for (const [name, procNode] of Object.entries(snapshot.procedures)) {\n const proc = procNode as ProcedureNode;\n lines.push(`export const ${name} = defineProcedure(ctx, '${name}', {`);\n lines.push(`${indent(1)}args: ${JSON.stringify(proc.args)},`);\n lines.push(`${indent(1)}returns: '${proc.returns}',`);\n lines.push(`${indent(1)}language: '${proc.language}',`);\n lines.push(`${indent(1)}body: \\`${proc.body.replace(/`/g, '\\\\`')}\\``);\n lines.push(`});\\n`);\n }\n }\n\n // 5. Functions\n if (snapshot.functions) {\n for (const [name, funcNode] of Object.entries(snapshot.functions)) {\n const func = funcNode as FunctionNode;\n lines.push(`export const ${name} = defineFunction(ctx, '${name}', {`);\n lines.push(`${indent(1)}args: ${JSON.stringify(func.args)},`);\n lines.push(`${indent(1)}returns: '${func.returns}',`);\n lines.push(`${indent(1)}language: '${func.language}',`);\n lines.push(`${indent(1)}body: \\`${func.body.replace(/`/g, '\\\\`')}\\``);\n lines.push(`});\\n`);\n }\n }\n\n // 6. Triggers\n if (snapshot.triggers) {\n for (const [name, trigNode] of Object.entries(snapshot.triggers)) {\n const trig = trigNode as TriggerNode;\n lines.push(`export const ${name} = defineTrigger(ctx, '${trig.table}', '${name}', {`);\n lines.push(`${indent(1)}events: ${JSON.stringify(trig.events)},`);\n lines.push(`${indent(1)}procedure: '${trig.functionName}',`); \n lines.push(`${indent(1)}when: '${trig.when}',`);\n lines.push(`${indent(1)}forEach: '${trig.forEach}'`);\n lines.push(`});\\n`);\n }\n }\n\n return lines.join('\\n');\n}\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { initCommand } from './commands/init';\nimport { generateCommand } from './commands/generate';\nimport { migrateCommand } from './commands/migrate';\n\nimport { clientCommand } from './commands/client';\nimport { pullCommand } from './commands/pull';\n\nconst program = new Command();\n// ... (existing code) ...\nprogram\n .command('pull')\n .description('Introspect database and generate schema')\n .option('--init', 'Initialize migration history and create a baseline migration')\n .action((options) => pullCommand(options));\n\n\n\nprogram\n .name('dbmason')\n .description('Dbmason Database Management CLI')\n .version('0.2.0');\n\nprogram\n .command('init <projectName>')\n .description('Initialize a new PDK project')\n .option('-t, --template <name>', 'Project template to use', 'auth.cli.template')\n .action((projectName, options) => initCommand(projectName, options));\n\nprogram\n .command('generate [name]')\n .description('Generate migration files')\n .option('--allow-destructive', 'Allow generated migrations to include destructive operations')\n .option('-d, --dry', 'Dry run (log SQL but do not write files)')\n .action((name, options) => generateCommand(name, options));\n\nprogram\n .command('migrate')\n .description('Apply migrations to the database')\n .action((options) => migrateCommand(options));\n\nprogram\n .command('client')\n .description('Generate a type-safe database client')\n .option('-c, --config <path>', 'Path to dbmason.metadata.json', 'dbmason.metadata.json')\n .option('-l, --lang <language>', 'Target language (typescript)', 'typescript')\n .option('-o, --output <path>', 'Output file path', 'src/generated-client.ts')\n .action((options) => clientCommand(options));\n\nprogram.parse(process.argv);\n"],"names":["initCommand","projectName","options","projectPath","path","fs","srcDir","dbmasonDir","templatesDir","templateName","templateFileName","templatePath","schemaContent","tsConfig","packageJson","execSync","error","DependencyResolver","ctx","order","visited","visiting","extName","roleName","typeNodes","typeName","tableNodes","tableName","viewName","procName","funcName","cronName","policyName","triggerName","grantName","id","kind","name","table","col","SchemaAnalyzer","dialect","analyzedTables","Planner","analyzedSchema","oldSnapshot","plan","node","oldNode","newNode","oldHash","newHash","Compiler","truth","generateClientMetadata","schema","outputDir","root","ensureModule","modulePath","parts","current","part","cleanType","type","clean","mod","proc","fn","view","configPath","SnapshotBuilder","hashes","allCodeNodes","pName","body","crypto","generateCommand","configModule","DbmasonContext","hiddenSnapshotDir","hiddenSnapshotPath","sql","sqlWithoutComments","line","migrationsDir","filename","currentSnapshot","e","MigrationRunner","driver","migrationDir","appliedResult","appliedNames","r","files","file","migrateCommand","envPath","envContent","key","values","connectionString","generateStandaloneClient","config","registry","collectAllTypes","lines","BASE_CLIENT_LOGIC","generateAllTypes","generateAllInterfaces","generateAccessors","resolveTypeName","prefix","cleanName","toPascalCase","p","snakeCaseName","toSnakeCase","tsName","modPath","modName","union","v","fName","fType","mapPgTypeToTs","objects","obj","o","interfaceName","colName","tsType","indent","space","procs","argType","generateProcedureArgs","returnType","generateProcedureReturn","callParams","argTypesJson","isProc","generateModuleAccessors","fullPrefix","snakePrefix","t","isOptional","ret","isSetOf","baseType","finalType","pgType","s","str","word","letter","clientCommand","outputPath","clientCode","pullCommand","schemaPath","snapshot","schemaCode","generateSchemaCode","syncConfig","syncCtx","normalizedSnapshot","refreshedConfig","refreshedCtx","n","imports","typeNode","tableNode","column","colDef","escapedDefault","constraints","indexes","c","constraint","idx","index","viewNode","procNode","funcNode","func","trigNode","trig","program","Command"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AnalyzedSchema } from '../ast/nodes';
|
|
2
|
+
/**
|
|
3
|
+
* generateClientMetadata - Hierarchical Metadata Generator
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateClientMetadata(schema: AnalyzedSchema, outputDir: string): {
|
|
6
|
+
configPath: string;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=generateClientMetadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateClientMetadata.d.ts","sourceRoot":"","sources":["../../src/client/generateClientMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAS9C;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM;;EAsH/E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standaloneGenerator.d.ts","sourceRoot":"","sources":["../../src/client/standaloneGenerator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,YAAY,CAAC;CACtB;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAqDvF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { TableNode, ConstraintNode, IndexNode, TypeNode, ProcedureNode, FunctionNode, ViewNode, MaterializedViewNode, TriggerNode, PolicyNode, RoleNode, CronNode, ExtensionNode, GrantNode } from '../ast/nodes';
|
|
2
|
+
import { DbmasonDialect } from './Dialect';
|
|
3
|
+
export interface DbmasonConfig {
|
|
4
|
+
dialect?: DbmasonDialect;
|
|
5
|
+
connectionString?: string;
|
|
6
|
+
schema?: string;
|
|
7
|
+
paths?: {
|
|
8
|
+
migrations?: string;
|
|
9
|
+
client?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface DbmasonScope {
|
|
13
|
+
ctx: DbmasonContext;
|
|
14
|
+
moduleName?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveScope(scope: DbmasonContext | DbmasonScope): DbmasonScope;
|
|
17
|
+
export declare class DbmasonContext {
|
|
18
|
+
tables: Map<string, TableNode>;
|
|
19
|
+
types: Map<string, TypeNode>;
|
|
20
|
+
views: Map<string, ViewNode>;
|
|
21
|
+
materializedViews: Map<string, MaterializedViewNode>;
|
|
22
|
+
procedures: Map<string, ProcedureNode>;
|
|
23
|
+
functions: Map<string, FunctionNode>;
|
|
24
|
+
triggers: Map<string, TriggerNode>;
|
|
25
|
+
roles: Map<string, RoleNode>;
|
|
26
|
+
policies: Map<string, PolicyNode>;
|
|
27
|
+
grants: Map<string, GrantNode>;
|
|
28
|
+
indexes: Map<string, IndexNode>;
|
|
29
|
+
constraints: Map<string, ConstraintNode>;
|
|
30
|
+
crons: Map<string, CronNode>;
|
|
31
|
+
extensions: Map<string, ExtensionNode>;
|
|
32
|
+
config: DbmasonConfig;
|
|
33
|
+
constructor(config?: DbmasonConfig);
|
|
34
|
+
snapshot(): {
|
|
35
|
+
tables: {
|
|
36
|
+
[k: string]: TableNode;
|
|
37
|
+
};
|
|
38
|
+
types: {
|
|
39
|
+
[k: string]: TypeNode;
|
|
40
|
+
};
|
|
41
|
+
procedures: {
|
|
42
|
+
[k: string]: ProcedureNode;
|
|
43
|
+
};
|
|
44
|
+
functions: {
|
|
45
|
+
[k: string]: FunctionNode;
|
|
46
|
+
};
|
|
47
|
+
views: {
|
|
48
|
+
[k: string]: ViewNode;
|
|
49
|
+
};
|
|
50
|
+
materializedViews: {
|
|
51
|
+
[k: string]: MaterializedViewNode;
|
|
52
|
+
};
|
|
53
|
+
extensions: {
|
|
54
|
+
[k: string]: ExtensionNode;
|
|
55
|
+
};
|
|
56
|
+
roles: {
|
|
57
|
+
[k: string]: RoleNode;
|
|
58
|
+
};
|
|
59
|
+
grants: {
|
|
60
|
+
[k: string]: GrantNode;
|
|
61
|
+
};
|
|
62
|
+
crons: {
|
|
63
|
+
[k: string]: CronNode;
|
|
64
|
+
};
|
|
65
|
+
policies: {
|
|
66
|
+
[k: string]: PolicyNode;
|
|
67
|
+
};
|
|
68
|
+
triggers: {
|
|
69
|
+
[k: string]: TriggerNode;
|
|
70
|
+
};
|
|
71
|
+
hashes: {};
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=DbmasonContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DbmasonContext.d.ts","sourceRoot":"","sources":["../../src/compiler/DbmasonContext.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,cAAc,EACd,SAAS,EACT,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACJ,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACL;AAED,MAAM,WAAW,YAAY;IACzB,GAAG,EAAE,cAAc,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,GAAG,YAAY,CAE/E;AAED,qBAAa,cAAc;IAEvB,MAAM,yBAAgC;IACtC,KAAK,wBAA+B;IACpC,KAAK,wBAA+B;IACpC,iBAAiB,oCAA2C;IAG5D,UAAU,6BAAoC;IAC9C,SAAS,4BAAmC;IAC5C,QAAQ,2BAAkC;IAG1C,KAAK,wBAA+B;IACpC,QAAQ,0BAAiC;IACzC,MAAM,yBAAgC;IAGtC,OAAO,yBAAgC;IACvC,WAAW,8BAAqC;IAGhD,KAAK,wBAA+B;IAEpC,UAAU,6BAAoC;IAIvC,MAAM,EAAE,aAAa,CAAC;gBAEjB,MAAM,CAAC,EAAE,aAAa;IAOlC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBX"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AnalyzedTableNode, TableNode, ExecutionPlan } from '../ast/nodes';
|
|
2
|
+
import { DbmasonContext } from './DbmasonContext';
|
|
3
|
+
/**
|
|
4
|
+
* DbmasonDriver - Interface for database connectivity and execution.
|
|
5
|
+
*/
|
|
6
|
+
export interface DbmasonDriver {
|
|
7
|
+
connect(): Promise<void>;
|
|
8
|
+
close(): Promise<void>;
|
|
9
|
+
query(sql: string, params?: any[]): Promise<unknown>;
|
|
10
|
+
beginTransaction(): Promise<void>;
|
|
11
|
+
commitTransaction(): Promise<void>;
|
|
12
|
+
rollbackTransaction(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* DbmasonDialect - The contract that every database package must implement.
|
|
16
|
+
*/
|
|
17
|
+
export interface DbmasonDialect {
|
|
18
|
+
readonly name: string;
|
|
19
|
+
introspector?: import('./Introspector').DbmasonIntrospector;
|
|
20
|
+
analyzeTable(node: TableNode): AnalyzedTableNode;
|
|
21
|
+
emit(plan: ExecutionPlan): string;
|
|
22
|
+
getDriver(connectionString: string): DbmasonDriver;
|
|
23
|
+
setContext?(ctx: DbmasonContext): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=Dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialect.d.ts","sourceRoot":"","sources":["../../src/compiler/Dialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,gBAAgB,EAAE,mBAAmB,CAAC;IAG5D,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,iBAAiB,CAAC;IAGjD,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC;IAGlC,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,aAAa,CAAC;IAGnD,UAAU,CAAC,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC;CAC1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Introspector.d.ts","sourceRoot":"","sources":["../../src/compiler/Introspector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,WAAW,mBAAmB;IAChC,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC3D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnapshotBuilder.d.ts","sourceRoot":"","sources":["../../src/compiler/SnapshotBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGxD,qBAAa,eAAe;IACxB,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ;CAwBhD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DbmasonContext } from '../DbmasonContext';
|
|
2
|
+
/**
|
|
3
|
+
* DependencyResolver
|
|
4
|
+
*/
|
|
5
|
+
export declare class DependencyResolver {
|
|
6
|
+
private ctx;
|
|
7
|
+
constructor(ctx: DbmasonContext);
|
|
8
|
+
resolveOrder(): string[];
|
|
9
|
+
private visit;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=dependency.resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency.resolver.d.ts","sourceRoot":"","sources":["../../../src/compiler/analyzers/dependency.resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,qBAAa,kBAAkB;IACf,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,cAAc;IAEvC,YAAY,IAAI,MAAM,EAAE;IA6BxB,OAAO,CAAC,KAAK;CA0BhB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AnalyzedSchema } from '../../ast/nodes';
|
|
2
|
+
import { DbmasonContext } from '../DbmasonContext';
|
|
3
|
+
import { DbmasonDialect } from '../Dialect';
|
|
4
|
+
export declare class SchemaAnalyzer {
|
|
5
|
+
private ctx;
|
|
6
|
+
private dialect;
|
|
7
|
+
private dependencyResolver;
|
|
8
|
+
constructor(ctx: DbmasonContext, dialect: DbmasonDialect);
|
|
9
|
+
analyze(): AnalyzedSchema;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=schema.analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.analyzer.d.ts","sourceRoot":"","sources":["../../../src/compiler/analyzers/schema.analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,qBAAa,cAAc;IAGX,OAAO,CAAC,GAAG;IAAkB,OAAO,CAAC,OAAO;IAFxD,OAAO,CAAC,kBAAkB,CAAqB;gBAE3B,GAAG,EAAE,cAAc,EAAU,OAAO,EAAE,cAAc;IAIxE,OAAO,IAAI,cAAc;CA8B5B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DbmasonContext } from './DbmasonContext';
|
|
2
|
+
import { Snapshot } from '../ast/nodes';
|
|
3
|
+
import { DbmasonDialect } from './Dialect';
|
|
4
|
+
/**
|
|
5
|
+
* Compiler
|
|
6
|
+
*
|
|
7
|
+
* Top-level orchestrator for the Canonical Architecture.
|
|
8
|
+
*/
|
|
9
|
+
export declare class Compiler {
|
|
10
|
+
private ctx;
|
|
11
|
+
private dialect;
|
|
12
|
+
constructor(ctx: DbmasonContext, dialect: DbmasonDialect);
|
|
13
|
+
/**
|
|
14
|
+
* compile
|
|
15
|
+
*/
|
|
16
|
+
compile(oldSnapshot?: Snapshot): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;;;GAIG;AACH,qBAAa,QAAQ;IACL,OAAO,CAAC,GAAG;IAAkB,OAAO,CAAC,OAAO;gBAApC,GAAG,EAAE,cAAc,EAAU,OAAO,EAAE,cAAc;IAExE;;OAEG;IACH,OAAO,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM;CAY1C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AnalyzedSchema, ExecutionPlan, Snapshot } from '../ast/nodes';
|
|
2
|
+
/**
|
|
3
|
+
* Planner (Diff)
|
|
4
|
+
*
|
|
5
|
+
* The intelligence that decides "what should happen".
|
|
6
|
+
*/
|
|
7
|
+
export declare class Planner {
|
|
8
|
+
private analyzedSchema;
|
|
9
|
+
private oldSnapshot?;
|
|
10
|
+
constructor(analyzedSchema: AnalyzedSchema, oldSnapshot?: Snapshot | undefined);
|
|
11
|
+
plan(): ExecutionPlan;
|
|
12
|
+
private planExtension;
|
|
13
|
+
private planType;
|
|
14
|
+
private planTable;
|
|
15
|
+
private planView;
|
|
16
|
+
private planProcedure;
|
|
17
|
+
private planFunction;
|
|
18
|
+
private planCron;
|
|
19
|
+
private planPolicy;
|
|
20
|
+
private planTrigger;
|
|
21
|
+
private planRole;
|
|
22
|
+
private planGrant;
|
|
23
|
+
private planDeletions;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/compiler/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAY,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEjF;;;;GAIG;AACH,qBAAa,OAAO;IACJ,OAAO,CAAC,cAAc;IAAkB,OAAO,CAAC,WAAW,CAAC;gBAApD,cAAc,EAAE,cAAc,EAAU,WAAW,CAAC,EAAE,QAAQ,YAAA;IAElF,IAAI,IAAI,aAAa;IAoDrB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,aAAa;CAYxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cron.d.ts","sourceRoot":"","sources":["../../src/definitions/Cron.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Extension.d.ts","sourceRoot":"","sources":["../../src/definitions/Extension.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Function.d.ts","sourceRoot":"","sources":["../../src/definitions/Function.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grant.d.ts","sourceRoot":"","sources":["../../src/definitions/Grant.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../../src/definitions/Module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Policy.d.ts","sourceRoot":"","sources":["../../src/definitions/Policy.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Procedure.d.ts","sourceRoot":"","sources":["../../src/definitions/Procedure.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Role.d.ts","sourceRoot":"","sources":["../../src/definitions/Role.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/definitions/Table.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAAC,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Trigger.d.ts","sourceRoot":"","sources":["../../src/definitions/Trigger.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Type.d.ts","sourceRoot":"","sources":["../../src/definitions/Type.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"View.d.ts","sourceRoot":"","sources":["../../src/definitions/View.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
|