```ts
export function unpackCrates(crate: unknown[]): string[] {
  if (!Array.isArray(crate)) {
    throw new Error("Invalid entry in crate");
  }

  return crate.flatMap((item) => {
    if (typeof item === "string" && item.length > 0) {
      return [item];
    } else if (Array.isArray(item)) {
      return unpackCrates(item);
    } else {
      throw new Error("Invalid entry in crate");
    }
  });
}

export function crateDepth(crate: unknown[]): number {
  if (!Array.isArray(crate)) {
    return 0;
  }

  const depths = crate.map((item) => {
    if (typeof item === "string" && item.length > 0) {
      return 1;
    } else if (Array.isArray(item)) {
      return 1 + Math.max(...item.map(crateDepth));
    } else {
      throw new Error("Invalid entry in crate");
    }
  });

  return Math.max(...depths);
}
```