Skip to content

Commit

Permalink
Fix #76
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaelXF committed May 18, 2023
1 parent 471c826 commit 10f0b38
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 3 deletions.
4 changes: 2 additions & 2 deletions src/util/compare.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ export function isValidIdentifier(name: string): boolean {
return false;
}

var x = name.match(/^[A-z$_][A-z0-9$_]*/);
return x && x[0] == name;
var x = name.match(/^[A-Za-z$_][A-Za-z0-9$_]*/);
return !!(x && x[0] == name);
}

export function isInsideType(
Expand Down
28 changes: 28 additions & 0 deletions test/transforms/minify.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -366,3 +366,31 @@ test("Variant #19: Remove unreachable code following a throw statement", async (

expect(output).not.toContain("unreachableStmt");
});

// https://github.com/MichaelXF/js-confuser/issues/76
test("Variant #20: Properly handle objects with `, ^, [, ] as keys", async () => {
var output = await JsConfuser(
`
TEST_OBJECT = {
"\`": true,
"^": true,
"]": true,
"[": true
};
`,
{
target: "node",
minify: true,
}
);

var TEST_OBJECT;
eval(output);

expect(TEST_OBJECT).toStrictEqual({
"`": true,
"^": true,
"]": true,
"[": true,
});
});
24 changes: 23 additions & 1 deletion test/util/compare.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { isEquivalent } from "../../src/util/compare";
import { isEquivalent, isValidIdentifier } from "../../src/util/compare";
import { Identifier } from "../../src/util/gen";

it("should compare nodes correctly", () => {
Expand All @@ -10,3 +10,25 @@ it("should compare nodes correctly", () => {
isEquivalent(Identifier("name"), Identifier("different_name"))
).toStrictEqual(false);
});

describe("isValidIdentifier", () => {
test("Variant #1: Basic examples", () => {
// true examples
expect(isValidIdentifier("myClass")).toStrictEqual(true);
expect(isValidIdentifier("MyClass")).toStrictEqual(true);
expect(isValidIdentifier("$myObject")).toStrictEqual(true);
expect(isValidIdentifier("_myObject")).toStrictEqual(true);
expect(isValidIdentifier("myObject2")).toStrictEqual(true);
expect(isValidIdentifier("_0")).toStrictEqual(true);

// false examples
expect(isValidIdentifier("0")).toStrictEqual(false);
expect(isValidIdentifier("0myInvalidVar")).toStrictEqual(false);
expect(isValidIdentifier("^")).toStrictEqual(false);
expect(isValidIdentifier("%")).toStrictEqual(false);
expect(isValidIdentifier("invalid*Var")).toStrictEqual(false);
expect(isValidIdentifier("invalid!")).toStrictEqual(false);
expect(isValidIdentifier("my invalid var")).toStrictEqual(false);
expect(isValidIdentifier("my-invalid-var")).toStrictEqual(false);
});
});

0 comments on commit 10f0b38

Please sign in to comment.