```ts
export function denseRankMap(values: number[], order: string): number[] {
  if (values.length === 0) {
    throw new Error("List cannot be empty");
  }
  if (!["asc", "desc"].includes(order)) {
    throw new Error("Order must be either 'asc' or 'desc'");
  }

  values.forEach((v) => {
    if (!Number.isInteger(v)) {
      throw new Error("All elements must be integers");
    }
  });

  const sorted = [...values].sort((a, b) => order === "asc" ? a - b : b - a);
  const rankMap: { [key: number]: number } = {};
  let currentRank = 1;

  for (const value of sorted) {
    if (!rankMap[value]) {
      rankMap[value] = currentRank;
    }
    currentRank++;
  }

  return values.map((v) => rankMap[v]);
}
```