input: Write a function to manage a task data repository using the FileSystem class. The function should be able to save task data, delete task data by ID, find task data by ID, find multiple task data by IDs, retrieve all task data sorted by ID, and get task data by ID without raising an error if not found. Ensure the function handles the specified directory structure and JSON format for task data. The function should also include assertions to verify its functionality.
  assert save_and_delete_task({'taskDir': '~/jsub/', 'format': 'pretty'}, {'name': 'Task1'})['name'] == 'Task1'
  assert delete_task({'taskDir': '~/jsub/'}, 'foo') == False
  assert find_by_id({'taskDir': '~/jsub/'}, 'foo') == None
  assert find_by_ids({'taskDir': '~/jsub/'}, ['foo', 'bar']) == []
  assert all_task_data({'taskDir': '~/jsub/'}) == []
  assert task_data({'taskDir': '~/jsub/'}, 'foo') == None
output: def save_and_delete_task(config, task_data):
      fs = FileSystem(config['taskDir'])
      fs.save_task(task_data, config['format'])
      return task_data
  
  def delete_task(config, task_id):
      fs = FileSystem(config['taskDir'])
      return fs.delete_task(task_id)
  
  def find_by_id(config, task_id):
      fs = FileSystem(config['taskDir'])
      return fs.find_task(task_id)
  
  def find_by_ids(config, task_ids):
      fs = FileSystem(config['taskDir'])
      return [fs.find_task(task_id) for task_id in task_ids if fs.find_task(task_id)]
  
  def all_task_data(config):
      fs = FileSystem(config['taskDir'])
      return sorted(fs.get_all_tasks(), key=lambda x: x['id'])
  
  def task_data(config, task_id):
      fs = FileSystem(config['taskDir'])
      return fs.find_task(task_id)