You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.1 KiB
JavaScript

var assign = require('lodash/object/assign');
var inherits = require('inherits')
// Ensure the client has fresh objects so we can tack onto
// the prototypes without mutating them globally.
module.exports = function makeClient(ParentClient) {
if (typeof ParentClient.prototype === 'undefined') {
throw new Error('A valid parent client must be passed to makeClient')
}
function Client(config) {
ParentClient.call(this, config)
}
inherits(Client, ParentClient)
function Formatter(client) {
Formatter.super_.call(this, client)
}
inherits(Formatter, ParentClient.prototype.Formatter)
function QueryBuilder(client) {
QueryBuilder.super_.call(this, client)
}
inherits(QueryBuilder, ParentClient.prototype.QueryBuilder)
function SchemaBuilder(client) {
SchemaBuilder.super_.call(this, client)
}
inherits(SchemaBuilder, ParentClient.prototype.SchemaBuilder)
function SchemaCompiler(client, builder) {
SchemaCompiler.super_.call(this, client, builder)
}
inherits(SchemaCompiler, ParentClient.prototype.SchemaCompiler)
function TableBuilder(client, method, tableName, fn) {
TableBuilder.super_.call(this, client, method, tableName, fn)
}
inherits(TableBuilder, ParentClient.prototype.TableBuilder)
function TableCompiler(client, tableBuilder) {
TableCompiler.super_.call(this, client, tableBuilder)
}
inherits(TableCompiler, ParentClient.prototype.TableCompiler)
function ColumnBuilder(client, tableBuilder, type, args) {
ColumnBuilder.super_.call(this, client, tableBuilder, type, args)
}
inherits(ColumnBuilder, ParentClient.prototype.ColumnBuilder)
function ColumnCompiler(client, tableCompiler, columnBuilder) {
ColumnCompiler.super_.call(this, client, tableCompiler, columnBuilder)
}
inherits(ColumnCompiler, ParentClient.prototype.ColumnCompiler)
assign(Client.prototype, {
Formatter: Formatter,
QueryBuilder: QueryBuilder,
SchemaBuilder: SchemaBuilder,
SchemaCompiler: SchemaCompiler,
TableBuilder: TableBuilder,
TableCompiler: TableCompiler,
ColumnBuilder: ColumnBuilder,
ColumnCompiler: ColumnCompiler
})
return Client
}