Skip to content

Commit

Permalink
feat: Faster requiring using optional lazy loading (#526)
Browse files Browse the repository at this point in the history
* Faster requires test

* Change JSDoc and type definitions for ease of testing
  • Loading branch information
wolfenrain committed Feb 25, 2020
1 parent deca8ff commit 25ec77d
Show file tree
Hide file tree
Showing 3 changed files with 211 additions and 71 deletions.
66 changes: 53 additions & 13 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,59 @@ var initializer = function(accountSid, authToken, opts) {

// Main functional components of the Twilio module
initializer.Twilio = Twilio;
initializer.jwt = {
AccessToken: require('./jwt/AccessToken'),
ClientCapability: require('./jwt/ClientCapability'),
taskrouter: {
TaskRouterCapability: require('./jwt/taskrouter/TaskRouterCapability'),
util: require('./jwt/taskrouter/util')
}
};
initializer.twiml = {
VoiceResponse: require('./twiml/VoiceResponse'),
MessagingResponse: require('./twiml/MessagingResponse'),
FaxResponse: require('./twiml/FaxResponse')
};
initializer.jwt = { };
initializer.twiml = { };

var AccessToken;
Object.defineProperty(initializer.jwt,
'AccessToken', {
get: function() {
return AccessToken = AccessToken || require('./jwt/AccessToken');
}
});

var ClientCapability;
Object.defineProperty(initializer.jwt,
'ClientCapability', {
get: function() {
return ClientCapability = ClientCapability || require('./jwt/ClientCapability');
}
});

var taskrouter;
Object.defineProperty(initializer.jwt,
'taskrouter', {
get: function() {
return taskrouter = taskrouter || {
TaskRouterCapability: require('./jwt/taskrouter/TaskRouterCapability'),
util: require('./jwt/taskrouter/util')
};
}
});

var VoiceResponse;
Object.defineProperty(initializer.twiml,
'VoiceResponse', {
get: function() {
return VoiceResponse = VoiceResponse || require('./twiml/VoiceResponse');
}
});

var MessagingResponse;
Object.defineProperty(initializer.twiml,
'MessagingResponse', {
get: function() {
return MessagingResponse = MessagingResponse || require('./twiml/MessagingResponse');
}
});

var FaxResponse;
Object.defineProperty(initializer.twiml,
'FaxResponse', {
get: function() {
return FaxResponse = FaxResponse || require('./twiml/FaxResponse');
}
});

// Add obsolete clients
initializer.RestClient = obsolete.RestClient;
Expand Down
2 changes: 2 additions & 0 deletions lib/rest/Twilio.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,12 +144,14 @@ declare namespace Twilio {
* @property env - The environment object. Defaults to process.env
* @property httpClient - The client used for http requests. Defaults to RequestClient
* @property region - Twilio region to use. Defaults to none
* @property lazyLoading - Enable lazy loading or not, loading time will decrease in enabled
*/
export interface TwilioClientOptions {
accountSid?: string;
env?: object;
httpClient?: RequestClient;
region?: string;
lazyLoading?: boolean
}
}

Expand Down
Loading

0 comments on commit 25ec77d

Please sign in to comment.