Skip to content

Commit

Permalink
[New] ES2015+: add Canonicalize
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed Jan 23, 2023
1 parent 1801510 commit 3043fc1
Show file tree
Hide file tree
Showing 33 changed files with 2,018 additions and 10 deletions.
8 changes: 8 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/helpers/caseFolding.json linguist-generated=true
/es2015.js spackled linguist-generated=true
/es2016.js spackled linguist-generated=true
/es2017.js spackled linguist-generated=true
Expand Down Expand Up @@ -48,6 +49,7 @@
/2016/ArraySpeciesCreate.js spackled linguist-generated=true
/2016/Call.js spackled linguist-generated=true
/2016/CanonicalNumericIndexString.js spackled linguist-generated=true
/2016/Canonicalize.js spackled linguist-generated=true
/2016/CharacterRange.js spackled linguist-generated=true
/2016/CompletePropertyDescriptor.js spackled linguist-generated=true
/2016/CreateDataProperty.js spackled linguist-generated=true
Expand Down Expand Up @@ -173,6 +175,7 @@
/2017/ArraySpeciesCreate.js spackled linguist-generated=true
/2017/Call.js spackled linguist-generated=true
/2017/CanonicalNumericIndexString.js spackled linguist-generated=true
/2017/Canonicalize.js spackled linguist-generated=true
/2017/CharacterRange.js spackled linguist-generated=true
/2017/CompletePropertyDescriptor.js spackled linguist-generated=true
/2017/CompletionRecord.js spackled linguist-generated=true
Expand Down Expand Up @@ -301,6 +304,7 @@
/2018/ArraySpeciesCreate.js spackled linguist-generated=true
/2018/Call.js spackled linguist-generated=true
/2018/CanonicalNumericIndexString.js spackled linguist-generated=true
/2018/Canonicalize.js spackled linguist-generated=true
/2018/CharacterRange.js spackled linguist-generated=true
/2018/CompletePropertyDescriptor.js spackled linguist-generated=true
/2018/CompletionRecord.js spackled linguist-generated=true
Expand Down Expand Up @@ -436,6 +440,7 @@
/2019/AsyncIteratorClose.js spackled linguist-generated=true
/2019/Call.js spackled linguist-generated=true
/2019/CanonicalNumericIndexString.js spackled linguist-generated=true
/2019/Canonicalize.js spackled linguist-generated=true
/2019/CharacterRange.js spackled linguist-generated=true
/2019/CompletePropertyDescriptor.js spackled linguist-generated=true
/2019/CompletionRecord.js spackled linguist-generated=true
Expand Down Expand Up @@ -582,6 +587,7 @@
/2020/AsyncIteratorClose.js spackled linguist-generated=true
/2020/Call.js spackled linguist-generated=true
/2020/CanonicalNumericIndexString.js spackled linguist-generated=true
/2020/Canonicalize.js spackled linguist-generated=true
/2020/CharacterRange.js spackled linguist-generated=true
/2020/CompletePropertyDescriptor.js spackled linguist-generated=true
/2020/CompletionRecord.js spackled linguist-generated=true
Expand Down Expand Up @@ -734,6 +740,7 @@
/2021/BinaryXor.js spackled linguist-generated=true
/2021/Call.js spackled linguist-generated=true
/2021/CanonicalNumericIndexString.js spackled linguist-generated=true
/2021/Canonicalize.js spackled linguist-generated=true
/2021/CharacterRange.js spackled linguist-generated=true
/2021/CompletePropertyDescriptor.js spackled linguist-generated=true
/2021/CompletionRecord.js spackled linguist-generated=true
Expand Down Expand Up @@ -924,6 +931,7 @@
/2022/ByteListEqual.js spackled linguist-generated=true
/2022/Call.js spackled linguist-generated=true
/2022/CanonicalNumericIndexString.js spackled linguist-generated=true
/2022/Canonicalize.js spackled linguist-generated=true
/2022/CharacterRange.js spackled linguist-generated=true
/2022/ClearKeptObjects.js spackled linguist-generated=true
/2022/CodePointAt.js spackled linguist-generated=true
Expand Down
55 changes: 55 additions & 0 deletions 2015/Canonicalize.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
'use strict';

var GetIntrinsic = require('get-intrinsic');

var $TypeError = GetIntrinsic('%TypeError%');

var callBound = require('call-bind/callBound');
var has = require('has');

var $charCodeAt = callBound('String.prototype.charCodeAt');
var $toUpperCase = callBound('String.prototype.toUpperCase');

var Type = require('./Type');

var caseFolding = require('../helpers/caseFolding');

// https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch

module.exports = function Canonicalize(ch, IgnoreCase, Unicode) {
if (Type(ch) !== 'String') {
throw new $TypeError('Assertion failed: `ch` must be a character');
}

if (Type(IgnoreCase) !== 'Boolean' || Type(Unicode) !== 'Boolean') {
throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans');
}

if (!IgnoreCase) {
return ch; // step 1
}

if (Unicode) { // step 2
if (has(caseFolding.C, ch)) {
return caseFolding.C[ch];
}
if (has(caseFolding.S, ch)) {
return caseFolding.S[ch];
}
return ch; // step 2.b
}

var u = $toUpperCase(ch); // step 2

if (u.length !== 1) {
return ch; // step 3
}

var cu = u; // step 4

if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) {
return ch; // step 5
}

return cu;
};
55 changes: 55 additions & 0 deletions 2016/Canonicalize.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 55 additions & 0 deletions 2017/Canonicalize.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 55 additions & 0 deletions 2018/Canonicalize.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 55 additions & 0 deletions 2019/Canonicalize.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 55 additions & 0 deletions 2020/Canonicalize.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 3043fc1

Please sign in to comment.