docs: function MarkLogicClient(connectionParams) {
    if (!(this instanceof MarkLogicClient)) {
      return new MarkLogicClient(connectionParams);
    }
  
    if (connectionParams == null) {
      throw new Error('no connection parameters');
    }
  
    initClient(this, connectionParams);
  
    /**
     * Provides functions that write, read, query, or perform other operations
     * on documents in the database. As a convenience, the same functions are
     * provided on the database client.
     * @name documents
     * @since 1.0
     * @memberof! DatabaseClient#
     * @type {documents}
     */
    this.documents    = documents.create(this);
    /**
     * Provides functions for performing relational operations
     * on indexed values and documents in the database.
     * @name rows
     * @since 2.1.1
     * @memberof! DatabaseClient#
     * @type {rows}
     */
    this.rows    = new Rows(this);
    /**
     * Provides functions that open, commit, or rollback multi-statement
     * transactions.
     * @name transactions
     * @since 1.0
     * @memberof! DatabaseClient#
     * @type {transactions}
     */
    this.transactions = new Transactions(this);
  
    /**
     * Provides functions that read, write, merge, remove, list, or query
     * with SPARQL on triple graphs.
     * @name graphs
     * @since 1.0
     * @memberof! DatabaseClient#
     * @type {graphs}
     */
    this.graphs = new Graphs(this);
    /**
     * Provides functions that submit get, put, post, or remove requests
     * to resource service extensions.
     * @name resources
     * @since 1.0
     * @memberof! DatabaseClient#
     * @type {resources}
     */
    this.resources = new ResourcesExec(this);
    /**
     * Provides functions that submit values queries to project
     * tuples (rows) of values from documents.
     * @name values
     * @since 1.0
     * @memberof! DatabaseClient#
     * @type {values}
     */
    this.values    = new Values(this);
  
    var configExtlibs = new ExtLibs(this);
  
    /**
     * Provides access to namespaces that configure the REST server for the client.
     * The client must have been created for a user with the rest-admin role.
     * @name config
     * @since 1.0
     * @memberof! DatabaseClient#
     * @property {config.extlibs} extlibs - provides functions that
     * maintain the extension libraries on the REST server
     * @property {config.patch.replace} patch.replace - provides functions that
     * maintain patch replacement libraries on the REST server
     * @property {config.query.custom} query.custom - provides functions that
     * maintain custom query binding or facet extensions on the REST server
     * @property {config.query.snippet} query.snippet - provides functions that
     * maintain query snippet extensions on the REST server
     * @property {config.resources} resources - provides functions that
     * maintain resource service extensions on the REST server
     * @property {config.serverprops} serverprops - provides functions that
     * modify the properties of the REST server
     * @property {config.transforms} transforms - provides functions that
     * maintain transform extensions on the REST server
     */
    this.config = {
        extlibs:     configExtlibs,
  
        patch: {
            replace: new ExtlibsWrapper(configExtlibs, 'patch replace', '/marklogic/patch/apply/')
        },
        query: {
            custom:  new ExtlibsWrapper(configExtlibs, 'custom query',  '/marklogic/query/custom/'),
            snippet: new ExtlibsWrapper(configExtlibs, 'query snippet', '/marklogic/snippet/custom/')
        },
  
        resources:   new ResourcesConfig(this),
  
        serverprops: new RESTServerProperties(this),
        transforms:  new Transforms(this)
    };
  
    this.logger = null;
  }