### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

When invoking a lambda with a nodejs runtime and local executor, localstack is unable to handle payloads containing a single quote.

### Expected Behavior

Locally executed nodejs lambdas should be able to handle any stringified json payload

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

https://github.com/alxyuu/localstack-issue

### Environment

```markdown
- OS: MacOS 11.5.2
- LocalStack: latest (0.12.18)
```


### Anything else?

The culprit appears to be in how node gets executed locally, with a single quoted eval:
https://github.com/localstack/localstack/blob/812acc1226537ee92477bd91596de200b8888a6c/localstack/services/awslambda/lambda_executors.py#L1262-L1270

doing something like `event_json_string.replace("'", "'\\''")` may be a simple resolution to the issue.
"""Called once during startup - can be used, e.g., to prepare Lambda Docker environment"""
        pass
    def cleanup(self, arn=None):
        """Called once during startup - can be used, e.g., to clean up left-over Docker containers"""
        pass
    def provide_file_to_lambda(self, local_file: str, inv_context: InvocationContext) -> str:
        """Make the given file available to the Lambda process (e.g., by copying into the container) for the
        given invocation context; Returns the path to the file that will be available to the Lambda handler."""
        raise NotImplementedError
    def apply_plugin_patches(self, inv_context: InvocationContext) -> Optional[InvocationResult]:
        """Loop through the list of plugins, and apply their patches to the invocation context (if applicable)"""
        invocation_results = []
        for plugin in LambdaExecutorPlugin.get_plugins():
            if not plugin.should_apply(inv_context):
                continue
            
            if not hasattr(plugin, "_initialized"):
                LOG.debug("Initializing Lambda executor plugin %s", plugin.__class__)
                plugin.initialize()
                plugin._initialized = True
            
            inv_options = plugin.prepare_invocation(inv_context)
            if not inv_options:
                continue
            if isinstance(inv_options, InvocationResult):
                invocation_results.append(inv_options)
                continue
            
            file_keys_map = {}
            for key, file_path in inv_options.files_to_add.items():