mirror of
https://github.com/denoland/deno.git
synced 2024-11-26 16:09:27 -05:00
a77b2987bc
Fixes #19214. We were using the `idna` crate to implement our polyfill for `punycode.toASCII` and `punycode.toUnicode`. The `idna` crate is correct, and adheres to the IDNA2003/2008 spec, but it turns out `node`'s implementations don't really follow any spec! Instead, node splits the domain by `'.'` and punycode encodes/decodes each part. This means that node's implementations will happily work on codepoints that are disallowed by the IDNA specs, causing the error in #19214. While fixing this, I went ahead and matched the node behavior on all of the punycode functions and enabled node's punycode test in our `node_compat` suite.
16 lines
458 B
TypeScript
16 lines
458 B
TypeScript
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||
|
||
import * as punycode from "node:punycode";
|
||
import { assertEquals } from "@std/assert/mod.ts";
|
||
|
||
Deno.test("regression #19214", () => {
|
||
const input = "个<><E4B8AA>.hk";
|
||
|
||
assertEquals(punycode.toASCII(input), "xn--ciq6844ba.hk");
|
||
|
||
assertEquals(punycode.toUnicode("xn--ciq6844ba.hk"), input);
|
||
});
|
||
|
||
Deno.test("Decode empty input", () => {
|
||
assertEquals(punycode.decode(""), "");
|
||
});
|