<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_shared_data(path: typing.Union[str, None]) -> dict: """Load shared data from a JSON file stored on disk"""


    if path is None:
        return dict()

    if not os.path.exists(path):
        raise FileNotFoundError('No such shared data file "{}"'.format(path))

    try:
        with open(path, 'r') as fp:
            data = json.load(fp)
    except Exception:
        raise IOError('Unable to read shared data file "{}"'.format(path))

    if not isinstance(data, dict):
        raise ValueError('Shared data must load into a dictionary object')

    return data