mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 07:14:47 -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.
48 lines
1 KiB
TypeScript
48 lines
1 KiB
TypeScript
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
|
|
import {
|
|
op_node_idna_punycode_decode,
|
|
op_node_idna_punycode_encode,
|
|
op_node_idna_punycode_to_ascii,
|
|
op_node_idna_punycode_to_unicode,
|
|
} from "ext:core/ops";
|
|
|
|
import { deprecate } from "node:util";
|
|
|
|
import { ucs2 } from "ext:deno_node/internal/idna.ts";
|
|
|
|
// deno-lint-ignore no-explicit-any
|
|
function punyDeprecated(fn: any) {
|
|
return deprecate(
|
|
fn,
|
|
"The `punycode` module is deprecated. Please use a userland " +
|
|
"alternative instead.",
|
|
"DEP0040",
|
|
);
|
|
}
|
|
|
|
function toASCII(domain) {
|
|
return punyDeprecated(op_node_idna_punycode_to_ascii)(domain);
|
|
}
|
|
|
|
function toUnicode(domain) {
|
|
return punyDeprecated(op_node_idna_punycode_to_unicode)(domain);
|
|
}
|
|
|
|
function decode(domain) {
|
|
return punyDeprecated(op_node_idna_punycode_decode)(domain);
|
|
}
|
|
|
|
function encode(domain) {
|
|
return punyDeprecated(op_node_idna_punycode_encode)(domain);
|
|
}
|
|
|
|
export { decode, encode, toASCII, toUnicode, ucs2 };
|
|
|
|
export default {
|
|
decode,
|
|
encode,
|
|
toASCII,
|
|
toUnicode,
|
|
ucs2,
|
|
};
|