```ts
export function denseRankMap(values: number[], order: string): number[] {
  if (values.length === 0) {
    throw new Error("Input list cannot be empty");
  }

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

  if (order !== "asc" && order !== "desc") {
    throw new Error('Order must be either "asc" or "desc"');
  }

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

  for (const value of sorted) {
    if (!rankMap.has(value)) {
      rankMap.set(value, currentRank);
    }
    currentRank++;
  }

  return values.map((v) => rankMap.get(v)!);
}
```