luau-obfuscator 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,57 +1,57 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
-
8
- permissions:
9
- contents: read
10
- id-token: write
11
-
12
- jobs:
13
- publish:
14
- runs-on: ubuntu-latest
15
-
16
- steps:
17
- - uses: actions/checkout@v4
18
-
19
- - uses: actions/setup-node@v4
20
- with:
21
- node-version: '22'
22
- registry-url: 'https://registry.npmjs.org'
23
-
24
- - name: Update npm
25
- run: npm install -g npm@latest
26
-
27
- - name: Check Version
28
- id: check
29
- run: |
30
- PACKAGE=$(node -p "require('./package.json').name")
31
- LOCAL=$(node -p "require('./package.json').version")
32
- PUBLISHED=$(npm view "$PACKAGE" version 2>/dev/null || echo "0.0.0")
33
-
34
- echo "package=$PACKAGE"
35
- echo "local=$LOCAL"
36
- echo "published=$PUBLISHED"
37
-
38
- if [ "$(npx semver "$LOCAL" -r ">$PUBLISHED")" ]; then
39
- echo "should_publish=true" >> "$GITHUB_OUTPUT"
40
- else
41
- echo "should_publish=false" >> "$GITHUB_OUTPUT"
42
- fi
43
-
44
- - name: Install Dependencies
45
- run: npm ci
46
-
47
- - name: Build
48
- run: npm run build
49
-
50
- - name: TypeCheck
51
- run: npm run typecheck
52
-
53
- - name: Test
54
- run: npm test
55
-
56
- - name: Publish
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ permissions:
9
+ contents: read
10
+ id-token: write
11
+
12
+ jobs:
13
+ publish:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - uses: actions/setup-node@v4
20
+ with:
21
+ node-version: '22'
22
+ registry-url: 'https://registry.npmjs.org'
23
+
24
+ - name: Update npm
25
+ run: npm install -g npm@latest
26
+
27
+ - name: Check Version
28
+ id: check
29
+ run: |
30
+ PACKAGE=$(node -p "require('./package.json').name")
31
+ LOCAL=$(node -p "require('./package.json').version")
32
+ PUBLISHED=$(npm view "$PACKAGE" version 2>/dev/null || echo "0.0.0")
33
+
34
+ echo "package=$PACKAGE"
35
+ echo "local=$LOCAL"
36
+ echo "published=$PUBLISHED"
37
+
38
+ if [ "$(npx semver "$LOCAL" -r ">$PUBLISHED")" ]; then
39
+ echo "should_publish=true" >> "$GITHUB_OUTPUT"
40
+ else
41
+ echo "should_publish=false" >> "$GITHUB_OUTPUT"
42
+ fi
43
+
44
+ - name: Install Dependencies
45
+ run: npm ci
46
+
47
+ - name: Build
48
+ run: npm run build
49
+
50
+ - name: TypeCheck
51
+ run: npm run typecheck
52
+
53
+ - name: Test
54
+ run: npm test
55
+
56
+ - name: Publish
57
57
  run: npm publish --provenance
package/dist/index.cjs CHANGED
@@ -1494,6 +1494,7 @@ var Opcode = /* @__PURE__ */ ((Opcode2) => {
1494
1494
  Opcode2[Opcode2["VARARG"] = 32] = "VARARG";
1495
1495
  Opcode2[Opcode2["SETLIST"] = 33] = "SETLIST";
1496
1496
  Opcode2[Opcode2["IDIV"] = 34] = "IDIV";
1497
+ Opcode2[Opcode2["NORMITER"] = 35] = "NORMITER";
1497
1498
  return Opcode2;
1498
1499
  })(Opcode || {});
1499
1500
  function RK(regOrConstIdx, isConst) {
@@ -2309,6 +2310,7 @@ var VmCompiler = class {
2309
2310
  }
2310
2311
  }
2311
2312
  }
2313
+ this.emit(state, 35 /* NORMITER */, base, 0, 0, "normalize-generic-iter");
2312
2314
  const loopStart = state.proto.code.length;
2313
2315
  const nVars = stmt.variables.length;
2314
2316
  const callBase = state.regs.top();
@@ -2841,6 +2843,34 @@ local function ${N.rk}(${N.frame}, x)
2841
2843
  end
2842
2844
  end
2843
2845
 
2846
+ -- \uD50C\uB808\uC778 \uD14C\uC774\uBE14\uC5D0 \uB300\uD55C Luau \uC81C\uB124\uB9AD \uBC18\uBCF5(for k, v in t) \uC774\uD130\uB808\uC774\uD130.
2847
+ -- \uBC30\uC5F4\uBD80(1..\uACBD\uACC4)\uB97C \uC21C\uC11C\uB300\uB85C \uBA3C\uC800, \uADF8\uB2E4\uC74C \uD574\uC2DC\uBD80(\uC774\uBBF8 \uB0B8 \uC815\uC218 \uD0A4\uB294 \uAC74\uB108\uB700)\uB97C \uB0B8\uB2E4.
2848
+ -- \uC0C1\uD0DC\uB97C \uD074\uB85C\uC800\uC5D0 \uB2F4\uC73C\uBBC0\uB85C (fn, state, ctrl) \uC911 state/ctrl\uC740 \uC548 \uC4F4\uB2E4.
2849
+ local function ${N.tableIter}(t)
2850
+ local i = 0
2851
+ local arrayDone = false
2852
+ local hk = nil
2853
+ return function()
2854
+ if not arrayDone then
2855
+ i = i + 1
2856
+ local v = t[i]
2857
+ if v ~= nil then
2858
+ return i, v
2859
+ end
2860
+ arrayDone = true
2861
+ end
2862
+ local k, v = next(t, hk)
2863
+ while k ~= nil do
2864
+ if type(k) ~= "number" or k ~= math.floor(k) or k < 1 or k >= i then
2865
+ hk = k
2866
+ return k, v
2867
+ end
2868
+ k, v = next(t, k)
2869
+ end
2870
+ return nil
2871
+ end
2872
+ end
2873
+
2844
2874
  -- MOVE
2845
2875
  ${N.handlers}[${op(0 /* MOVE */)}] = function(${N.frame}, pc, instr)
2846
2876
  ${N.frame}.${N.R}[instr[2]] = ${N.frame}.${N.R}[instr[3]]
@@ -3042,6 +3072,30 @@ ${N.handlers}[${op(28 /* RETURN */)}] = function(${N.frame}, pc, instr)
3042
3072
  return table.pack(table.unpack(${N.frame}.${N.R}, a, a + b - 2))
3043
3073
  end
3044
3074
 
3075
+ -- NORMITER: \uC81C\uB124\uB9AD for \uC9C4\uC785 \uC2DC \uC774\uD130\uB808\uC774\uD130 3-\uD29C\uD50C(R[A..A+2])\uC744 \uC815\uADDC\uD654.
3076
+ -- R[A]\uAC00 \uD568\uC218\uBA74 \uADF8\uB300\uB85C \uB450\uACE0(pairs/ipairs/\uCEE4\uC2A4\uD140 \uC774\uD130\uB808\uC774\uD130), \uD14C\uC774\uBE14\uC774\uBA74 __iter
3077
+ -- \uBA54\uD0C0\uBA54\uC11C\uB4DC\uAC00 \uC788\uC73C\uBA74 \uADF8\uAC78 \uD638\uCD9C\uD574 (fn,state,ctrl)\uB85C, \uC5C6\uC73C\uBA74 array-then-hash
3078
+ -- \uD074\uB85C\uC800 \uC774\uD130\uB808\uC774\uD130\uB85C \uBC14\uAFBC\uB2E4. \uC774\uD6C4 CALL \uD578\uB4E4\uB7EC\uAC00 \uD568\uC218\uB97C \uC815\uC0C1 \uD638\uCD9C\uD558\uAC8C \uB41C\uB2E4.
3079
+ ${N.handlers}[${op(35 /* NORMITER */)}] = function(${N.frame}, pc, instr)
3080
+ local a = instr[2]
3081
+ local it = ${N.frame}.${N.R}[a]
3082
+ if type(it) ~= "function" then
3083
+ local mt = getmetatable(it)
3084
+ local customIter = mt and rawget(mt, "__iter")
3085
+ if customIter ~= nil then
3086
+ local f, s, c = customIter(it)
3087
+ ${N.frame}.${N.R}[a] = f
3088
+ ${N.frame}.${N.R}[a + 1] = s
3089
+ ${N.frame}.${N.R}[a + 2] = c
3090
+ elseif type(it) == "table" then
3091
+ ${N.frame}.${N.R}[a] = ${N.tableIter}(it)
3092
+ ${N.frame}.${N.R}[a + 1] = nil
3093
+ ${N.frame}.${N.R}[a + 2] = nil
3094
+ end
3095
+ end
3096
+ return pc + 1
3097
+ end
3098
+
3045
3099
  -- FORPREP
3046
3100
  ${N.handlers}[${op(29 /* FORPREP */)}] = function(${N.frame}, pc, instr)
3047
3101
  local a = instr[2]
@@ -3169,6 +3223,7 @@ function generateVmNames(random = Math.random) {
3169
3223
  handlers: id(),
3170
3224
  dispatch: id(),
3171
3225
  rk: id(),
3226
+ tableIter: id(),
3172
3227
  frame: id(),
3173
3228
  R: id(),
3174
3229
  K: id(),
package/dist/index.js CHANGED
@@ -1466,6 +1466,7 @@ var Opcode = /* @__PURE__ */ ((Opcode2) => {
1466
1466
  Opcode2[Opcode2["VARARG"] = 32] = "VARARG";
1467
1467
  Opcode2[Opcode2["SETLIST"] = 33] = "SETLIST";
1468
1468
  Opcode2[Opcode2["IDIV"] = 34] = "IDIV";
1469
+ Opcode2[Opcode2["NORMITER"] = 35] = "NORMITER";
1469
1470
  return Opcode2;
1470
1471
  })(Opcode || {});
1471
1472
  function RK(regOrConstIdx, isConst) {
@@ -2281,6 +2282,7 @@ var VmCompiler = class {
2281
2282
  }
2282
2283
  }
2283
2284
  }
2285
+ this.emit(state, 35 /* NORMITER */, base, 0, 0, "normalize-generic-iter");
2284
2286
  const loopStart = state.proto.code.length;
2285
2287
  const nVars = stmt.variables.length;
2286
2288
  const callBase = state.regs.top();
@@ -2813,6 +2815,34 @@ local function ${N.rk}(${N.frame}, x)
2813
2815
  end
2814
2816
  end
2815
2817
 
2818
+ -- \uD50C\uB808\uC778 \uD14C\uC774\uBE14\uC5D0 \uB300\uD55C Luau \uC81C\uB124\uB9AD \uBC18\uBCF5(for k, v in t) \uC774\uD130\uB808\uC774\uD130.
2819
+ -- \uBC30\uC5F4\uBD80(1..\uACBD\uACC4)\uB97C \uC21C\uC11C\uB300\uB85C \uBA3C\uC800, \uADF8\uB2E4\uC74C \uD574\uC2DC\uBD80(\uC774\uBBF8 \uB0B8 \uC815\uC218 \uD0A4\uB294 \uAC74\uB108\uB700)\uB97C \uB0B8\uB2E4.
2820
+ -- \uC0C1\uD0DC\uB97C \uD074\uB85C\uC800\uC5D0 \uB2F4\uC73C\uBBC0\uB85C (fn, state, ctrl) \uC911 state/ctrl\uC740 \uC548 \uC4F4\uB2E4.
2821
+ local function ${N.tableIter}(t)
2822
+ local i = 0
2823
+ local arrayDone = false
2824
+ local hk = nil
2825
+ return function()
2826
+ if not arrayDone then
2827
+ i = i + 1
2828
+ local v = t[i]
2829
+ if v ~= nil then
2830
+ return i, v
2831
+ end
2832
+ arrayDone = true
2833
+ end
2834
+ local k, v = next(t, hk)
2835
+ while k ~= nil do
2836
+ if type(k) ~= "number" or k ~= math.floor(k) or k < 1 or k >= i then
2837
+ hk = k
2838
+ return k, v
2839
+ end
2840
+ k, v = next(t, k)
2841
+ end
2842
+ return nil
2843
+ end
2844
+ end
2845
+
2816
2846
  -- MOVE
2817
2847
  ${N.handlers}[${op(0 /* MOVE */)}] = function(${N.frame}, pc, instr)
2818
2848
  ${N.frame}.${N.R}[instr[2]] = ${N.frame}.${N.R}[instr[3]]
@@ -3014,6 +3044,30 @@ ${N.handlers}[${op(28 /* RETURN */)}] = function(${N.frame}, pc, instr)
3014
3044
  return table.pack(table.unpack(${N.frame}.${N.R}, a, a + b - 2))
3015
3045
  end
3016
3046
 
3047
+ -- NORMITER: \uC81C\uB124\uB9AD for \uC9C4\uC785 \uC2DC \uC774\uD130\uB808\uC774\uD130 3-\uD29C\uD50C(R[A..A+2])\uC744 \uC815\uADDC\uD654.
3048
+ -- R[A]\uAC00 \uD568\uC218\uBA74 \uADF8\uB300\uB85C \uB450\uACE0(pairs/ipairs/\uCEE4\uC2A4\uD140 \uC774\uD130\uB808\uC774\uD130), \uD14C\uC774\uBE14\uC774\uBA74 __iter
3049
+ -- \uBA54\uD0C0\uBA54\uC11C\uB4DC\uAC00 \uC788\uC73C\uBA74 \uADF8\uAC78 \uD638\uCD9C\uD574 (fn,state,ctrl)\uB85C, \uC5C6\uC73C\uBA74 array-then-hash
3050
+ -- \uD074\uB85C\uC800 \uC774\uD130\uB808\uC774\uD130\uB85C \uBC14\uAFBC\uB2E4. \uC774\uD6C4 CALL \uD578\uB4E4\uB7EC\uAC00 \uD568\uC218\uB97C \uC815\uC0C1 \uD638\uCD9C\uD558\uAC8C \uB41C\uB2E4.
3051
+ ${N.handlers}[${op(35 /* NORMITER */)}] = function(${N.frame}, pc, instr)
3052
+ local a = instr[2]
3053
+ local it = ${N.frame}.${N.R}[a]
3054
+ if type(it) ~= "function" then
3055
+ local mt = getmetatable(it)
3056
+ local customIter = mt and rawget(mt, "__iter")
3057
+ if customIter ~= nil then
3058
+ local f, s, c = customIter(it)
3059
+ ${N.frame}.${N.R}[a] = f
3060
+ ${N.frame}.${N.R}[a + 1] = s
3061
+ ${N.frame}.${N.R}[a + 2] = c
3062
+ elseif type(it) == "table" then
3063
+ ${N.frame}.${N.R}[a] = ${N.tableIter}(it)
3064
+ ${N.frame}.${N.R}[a + 1] = nil
3065
+ ${N.frame}.${N.R}[a + 2] = nil
3066
+ end
3067
+ end
3068
+ return pc + 1
3069
+ end
3070
+
3017
3071
  -- FORPREP
3018
3072
  ${N.handlers}[${op(29 /* FORPREP */)}] = function(${N.frame}, pc, instr)
3019
3073
  local a = instr[2]
@@ -3141,6 +3195,7 @@ function generateVmNames(random = Math.random) {
3141
3195
  handlers: id(),
3142
3196
  dispatch: id(),
3143
3197
  rk: id(),
3198
+ tableIter: id(),
3144
3199
  frame: id(),
3145
3200
  R: id(),
3146
3201
  K: id(),