Skip to content

jsarafajr/knex-soql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SOQL Dialect for Knex.js

Build Status codecov npm version Known Vulnerabilities

Knex.js dialect for building and executing Salesforce Queries (SOQL)

Install

npm install knex-soql

Usage

const client = require('knex-soql');
const knex = require('knex')({
  client,
  connection: {
    loginUrl: 'https://test.salesforce.com',
    login: 'example@mail.com',
    password: 'supersecret'
  }
});

const contacts = await knex('Contact')
  .select(['Id', 'Name'])
  .where({ Name: 'example' })
  .orderBy('CreatedBy')
  .limit(10);

Connection

All queries to Salesforce are performed using jsforce and all the connection properties passed down to jsforce.Connection constructor:

const client = require('knex-soql');
const knex = require('knex')({
  client,
  connection: {
    oauth2: {
      clientId: '<your Salesforce OAuth2 client ID is here>',
      clientSecret: '<your Salesforce OAuth2 client secret is here>',
      redirectUri: '<your Salesforce OAuth2 redirect URI is here>'
    },
    instanceUrl: '<your Salesforce server URL (e.g. https://na1.salesforce.com) is here>',
    accessToken: '<your Salesforrce OAuth2 access token is here>',
    refreshToken: '<your Salesforce OAuth2 refresh token is here>'
  }
});

Or you can even provide jsforce.Connection instance configured by yourself to knex along with knex-soql client:

const client = require('knex-soql');
const jsforce = require('jsforce');
const initKnex = require('knex');

const execute = async () => {
  const connection = new jsforce.Connection();
  await connection.login('example@mail.com', 'supersecret');

  const knex = initKnex({ client, connection });
  const contacts = await knex('Contact').select(['Id', 'Name']);
};

execute();

Query Builder

You can use knex-soql to build SOQL queries without execution:

const client = require('knex-soql');
const knex = require('knex')({ client });

const subquery = knex('Account.Contacts')
  .select(['Contact.Id', 'Contact.Name'])
  .orderBy('LastModifiedDate', 'desc')
  .limit(3);

const query = knex('Account')
  .select(['Id', 'Name', subquery])
  .where({ Id: '1337' });

console.log(query.toString());
/*
  select Id, Name, (
    select Contact.Id, Contact.Name
    from Account.Contacts
    order by LastModifiedDate desc
    limit 3
  )
  from Account
  where Id = '1337'
*/

Credits

Copyright and License

Copyright Yevhenii Baraniuk, 2017

MIT Licence