@adraffy/ens-normalize
Advanced tools
Comparing version 1.0.2 to 1.0.3
@@ -8,3 +8,3 @@ function bytes_from_base64(s) { | ||
const TABLE_D = bytes_from_base64('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'); | ||
const TABLE_L = bytes_from_base64('QRqAQmUXgH4BBzCCKQOE6gYRCAEJJFEDgA8AEIEqACA/gIEmgeKOIQacnogSK4W/AgNacwigqyIDhhZEA4ITBwQUCgM8gMkIuGAIBiAKCCAICCAIBiAaCECAhAa91wYKBwwEdoAbBIpKgqcJir1NGmAAGgCGljDXHoSHA7XZAAaA2gEDgNMBCgYAFYAwFAVrBwNYgFwDgCMDBRJ2Br74BAUoAgYUAAQO9/FQuh3O5AObCYKaBNPigEsK3zcHGmIGGgAqBuBSBAUoAgYUCwO/SQAGgNoBA4DTAQoGAwaAMAIGDAIGDAIDDAwEn7qDkyj/AUWwgAgkgOCAHAuA/gEPGAEHIIGjA/8BiGWERzP/AZaAi20gl4DVACD/ACvA5SAa/wJcfQAaAAAaAAAHAAESEAAaDwAaAA0EGgEICgAEIwMHDgELEAAaHQAaAAMEBgIIDAEHEgEaIwMEBgEFCgUHFAEaIwAaAAAaAAAaAAAaAAAaAAAaAAAaAAAaAAAaAAAaAAAaAAAaAAQRhiABByQBESMCBiYHESUBByQBESMCBiYHESUBByQBESMCBiYHESUBByQBESMCBiYHESUBByQBESMCBiYLCoanAAoAAAoAAAoAAAoAkIAi/wNSZIRoBP8DRj0cBABdAwIdAwCCAhqLRYomCmE='); | ||
const TABLE_N = bytes_from_base64('QRqAQmUXgH4BBzCCKQOE6gYRCAEJJFEDgA8AEIEqACA/gIEmgeKOIQacnogSK4W/AgNacwigqyIDhhZEA4ITBwQUCgM8gMkIuGAIBiAKCCAICCAIBiAaCECAhAa91wYKBwwEdoAbBIpKgqcJir1NGmAAGgCGljDXHoSHA7XZAAaA2gEDgNMBCgYAFYAwFAVrBwNYgFwDgCMDBRJ2Br74BAUoAgYUAAQO9/FQuh3O5AObCYKaBNPigEsK3zcHGmIGGgAqBuBSBAUoAgYUCwO/SQAGgNoBA4DTAQoGAwaAMAIGDAIGDAIDDAwEn7qDkyj/AUWwgAgkgOCAHAuA/gEPGAEHIIGjA/8BiGWERzP/AZaAi20gl4DVACD/ACvA5SAa/wJcfQAaAAAaAAAHAAESEAAaDwAaAA0EGgEICgAEIwMHDgELEAAaHQAaAAMEBgIIDAEHEgEaIwMEBgEFCgUHFAEaIwAaAAAaAAAaAAAaAAAaAAAaAAAaAAAaAAAaAAAaAAAaAAAaAAQRhiABByQBESMCBiYHESUBByQBESMCBiYHESUBByQBESMCBiYHESUBByQBESMCBiYHESUBByQBESMCBiYLCoanAAoAAAoAAAoAAAoAkIAi/wNSZIRoBP8DRj0cBABdAwIdAwCCAhqLRYomCmE='); | ||
const TABLE_W = [ | ||
@@ -19,2 +19,8 @@ 'gCqAQghdAQIChpIEhpUBfEaApAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQGDAIEAwYCBAIEBAgCBAIEAgQDBgIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAoBvAYB2AgQCBAKBlQKDQAGBHwIEAoEeAYEXAoEcAQIBgRUDgCIBgHgBBAGBEQKBHAEGAgwBAQGBHQSBLAEGAgYBgScCBAIEAoE2AYEvAoE2A4ErAoE2AYEvAoE0AQIBgS0CBAKBOAGBMQQIESICBAIEAgQCBAIEAgQCBAMGAgQCBAIEAgQCBAIEAgQCBAYMAoA/AVQBdAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAoCBAoCKAgQCBAIEAgQCBAIEAgQCBAjT5AHT0QKAwwHVGAPTxwKBAwGBkgEGAYAJAgQCBAIEAgRig00Bg3wBg3cBEAGDjgEEAQwBg5MBBCiDVAGDbQEOAQoBg7pcgFYBAgIkAoDMK4APAgQCgPMCgPwJgHgHgA0BhWkFhaoCAgECQBIBSQEMARoBEAEDAQkBCwIyAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAJpAQ4BBAIVAQUCgAYCaQFwZoBMAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQKFAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQDBgIEAgQCBAIEAgQCBAMGAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBIlekziBO7u4BgwvuCGLBJjTAQQBFAEGAQIBAAEQATIB/wDEUIAk/wDMUwGAigGAhwIEAQIBgnAKglsBgugBguUBBAEEAQIBBAErAYNeAQIBtOIBuL8BBAECAYNoAQQBAgGDaQIIAQQBgTwBgTcBg0oBtQQBAgG4zQEIAQIBuNABtNsBg3EBuN4Esj0BAgGGOwESAQYBAgGF+AECARwBCgECDoBsI4NVAYNdAYNkAYJJAYJYAYNrAYNyAQQBCAS1rAG1OwFfAbWwAbVLAVsBAQUQARQBAgGBLwGBPAECAbSkAbShAQIBg6MEhfxBtBICBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEB2cFgAACBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEW4AkAgQCBAIEErbVAgICAgICAjoCAgICO7dEAQIBgAEBtwcDGgq28gG3CQG3DgG3Cwg7BbgAAQIBgDUBtw0IAgW34AECAYBNAbbZAbewDIBZAbbXAbbgAbbbFrgEX78/AXIKwtIEwscMwsgFwuEBCAEUARIBg0IBg2EFEAEGAQJmIQWDcAODZwECAQABAAEAAYD+AYD7AQABBgEAAgQEBAECAQIBAAEABxAChh4Chh0CHQGAdAGAhQECAgQBAAECAg4BBAULA4YuARkBAAEaAbwiBcLZAQABAgEIAQIXAQQaBQQDFwERAQIBEgEHBBoFBAMXAREBAgESgSretgECgUDfMYb21+IC02sBtaQBtX8D01YCBAIEAtO1AUABQQEEAtPCAwYH15cBGAGDEgECAdQCAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQJEgIEBQp9gFyAsPxYVOckDf8AI70BUAEcARIBNAFYAQ4BKAE0AYSKAUwBDAEuASgBKgFqASoBFgGAtgGAPAE4AQoBPAESATYBGgEyAWgBJAE2AYVoAYAQAYMYAS4BEAEWASQBgBgBgzoBYAGAcAEuASYBLAFsAQYBglQBFAEYARoBgGgBEAEKAYBqARQBGgEQAXoBIgEkAYAgAYQKAVwBKgGFSAEKAYAmASABGgEqAU4BCgGBlgEwAUABh3ABgAQBLgF0ATABEgEOAWgBCgFAAYfuAYL+ARgBCgEIARABJAEEAYAiAYEwAQoBgiYBFAFkAQ4BEgEQAYA2AQ4BgUgBDgFiASIBXgGBWgEOASIBgg4BgHwBDAGA7AGALgFcAYJ0AYCKAYP8ATYBcgFmAYAIARYBDAFCAYAYARQBgjQBDgESARIBIAEeAQgBgB4BCAEMAYcqATwBgyoBGAEuAYG2ARoBgA4BXAGD7gEeAR4BRgFKAYEOARgBgAYBgXABPgGBIgEqAQoBgTgBgPABgHoBDAEKAYbMARIBgLgBgLQBBgFeAYBSARoBCAEOAYBEAUQBDAEcAYDOAWYBCAGA7gEGASYBgXgBYAEOAYAMARQBBgEUATwBgpYBgqABFAFMASwBEAEUAQgBUAEIASIBCgEaATYBHgEQAXYBHgEILf8Av2M030gCxd4BBgECgHf/AAUJAQIBgNIBgM8BgNQBAgqApQQOIRkBAgGA5AECAQgBBAEKAQgBBAGA+QGBAgEEAYEDAQIBBAEEAQIBCAEEBhIBCAEUAQ4BCgGAygECBIBbAQIBBgESAQIBBAEUAQYE+D4BgJgBgIUBkSQBkSEBRgFDAc3OAc0xAX8BLwGV0AGDcQGQa4AljKoBkdoBjZYBq5AZ/wBVnQEEAQIEDAEEAQIG/wC2aAGIsAGEGAGIsAGEGAGEGAGIsAGIsAGEGAGIsAGEGAGEGAGEGAGEGAOczwL/AHHfAYCYAYCFAZEkAZANAYUyAYZTAYZQAYWbAYlIAacOAZJGAYftAYmXAdTSAfTjAZ0MAYQKAYHBAaPqAcnhAbxYAbPQAaYHAczRAc3IAYjBAbcHAe1sAf39AYQMAbJwAdW6Af8AEmcBhJABsxQBujEBRgFDAZ82AZNlAYDvAZA4AWEBtnoBz0MB+wwB8mUBixAg0HMBBAEEAQQBBAECAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEGAQQBBAcUAQYBBgEGBhIBBPLM/wBrNgIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEFCgCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAL/AMUhAQSABf8Axi4CBAIEAgQCBAIEAgQECAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIACRYCBAL/AJSFAf8AlIwCBAIEAgQCBAUKAv8Ays0D/wDK2AIEBAgCBAIEAgQCBAIEAgQCBAIEAgQC/wDLBQETAQoBFgEDAmgBLQEsAf8A0ewBhrsCBAIEAgQCBAIEAgQCBAJdAf8AyqMBtZgB/wCU9AIEBw4GDAIEGv8Az2sBBgEWAf8Az4oD/wDOHQFYguP/AMwoAYegAf8A0hcB/wDSTgr/ANIJzRf/AJP2AconAc8sAYODAbttAcC9AYrmAf8AF+4BAAH/AA0VAfCAAfgTAYcCAZDcAahmAZG4AYz0AYJ2AYH8AY6uAcyZAYWyAYb8AYWKAaA+AZnaAZCOAf8AF10BiWYBrp4Bja4Bp6QBr2IB/wACGwGktgGrRAGGrgHMtQG9ngGMDgHSKQGQGgGMJgGKpAG7JAH/AAMPAYPiAYHOAaNMAYueAY36AYkuAZG0AYuKAYAsAY6mAZIGAYf6AYSWAcpbAYFmAYfCAYvSAZ32AZZ2AabRAeNtAYvKAbo4AYe8AZu3AYxQAadwAZPqAfu9AYaUAZriAYcOAYHqAZvAAYGQAa+oAf8AB3EB2vIB3N0BHwHQIAGGxAGL5gGkiAGVaQHQ4QGN5gHBeAH5CQGa3AGH1gGmagGDUgHEMQHLSAHR9wGfVAGitwG8/gGOJwGu1AHSPQGItgG8xgGaEAGMQgG9XwHHbAHFzwGSkwG/TgG+CQGjCgHM7QGE9gGAQAGs8AGoTAGKkAGQRgGNegH9MwGCGgGJ4gGKcgGNMgGT8gGR2AG4hgGI+gGH2gFuAf8AGOUBp9YBiOIBx1YB4VsBhbgBgGABhLQBlJIBg8wBhgABigIBh9QBhHYBnO4Bk+8BleoBhc4B/wAC5QGAmAGDtAG3lgGvdAGDUAHXQQGB2AGGjAGP5gGgoAGREQHIoQGPqgGJXAGDJgGERAGmrAGA7gGV4gGA2AGjXAGJBAGAJAGBIAH/ABGZAdPGAa+MAYmIAestAaQ1AYQoAZWoAYAiAZI0AYhSAY8YAYhoAZz0AZaAAZ2iAfGJAd7MAf8AB8kBqWQBgHABihwBgjYBiloBgiABhaQBiMoBthwB/wAOYQGhAgHoFAH/AA0ZAZlcAaEiAcIAAd69AYLyAY0mAZZgAcV+Af8ACTkBg0wBkCwBktwBgfYBgjQBh/oBjcIBgzgBkq4BkiwBJAGRVgGJrAH/AAfFAbZ2AbS5AbrmAYUQAaJEAaDSAYroAYQQAe2PAYvoAae6AY25AYAqAYJkAZMjAYPNAbT+AfivAehsAeF3AWUBmL4Bh9oBs4YBwiEBorIBjFMB0I4BjV0Bm4IBmQMB1O8BmqUBiIADhLQCm7QDqKsBwhgBhsABhGQBRAEOAVQBuw4BtK8BhX4CjCoCiUwDigABgQoEj2QBGgFYAYiYAZkrAYsyAf8ADpEBgfIBgEwBgngBNgGAWgGEGAGAUgGARAGDMAGAUAGG+AEUAYfMAYEoAUwBgEgBhjoBgKYBgN4Bg2gBiWQBgMYBgZABhBgBgPoBg24BiF4BgNoBFgEBARABDAEOAWABAgGA5AGAAgGB/gGD6AEqAXABgeIBgKYBg1ABgJgBAAGDPAGI8gGAjAGCVgFwAYK0AWoBhNwBgIQBjNYBgbgBeAHvCwH/A0VyAf8DAisD52MBhp4BgBkBg08BgwoBdgGCDgFmAYTGAYAPAYAIAYASAYRwAYAyAYCiASABgZwBgQwBhtQBDgGAoAGACAGB1gGAbAGACwGAjAFbAYCkAYAEAYKgAYAwAWwBgYgBgbwBgMYBCAF2AYfGAYACAYKOAYK0AR8BgC4BgXgBgiABi/IBimMBgHQBgHYBgg4BgKoBagGBRAEEAYDWASIBMgGALAETAYKYAYNKAYGeAYD2AYFAAYCyAYIUAYEOAYYaAYC6AYaUAYMQAYAKASABgdIBcgFZAWwBBQEhAYAYAYAiAYJ8AYPgAYH0AYHOAYE6AYeMAYBOAYBmAYCKAUgBGAFgAYUuAYiUAf8CkdwBCwGWogH/A3DvAYh2AUIB/wOkoAGUjgHDhgH/Az+fAYAWR/8As9cBIwEGAQIEKAEEKICOAQABFAEAAQABAAEGAQABAAEAAQQBAAEAAQABCwEAAQABAAEKAQABAAEAAQsBAAEAAQABVgEAAQABAAEEAQABAAEAAUMBAAEAAQABAQEAAQABAAEGAQABAAEAAQIBAAEAAQABDAEAAQEBAAEEAQABCwEAASABAAENAQABMAEAAQABAAEMAQABAAEAAQgBAAEAAQABAwEAAQABAAESAQABAgEAAQABAAEKAQABAgEAAQABAAEFAQABAAEAASgBAAECAQAiSwEAAQABAAE0AQABAQEAAQQBAAIGAQABCwEAAQgBAAEOAQABAAEAAYCNAQATgIYBAAEAAQCBktHqBioBAhmfhQEBB5+CAQIBCQECAQ0BAgEFAQIRDwefWQWfgAECBd9PHYtoAQIBAAECAQABAgEAAQIBAAECAQABAAEAAQIBAAECAQABAAEAAQIBAAECAQABAAEAAQIBAAEAAQABAgEAAQABAAECAQABAAEAAQIBAAEAAQABAgEAAQIBAAECAQABAgEAAQIBAAEAAQABAgEAAQABAAECAQABAAEAAQIBAAEAAQABAgEAAQABAAECAQABAAEAAQIBAAEAAQABAgEAAQABAAEOAQABAAEAAQIBAAEAAQABAgEAAQABAAECAQABAAEAAQIBAAEAAQABAgEAAQABAAECAQABAAEAAQIBAAECAQABAgEAAQABABmLuQECUdIuAQIB0i8B3zwBAgEXAYF0AREBgCEBBAEEAQQBBAF0AQQBBAFHAXIBgDMBBAEEAQQBBAECAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEGAQQBBAcUAQYBBgEGBhIBBAcSAQgBgDMBAgK+swECAYDSAYDPAYDUAQIKgKUEDiygfQECARICCwEBAb+IAogyBYC8AVaFJv8BQGABAoFs/wGGVwECAYNVAYLmAYALAoAgAf8A0gYB/wDSAQEBAYAbAQIBtfQBtfEBDAGAFgGACQEDAQMBdgGCZwGCagFpAToBTAECAX0B/wM5sAH/Ae9rAf8Ayr8B/wM5rgH/AzltAf8DOXAB/wM8mwGCfAECAYOLAYOSAf8DOZwB/wM5lQECAQQBUAEDAf8A0gIB/wDR/wE9AdNSAtNDASQBAgETBP8DOWQBKP8ATWL/Az35AgQBAgMGAwYBAhUJSQkBAjMBAQINGoDegQQBgYwUgoIIvB4SvAcBAAe7/gG8GQEGAQQBGAEJAQESDwi8HhK8BwEAB7v+AbwZAQYBBAEYAQkBARIPCLweErwHAQAHu/4BvBkBBgEEARgBCQEBEg8IvB4SvAcBAAe7/gG8GQEGAQQBGAEJAQESDwi8HhK8BwEAB7v+AbwZAQYBBAEYAQkBAQE6AQCVtYQUAQIBCAEGAjIBKwEJARQBJgUtAQwBEAEXARoBIQEGARMBAgEGAQQBDAEEAQQBaAGAGAExAWMCgA0BCAI2AzMCOgUtAQwBEAEXARoCGwETAQIBBgIQAggHGwUCAjoCCwIEASUBDAIHARoCGwMLAhACCAKAgAKAFQKADQEIAjYDMwEUASYBDQIEAQIBJQEMARABFwEaAhsBEwECAQYCEAEEAQQBaAJmAoBzAQIBCAEGATABAgErAQkBFAEmBS0BDAEQARcBGgEhAQYBEwECAQYBBAEMAQQBBAYjAQgBBgIyASsBCQEUASYFLQEMARABFwEaASEBBgETAQIBBgEEAQwBBAEEgfCLLQEegFbgBg7irAGNZwGOlQHFiQG7CgGUnAHhEgHg8wGUiQGueAGVggGWjwGmFwGZ/gGbfQGnxgGmpQHVygGPxQGulAHm8QGI7QG1NgGYfQGBAAGqKQESAf8ABQIB5EcBnvEBiwwBnagB1FIB1bkBrdwBgXIBzGMBtHABjm0BAQGb1gHFAQGGCAH2rhXi6wGWz/8Ahi+K4wEJARIB/wLmQgH/AuQDAYAcARoBgA4BgHABPgGAHAEvAbfhAf8DI7gB/wLqWQEOASABJgH/AufKAf8DIUUBuNwBTAH/Auf8Af8C5+cBGgGFLwGFQAESAf8EANQB/wQAUwEcAbnHAbo4ARYBWAEKAbpDAbrkAQQBNgEsARYBAgEiAWQBEAESATIBFAEEAQABAAH/Au3aAf8Cs/cBuMsBKgH/Au+IAf8C728BDAEqAYCwAYBLASABQAF0AYAoATQBgAYBIAFCAQABKgEkARABHgGCKAGBnwGBogGBCwFGAYhZAY1OAYG/AUwBMgGAgwGAzgEBAYB2Af8C+PAB/wL4YwEKAR4BKAEQAYAAAf8C+wwBgAQB/wL6ewFeARgBgB0BgJwBxm8Cx7QBbAEAAf8C/ZQB/wL8iQEqAR4BGAH/Av7KAf8C/rEBDgI4AcjBAck+ARwBgCQBZQH/AwMuAf8DAcEB/wMBxgH/AwFvAQUBIgGASgECAcrlAcscAVYBKgFYAcuNAf8DUsIB/wNSjQHL6AEGAQYBKAH/BAoQAf8ECacB/wMI5gEAAf8Cwt8BxT0BAAHMNQH/A3RiAd3EAf8DhW8BEgHMjwHM7gFmARQBRAGAkAHODQE7Ac5wAf8DDQAB/wMMmQGAggEIAQQBAwFcASgBSAEbARYBXgEoAQgBNAEWAYAEAYAoAUYBgHgB/wMP+AH/AxAdAYABAYBYATYBgEIB/wMQmgH/AxAdAYA5ATcB0nUB0/YBKgE+AUsB05UB1UYBOgH/AxW8Af8DFM0BgaoBgN0B1d8B1nAB1pEBRwGs3AEGAapWAYBHAbOiAfknAcX8AQgBDAF6ARUB/wMZYAH/A3FzAdjiAYBpAYEaAWYB/wMYUAH/Axg9AYBdAYFqAdptAdrKAYBCAYAOAYD8Af8DGHYB/wMYDwHdBQHdkgH/AxuMAf8DGyUB3YsB3cgBWgE2AQIB/wMeJAG6gwG7XgH/Ax3XAf8DIVwB/wMgeQEcAYBLAYDeAVABcgFrAVABHgEaAf8DH7IB/wMgUwGBdgF+AeH1AeKwAQcB/wMglAH/AyIvAYJqAf8DIGABYAH/AyAPAYBmATUBBQHkiQHk6AFmAQsBbAH/AqlwAf8CqD8B/wMivAH/AyINAoCYARoBNgH/AyfwAf8DJ48BKgH/AynAAYE+Af8DKbMBIgHpPQHpcgHpWQEAAeqeASoBKgEoAYAKAerdAeuSAf8DLqQB/wMubwH/Ay8oAf8DLsMB/wLY3gH/AtedAf8DM6IBLgGAmAH/A6EPARgB7VgB/wM0fgEBAU4BNAH/AzSpAQIBAAFWAe2hAe4kAe4JAYAgAf8Dp44B/wM4HQF8AYAAAe9RAf8DqwYB/wM6HwH/AzsIAVYB/wM66wGAOAHw9wHxogEUAQoB/wM+2gGB1gEAAv8DsckB/wOz0gH/A0BJAQYB8sMB/wO1MgH/Az/bAfPjAfQQAQkBOgH/A0WMAf8DRMUB9EMB9QwBdgGABgH1oQH/A75oAT4B/wO+WwH/A7+AAf8DRz0B/wNICAH/A0fRAYBKARYB/wNKKgGAEgH/A0oFAf8DSxAB/wNK7wH/AuZeAf8DX5MB+ToBgCIB+W8B+eYBzJEB/wOaZAEcAefDARIB/wLjtQEGAZq0Af8AFuUB+8wBCwEkAd9TAd98AQQBFAFSAf8DUSwB/wNRLQFwAYAMAYAUAYCTAYC0AVQBgGABgYcBgG4BBAEgAf8DUTQBgeoBgKsB/wPP0wH/AAAMAQQBRgH/A13oAf8DXUsB/wNUEAH/A9QdAQgB/wPVIAGBwgH/A9dNAf8AAkoBGAEWAQQBgAABQQGAjAFXAYCuAYAhAYAGATYCgDYBQAH/AASPAf8ABU4BBgH/A1yIAf8DW58BDgH/AAXRAf8ABgoB/wAo/QH/BAhmAYDwAf8D5c8BEgH/AAgyAYAaAYC6AYEWAf8DYSYB/wNgeQEsAYA0AYA4Af8DY/AB/wBu1QH/AnTxAR0BaAH/AnZcAf8CdJMBgEgB/wNttAE2Af8DazEBgDoBQAH/A2y6Af8DbKUBgboBgL4BAgGANwGCegE4Af8DcEoB/wNtXQH/ABhrAf8AGMQB/wNwAAH/BAehAf8AGjoB8aEB8mIB/wN0xAGBKgH/BA/XARAB/wAbVAH/A3jUAf8EEy8B/wQUSAH/A3mVAQABPAH/A3uaAf8DeicB/wAb3QH/ABxsAYB8ATYBeAH/ABzfAf8EH0QB/wOAuwGB3AGA+gH/ACDdAT4B/wAhdAH/A4dOAf8EKCsB/wQomgGBkgGAhgH/A4grAf8AI0kB/wAjxgEKAQ4BFAEOAUoB/wOOCg==', | ||
const TABLE_V = bytes_from_base64('iM2AAIAAgACAAIAAgACAAG4BEX1wgACASoA1AYZaAR+AHoIOgGRmAUcBkQz6ByaAGIAPbYC2gHfd0oWHKg86egGADHWANWOAdYAAgH2AAHd1gI6AhAGAIlQTUoEmgIUBUg=='); | ||
const TABLE_LD = bytes_from_base64('haABBQEBAQEFBA0BBwECIwIIEBImAQIJAQEBAQIoAwIBEgMFBAEJAQEBAQECHwsDDwIEAQECAwIGSiFWBQIBAQoBAQoBAQQCAR0BAgUSCgUCAgYBD46+ARhZDiIBAf8AEBUz4c0FCAEFCgEDCgSAEQEBAQMDAQIBAQIBHAKA0SIBAYGMAwERDAMcBAIMLgEBAgQBAgIBAgEBAgEFAv8AWbRE'); | ||
const TABLE_RD = bytes_from_base64('haABAR4BCiMCAQMBXwEBGAIKAwIBEAEBHh0zSiFVGQcBAQQBBAUTAwECBhENARuOvgEYWQ4iAQH\/ABAVMuHOBgEBAQIDCQEKAgEGBYAQEhcGgNIjgYwVDAQbEi4BAQUBCAEEBAL/AFm1RA=='); | ||
const TABLE_T = bytes_from_base64('gC0BgdJwgJMHgIctAQEBAgECAQFICwEBLhUQAWUHAgYCAgEEIQEBAR4bWws6CQkBGAQBCQEDAQUrAzwIKhgBIDcBAQEECAQBAwcKAh0BOgEEBAgBFAIaAQICOQEEAgQCAgMDAR4CAwELAjkBBAUBAgQBFAIWBgEBOgECAQEECAEHAgsCHgE9AQwBMgEDATcBAQMFAwEEBwILAh0BOgECAQYBBQIUAhwCOQIEBAgBFAIdAUgBBwMBAVoBAgcMCGIBAgkLBkoCGwEBAQEBNw4BBQECBQsBJAkBZgQBBgECAgIZAgQDEAQNAQICBgEPAYI\/A4MyAx0CHgIeAkACAQcIAQILCQEtAwEBdQIiAXYDBAIJAQYDgFsCAgE6AQEHAQEBAQIIBgoCATAfMQQwAQEFAQEFASgJDAIgBAICAQM4AQECAwEBAzoIAgKAGAMBDQEHBAEGAQMCgEZAgYsBAgIaBTEFBQZgIYt+A4ANAWAggaoEawL1VAQBCiACUAKAkAEDAQQBGQIFAYAXAhoSDQEmCBkLLgMwAQIEAgInAUMGAgICAgwBCAEvATMBAQMCAgUCAQEqAggBgG4BAgEEAc6wAYJhEBAQgE8BgHkDgYEBgGIBgBUFhgYDAQIFBCgDBAGAJQKBvQSBAwKAGQsxBHsBNg8pAQICCgMxBAICBwE9AyQFAQg+AQwCNAkKBAIBXwMCAQECBgGAIAEDCBUCOQIDASUHAwWAQwgCAwEBFwFUBgEBBAIBAoBuBAYCAQIbAlUIAgEBAmoBAQECBgEBZQMCBAEFgIMJAQKAgAIBAQQBgBAEAgIEASAKKAYCBAgBCQYCAy4NAQKBFgcBBgEBUhYCBwECAQJ6BgMBAQIBBwEBSAIDAQEBgNsClLsJtjcFOweDmAE\/BFEBzDgCAQSR3C4CF4GgAwkQAgceBIAUA4c7NwQyCAEOARYFAQ+E0AcBEQIHAQIBBYCFB4D3AT0EhWAHbQj\/C5c1AR5ggACAcA=='); | ||
class TableReader { | ||
@@ -48,3 +54,3 @@ constructor(table) { | ||
// member are 2-tuples [unsigned(cp), n] | ||
// member are 1-tuples [unsigned(cp)] | ||
function lookup_member(table, cp) { | ||
@@ -55,2 +61,14 @@ let x = 0; | ||
x += r.read(); | ||
if (x == cp) return true; | ||
if (x > cp) break; | ||
} | ||
return false; | ||
} | ||
// member are 2-tuples [unsigned(cp), n] | ||
function lookup_member_span(table, cp) { | ||
let x = 0; | ||
let r = new TableReader(table); | ||
while (r.more) { | ||
x += r.read(); | ||
let d = cp - x; | ||
@@ -166,11 +184,11 @@ if (d < 0) break; | ||
export function is_disallowed(cp) { | ||
return lookup_member(TABLE_D, typeof cp === 'string' ? cp.codePointAt(0) : cp); | ||
return lookup_member_span(TABLE_D, typeof cp === 'string' ? cp.codePointAt(0) : cp); | ||
} | ||
export function is_ignored(cp) { | ||
return lookup_member(TABLE_I, typeof cp === 'string' ? cp.codePointAt(0) : cp); | ||
return lookup_member_span(TABLE_I, typeof cp === 'string' ? cp.codePointAt(0) : cp); | ||
} | ||
export function is_combining_mark(cp) { | ||
return lookup_member(TABLE_M, typeof cp === 'string' ? cp.codePointAt(0) : cp); | ||
return lookup_member_span(TABLE_M, typeof cp === 'string' ? cp.codePointAt(0) : cp); | ||
} | ||
@@ -182,3 +200,3 @@ | ||
if (typeof cp === 'string') cp = cp.codePointAt(0); | ||
let mapped = lookup_linear(TABLE_L, cp); | ||
let mapped = lookup_linear(TABLE_N, cp); | ||
if (mapped) return mapped; | ||
@@ -191,9 +209,36 @@ for (let i = 0; i < TABLE_W.length; i++) { | ||
// idna2008 with CONTEXTJ | ||
export function idna(s) { | ||
if (typeof s !== 'string') throw new Error('expected string'); | ||
return [...s].map(c => { | ||
let cp = c.codePointAt(0); | ||
if (is_disallowed(cp)) throw new Error(`disallowed: 0x${cp.toString(16)}`); //new Error(`disallowed: ${cp} 0x${cp.toString(16)} ${c}`); | ||
if (is_ignored(cp)) return ''; | ||
return get_mapped(cp) ?? c; | ||
let v = [...s].map(x => x.codePointAt(0)); | ||
return v.map((cp, i) => { | ||
if (is_disallowed(cp)) throw new Error(`disallowed: 0x${cp.toString(16).padStart(2, '0')}`); | ||
if (is_ignored(cp)) return ''; | ||
if (cp === 0x200C) { // https://datatracker.ietf.org/doc/html/rfc5892#appendix-A.1 | ||
// rule 1: V + cp | ||
// V = Combining_Class "Virama" | ||
if (i > 0 && lookup_member(TABLE_V, v[i - 1])) { | ||
return String.fromCodePoint(cp); | ||
} | ||
// rule 2: {L,D} + T* + cp + T* + {R,D} | ||
// L,D,T,R = Joining_Type | ||
if (i > 0 && i < v.length - 1) { // there is room on either side | ||
let head = i - 1; | ||
while (head > 1 && lookup_member_span(TABLE_T, v[head])) head--; // T* | ||
if (lookup_member_span(TABLE_LD, v[head])) { // L or D | ||
let tail = i + 1; | ||
while (tail < v.length - 1 && lookup_member_span(TABLE_T, v[tail])) tail++; // T* | ||
if (lookup_member_span(TABLE_RD, v[tail])) { // R or D | ||
return String.fromCodePoint(cp); | ||
} | ||
} | ||
} | ||
throw new Error('disallowed: zero-width joiner without context'); | ||
} else if (cp === 0x200D) { // https://datatracker.ietf.org/doc/html/rfc5892#appendix-A.2 | ||
if (i > 0 && lookup_member(TABLE_V, v[i - 1])) { // Virama | ||
return String.fromCodePoint(cp); | ||
} | ||
throw new Error('disallowed: zero-width non-joiner without context'); | ||
} | ||
return get_mapped(cp) ?? String.fromCodePoint(cp); | ||
}).join('').normalize('NFC'); | ||
@@ -212,5 +257,5 @@ } | ||
if (s.endsWith('-')) throw new Error(`hyphen at label end: ${s}`); | ||
if (s.length > 0 && is_combining_mark(s)) throw new Error('mark at label start: ${s}'); | ||
if (s.length > 0 && is_combining_mark(s)) throw new Error(`mark at label start: ${s}`); | ||
return s; | ||
}).join('.'); | ||
} |
{ | ||
"name": "@adraffy/ens-normalize", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "Compact ES6 Ethereum Name Service (ENS) Name Normalizer", | ||
"keywords": ["ENS", "Ethereum"], | ||
"keywords": ["ENS", "Ethereum", "UTS-46", "IDNA2008"], | ||
"type": "module", | ||
@@ -7,0 +7,0 @@ "main": "ens-normalize.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
31123
309