```ts
function globPath(pattern: string, path: string): boolean {
  if (typeof pattern !== 'string' || typeof path !== 'string') {
    throw new Error('Both pattern and path must be strings');
  }
  if (!pattern) return false;
  if (!path) return false;

  let i = 0;
  for (let j = 0; j < path.length && i < pattern.length; j++) {
    const char = path[j];
    const starChar = pattern[i];

    if (char === starChar || starChar === '?') {
      i++;
    } else if (starChar === '*') {
      while (i < pattern.length && pattern[i] !== starChar) i++;
    } else {
      return false;
    }
  }

  return i === pattern.length;
}
```