node-mybatis-plus 0.1.0
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 +426 -0
- package/dist/index.d.mts +302 -0
- package/dist/index.d.ts +302 -0
- package/dist/index.js +1051 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1006 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/decorator/index.ts","../src/dialect/index.ts","../src/core/transaction.ts","../src/core/datasource.ts","../src/wrapper/abstract-wrapper.ts","../src/builder/sql-builder.ts","../src/plugin/runner.ts","../src/wrapper/query-wrapper.ts","../src/wrapper/update-wrapper.ts","../src/mapper/base-mapper.ts"],"sourcesContent":["import 'reflect-metadata';\n\n// Types\nexport type {\n EntityMeta, ColumnMeta, Condition, ConditionGroup, OrderByItem,\n SelectNode, InsertNode, UpdateNode, DeleteNode, SqlNode,\n Dialect, Plugin, PluginContext,\n DataSource, DataSourceConfig, Connection, TransactionContext, PoolConfig,\n Page,\n} from './types';\n\n// Decorators\nexport { Table, Column, Id } from './decorator';\nexport type { IdOptions, ColumnOptions } from './decorator';\n\n// DataSource\nexport { createDataSource } from './core/datasource';\n\n// Transaction\nexport { Transactional, withTransaction, setDefaultDataSource, getDefaultDataSource } from './core/transaction';\nexport type { TransactionalOptions } from './core/transaction';\n\n// Dialect\nexport { MysqlDialect, PostgresDialect, SqliteDialect, createDialect } from './dialect';\n\n// Wrapper\nexport { LambdaQueryWrapper } from './wrapper/query-wrapper';\nexport { LambdaUpdateWrapper } from './wrapper/update-wrapper';\nexport { AbstractWrapper } from './wrapper/abstract-wrapper';\n\n// Mapper\nexport { BaseMapper } from './mapper/base-mapper';\n\n// Builder\nexport { SqlBuilder } from './builder/sql-builder';\nexport type { CompiledSql } from './builder/sql-builder';\n\n// Plugin\nexport { runPlugins } from './plugin/runner';\n","import 'reflect-metadata';\nimport type { EntityMeta, ColumnMeta } from '../types';\n\nconst ENTITY_META_KEY = Symbol('entity:meta');\n\n// 全局元数据缓存\nconst metadataCache = new Map<Function, EntityMeta>();\n\nexport function Table(tableName: string): ClassDecorator {\n return (target) => {\n const existing = getOrCreateMeta(target);\n existing.tableName = tableName;\n metadataCache.set(target, existing);\n };\n}\n\nexport interface IdOptions {\n type?: 'auto' | 'uuid' | 'snowflake' | 'input';\n}\n\nexport function Id(options?: IdOptions): PropertyDecorator {\n return (target, propertyKey) => {\n const meta = getOrCreateMeta(target.constructor);\n const col = ensureColumn(meta, propertyKey as string);\n col.isPrimary = true;\n col.idType = options?.type ?? 'auto';\n meta.idColumn = col;\n };\n}\n\nexport interface ColumnOptions {\n name?: string;\n exist?: boolean;\n}\n\nexport function Column(nameOrOptions?: string | ColumnOptions): PropertyDecorator {\n return (target, propertyKey) => {\n const meta = getOrCreateMeta(target.constructor);\n const col = ensureColumn(meta, propertyKey as string);\n if (typeof nameOrOptions === 'string') {\n col.columnName = nameOrOptions;\n } else if (nameOrOptions) {\n if (nameOrOptions.name) col.columnName = nameOrOptions.name;\n if (nameOrOptions.exist === false) col.exist = false;\n }\n };\n}\n\nfunction getOrCreateMeta(target: Function): EntityMeta {\n let meta = metadataCache.get(target);\n if (!meta) {\n meta = { tableName: '', columns: [], idColumn: null, target };\n metadataCache.set(target, meta);\n }\n return meta;\n}\n\nfunction ensureColumn(meta: EntityMeta, propertyName: string): ColumnMeta {\n let col = meta.columns.find(c => c.propertyName === propertyName);\n if (!col) {\n col = {\n propertyName,\n columnName: camelToSnake(propertyName),\n isPrimary: false,\n exist: true,\n };\n meta.columns.push(col);\n }\n return col;\n}\n\nexport function getEntityMeta(target: Function): EntityMeta {\n const meta = metadataCache.get(target);\n if (!meta) throw new Error(`No entity metadata found for ${target.name}. Did you forget @Table?`);\n return meta;\n}\n\nexport function camelToSnake(str: string): string {\n return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);\n}\n","import type { Dialect } from '../types';\n\nexport class MysqlDialect implements Dialect {\n placeholder(_index: number): string {\n return '?';\n }\n quote(identifier: string): string {\n return `\\`${identifier}\\``;\n }\n paginate(sql: string, offset: number, limit: number): string {\n return `${sql} LIMIT ${limit} OFFSET ${offset}`;\n }\n insertReturningId(): null {\n return null; // MySQL uses insertId from result\n }\n}\n\nexport class PostgresDialect implements Dialect {\n placeholder(index: number): string {\n return `$${index}`;\n }\n quote(identifier: string): string {\n return `\"${identifier}\"`;\n }\n paginate(sql: string, offset: number, limit: number): string {\n return `${sql} LIMIT ${limit} OFFSET ${offset}`;\n }\n insertReturningId(_table: string, _columns: string[], idColumn: string): string {\n return `RETURNING \"${idColumn}\"`;\n }\n}\n\nexport class SqliteDialect implements Dialect {\n placeholder(_index: number): string {\n return '?';\n }\n quote(identifier: string): string {\n return `\"${identifier}\"`;\n }\n paginate(sql: string, offset: number, limit: number): string {\n return `${sql} LIMIT ${limit} OFFSET ${offset}`;\n }\n insertReturningId(): null {\n return null; // SQLite uses lastInsertRowid\n }\n}\n\nexport function createDialect(type: string): Dialect {\n switch (type) {\n case 'mysql': return new MysqlDialect();\n case 'postgres': return new PostgresDialect();\n case 'sqlite': return new SqliteDialect();\n default: throw new Error(`Unsupported dialect: ${type}`);\n }\n}\n","import { AsyncLocalStorage } from 'async_hooks';\nimport type { DataSource, Connection } from '../types';\n\ninterface TxContext {\n connection: Connection;\n datasource: DataSource;\n}\n\nconst txStore = new AsyncLocalStorage<TxContext>();\n\n/** 获取当前事务连接(Executor 内部调用) */\nexport function getCurrentTxConnection(): TxContext | undefined {\n return txStore.getStore();\n}\n\n/** 编程式事务(配合 AsyncLocalStorage 自动传播) */\nexport async function withTransaction<T>(ds: DataSource, fn: () => Promise<T>): Promise<T> {\n // 如果已在事务中,直接复用(事务传播)\n const existing = txStore.getStore();\n if (existing && existing.datasource === ds) {\n return fn();\n }\n\n const conn = await ds.getConnection();\n await conn.query('BEGIN', []);\n const ctx: TxContext = { connection: conn, datasource: ds };\n\n try {\n const result = await txStore.run(ctx, fn);\n await conn.query('COMMIT', []);\n return result;\n } catch (e) {\n await conn.query('ROLLBACK', []);\n throw e;\n } finally {\n conn.release();\n }\n}\n\n// ============ 全局数据源注册(装饰器需要) ============\n\nlet defaultDataSource: DataSource | null = null;\n\nexport function setDefaultDataSource(ds: DataSource): void {\n defaultDataSource = ds;\n}\n\nexport function getDefaultDataSource(): DataSource {\n if (!defaultDataSource) throw new Error('No default DataSource set. Call setDefaultDataSource() first.');\n return defaultDataSource;\n}\n\n// ============ @Transactional 装饰器 ============\n\nexport interface TransactionalOptions {\n datasource?: DataSource;\n}\n\nexport function Transactional(options?: TransactionalOptions): MethodDecorator {\n return (_target, _propertyKey, descriptor: PropertyDescriptor) => {\n const original = descriptor.value;\n descriptor.value = async function (...args: any[]) {\n const ds = options?.datasource ?? defaultDataSource;\n if (!ds) throw new Error('No DataSource available for @Transactional. Set default or pass in options.');\n return withTransaction(ds, () => original.apply(this, args));\n };\n return descriptor;\n };\n}\n","import type { DataSource, DataSourceConfig, Connection, TransactionContext, Dialect, Plugin } from '../types';\nimport { createDialect } from '../dialect';\nimport { getCurrentTxConnection } from './transaction';\n\n/** 如果当前在事务上下文中,优先使用事务连接执行 */\nasync function txAwareExecute(ds: DataSource, sql: string, params: any[]): Promise<any> {\n const txCtx = getCurrentTxConnection();\n if (txCtx && txCtx.datasource === ds) {\n return txCtx.connection.query(sql, params);\n }\n return null; // 返回 null 表示不在事务中,走正常逻辑\n}\n\n// ============ MySQL DataSource ============\n\nclass MysqlConnection implements Connection {\n constructor(private conn: any) {}\n async query(sql: string, params: any[]): Promise<any> {\n const cmd = sql.trimStart().toUpperCase();\n // BEGIN/COMMIT/ROLLBACK are not supported in prepared statement protocol\n if (cmd.startsWith('BEGIN') || cmd.startsWith('COMMIT') || cmd.startsWith('ROLLBACK') || cmd.startsWith('START')) {\n const [rows] = await this.conn.query(sql, params);\n return rows;\n }\n const [rows] = await this.conn.execute(sql, params);\n return rows;\n }\n release(): void {\n this.conn.release();\n }\n}\n\nclass MysqlDataSource implements DataSource {\n dialect: Dialect;\n plugins: Plugin[];\n private pool: any;\n\n constructor(public config: DataSourceConfig) {\n this.dialect = createDialect('mysql');\n this.plugins = config.plugins ?? [];\n }\n\n private async getPool() {\n if (!this.pool) {\n const mysql2 = await import('mysql2/promise');\n this.pool = mysql2.createPool({\n host: this.config.host ?? 'localhost',\n port: this.config.port ?? 3306,\n database: this.config.database,\n user: this.config.username,\n password: this.config.password,\n waitForConnections: true,\n connectionLimit: this.config.pool?.max ?? 10,\n });\n }\n return this.pool;\n }\n\n async getConnection(): Promise<Connection> {\n const pool = await this.getPool();\n const conn = await pool.getConnection();\n return new MysqlConnection(conn);\n }\n\n async execute(sql: string, params: any[]): Promise<any> {\n const txResult = await txAwareExecute(this, sql, params);\n if (txResult !== null) return txResult;\n const pool = await this.getPool();\n const [rows] = await pool.execute(sql, params);\n return rows;\n }\n\n async transaction<T>(fn: (tx: TransactionContext) => Promise<T>): Promise<T> {\n const pool = await this.getPool();\n const conn = await pool.getConnection();\n await conn.beginTransaction();\n const tx: TransactionContext = {\n connection: new MysqlConnection(conn),\n async commit() { await conn.commit(); },\n async rollback() { await conn.rollback(); },\n };\n try {\n const result = await fn(tx);\n await conn.commit();\n return result;\n } catch (e) {\n await conn.rollback();\n throw e;\n } finally {\n conn.release();\n }\n }\n\n async close(): Promise<void> {\n if (this.pool) await this.pool.end();\n }\n}\n\n// ============ PostgreSQL DataSource ============\n\nclass PgConnection implements Connection {\n constructor(private client: any) {}\n async query(sql: string, params: any[]): Promise<any> {\n const result = await this.client.query(sql, params);\n return result.rows;\n }\n release(): void {\n this.client.release();\n }\n}\n\nclass PostgresDataSource implements DataSource {\n dialect: Dialect;\n plugins: Plugin[];\n private pool: any;\n\n constructor(public config: DataSourceConfig) {\n this.dialect = createDialect('postgres');\n this.plugins = config.plugins ?? [];\n }\n\n private async getPool() {\n if (!this.pool) {\n const { Pool } = await import('pg');\n this.pool = new Pool({\n host: this.config.host ?? 'localhost',\n port: this.config.port ?? 5432,\n database: this.config.database,\n user: this.config.username,\n password: this.config.password,\n min: this.config.pool?.min ?? 2,\n max: this.config.pool?.max ?? 10,\n idleTimeoutMillis: this.config.pool?.idleTimeout ?? 30000,\n });\n }\n return this.pool;\n }\n\n async getConnection(): Promise<Connection> {\n const pool = await this.getPool();\n const client = await pool.connect();\n return new PgConnection(client);\n }\n\n async execute(sql: string, params: any[]): Promise<any> {\n const txResult = await txAwareExecute(this, sql, params);\n if (txResult !== null) return txResult;\n const pool = await this.getPool();\n const result = await pool.query(sql, params);\n return result.rows;\n }\n\n async transaction<T>(fn: (tx: TransactionContext) => Promise<T>): Promise<T> {\n const pool = await this.getPool();\n const client = await pool.connect();\n await client.query('BEGIN');\n const tx: TransactionContext = {\n connection: new PgConnection(client),\n async commit() { await client.query('COMMIT'); },\n async rollback() { await client.query('ROLLBACK'); },\n };\n try {\n const result = await fn(tx);\n await client.query('COMMIT');\n return result;\n } catch (e) {\n await client.query('ROLLBACK');\n throw e;\n } finally {\n client.release();\n }\n }\n\n async close(): Promise<void> {\n if (this.pool) await this.pool.end();\n }\n}\n\n// ============ SQLite DataSource ============\n\nclass SqliteConnection implements Connection {\n constructor(private db: any) {}\n async query(sql: string, params: any[]): Promise<any> {\n const trimmed = sql.trimStart().toUpperCase();\n if (trimmed.startsWith('SELECT') || trimmed.startsWith('WITH')) {\n return this.db.prepare(sql).all(...params);\n }\n return this.db.prepare(sql).run(...params);\n }\n release(): void {\n // SQLite connections are not pooled\n }\n}\n\nclass SqliteDataSource implements DataSource {\n dialect: Dialect;\n plugins: Plugin[];\n private db: any;\n\n constructor(public config: DataSourceConfig) {\n this.dialect = createDialect('sqlite');\n this.plugins = config.plugins ?? [];\n }\n\n private getDb() {\n if (!this.db) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const Database = require('better-sqlite3');\n this.db = new Database(this.config.database);\n this.db.pragma('journal_mode = WAL');\n }\n return this.db;\n }\n\n async getConnection(): Promise<Connection> {\n return new SqliteConnection(this.getDb());\n }\n\n async execute(sql: string, params: any[]): Promise<any> {\n const txResult = await txAwareExecute(this, sql, params);\n if (txResult !== null) return txResult;\n const conn = await this.getConnection();\n return conn.query(sql, params);\n }\n\n async transaction<T>(fn: (tx: TransactionContext) => Promise<T>): Promise<T> {\n const db = this.getDb();\n const conn = new SqliteConnection(db);\n db.prepare('BEGIN').run();\n const tx: TransactionContext = {\n connection: conn,\n async commit() { db.prepare('COMMIT').run(); },\n async rollback() { db.prepare('ROLLBACK').run(); },\n };\n try {\n const result = await fn(tx);\n db.prepare('COMMIT').run();\n return result;\n } catch (e) {\n db.prepare('ROLLBACK').run();\n throw e;\n }\n }\n\n async close(): Promise<void> {\n if (this.db) this.db.close();\n }\n}\n\n// ============ Factory ============\n\nexport function createDataSource(config: DataSourceConfig): DataSource {\n switch (config.type) {\n case 'mysql': return new MysqlDataSource(config);\n case 'postgres': return new PostgresDataSource(config);\n case 'sqlite': return new SqliteDataSource(config);\n default: throw new Error(`Unsupported database type: ${config.type}`);\n }\n}\n","import type { Condition, ConditionGroup, OrderByItem, EntityMeta } from '../types';\n\nexport class AbstractWrapper<T, Self extends AbstractWrapper<T, Self>> {\n protected conditionGroup: ConditionGroup = { logic: 'AND', items: [] };\n protected _orderBy: OrderByItem[] = [];\n protected _groupBy: string[] = [];\n protected _having: ConditionGroup | null = null;\n\n constructor(protected entityMeta: EntityMeta) {}\n\n // ---- 条件方法 ----\n\n eq(column: keyof T & string, value: any): Self;\n eq(condition: boolean, column: keyof T & string, value: any): Self;\n eq(...args: any[]): Self {\n return this.addCondition('=', args);\n }\n\n ne(column: keyof T & string, value: any): Self;\n ne(condition: boolean, column: keyof T & string, value: any): Self;\n ne(...args: any[]): Self {\n return this.addCondition('!=', args);\n }\n\n gt(column: keyof T & string, value: any): Self;\n gt(condition: boolean, column: keyof T & string, value: any): Self;\n gt(...args: any[]): Self {\n return this.addCondition('>', args);\n }\n\n ge(column: keyof T & string, value: any): Self;\n ge(condition: boolean, column: keyof T & string, value: any): Self;\n ge(...args: any[]): Self {\n return this.addCondition('>=', args);\n }\n\n lt(column: keyof T & string, value: any): Self;\n lt(condition: boolean, column: keyof T & string, value: any): Self;\n lt(...args: any[]): Self {\n return this.addCondition('<', args);\n }\n\n le(column: keyof T & string, value: any): Self;\n le(condition: boolean, column: keyof T & string, value: any): Self;\n le(...args: any[]): Self {\n return this.addCondition('<=', args);\n }\n\n like(column: keyof T & string, value: string): Self;\n like(condition: boolean, column: keyof T & string, value: string): Self;\n like(...args: any[]): Self {\n return this.addCondition('LIKE', args, v => `%${v}%`);\n }\n\n likeLeft(column: keyof T & string, value: string): Self;\n likeLeft(condition: boolean, column: keyof T & string, value: string): Self;\n likeLeft(...args: any[]): Self {\n return this.addCondition('LIKE', args, v => `%${v}`);\n }\n\n likeRight(column: keyof T & string, value: string): Self;\n likeRight(condition: boolean, column: keyof T & string, value: string): Self;\n likeRight(...args: any[]): Self {\n return this.addCondition('LIKE', args, v => `${v}%`);\n }\n\n between(column: keyof T & string, val1: any, val2: any): Self;\n between(condition: boolean, column: keyof T & string, val1: any, val2: any): Self;\n between(...args: any[]): Self {\n const { active, column, values } = this.parseArgs(args, 2);\n if (active) {\n this.conditionGroup.items.push({\n column: this.resolveColumn(column),\n op: 'BETWEEN',\n value: values[0],\n value2: values[1],\n });\n }\n return this as unknown as Self;\n }\n\n in(column: keyof T & string, values: any[]): Self;\n in(condition: boolean, column: keyof T & string, values: any[]): Self;\n in(...args: any[]): Self {\n return this.addCondition('IN', args);\n }\n\n notIn(column: keyof T & string, values: any[]): Self;\n notIn(condition: boolean, column: keyof T & string, values: any[]): Self;\n notIn(...args: any[]): Self {\n return this.addCondition('NOT IN', args);\n }\n\n isNull(column: keyof T & string): Self;\n isNull(condition: boolean, column: keyof T & string): Self;\n isNull(...args: any[]): Self {\n const hasCondition = typeof args[0] === 'boolean';\n const active = hasCondition ? args[0] : true;\n const column = hasCondition ? args[1] : args[0];\n if (active) {\n this.conditionGroup.items.push({ column: this.resolveColumn(column), op: 'IS NULL' });\n }\n return this as unknown as Self;\n }\n\n isNotNull(column: keyof T & string): Self;\n isNotNull(condition: boolean, column: keyof T & string): Self;\n isNotNull(...args: any[]): Self {\n const hasCondition = typeof args[0] === 'boolean';\n const active = hasCondition ? args[0] : true;\n const column = hasCondition ? args[1] : args[0];\n if (active) {\n this.conditionGroup.items.push({ column: this.resolveColumn(column), op: 'IS NOT NULL' });\n }\n return this as unknown as Self;\n }\n\n or(fn: (w: Self) => void): Self {\n const sub = this.createNested('OR');\n fn(sub);\n const nested = (sub as unknown as AbstractWrapper<T, Self>).conditionGroup;\n if (nested.items.length) this.conditionGroup.items.push(nested);\n return this as unknown as Self;\n }\n\n and(fn: (w: Self) => void): Self {\n const sub = this.createNested('AND');\n fn(sub);\n const nested = (sub as unknown as AbstractWrapper<T, Self>).conditionGroup;\n if (nested.items.length) this.conditionGroup.items.push(nested);\n return this as unknown as Self;\n }\n\n // ---- 排序 & 分组 ----\n\n orderByAsc(...columns: (keyof T & string)[]): Self {\n for (const c of columns) this._orderBy.push({ column: this.resolveColumn(c), direction: 'ASC' });\n return this as unknown as Self;\n }\n\n orderByDesc(...columns: (keyof T & string)[]): Self {\n for (const c of columns) this._orderBy.push({ column: this.resolveColumn(c), direction: 'DESC' });\n return this as unknown as Self;\n }\n\n groupBy(...columns: (keyof T & string)[]): Self {\n this._groupBy.push(...columns.map(c => this.resolveColumn(c)));\n return this as unknown as Self;\n }\n\n // ---- 内部方法 ----\n\n protected resolveColumn(propertyName: string): string {\n const col = this.entityMeta.columns.find(c => c.propertyName === propertyName);\n return col ? col.columnName : propertyName;\n }\n\n getConditionGroup(): ConditionGroup { return this.conditionGroup; }\n getOrderBy(): OrderByItem[] { return this._orderBy; }\n getGroupBy(): string[] { return this._groupBy; }\n getHaving(): ConditionGroup | null { return this._having; }\n\n private addCondition(op: Condition['op'], args: any[], transform?: (v: any) => any): Self {\n const { active, column, values } = this.parseArgs(args, 1);\n if (active) {\n const value = transform ? transform(values[0]) : values[0];\n this.conditionGroup.items.push({ column: this.resolveColumn(column), op, value });\n }\n return this as unknown as Self;\n }\n\n private parseArgs(args: any[], valueCount: number): { active: boolean; column: string; values: any[] } {\n const hasCondition = typeof args[0] === 'boolean';\n const offset = hasCondition ? 1 : 0;\n return {\n active: hasCondition ? args[0] : true,\n column: args[offset],\n values: args.slice(offset + 1, offset + 1 + valueCount),\n };\n }\n\n private createNested(logic: 'AND' | 'OR'): Self {\n const Ctor = this.constructor as new (meta: EntityMeta) => Self;\n const nested = new Ctor(this.entityMeta);\n (nested as unknown as AbstractWrapper<T, Self>).conditionGroup = { logic, items: [] };\n return nested;\n }\n}\n","import type { Dialect, SqlNode, SelectNode, InsertNode, UpdateNode, DeleteNode, ConditionGroup, Condition } from '../types';\n\nexport interface CompiledSql {\n sql: string;\n params: any[];\n}\n\nexport class SqlBuilder {\n private params: any[] = [];\n private paramIndex = 0;\n\n constructor(private dialect: Dialect) {}\n\n build(node: SqlNode): CompiledSql {\n this.params = [];\n this.paramIndex = 0;\n let sql: string;\n switch (node.type) {\n case 'select': sql = this.buildSelect(node); break;\n case 'insert': sql = this.buildInsert(node); break;\n case 'update': sql = this.buildUpdate(node); break;\n case 'delete': sql = this.buildDelete(node); break;\n }\n return { sql, params: this.params };\n }\n\n private buildSelect(node: SelectNode): string {\n const cols = node.columns.length ? node.columns.map(c => this.q(c)).join(', ') : '*';\n let sql = `SELECT ${cols} FROM ${this.q(node.table)}`;\n if (node.where) {\n const w = this.buildConditionGroup(node.where);\n if (w) sql += ` WHERE ${w}`;\n }\n if (node.groupBy.length) {\n sql += ` GROUP BY ${node.groupBy.map(c => this.q(c)).join(', ')}`;\n }\n if (node.having) {\n const h = this.buildConditionGroup(node.having);\n if (h) sql += ` HAVING ${h}`;\n }\n if (node.orderBy.length) {\n sql += ` ORDER BY ${node.orderBy.map(o => `${this.q(o.column)} ${o.direction}`).join(', ')}`;\n }\n if (node.limit) {\n sql = this.dialect.paginate(sql, node.limit.offset, node.limit.count);\n }\n return sql;\n }\n\n private buildInsert(node: InsertNode): string {\n const cols = node.columns.map(c => this.q(c)).join(', ');\n const rows = node.values.map(row => {\n const placeholders = row.map(v => this.addParam(v));\n return `(${placeholders.join(', ')})`;\n }).join(', ');\n return `INSERT INTO ${this.q(node.table)} (${cols}) VALUES ${rows}`;\n }\n\n private buildUpdate(node: UpdateNode): string {\n const sets = node.sets.map(s => `${this.q(s.column)} = ${this.addParam(s.value)}`).join(', ');\n let sql = `UPDATE ${this.q(node.table)} SET ${sets}`;\n if (node.where) {\n const w = this.buildConditionGroup(node.where);\n if (w) sql += ` WHERE ${w}`;\n }\n return sql;\n }\n\n private buildDelete(node: DeleteNode): string {\n let sql = `DELETE FROM ${this.q(node.table)}`;\n if (node.where) {\n const w = this.buildConditionGroup(node.where);\n if (w) sql += ` WHERE ${w}`;\n }\n return sql;\n }\n\n private buildConditionGroup(group: ConditionGroup): string {\n const parts: string[] = [];\n for (const item of group.items) {\n if ('logic' in item) {\n const sub = this.buildConditionGroup(item);\n if (sub) parts.push(`(${sub})`);\n } else {\n parts.push(this.buildCondition(item));\n }\n }\n return parts.join(` ${group.logic} `);\n }\n\n private buildCondition(cond: Condition): string {\n const col = this.q(cond.column);\n switch (cond.op) {\n case 'IS NULL': return `${col} IS NULL`;\n case 'IS NOT NULL': return `${col} IS NOT NULL`;\n case 'BETWEEN': return `${col} BETWEEN ${this.addParam(cond.value)} AND ${this.addParam(cond.value2)}`;\n case 'IN':\n case 'NOT IN': {\n const list = (cond.value as any[]).map(v => this.addParam(v)).join(', ');\n return `${col} ${cond.op} (${list})`;\n }\n default:\n return `${col} ${cond.op} ${this.addParam(cond.value)}`;\n }\n }\n\n private addParam(value: any): string {\n this.params.push(value);\n return this.dialect.placeholder(++this.paramIndex);\n }\n\n private q(identifier: string): string {\n return this.dialect.quote(identifier);\n }\n}\n","import type { Plugin, PluginContext, SqlNode, EntityMeta, DataSource } from '../types';\n\n/**\n * 按 order 排序后依次执行插件的 beforeExecute,\n * 执行 SQL,再依次执行 afterExecute,返回最终结果。\n */\nexport async function runPlugins(\n ds: DataSource,\n node: SqlNode,\n sql: string,\n params: any[],\n entityMeta: EntityMeta,\n): Promise<any> {\n const plugins = [...ds.plugins].sort((a, b) => a.order - b.order);\n const ctx: PluginContext = { node, sql, params, entityMeta };\n\n // beforeExecute\n for (const p of plugins) {\n if (p.beforeExecute) {\n await p.beforeExecute(ctx);\n }\n }\n\n // 执行(使用可能被插件修改过的 sql / params)\n let result = await ds.execute(ctx.sql, ctx.params);\n\n // afterExecute\n for (const p of plugins) {\n if (p.afterExecute) {\n const r = await p.afterExecute(ctx, result);\n if (r !== undefined) result = r;\n }\n }\n\n return result;\n}\n","import type { EntityMeta, SelectNode, DataSource, Page } from '../types';\nimport { AbstractWrapper } from './abstract-wrapper';\nimport { SqlBuilder } from '../builder/sql-builder';\nimport { runPlugins } from '../plugin/runner';\n\nexport class LambdaQueryWrapper<T> extends AbstractWrapper<T, LambdaQueryWrapper<T>> {\n private _columns: string[] = [];\n private _limit: { offset: number; count: number } | null = null;\n private _datasource: DataSource | null = null;\n\n constructor(entityMeta: EntityMeta) {\n super(entityMeta);\n }\n\n /** 绑定数据源(由 BaseMapper 调用) */\n bindDataSource(ds: DataSource): this {\n this._datasource = ds;\n return this;\n }\n\n select(...columns: (keyof T & string)[]): this {\n this._columns = columns.map(c => this.resolveColumn(c));\n return this;\n }\n\n page(page: number, size: number): this {\n this._limit = { offset: (page - 1) * size, count: size };\n return this;\n }\n\n /** 构建 SelectNode AST */\n buildSelectNode(): SelectNode {\n return {\n type: 'select',\n table: this.entityMeta.tableName,\n columns: this._columns,\n where: this.conditionGroup.items.length ? this.conditionGroup : null,\n orderBy: this._orderBy,\n groupBy: this._groupBy,\n having: this._having,\n limit: this._limit,\n };\n }\n\n /** 终结操作:执行查询返回列表 */\n async list(): Promise<T[]> {\n const ds = this.requireDs();\n const node = this.buildSelectNode();\n const builder = new SqlBuilder(ds.dialect);\n const { sql, params } = builder.build(node);\n if (ds.plugins.length) {\n return runPlugins(ds, node, sql, params, this.entityMeta) as Promise<T[]>;\n }\n return ds.execute(sql, params) as Promise<T[]>;\n }\n\n /** 终结操作:查询单条 */\n async one(): Promise<T | null> {\n this._limit = { offset: 0, count: 1 };\n const list = await this.list();\n return list[0] ?? null;\n }\n\n /** 终结操作:查询数量 */\n async count(): Promise<number> {\n const ds = this.requireDs();\n const node: SelectNode = {\n ...this.buildSelectNode(),\n columns: [],\n orderBy: [],\n limit: null,\n };\n // 手动构建 COUNT SQL\n const builder = new SqlBuilder(ds.dialect);\n const { sql, params } = builder.build(node);\n const countSql = sql.replace(/^SELECT \\* FROM/, 'SELECT COUNT(*) AS total FROM');\n let rows: any;\n if (ds.plugins.length) {\n rows = await runPlugins(ds, node, countSql, params, this.entityMeta);\n } else {\n rows = await ds.execute(countSql, params);\n }\n return Number(rows[0]?.total ?? rows[0]?.count ?? 0);\n }\n\n /** 终结操作:分页查询 */\n async pageResult(page: number, size: number): Promise<Page<T>> {\n this._limit = { offset: (page - 1) * size, count: size };\n const [records, total] = await Promise.all([\n this.list(),\n this.count(),\n ]);\n return {\n records,\n total,\n page,\n size,\n pages: Math.ceil(total / size),\n };\n }\n\n private requireDs(): DataSource {\n if (!this._datasource) throw new Error('DataSource not bound. Use BaseMapper to create wrapper.');\n return this._datasource;\n }\n}\n","import type { EntityMeta, UpdateNode, DataSource } from '../types';\nimport { AbstractWrapper } from './abstract-wrapper';\nimport { SqlBuilder } from '../builder/sql-builder';\nimport { runPlugins } from '../plugin/runner';\n\nexport class LambdaUpdateWrapper<T> extends AbstractWrapper<T, LambdaUpdateWrapper<T>> {\n private _sets: { column: string; value: any }[] = [];\n private _datasource: DataSource | null = null;\n\n constructor(entityMeta: EntityMeta) {\n super(entityMeta);\n }\n\n bindDataSource(ds: DataSource): this {\n this._datasource = ds;\n return this;\n }\n\n set(column: keyof T & string, value: any): this;\n set(condition: boolean, column: keyof T & string, value: any): this;\n set(...args: any[]): this {\n const hasCondition = typeof args[0] === 'boolean';\n const active = hasCondition ? args[0] : true;\n const column = hasCondition ? args[1] : args[0];\n const value = hasCondition ? args[2] : args[1];\n if (active) {\n this._sets.push({ column: this.resolveColumn(column), value });\n }\n return this;\n }\n\n buildUpdateNode(): UpdateNode {\n return {\n type: 'update',\n table: this.entityMeta.tableName,\n sets: this._sets,\n where: this.conditionGroup.items.length ? this.conditionGroup : null,\n };\n }\n\n async execute(): Promise<number> {\n if (!this._datasource) throw new Error('DataSource not bound.');\n if (!this._sets.length) throw new Error('No SET clause specified.');\n const node = this.buildUpdateNode();\n const builder = new SqlBuilder(this._datasource.dialect);\n const { sql, params } = builder.build(node);\n let result: any;\n if (this._datasource.plugins.length) {\n result = await runPlugins(this._datasource, node, sql, params, this.entityMeta);\n } else {\n result = await this._datasource.execute(sql, params);\n }\n return result?.affectedRows ?? result?.rowCount ?? result?.changes ?? 0;\n }\n}\n","import type { DataSource, EntityMeta, InsertNode, DeleteNode, Page, PluginContext, SqlNode } from '../types';\nimport { getEntityMeta } from '../decorator';\nimport { SqlBuilder } from '../builder/sql-builder';\nimport { LambdaQueryWrapper } from '../wrapper/query-wrapper';\nimport { LambdaUpdateWrapper } from '../wrapper/update-wrapper';\nimport { runPlugins } from '../plugin/runner';\n\nexport class BaseMapper<T extends object> {\n protected entityMeta: EntityMeta;\n protected ds: DataSource;\n\n constructor(entityClass: Function, datasource: DataSource) {\n this.entityMeta = getEntityMeta(entityClass);\n this.ds = datasource;\n }\n\n // ---- 链式入口 ----\n\n lambdaQuery(): LambdaQueryWrapper<T> {\n return new LambdaQueryWrapper<T>(this.entityMeta).bindDataSource(this.ds);\n }\n\n lambdaUpdate(): LambdaUpdateWrapper<T> {\n return new LambdaUpdateWrapper<T>(this.entityMeta).bindDataSource(this.ds);\n }\n\n // ---- 新增 ----\n\n async insert(entity: Partial<T>): Promise<number> {\n const { columns, values } = this.extractColumns(entity);\n const node: InsertNode = { type: 'insert', table: this.entityMeta.tableName, columns, values: [values] };\n const { sql, params } = new SqlBuilder(this.ds.dialect).build(node);\n const result = await this.executeWithPlugins(node, sql, params);\n return result?.insertId ?? result?.[0]?.id ?? result?.lastInsertRowid ?? 0;\n }\n\n async insertBatch(entities: Partial<T>[]): Promise<number> {\n if (!entities.length) return 0;\n const cols = this.getInsertableColumns();\n const columns = cols.map(c => c.columnName);\n const values = entities.map(e => cols.map(c => (e as any)[c.propertyName]));\n const node: InsertNode = { type: 'insert', table: this.entityMeta.tableName, columns, values };\n const { sql, params } = new SqlBuilder(this.ds.dialect).build(node);\n const result = await this.executeWithPlugins(node, sql, params);\n return result?.affectedRows ?? result?.rowCount ?? result?.changes ?? entities.length;\n }\n\n // ---- 删除 ----\n\n async deleteById(id: any): Promise<number> {\n const idCol = this.requireIdColumn();\n const node: DeleteNode = {\n type: 'delete',\n table: this.entityMeta.tableName,\n where: { logic: 'AND', items: [{ column: idCol.columnName, op: '=', value: id }] },\n };\n const { sql, params } = new SqlBuilder(this.ds.dialect).build(node);\n const result = await this.executeWithPlugins(node, sql, params);\n return result?.affectedRows ?? result?.rowCount ?? result?.changes ?? 0;\n }\n\n async deleteBatchIds(ids: any[]): Promise<number> {\n if (!ids.length) return 0;\n const idCol = this.requireIdColumn();\n const node: DeleteNode = {\n type: 'delete',\n table: this.entityMeta.tableName,\n where: { logic: 'AND', items: [{ column: idCol.columnName, op: 'IN', value: ids }] },\n };\n const { sql, params } = new SqlBuilder(this.ds.dialect).build(node);\n const result = await this.executeWithPlugins(node, sql, params);\n return result?.affectedRows ?? result?.rowCount ?? result?.changes ?? 0;\n }\n\n async delete(wrapper: LambdaQueryWrapper<T>): Promise<number> {\n const group = wrapper.getConditionGroup();\n const node: DeleteNode = {\n type: 'delete',\n table: this.entityMeta.tableName,\n where: group.items.length ? group : null,\n };\n const { sql, params } = new SqlBuilder(this.ds.dialect).build(node);\n const result = await this.executeWithPlugins(node, sql, params);\n return result?.affectedRows ?? result?.rowCount ?? result?.changes ?? 0;\n }\n\n // ---- 修改 ----\n\n async updateById(entity: Partial<T>): Promise<number> {\n const idCol = this.requireIdColumn();\n const idValue = (entity as any)[idCol.propertyName];\n if (idValue == null) throw new Error('Entity must have id value for updateById');\n const sets = this.entityMeta.columns\n .filter(c => c.exist && !c.isPrimary && (entity as any)[c.propertyName] !== undefined)\n .map(c => ({ column: c.columnName, value: (entity as any)[c.propertyName] }));\n if (!sets.length) throw new Error('No fields to update');\n const node = {\n type: 'update' as const,\n table: this.entityMeta.tableName,\n sets,\n where: { logic: 'AND' as const, items: [{ column: idCol.columnName, op: '=' as const, value: idValue }] },\n };\n const { sql, params } = new SqlBuilder(this.ds.dialect).build(node);\n const result = await this.executeWithPlugins(node, sql, params);\n return result?.affectedRows ?? result?.rowCount ?? result?.changes ?? 0;\n }\n\n async update(entity: Partial<T>, wrapper: LambdaQueryWrapper<T>): Promise<number> {\n const sets = this.entityMeta.columns\n .filter(c => c.exist && !c.isPrimary && (entity as any)[c.propertyName] !== undefined)\n .map(c => ({ column: c.columnName, value: (entity as any)[c.propertyName] }));\n if (!sets.length) throw new Error('No fields to update');\n const group = wrapper.getConditionGroup();\n const node = {\n type: 'update' as const,\n table: this.entityMeta.tableName,\n sets,\n where: group.items.length ? group : null,\n };\n const { sql, params } = new SqlBuilder(this.ds.dialect).build(node);\n const result = await this.executeWithPlugins(node, sql, params);\n return result?.affectedRows ?? result?.rowCount ?? result?.changes ?? 0;\n }\n\n // ---- 查询 ----\n\n async selectById(id: any): Promise<T | null> {\n const idCol = this.requireIdColumn();\n return this.lambdaQuery().eq(idCol.propertyName as keyof T & string, id).one();\n }\n\n async selectBatchIds(ids: any[]): Promise<T[]> {\n if (!ids.length) return [];\n const idCol = this.requireIdColumn();\n return this.lambdaQuery().in(idCol.propertyName as keyof T & string, ids).list();\n }\n\n async selectOne(wrapper: LambdaQueryWrapper<T>): Promise<T | null> {\n return wrapper.one();\n }\n\n async selectList(wrapper?: LambdaQueryWrapper<T>): Promise<T[]> {\n return (wrapper ?? this.lambdaQuery()).list();\n }\n\n async selectCount(wrapper?: LambdaQueryWrapper<T>): Promise<number> {\n return (wrapper ?? this.lambdaQuery()).count();\n }\n\n async selectPage(page: number, size: number, wrapper?: LambdaQueryWrapper<T>): Promise<Page<T>> {\n return (wrapper ?? this.lambdaQuery()).pageResult(page, size);\n }\n\n // ---- 自定义 SQL ----\n\n async rawQuery(sql: string, params: Record<string, any> = {}): Promise<any> {\n const { parsedSql, parsedParams } = this.parseNamedParams(sql, params);\n return this.ds.execute(parsedSql, parsedParams);\n }\n\n // ---- 内部方法 ----\n\n private extractColumns(entity: Partial<T>): { columns: string[]; values: any[] } {\n const cols = this.getInsertableColumns().filter(c => (entity as any)[c.propertyName] !== undefined);\n return {\n columns: cols.map(c => c.columnName),\n values: cols.map(c => (entity as any)[c.propertyName]),\n };\n }\n\n private getInsertableColumns() {\n return this.entityMeta.columns.filter(c => c.exist && !(c.isPrimary && c.idType === 'auto'));\n }\n\n private requireIdColumn() {\n if (!this.entityMeta.idColumn) throw new Error(`No @Id defined on ${this.entityMeta.target.name}`);\n return this.entityMeta.idColumn;\n }\n\n private parseNamedParams(sql: string, params: Record<string, any>): { parsedSql: string; parsedParams: any[] } {\n const parsedParams: any[] = [];\n let index = 0;\n const parsedSql = sql.replace(/#\\{(\\w+)\\}/g, (_, key) => {\n parsedParams.push(params[key]);\n return this.ds.dialect.placeholder(++index);\n });\n return { parsedSql, parsedParams };\n }\n\n /** 通过插件链路执行 SQL */\n private executeWithPlugins(node: SqlNode, sql: string, params: any[]): Promise<any> {\n if (this.ds.plugins.length) {\n return runPlugins(this.ds, node, sql, params, this.entityMeta);\n }\n return this.ds.execute(sql, params);\n }\n}\n"],"mappings":"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","names":["rows"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "node-mybatis-plus",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MyBatis-Plus style ORM for Node.js with lambda query, dynamic SQL and multi-database support",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsup",
|
|
20
|
+
"dev": "tsup --watch",
|
|
21
|
+
"test": "vitest",
|
|
22
|
+
"prepublishOnly": "npm run build",
|
|
23
|
+
"docs:dev": "cd docs-site && npx vitepress dev",
|
|
24
|
+
"docs:build": "cd docs-site && npx vitepress build"
|
|
25
|
+
},
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/ZtfCoder/node-mybatis-plus.git"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://ztfcoder.github.io/node-mybatis-plus/",
|
|
31
|
+
"bugs": {
|
|
32
|
+
"url": "https://github.com/ZtfCoder/node-mybatis-plus/issues"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"orm",
|
|
36
|
+
"mybatis",
|
|
37
|
+
"mybatis-plus",
|
|
38
|
+
"lambda-query",
|
|
39
|
+
"typescript"
|
|
40
|
+
],
|
|
41
|
+
"license": "MIT",
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
44
|
+
"@types/node": "^25.5.0",
|
|
45
|
+
"@types/pg": "^8.20.0",
|
|
46
|
+
"better-sqlite3": "^12.8.0",
|
|
47
|
+
"mysql2": "^3.20.0",
|
|
48
|
+
"pg": "^8.20.0",
|
|
49
|
+
"tsup": "^8.0.0",
|
|
50
|
+
"typescript": "^5.4.0",
|
|
51
|
+
"vitest": "^1.6.0"
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"reflect-metadata": "^0.2.2"
|
|
55
|
+
},
|
|
56
|
+
"peerDependencies": {
|
|
57
|
+
"better-sqlite3": "^11.0.0",
|
|
58
|
+
"mysql2": "^3.0.0",
|
|
59
|
+
"pg": "^8.0.0"
|
|
60
|
+
},
|
|
61
|
+
"peerDependenciesMeta": {
|
|
62
|
+
"mysql2": {
|
|
63
|
+
"optional": true
|
|
64
|
+
},
|
|
65
|
+
"pg": {
|
|
66
|
+
"optional": true
|
|
67
|
+
},
|
|
68
|
+
"better-sqlite3": {
|
|
69
|
+
"optional": true
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|