-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add wait command to CliCore and TemplateProcessor #19
Conversation
try { | ||
conditionExpression = jsonata(waitCondition); | ||
} catch (e) { | ||
this.logger.error(`invalid wait condition expression: ${waitCondition}, ${e}`); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure this is the right approach. I try to wrap functions in safe() so that I can simply throw error and rely on the framework to catch it and pack it into an {error:{...}} object
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've tried a few different approaches. I like with withErrorHandling to handling calling to an external function, where we don't know the context. In this case, I am handling errors from my own code execution, and I think we can do better with a custom error messages.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
but your custom error message will be used by withErrorHandling. All you need to do is throw an error:
private withErrorHandling(fn) {
return (...args) => {
try {
const result = fn(...args);
if (result instanceof Promise) {
return result.catch(error => {
this.logger.error(error.toString());
return {
"error": {
message: error.message,
name: error.name,
stack: error.stack,
}
};
});
}
return result;
} catch (error) {
this.logger.error(error.toString());
return {
"error": {
message: error.message,
name: error.name,
stack: error.stack,
}
};
}
};
};
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
^^^ see how withErrorHandling preserves these properties. So why don't you just catch(e) and set it's message, and rethrow it?
try { | ||
conditionExpression = jsonata(waitCondition); | ||
} catch (e) { | ||
this.logger.error(`invalid wait condition expression: ${waitCondition}, ${e}`); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
but your custom error message will be used by withErrorHandling. All you need to do is throw an error:
private withErrorHandling(fn) {
return (...args) => {
try {
const result = fn(...args);
if (result instanceof Promise) {
return result.catch(error => {
this.logger.error(error.toString());
return {
"error": {
message: error.message,
name: error.name,
stack: error.stack,
}
};
});
}
return result;
} catch (error) {
this.logger.error(error.toString());
return {
"error": {
message: error.message,
name: error.name,
stack: error.stack,
}
};
}
};
};
try { | ||
conditionExpression = jsonata(waitCondition); | ||
} catch (e) { | ||
this.logger.error(`invalid wait condition expression: ${waitCondition}, ${e}`); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
^^^ see how withErrorHandling preserves these properties. So why don't you just catch(e) and set it's message, and rethrow it?
16b6e51
to
eabe547
Compare
@@ -1111,6 +1129,72 @@ export default class TemplateProcessor { | |||
return null; | |||
} | |||
|
|||
|
|||
async waitCondition(waitCondition, timeout = 10000) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
waitCondition and timeout arguments should have types. Return type should be explicit. Whenever we add a new method we should try to use TS best practices.
|
||
beforeEach(() => { | ||
// Save the global variable before the test | ||
originalDefaultFunctions = TemplateProcessor.DEFAULT_FUNCTIONS; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
originalDefaultFunctions = [...TemplateProcessor.DEFAULT_FUNCTIONS]
If you don't do this you are still allowing the content of DEFAULT_FUNCTIONS array to be destroyed
rxLog: [ {"default": 42} ] | ||
stop$: ($count(rxLog)=5?$clearInterval(interval$):'still going') | ||
stop$: ($count(rxLog)=5?'done':'still going') | ||
`; | ||
const template = yaml.load(templateYaml); | ||
const tp = new TemplateProcessor(template, {"subscribe": ()=>{}, "publish":()=>{}}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
don't need to replace subscribe and publish with empty functions anymore
4aaa28a
to
660fab8
Compare
Description
Adds wait command and parameters for init.
Type of Change
Checklist