From c4852c9efb299a8579651e3ac3c7d9a71b89f8c6 Mon Sep 17 00:00:00 2001
From: Yosuke Ota <otameshiyo23@gmail.com>
Date: Mon, 28 Oct 2024 09:36:55 +0900
Subject: [PATCH] fix: `d` should be invalid in ES2021 (#209)

---
 src/validator.ts                              |  2 +-
 .../{flags-2021.json => flags-2022.json}      |  0
 .../parser/literal/flags-invalid-2017.json    | 14 +++++++++++++
 .../parser/literal/flags-invalid-2021.json    | 14 +++++++++++++
 .../parser/literal/flags-invalid-2023.json    | 14 +++++++++++++
 .../parser/literal/flags-invalid-5.json       | 20 +++++++++++++++++++
 6 files changed, 63 insertions(+), 1 deletion(-)
 rename test/fixtures/parser/literal/{flags-2021.json => flags-2022.json} (100%)
 create mode 100644 test/fixtures/parser/literal/flags-invalid-2017.json
 create mode 100644 test/fixtures/parser/literal/flags-invalid-2021.json
 create mode 100644 test/fixtures/parser/literal/flags-invalid-2023.json
 create mode 100644 test/fixtures/parser/literal/flags-invalid-5.json

diff --git a/src/validator.ts b/src/validator.ts
index 6417ab5..c6c9574 100644
--- a/src/validator.ts
+++ b/src/validator.ts
@@ -3569,7 +3569,7 @@ export class RegExpValidator {
             validFlags.add(LATIN_SMALL_LETTER_Y)
             if (this.ecmaVersion >= 2018) {
                 validFlags.add(LATIN_SMALL_LETTER_S)
-                if (this.ecmaVersion >= 2021) {
+                if (this.ecmaVersion >= 2022) {
                     validFlags.add(LATIN_SMALL_LETTER_D)
                     if (this.ecmaVersion >= 2024) {
                         validFlags.add(LATIN_SMALL_LETTER_V)
diff --git a/test/fixtures/parser/literal/flags-2021.json b/test/fixtures/parser/literal/flags-2022.json
similarity index 100%
rename from test/fixtures/parser/literal/flags-2021.json
rename to test/fixtures/parser/literal/flags-2022.json
diff --git a/test/fixtures/parser/literal/flags-invalid-2017.json b/test/fixtures/parser/literal/flags-invalid-2017.json
new file mode 100644
index 0000000..2dc3b9c
--- /dev/null
+++ b/test/fixtures/parser/literal/flags-invalid-2017.json
@@ -0,0 +1,14 @@
+{
+  "options": {
+    "strict": true,
+    "ecmaVersion": 2017
+  },
+  "patterns": {
+    "/./s": {
+      "error": {
+        "message": "Invalid regular expression: /./s: Invalid flag 's'",
+        "index": 3
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/test/fixtures/parser/literal/flags-invalid-2021.json b/test/fixtures/parser/literal/flags-invalid-2021.json
new file mode 100644
index 0000000..1b45ea2
--- /dev/null
+++ b/test/fixtures/parser/literal/flags-invalid-2021.json
@@ -0,0 +1,14 @@
+{
+  "options": {
+    "strict": true,
+    "ecmaVersion": 2021
+  },
+  "patterns": {
+    "/./d": {
+      "error": {
+        "message": "Invalid regular expression: /./d: Invalid flag 'd'",
+        "index": 3
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/test/fixtures/parser/literal/flags-invalid-2023.json b/test/fixtures/parser/literal/flags-invalid-2023.json
new file mode 100644
index 0000000..d15f2ce
--- /dev/null
+++ b/test/fixtures/parser/literal/flags-invalid-2023.json
@@ -0,0 +1,14 @@
+{
+  "options": {
+    "strict": true,
+    "ecmaVersion": 2023
+  },
+  "patterns": {
+    "/./v": {
+      "error": {
+        "message": "Invalid regular expression: /./v: Invalid flag 'v'",
+        "index": 3
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/test/fixtures/parser/literal/flags-invalid-5.json b/test/fixtures/parser/literal/flags-invalid-5.json
new file mode 100644
index 0000000..72cec20
--- /dev/null
+++ b/test/fixtures/parser/literal/flags-invalid-5.json
@@ -0,0 +1,20 @@
+{
+  "options": {
+    "strict": true,
+    "ecmaVersion": 5
+  },
+  "patterns": {
+    "/./u": {
+      "error": {
+        "message": "Invalid regular expression: /./u: Invalid flag 'u'",
+        "index": 3
+      }
+    },
+    "/./y": {
+      "error": {
+        "message": "Invalid regular expression: /./y: Invalid flag 'y'",
+        "index": 3
+      }
+    }
+  }
+}
\ No newline at end of file