summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/punycode.ts
diff options
context:
space:
mode:
authorNathan Whitaker <17734409+nathanwhit@users.noreply.github.com>2024-03-11 15:49:43 -0700
committerGitHub <noreply@github.com>2024-03-11 15:49:43 -0700
commita77b2987bc90879af30a39ba274df9061cc7fbae (patch)
treead7463374e66eb3aa61e41d96c512e67e717e349 /ext/node/polyfills/punycode.ts
parentd69aab62b0789dd54b8c09b54af022a38f060b5b (diff)
fix(ext/node): Match punycode module behavior to node (#22847)
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.
Diffstat (limited to 'ext/node/polyfills/punycode.ts')
-rw-r--r--ext/node/polyfills/punycode.ts24
1 files changed, 18 insertions, 6 deletions
diff --git a/ext/node/polyfills/punycode.ts b/ext/node/polyfills/punycode.ts
index 6f137d31f..e89be15a2 100644
--- a/ext/node/polyfills/punycode.ts
+++ b/ext/node/polyfills/punycode.ts
@@ -1,28 +1,40 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import {
- op_node_idna_domain_to_ascii,
- op_node_idna_domain_to_unicode,
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 op_node_idna_domain_to_ascii(domain);
+ return punyDeprecated(op_node_idna_punycode_to_ascii)(domain);
}
function toUnicode(domain) {
- return op_node_idna_domain_to_unicode(domain);
+ return punyDeprecated(op_node_idna_punycode_to_unicode)(domain);
}
function decode(domain) {
- return op_node_idna_punycode_decode(domain);
+ return punyDeprecated(op_node_idna_punycode_decode)(domain);
}
function encode(domain) {
- return op_node_idna_punycode_encode(domain);
+ return punyDeprecated(op_node_idna_punycode_encode)(domain);
}
export { decode, encode, toASCII, toUnicode, ucs2 };