Skip to content

Latest commit

 

History

History
108 lines (88 loc) · 3.1 KB

README.md

File metadata and controls

108 lines (88 loc) · 3.1 KB

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