When an error occurs, we get the immediate stack trace but not the entire stack trace. This often results in traces like:
```
[Container] 2017/01/26 21:33:22 ServerlessError: Access Denied
[Container] 2017/01/26 21:33:22 at (/usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:177:20)
[Container] 2017/01/26 21:33:22 at Request.<anonymous> (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:355:18)
[Container] 2017/01/26 21:33:22 at Request.callListeners (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
[Container] 2017/01/26 21:33:22 at Request.emit (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
[Container] 2017/01/26 21:33:22 at Request.emit (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:668:14)
[Container] 2017/01/26 21:33:22 at Request.transition (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:22:10)
[Container] 2017/01/26 21:33:22 at AcceptorStateMachine.runTo (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/state_machine.js:14:12)
[Container] 2017/01/26 21:33:22 at /usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/state_machine.js:26:10
[Container] 2017/01/26 21:33:22 at Request.<anonymous> (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:38:9)
[Container] 2017/01/26 21:33:22 at Request.<anonymous> (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:670:12)
[Container] 2017/01/26 21:33:22 at Request.callListeners (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
[Container] 2017/01/26 21:33:22 at Request.emit (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
[Container] 2017/01/26 21:33:22 at Request.emit (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:668:14)
[Container] 2017/01/26 21:33:22 at Request.transition (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:22:10)
[Container] 2017/01/26 21:33:22 at AcceptorStateMachine.runTo (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/state_machine.js:14:12)
[Container] 2017/01/26 21:33:22 at /usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/state_machine.js:26:10
```
This tells me nothing about where the operation originated from that resulted in the "Access Denied" error. Thus, my sad face surfaces.
I like my happy face and its probability of showing increases when I have messages that look like:
```
[Container] 2017/01/26 22:33:13 ServerlessError: Access Denied
[Container] 2017/01/26 22:33:13 at Response.<anonymous> (/usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:162:20)
[Container] 2017/01/26 22:33:13 at Request.<anonymous> (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:355:18)
[Container] 2017/01/26 22:33:13 at Request.callListeners (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
[Container] 2017/01/26 22:33:13 at Request.emit (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
[Container] 2017/01/26 22:33:13 at Request.emit (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:668:14)
[Container] 2017/01/26 22:33:13 at Request.transition (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:22:10)
[Container] 2017/01/26 22:33:13 at AcceptorStateMachine.runTo (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/state_machine.js:14:12)
[Container] 2017/01/26 22:33:13 at /usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/state_machine.js:26:10
[Container] 2017/01/26 22:33:13 at Request.<anonymous> (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:38:9)
[Container] 2017/01/26 22:33:13 at Request.<anonymous> (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:670:12)
[Container] 2017/01/26 22:33:13 at Request.callListeners (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
[Container] 2017/01/26 22:33:13 at Request.emit (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
[Container] 2017/01/26 22:33:13 at Request.emit (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:668:14)
[Container] 2017/01/26 22:33:13 at Request.transition (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/request.js:22:10)
[Container] 2017/01/26 22:33:13 at AcceptorStateMachine.runTo (/usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/state_machine.js:14:12)
[Container] 2017/01/26 22:33:13 at /usr/local/lib/node_modules/serverless/node_modules/aws-sdk/lib/state_machine.js:26:10
[Container] 2017/01/26 22:33:13 From previous event:
[Container] 2017/01/26 22:33:13 at /usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:150:14
[Container] 2017/01/26 22:33:13 at doCall (/usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:129:9)
[Container] 2017/01/26 22:33:13 at /usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:140:14
[Container] 2017/01/26 22:33:13 From previous event:
[Container] 2017/01/26 22:33:13 at BbPromise (/usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:127:38)
[Container] 2017/01/26 22:33:13 at AwsProvider.request (/usr/local/lib/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:143:12)
[Container] 2017/01/26 22:33:13 at AwsDeploy.<anonymous> (/usr/local/lib/node_modules/serverless/lib/plugins/aws/deploy/lib/configureStack.js:23:35)
[Container] 2017/01/26 22:33:13 From previous event:
[Container] 2017/01/26 22:33:13 at AwsDeploy.configureStack (/usr/local/lib/node_modules/serverless/lib/plugins/aws/deploy/lib/configureStack.js:23:10)
[Container] 2017/01/26 22:33:13 From previous event:
[Container] 2017/01/26 22:33:13 at AwsDeploy.hooks.deploy:initialize (/usr/local/lib/node_modules/serverless/lib/plugins/aws/deploy/index.js:42:10)
[Container] 2017/01/26 22:33:13 at /usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:160:50
[Container] 2017/01/26 22:33:13 at processImmediate [as _immediateCallback] (timers.js:383:17)
[Container] 2017/01/26 22:33:13 From previous event:
[Container] 2017/01/26 22:33:13 at PluginManager.run (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:160:22)
[Container] 2017/01/26 22:33:13 at Serverless.run (/usr/local/lib/node_modules/serverless/lib/Serverless.js:91:31)
[Container] 2017/01/26 22:33:13 at /usr/local/lib/node_modules/serverless/bin/serverless:21:50
```
That is **clearly** (relatively speaking) a lack of S3 rights and I can fix that!
Add the possibility to access arguments inside plugins (e.g. "--function function1" or "-f function").
Additionally the "lifeCycleEvent" property is renamed to "lifecycleEvent".
- project load is truly used in async way now
- a number of typos related to misplaced ; or ,
- S.init() used properly and systematically throughout the code
- sPath indexOf usage now looks only at beginning of paths, to avoid bugs like "foo/bar-get".indexOf( "bar" ) mistakenly finding a component 'bar' within 'foo'