Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

idna-uts46-hx

Package Overview
Dependencies
Maintainers
1
Versions
47
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

idna-uts46-hx - npm Package Compare versions

Comparing version 5.1.2 to 6.0.0

.eslintrc.cjs

5

.releaserc.json

@@ -14,4 +14,4 @@ {

{
"prepareCmd": "npm run build && npx lint-staged",
"successCmd": "gulp -f gulpfile.cjs publish --notes \"${encodeURIComponent(nextRelease.notes)}\""
"prepareCmd": "npm run prepare",
"successCmd": "gulp -f gulpfile.cjs publishNotification --update \"${nextRelease.version}\" --type \"${nextRelease.type}\" --notes \"${encodeURIComponent(nextRelease.notes)}\""
}

@@ -27,3 +27,2 @@ ],

"release.config.js",
"dist/index.d.ts",
"dist/index.mjs",

@@ -30,0 +29,0 @@ "dist/index.cjs",

20

CONTRIBUTING.md

@@ -28,17 +28,17 @@ # Contributing

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
- The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
- Other conduct which could reasonably be considered inappropriate in a
professional setting

@@ -45,0 +45,0 @@

@@ -0,1 +1,13 @@

# [6.0.0](https://github.com/centralnicgroup-opensource/rtldev-middleware-idna-uts46/compare/v5.1.2...v6.0.0) (2024-2-22)
### Code Refactoring
* **tr46:** reviewed in direction of tr46 as core library and adding our logic around ([d0c080a](https://github.com/centralnicgroup-opensource/rtldev-middleware-idna-uts46/commit/d0c080a0d1ae9382cda2b4dd8d233805c8da5cdd))
### BREAKING CHANGES
* **tr46:** Migration to package tr46. Find Notes and Migration Guide as part of the README.md
## [5.1.2](https://github.com/hexonet/idna-uts46/compare/v5.1.1...v5.1.2) (2023-10-31)

@@ -2,0 +14,0 @@

{
"name": "idna-uts46-hx",
"description": "A UTS #46 processing algorithm for IDNA2008 strings",
"version": "5.1.2",
"description": "Convert Domain Names correctly from IDN to Punycode and vice-versa and offer TR46 processing.",
"version": "6.0.0",
"private": false,
"type": "module",
"main": "dist/index.mjs",
"typings": "dist/index.d.ts",
"license": "MIT",

@@ -14,5 +13,5 @@ "sideEffects": false,

},
"homepage": "https://github.com/hexonet/idna-uts46",
"repository": "github:hexonet/idna-uts46",
"bugs": "https://github.com/hexonet/idna-uts46/issues",
"homepage": "https://github.com/centralnicgroup-opensource/rtldev-middleware-idna-uts46",
"repository": "github:centralnicgroup-opensource/rtldev-middleware-idna-uts46",
"bugs": "https://github.com/centralnicgroup-opensource/rtldev-middleware-idna-uts46/issues",
"keywords": [

@@ -22,40 +21,29 @@ "unicode",

"idna",
"domain"
"domain",
"convert",
"converter"
],
"nyc": {
"reporter": [
"html",
"text"
],
"exclude": [
"test",
"scripts",
"rollup*",
"**/*.spec.js",
"idna-map.js"
]
},
"unicodeVersion": "15.1.0",
"scripts": {
"prettier": "prettier -u --write \"**/*\"",
"build": "npm run build:unicode-tables && npm run build:rollup",
"build": "rollup -c rollup-esm.config.mjs",
"pretest": "npm run build",
"test": "mocha",
"test:coverage": "cross-env NODE_ENV=development nyc npm run test --silent",
"test:serve": "npm run test:serve-prepare && serve",
"test:serve-prepare": "cp node_modules/mocha/mocha.css dist/index.bundle.js dist/index.mjs test",
"test:coverage": "c8 mocha",
"posttest:coverage": "trap ' ' INT; serve coverage/",
"preserve": "cp node_modules/mocha/mocha.css dist/index.bundle.js dist/index.mjs test",
"serve": "trap ' ' INT; serve test/",
"postserve": "rm test/mocha.css test/index.bundle.js test/index.mjs",
"lint": "eslint .",
"prepare": "npm run build && npx lint-staged",
"build:unicode-upgrade": "tsx scripts/unicode-upgrade.ts",
"build:unicode-checkversion": "tsx scripts/unicode-checkversion.ts",
"build:unicode-tables": "tsx scripts/build-unicode-tables.ts 15.1.0",
"build:rollup": "rollup -c rollup-esm.config.mjs"
"prepare": "npm run build && npx lint-staged"
},
"overrides": {
"glob-parent": "^6.0.2"
"glob-parent": "^6.0.2",
"chokidar": "^3.5.3"
},
"dependencies": {
"punycode": "^2.1.1"
"tr46": "^5.0.0"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^15.2.1",

@@ -66,20 +54,14 @@ "@rollup/plugin-terser": "^0.4.3",

"@semantic-release/git": "^10.0.1",
"@types/node": "^20.4.2",
"axios": "^1.3.4",
"cross-env": "^7.0.3",
"esbuild": "^0.19.2",
"c8": "^9.1.0",
"eslint": "^8.35.0",
"eslint-plugin-mocha": "^10.1.0",
"gulp": "^4.0.2",
"lint-staged": "^15.0.1",
"mocha": "^10.2.0",
"nyc": "^15.1.0",
"prettier": "^3.0.0",
"rollup": "^4.0.0",
"rollup-plugin-bundle-size": "^1.0.3",
"rtldev-middleware-gulp-release-notification-plugin": "github:centralnicgroup-opensource/rtldev-middleware-gulp-release-notification-plugin",
"semantic-release": "^22.0.5",
"rtldev-middleware-gulp-release-notification-plugin": "github:centralnicgroup-opensource/rtldev-middleware-gulp-release-notification-plugin#semver:^2.0.3",
"semantic-release": "^23.0.0",
"serve": "^14.2.0",
"terser": "^5.19.4",
"tsx": "^3.12.3"
"terser": "^5.19.4"
},

@@ -86,0 +68,0 @@ "lint-staged": {

@@ -9,4 +9,3 @@ # IDNA-UTS #46 in JavaScript

This module is a IDNA UTS46 connector library for javascript.
This is a maintained fork of the idna-uts46 library originally written by jcranmer. Continously maintained by KaiSchwarz-cnic and fully ported to JS by dawsbot.
This module is a IDNA UTS46 connector library for javascript. In addition to the default functionality of tr46, we offer converting domain names to unicode / punycode considering the respective registry provider's behavior.

@@ -26,9 +25,46 @@ The [JS Punycode converter library](https://github.com/bestiejs/punycode.js/) is

## v6 Notes & Migration Guide
With v6 we migrated our library to npm package `tr46` as software dependency. By that step we use a library that is actively maintained in direction of correctly supporting the `TR46` standard and supporting the latest Version of the Unicode Standard. Reinventing the wheel isn't useful and something we have time or resources for. We were able to dramatically decrease the number of lines of code on our end.
### Improvements
- method `toUnicode` comes with auto-detection of `transitionalProcessing` setting based on the provided domain name input
- method `toAscii` comes with auto-detection of `transitionalProcessing` setting based on the provided domain name input
### Breaking Changes
In general, we don't see a blocker for upgrading to v6. Still, consider the below changes.
#### Performance
We haven't tested for this explicitely, but as we dropped the IDNA mapping table on our end by the Migration to package `tr46`, there's no longer a compression included for it as that table is no longer directly in our hands. This was a great way for improving the page load time on browser side. Maintainability + Efforts > Performance. This may again change in future, but needs resources assigned. PR = welcome.
#### New Labels for Options
The below configuration options for the methods `toUnicode`and `toAscii` must be renamed in case you're using them:
| **Option, old** | **Option, new** |
| --------------- | ---------------------- |
| transitional | transitionalProcessing |
| useStd3ASCII | useSTD3ASCIIRules |
| verifyDnsLength | verifyDNSLength |
#### Behavior
Earlier versions kept option `transitional` by default to false which is now automatically detected and results may therefore differ.
This affects the `toAscii` method.
The `toUnicode` function did not allow for a options parameter in earlier versions, now it follows the exemplary way of package `tr46`.
## Authors
NOTE: As mentioned, initial work done by [jcranmer](https://github.com/jcranmer).
- [KaiSchwarz-cnic](https://github.com/kaischwarz-cnic)
- [dawsbot](https://github.com/dawsbot)
**Thanks for the below former contributions:**
- Initial work done by [jcranmer](https://github.com/jcranmer).
- v5: Migration of the IDNA Mapping Table's Build Process from Python to NodeJS5 by [dawsbot](https://github.com/dawsbot)
- v5: Performance Improvements for the Browser Bundle's Page Load by [dawsbot](https://github.com/dawsbot)
See also the list of [contributors](https://github.com/hexonet/idna-uts46/graphs/contributors) who participated in this project.

@@ -35,0 +71,0 @@

@@ -1,115 +0,27 @@

import { ucs2encode, ucs2decode, decode, toASCII } from 'punycode/';
import { mapChar, mapStr } from './idna-map';
import tr46 from 'tr46';
function mapLabel(label, useStd3ASCII, transitional) {
const mapped = [];
const chars = ucs2decode(label);
for (let i = 0; i < chars.length; i++) {
const cp = chars[i];
const ch = ucs2encode([chars[i]]);
const composite = mapChar(cp);
const flags = composite >> 23;
const kind = (composite >> 21) & 3;
const index = (composite >> 5) & 0xffff;
const length = composite & 0x1f;
const value = mapStr.substr(index, length);
if (kind === 0 || (useStd3ASCII && flags & 1)) {
throw new Error('Illegal char ' + ch);
} else if (kind === 1) {
mapped.push(value);
} else if (kind === 2) {
mapped.push(transitional ? value : ch);
/* istanbul ignore next */
} else if (kind === 3) {
mapped.push(ch);
}
}
const newLabel = mapped.join('').normalize('NFC');
return newLabel;
function getDefaultOptions(domain) {
return {
transitionalProcessing: !domain.match(
/\.(?:be|ca|de|swiss|fr|pm|re|tf|wf|yt)\.?$/,
),
};
}
function process(domain, transitional, useStd3ASCII) {
/* istanbul ignore if */
if (useStd3ASCII === undefined) {
useStd3ASCII = false;
function toAscii(domain, opts = {}) {
const pc = tr46.toASCII(domain, { ...getDefaultOptions(domain), ...opts });
if (pc !== null) {
return pc;
}
const mappedIDNA = mapLabel(domain, useStd3ASCII, transitional);
// Step 3. Break
let labels = mappedIDNA.split('.');
// Step 4. Convert/Validate
labels = labels.map(function (label) {
if (label.startsWith('xn--')) {
label = decode(label.substring(4));
validateLabel(label, useStd3ASCII, false);
} else {
validateLabel(label, useStd3ASCII, transitional);
}
return label;
});
return labels.join('.');
throw new Error(`Unable to translate ${domain} to ASCII.`);
}
function validateLabel(label, useStd3ASCII, transitional) {
// 2. The label must not contain a U+002D HYPHEN-MINUS character in both the
// third position and fourth positions.
if (label[2] === '-' && label[3] === '-') {
throw new Error('Failed to validate ' + label);
function toUnicode(domain, opts = {}) {
const idn = tr46.toUnicode(domain, { ...getDefaultOptions(domain), ...opts });
if (idn !== null && !idn.error) {
return idn.domain;
}
// 3. The label must neither begin nor end with a U+002D HYPHEN-MINUS
// character.
if (label.startsWith('-') || label.endsWith('-')) {
throw new Error('Failed to validate ' + label);
}
// 4. The label must not contain a U+002E ( . ) FULL STOP.
// this should nerver happen as label is chunked internally by this character
/* istanbul ignore if */
if (label.includes('.')) {
throw new Error('Failed to validate ' + label);
}
if (mapLabel(label, useStd3ASCII, transitional) !== label) {
throw new Error('Failed to validate ' + label);
}
// 5. The label must not begin with a combining mark, that is:
// General_Category=Mark.
const ch = label.codePointAt(0);
if (mapChar(ch) & (0x2 << 23)) {
throw new Error('Label contains illegal character: ' + ch);
}
throw new Error(`Unable to translate ${domain} to Unicode.`);
}
function toAscii(domain, options) {
if (options === undefined) {
options = {};
}
const transitional = 'transitional' in options ? options.transitional : true;
const useStd3ASCII = 'useStd3ASCII' in options ? options.useStd3ASCII : false;
const verifyDnsLength =
'verifyDnsLength' in options ? options.verifyDnsLength : false;
const labels = process(domain, transitional, useStd3ASCII).split('.');
const asciiLabels = labels.map(toASCII);
const asciiString = asciiLabels.join('.');
let i;
if (verifyDnsLength) {
if (asciiString.length < 1 || asciiString.length > 253) {
throw new Error('DNS name has wrong length: ' + asciiString);
}
for (i = 0; i < asciiLabels.length; i++) {
// for .. of replacement
const label = asciiLabels[i];
if (label.length < 1 || label.length > 63) {
throw new Error('DNS label has wrong length: ' + label);
}
}
}
return asciiString;
}
function convert(domains) {

@@ -122,22 +34,11 @@ const isArrayInput = Array.isArray(domains);

domains.forEach((domain) => {
let pc, tmp;
try {
pc = toAscii(domain, {
transitional: !domain.match(
/\.(?:be|ca|de|fr|pm|re|swiss|tf|wf|yt)\.?$/,
),
});
tmp = {
PC: pc,
IDN: toUnicode(pc),
};
results.PC.push(toAscii(domain));
results.IDN.push(toUnicode(domain));
} catch (e) {
tmp = {
PC: domain,
IDN: domain,
};
results.PC.push(domain);
results.IDN.push(domain);
}
results.PC.push(tmp.PC);
results.IDN.push(tmp.IDN);
});
if (isArrayInput) {

@@ -149,10 +50,2 @@ return results;

function toUnicode(domain, options) {
if (options === undefined) {
options = {};
}
const useStd3ASCII = 'useStd3ASCII' in options ? options.useStd3ASCII : false;
return process(domain, false, useStd3ASCII);
}
export { toUnicode, toAscii, convert };
'use strict';
import assert from 'assert';
import * as uts46 from '../dist/index.mjs';
import * as uts46 from '../src/index.js';

@@ -25,3 +25,3 @@ suite('toASCII', function () {

uts46.toAscii('faß.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -32,3 +32,3 @@ 'fass.de',

uts46.toAscii('faß.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -39,3 +39,3 @@ 'xn--fa-hia.de',

uts46.toAscii('xn--fa-hia.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -49,3 +49,3 @@ 'xn--fa-hia.de',

uts46.toAscii('not=std3', {
useStd3ASCII: true,
useSTD3ASCIIRules: true,
});

@@ -59,3 +59,3 @@ });

uts46.toAscii('', {
verifyDnsLength: false,
verifyDNSLength: false,
}),

@@ -66,3 +66,3 @@ '',

uts46.toAscii('', {
verifyDnsLength: true,
verifyDNSLength: true,
});

@@ -74,14 +74,16 @@ });

uts46.toAscii('this..is.almost.right', {
verifyDnsLength: true,
transitionalProcessing: false,
verifyDNSLength: true,
});
});
assert.throws(function () {
uts46.toAscii('a.'.repeat(252 / 2) + 'aa', {
verifyDnsLength: true,
// 254 characters
uts46.toAscii('a.'.repeat(126) + 'aa', {
verifyDNSLength: true,
});
});
assert.doesNotThrow(function () {
// Exactly 253 characters.
uts46.toAscii('a.'.repeat(252 / 2) + 'a', {
verifyDnsLength: true,
// 253 characters
uts46.toAscii('a.'.repeat(126) + 'a', {
verifyDNSLength: true,
});

@@ -91,3 +93,3 @@ });

uts46.toAscii('a'.repeat(64), {
verifyDnsLength: true,
verifyDNSLength: true,
});

@@ -97,3 +99,3 @@ });

uts46.toAscii('a'.repeat(63), {
verifyDnsLength: true,
verifyDNSLength: true,
});

@@ -105,3 +107,6 @@ });

test('Defaults to transitional', function () {
assert.strict.equal(uts46.toAscii('faß.de'), 'fass.de');
assert.strict.equal(
uts46.toAscii('faß.de', { transitionalProcessing: true }),
'fass.de',
);
});

@@ -131,3 +136,3 @@ test('Non-BMP characters', function () {

uts46.toUnicode('not=std3', {
useStd3ASCII: true,
useSTD3ASCIIRules: true,
});

@@ -161,3 +166,3 @@ });

uts46.toAscii('fass.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -168,3 +173,3 @@ 'fass.de',

uts46.toAscii('fass.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -178,3 +183,3 @@ 'fass.de',

uts46.toAscii('faß.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -185,3 +190,3 @@ 'fass.de',

uts46.toAscii('faß.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -195,3 +200,3 @@ 'xn--fa-hia.de',

uts46.toAscii('fäß.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -202,3 +207,3 @@ 'xn--fss-qla.de',

uts46.toAscii('fäß.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -212,3 +217,3 @@ 'xn--f-qfao.de',

uts46.toAscii('xn--fa-hia.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -219,3 +224,3 @@ 'xn--fa-hia.de',

uts46.toAscii('xn--fa-hia.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -229,3 +234,3 @@ 'xn--fa-hia.de',

uts46.toAscii('₹.com', {
transitional: true,
transitionalProcessing: true,
}),

@@ -236,3 +241,3 @@ 'xn--yzg.com',

uts46.toAscii('₹.com', {
transitional: false,
transitionalProcessing: false,
}),

@@ -246,3 +251,3 @@ 'xn--yzg.com',

uts46.toAscii('𑀓.com', {
transitional: true,
transitionalProcessing: true,
}),

@@ -253,3 +258,3 @@ 'xn--n00d.com',

uts46.toAscii('𑀓.com', {
transitional: false,
transitionalProcessing: false,
}),

@@ -265,3 +270,3 @@ 'xn--n00d.com',

uts46.toAscii('\u0080.com', {
transitional: true,
transitionalProcessing: true,
});

@@ -271,3 +276,3 @@ });

uts46.toAscii('\u0080.com', {
transitional: false,
transitionalProcessing: false,
});

@@ -282,3 +287,3 @@ });

uts46.toAscii('xn--a.com', {
transitional: true,
transitionalProcessing: true,
});

@@ -288,3 +293,3 @@ });

uts46.toAscii('xn--a.com', {
transitional: false,
transitionalProcessing: false,
});

@@ -295,6 +300,11 @@ });

// a‌b
assert.strict.equal(uts46.toUnicode('a‌b'), 'a\u200Cb'); // no error thrown
assert.strict.equal(
uts46.toUnicode('a‌b', {
transitionalProcessing: false,
}),
'a\u200Cb',
); // no error thrown
assert.strict.equal(
uts46.toAscii('a‌b', {
transitional: true,
transitionalProcessing: true,
}),

@@ -305,3 +315,3 @@ 'ab',

uts46.toAscii('a‌b', {
transitional: false,
transitionalProcessing: false,
}),

@@ -317,3 +327,3 @@ 'xn--ab-j1t',

// no error thrown
transitional: true,
transitionalProcessing: true,
}),

@@ -324,3 +334,3 @@ 'xn--ab-j1t',

uts46.toAscii('xn--ab-j1t', {
transitional: false,
transitionalProcessing: false,
}),

@@ -334,3 +344,3 @@ 'xn--ab-j1t',

uts46.toAscii('öbb.at', {
transitional: true,
transitionalProcessing: true,
}),

@@ -341,3 +351,3 @@ 'xn--bb-eka.at',

uts46.toAscii('öbb.at', {
transitional: false,
transitionalProcessing: false,
}),

@@ -351,3 +361,3 @@ 'xn--bb-eka.at',

uts46.toAscii('ÖBB.at', {
transitional: true,
transitionalProcessing: true,
}),

@@ -358,3 +368,3 @@ 'xn--bb-eka.at',

uts46.toAscii('ÖBB.at', {
transitional: false,
transitionalProcessing: false,
}),

@@ -368,3 +378,3 @@ 'xn--bb-eka.at',

uts46.toAscii('ȡog.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -375,3 +385,3 @@ 'xn--og-09a.de',

uts46.toAscii('ȡog.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -385,3 +395,3 @@ 'xn--og-09a.de',

uts46.toAscii('☕.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -392,3 +402,3 @@ 'xn--53h.de',

uts46.toAscii('☕.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -402,3 +412,3 @@ 'xn--53h.de',

uts46.toAscii('I♥NY.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -409,3 +419,3 @@ 'xn--iny-zx5a.de',

uts46.toAscii('I♥NY.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -422,3 +432,3 @@ 'xn--iny-zx5a.de',

uts46.toAscii('ABC・日本.co.jp', {
transitional: true,
transitionalProcessing: true,
}),

@@ -429,3 +439,3 @@ 'xn--abc-rs4b422ycvb.co.jp',

uts46.toAscii('ABC・日本.co.jp', {
transitional: false,
transitionalProcessing: false,
}),

@@ -439,3 +449,3 @@ 'xn--abc-rs4b422ycvb.co.jp',

uts46.toAscii('日本。co。jp', {
transitional: true,
transitionalProcessing: true,
}),

@@ -446,3 +456,3 @@ 'xn--wgv71a.co.jp',

uts46.toAscii('日本。co。jp', {
transitional: false,
transitionalProcessing: false,
}),

@@ -456,3 +466,3 @@ 'xn--wgv71a.co.jp',

uts46.toAscii('日本。co.jp', {
transitional: true,
transitionalProcessing: true,
}),

@@ -463,3 +473,3 @@ 'xn--wgv71a.co.jp',

uts46.toAscii('日本。co.jp', {
transitional: false,
transitionalProcessing: false,
}),

@@ -475,3 +485,3 @@ 'xn--wgv71a.co.jp',

uts46.toAscii('日本⒈co.jp', {
transitional: true,
transitionalProcessing: true,
});

@@ -481,3 +491,3 @@ });

uts46.toAscii('日本⒈co.jp', {
transitional: false,
transitionalProcessing: false,
});

@@ -490,3 +500,3 @@ });

uts46.toAscii('x\u0327\u0301.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -497,3 +507,3 @@ 'xn--x-xbb7i.de',

uts46.toAscii('x\u0327\u0301.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -507,3 +517,3 @@ 'xn--x-xbb7i.de',

uts46.toAscii('x\u0301\u0327.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -514,3 +524,3 @@ 'xn--x-xbb7i.de',

uts46.toAscii('x\u0301\u0327.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -521,6 +531,11 @@ 'xn--x-xbb7i.de',

// σόλος.gr
assert.strict.equal(uts46.toUnicode('σόλος.gr'), 'σόλος.gr');
assert.strict.equal(
uts46.toUnicode('σόλος.gr', {
transitionalProcessing: false,
}),
'σόλος.gr',
);
assert.strict.equal(
uts46.toAscii('σόλος.gr', {
transitional: true,
transitionalProcessing: true,
}),

@@ -531,3 +546,3 @@ 'xn--wxaikc6b.gr',

uts46.toAscii('σόλος.gr', {
transitional: false,
transitionalProcessing: false,
}),

@@ -538,6 +553,11 @@ 'xn--wxaijb9b.gr',

// Σόλος.gr
assert.strict.equal(uts46.toUnicode('Σόλος.gr'), 'σόλος.gr');
assert.strict.equal(
uts46.toUnicode('Σόλος.gr', {
transitionalProcessing: false,
}),
'σόλος.gr',
);
assert.strict.equal(
uts46.toAscii('Σόλος.gr', {
transitional: true,
transitionalProcessing: true,
}),

@@ -548,3 +568,3 @@ 'xn--wxaikc6b.gr',

uts46.toAscii('Σόλος.gr', {
transitional: false,
transitionalProcessing: false,
}),

@@ -558,3 +578,3 @@ 'xn--wxaijb9b.gr',

uts46.toAscii('ΣΌΛΟΣ.grﻋﺮﺑﻲ.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -565,3 +585,3 @@ 'xn--wxaikc6b.xn--gr-gtd9a1b0g.de',

uts46.toAscii('ΣΌΛΟΣ.grﻋﺮﺑﻲ.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -575,3 +595,3 @@ 'xn--wxaikc6b.xn--gr-gtd9a1b0g.de',

uts46.toAscii('عربي.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -582,3 +602,3 @@ 'xn--ngbrx4e.de',

uts46.toAscii('عربي.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -592,3 +612,3 @@ 'xn--ngbrx4e.de',

uts46.toAscii('نامهای.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -599,3 +619,3 @@ 'xn--mgba3gch31f.de',

uts46.toAscii('نامهای.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -610,3 +630,3 @@ 'xn--mgba3gch31f.de',

uts46.toAscii('نامه\u200Cای.de', {
transitional: true,
transitionalProcessing: true,
}),

@@ -617,3 +637,3 @@ 'xn--mgba3gch31f.de',

uts46.toAscii('نامه\u200Cای.de', {
transitional: false,
transitionalProcessing: false,
}),

@@ -620,0 +640,0 @@ 'xn--mgba3gch31f060k.de',

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc