lua-obfuscator 1.0.4 → 3.0.0

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.
Files changed (75) hide show
  1. package/dist/index.cjs +4552 -0
  2. package/dist/index.d.cts +399 -0
  3. package/dist/index.d.ts +397 -12
  4. package/dist/index.js +4505 -65
  5. package/package.json +24 -19
  6. package/.github/workflows/release.yml +0 -40
  7. package/dist/prometheus/LICENSE +0 -661
  8. package/dist/prometheus/benchmark.lua +0 -34
  9. package/dist/prometheus/build.bat +0 -10
  10. package/dist/prometheus/cli.lua +0 -12
  11. package/dist/prometheus/doc/README.md +0 -11
  12. package/dist/prometheus/doc/SUMMARY.md +0 -27
  13. package/dist/prometheus/doc/advanced/using-prometheus-in-your-lua-application.md +0 -31
  14. package/dist/prometheus/doc/getting-started/command-line-options.md +0 -13
  15. package/dist/prometheus/doc/getting-started/installation.md +0 -11
  16. package/dist/prometheus/doc/getting-started/obfuscating-your-first-script.md +0 -50
  17. package/dist/prometheus/doc/getting-started/presets.md +0 -10
  18. package/dist/prometheus/doc/getting-started/the-config-object.md +0 -58
  19. package/dist/prometheus/doc/getting-started/writing-a-custom-config-file.md +0 -56
  20. package/dist/prometheus/doc/steps/anti-tamper.md +0 -11
  21. package/dist/prometheus/doc/steps/constantarray.md +0 -71
  22. package/dist/prometheus/doc/steps/encryptstrings.md +0 -86
  23. package/dist/prometheus/doc/steps/proxifylocals.md +0 -47
  24. package/dist/prometheus/doc/steps/splitstrings.md +0 -40
  25. package/dist/prometheus/doc/steps/vmify.md +0 -9
  26. package/dist/prometheus/doc/steps/wrapinfunction.md +0 -29
  27. package/dist/prometheus/prometheus-main.lua +0 -1
  28. package/dist/prometheus/readme.md +0 -57
  29. package/dist/prometheus/readme.txt +0 -5
  30. package/dist/prometheus/src/cli.lua +0 -154
  31. package/dist/prometheus/src/colors.lua +0 -61
  32. package/dist/prometheus/src/config.lua +0 -35
  33. package/dist/prometheus/src/highlightlua.lua +0 -61
  34. package/dist/prometheus/src/logger.lua +0 -62
  35. package/dist/prometheus/src/presets.lua +0 -174
  36. package/dist/prometheus/src/prometheus/ast.lua +0 -792
  37. package/dist/prometheus/src/prometheus/bit.lua +0 -521
  38. package/dist/prometheus/src/prometheus/compiler/compiler.lua +0 -2365
  39. package/dist/prometheus/src/prometheus/enums.lua +0 -106
  40. package/dist/prometheus/src/prometheus/namegenerators/Il.lua +0 -41
  41. package/dist/prometheus/src/prometheus/namegenerators/confuse.lua +0 -169
  42. package/dist/prometheus/src/prometheus/namegenerators/mangled.lua +0 -26
  43. package/dist/prometheus/src/prometheus/namegenerators/mangled_shuffled.lua +0 -35
  44. package/dist/prometheus/src/prometheus/namegenerators/number.lua +0 -11
  45. package/dist/prometheus/src/prometheus/namegenerators.lua +0 -7
  46. package/dist/prometheus/src/prometheus/parser.lua +0 -969
  47. package/dist/prometheus/src/prometheus/pipeline.lua +0 -250
  48. package/dist/prometheus/src/prometheus/randomLiterals.lua +0 -41
  49. package/dist/prometheus/src/prometheus/randomStrings.lua +0 -24
  50. package/dist/prometheus/src/prometheus/scope.lua +0 -332
  51. package/dist/prometheus/src/prometheus/step.lua +0 -79
  52. package/dist/prometheus/src/prometheus/steps/AddVararg.lua +0 -33
  53. package/dist/prometheus/src/prometheus/steps/AntiTamper.lua +0 -194
  54. package/dist/prometheus/src/prometheus/steps/ConstantArray.lua +0 -521
  55. package/dist/prometheus/src/prometheus/steps/EncryptStrings.lua +0 -239
  56. package/dist/prometheus/src/prometheus/steps/NumbersToExpressions.lua +0 -82
  57. package/dist/prometheus/src/prometheus/steps/ProxifyLocals.lua +0 -313
  58. package/dist/prometheus/src/prometheus/steps/SplitStrings.lua +0 -338
  59. package/dist/prometheus/src/prometheus/steps/Vmify.lua +0 -30
  60. package/dist/prometheus/src/prometheus/steps/Watermark.lua +0 -61
  61. package/dist/prometheus/src/prometheus/steps/WatermarkCheck.lua +0 -50
  62. package/dist/prometheus/src/prometheus/steps/WrapInFunction.lua +0 -45
  63. package/dist/prometheus/src/prometheus/steps.lua +0 -12
  64. package/dist/prometheus/src/prometheus/tokenizer.lua +0 -546
  65. package/dist/prometheus/src/prometheus/unparser.lua +0 -866
  66. package/dist/prometheus/src/prometheus/util.lua +0 -297
  67. package/dist/prometheus/src/prometheus/visitast.lua +0 -245
  68. package/dist/prometheus/src/prometheus.lua +0 -71
  69. package/dist/prometheus/tests/closures.lua +0 -12
  70. package/dist/prometheus/tests/fibonacci.lua +0 -10
  71. package/dist/prometheus/tests/loops.lua +0 -8
  72. package/dist/prometheus/tests/primes.lua +0 -18
  73. package/dist/prometheus/tests.lua +0 -149
  74. package/src/index.ts +0 -100
  75. package/tsconfig.json +0 -13
package/dist/index.d.ts CHANGED
@@ -1,14 +1,399 @@
1
- type PrometheusPreset = 'Minify' | 'Weak' | 'Medium' | 'Strong';
2
- interface PrometheusConfig {
3
- LuaVersion?: 'Lua51' | 'LuaU';
4
- VarNamePrefix?: string;
5
- NameGenerator?: 'Mangled' | 'MangledShuffled' | 'Il' | 'Number';
6
- PrettyPrint?: boolean;
7
- Seed?: number;
8
- Steps: Array<{
9
- Name: string;
10
- [key: string]: unknown;
1
+ type DialectName = 'lua5.1' | 'luaU';
2
+ declare class UnknownDialectError extends Error {
3
+ constructor(given: string);
4
+ }
5
+
6
+ interface Position {
7
+ line: number;
8
+ column: number;
9
+ }
10
+ interface SourceLocation {
11
+ start: Position;
12
+ end: Position;
13
+ }
14
+ interface BaseNode {
15
+ type: string;
16
+ range: [number, number];
17
+ loc: SourceLocation;
18
+ }
19
+ interface Chunk extends BaseNode {
20
+ type: 'Chunk';
21
+ body: Statement[];
22
+ }
23
+ type Statement = LocalStatement | CallStatement | WhileStatement | RepeatStatement | AssignmentStatement | CompoundAssignmentStatement | FunctionDeclaration | ForNumericStatement | ForGenericStatement | IfStatement | DoStatement | ReturnStatement | BreakStatement | ContinueStatement | GotoStatement | LabelStatement;
24
+ interface LocalStatement extends BaseNode {
25
+ type: 'LocalStatement';
26
+ variables: Identifier[];
27
+ init: Expression[];
28
+ }
29
+ interface CallStatement extends BaseNode {
30
+ type: 'CallStatement';
31
+ expression: CallExpression | TableCallExpression | StringCallExpression;
32
+ }
33
+ interface WhileStatement extends BaseNode {
34
+ type: 'WhileStatement';
35
+ condition: Expression;
36
+ body: Statement[];
37
+ }
38
+ interface RepeatStatement extends BaseNode {
39
+ type: 'RepeatStatement';
40
+ condition: Expression;
41
+ body: Statement[];
42
+ }
43
+ interface AssignmentStatement extends BaseNode {
44
+ type: 'AssignmentStatement';
45
+ variables: AssignmentTarget[];
46
+ init: Expression[];
47
+ }
48
+ interface CompoundAssignmentStatement extends BaseNode {
49
+ type: 'CompoundAssignmentStatement';
50
+ operator: '+=' | '-=' | '*=' | '/=' | '//=' | '%=' | '^=' | '..=';
51
+ variable: AssignmentTarget;
52
+ value: Expression;
53
+ }
54
+ type AssignmentTarget = Identifier | MemberExpression | IndexExpression;
55
+ interface FunctionDeclaration extends BaseNode {
56
+ type: 'FunctionDeclaration';
57
+ identifier: Identifier | MemberExpression | null;
58
+ isLocal: boolean;
59
+ isMethod: boolean;
60
+ parameters: FunctionParameter[];
61
+ body: Statement[];
62
+ hasVararg: boolean;
63
+ varargTypeAnnotation: Type | null;
64
+ generics: GenericTypeParameter[];
65
+ returnTypeAnnotation: TypeList | null;
66
+ }
67
+ type FunctionParameter = Identifier | VarargLiteral;
68
+ interface ForNumericStatement extends BaseNode {
69
+ type: 'ForNumericStatement';
70
+ variable: Identifier;
71
+ start: Expression;
72
+ end: Expression;
73
+ step: Expression | null;
74
+ body: Statement[];
75
+ }
76
+ interface ForGenericStatement extends BaseNode {
77
+ type: 'ForGenericStatement';
78
+ variables: Identifier[];
79
+ iterators: Expression[];
80
+ body: Statement[];
81
+ }
82
+ interface IfClause extends BaseNode {
83
+ type: 'IfClause';
84
+ condition: Expression;
85
+ body: Statement[];
86
+ }
87
+ interface ElseifClause extends BaseNode {
88
+ type: 'ElseifClause';
89
+ condition: Expression;
90
+ body: Statement[];
91
+ }
92
+ interface ElseClause extends BaseNode {
93
+ type: 'ElseClause';
94
+ body: Statement[];
95
+ }
96
+ interface IfStatement extends BaseNode {
97
+ type: 'IfStatement';
98
+ clauses: Array<IfClause | ElseifClause | ElseClause>;
99
+ }
100
+ interface DoStatement extends BaseNode {
101
+ type: 'DoStatement';
102
+ body: Statement[];
103
+ }
104
+ interface ReturnStatement extends BaseNode {
105
+ type: 'ReturnStatement';
106
+ arguments: Expression[];
107
+ }
108
+ interface BreakStatement extends BaseNode {
109
+ type: 'BreakStatement';
110
+ }
111
+ interface ContinueStatement extends BaseNode {
112
+ type: 'ContinueStatement';
113
+ }
114
+ interface GotoStatement extends BaseNode {
115
+ type: 'GotoStatement';
116
+ label: string;
117
+ }
118
+ interface LabelStatement extends BaseNode {
119
+ type: 'LabelStatement';
120
+ name: string;
121
+ }
122
+ type Expression = Identifier | StringLiteral | NumericLiteral | BooleanLiteral | NilLiteral | VarargLiteral | InterpolatedStringExpression | FunctionDeclaration | TableConstructorExpression | BinaryExpression | LogicalExpression | UnaryExpression | MemberExpression | IndexExpression | CallExpression | TableCallExpression | StringCallExpression | ParenthesizedExpression | IfExpression;
123
+ interface Attribute {
124
+ type: 'Attribute';
125
+ name: 'const' | 'close';
126
+ }
127
+ interface Identifier extends BaseNode {
128
+ type: 'Identifier';
129
+ name: string;
130
+ attribute: Attribute['name'] | null;
131
+ typeAnnotation: Type | null;
132
+ scope: 'global' | 'local' | 'parameter' | 'upvalue';
133
+ isField: boolean;
134
+ bindingId: number | null;
135
+ }
136
+ interface StringLiteral extends BaseNode {
137
+ type: 'StringLiteral';
138
+ value: string;
139
+ raw: string;
140
+ }
141
+ interface NumericLiteral extends BaseNode {
142
+ type: 'NumericLiteral';
143
+ value: number;
144
+ raw: string;
145
+ }
146
+ interface BooleanLiteral extends BaseNode {
147
+ type: 'BooleanLiteral';
148
+ value: boolean;
149
+ }
150
+ interface NilLiteral extends BaseNode {
151
+ type: 'NilLiteral';
152
+ }
153
+ interface VarargLiteral extends BaseNode {
154
+ type: 'VarargLiteral';
155
+ value: '...';
156
+ }
157
+ interface InterpolatedStringExpression extends BaseNode {
158
+ type: 'InterpolatedStringExpression';
159
+ strings: string[];
160
+ expressions: Expression[];
161
+ }
162
+ type TableField = TableKey | TableKeyString | TableValue;
163
+ interface TableKey extends BaseNode {
164
+ type: 'TableKey';
165
+ key: Expression;
166
+ value: Expression;
167
+ }
168
+ interface TableKeyString extends BaseNode {
169
+ type: 'TableKeyString';
170
+ key: Identifier;
171
+ value: Expression;
172
+ }
173
+ interface TableValue extends BaseNode {
174
+ type: 'TableValue';
175
+ value: Expression;
176
+ }
177
+ interface TableConstructorExpression extends BaseNode {
178
+ type: 'TableConstructorExpression';
179
+ fields: TableField[];
180
+ }
181
+ type BinaryOperator = '+' | '-' | '*' | '/' | '//' | '%' | '^' | '..' | '==' | '~=' | '<' | '<=' | '>' | '>=' | '&' | '|' | '~' | '<<' | '>>';
182
+ interface BinaryExpression extends BaseNode {
183
+ type: 'BinaryExpression';
184
+ operator: BinaryOperator;
185
+ left: Expression;
186
+ right: Expression;
187
+ }
188
+ interface LogicalExpression extends BaseNode {
189
+ type: 'LogicalExpression';
190
+ operator: 'and' | 'or';
191
+ left: Expression;
192
+ right: Expression;
193
+ }
194
+ interface UnaryExpression extends BaseNode {
195
+ type: 'UnaryExpression';
196
+ operator: '-' | 'not' | '#';
197
+ argument: Expression;
198
+ }
199
+ interface MemberExpression extends BaseNode {
200
+ type: 'MemberExpression';
201
+ indexer: '.' | ':';
202
+ base: Expression;
203
+ identifier: Identifier;
204
+ optional: boolean;
205
+ }
206
+ interface IndexExpression extends BaseNode {
207
+ type: 'IndexExpression';
208
+ base: Expression;
209
+ index: Expression;
210
+ optional: boolean;
211
+ }
212
+ interface CallExpression extends BaseNode {
213
+ type: 'CallExpression';
214
+ base: Expression;
215
+ arguments: Expression[];
216
+ }
217
+ interface TableCallExpression extends BaseNode {
218
+ type: 'TableCallExpression';
219
+ base: Expression;
220
+ arguments: [TableConstructorExpression];
221
+ }
222
+ interface StringCallExpression extends BaseNode {
223
+ type: 'StringCallExpression';
224
+ base: Expression;
225
+ argument: StringLiteral;
226
+ }
227
+ interface ParenthesizedExpression extends BaseNode {
228
+ type: 'ParenthesizedExpression';
229
+ expression: Expression;
230
+ }
231
+ interface IfExpression extends BaseNode {
232
+ type: 'IfExpression';
233
+ clauses: Array<{
234
+ condition: Expression | null;
235
+ body: Expression;
236
+ }>;
237
+ }
238
+ type Type = TypeReference | TypeUnion | TypeIntersection | TypeOptional | TypeFunction | TypeTable | TypeLiteralString | TypeLiteralBoolean | TypeTypeof | TypeParenthesized | TypeVariadic;
239
+ interface GenericTypeParameter {
240
+ name: string;
241
+ defaultType: Type | null;
242
+ }
243
+ interface TypeList {
244
+ types: Type[];
245
+ vararg: TypeVariadic | null;
246
+ }
247
+ interface TypeReference extends BaseNode {
248
+ type: 'TypeReference';
249
+ name: string;
250
+ typeArguments: Type[];
251
+ }
252
+ interface TypeUnion extends BaseNode {
253
+ type: 'TypeUnion';
254
+ types: Type[];
255
+ }
256
+ interface TypeIntersection extends BaseNode {
257
+ type: 'TypeIntersection';
258
+ types: Type[];
259
+ }
260
+ interface TypeOptional extends BaseNode {
261
+ type: 'TypeOptional';
262
+ base: Type;
263
+ }
264
+ interface TypeFunction extends BaseNode {
265
+ type: 'TypeFunction';
266
+ generics: GenericTypeParameter[];
267
+ parameters: Array<{
268
+ name: string | null;
269
+ type: Type;
11
270
  }>;
271
+ returns: TypeList;
272
+ }
273
+ interface TypeTableField {
274
+ key: string | Type | null;
275
+ value: Type;
276
+ }
277
+ interface TypeTable extends BaseNode {
278
+ type: 'TypeTable';
279
+ fields: TypeTableField[];
280
+ }
281
+ interface TypeLiteralString extends BaseNode {
282
+ type: 'TypeLiteralString';
283
+ value: string;
284
+ }
285
+ interface TypeLiteralBoolean extends BaseNode {
286
+ type: 'TypeLiteralBoolean';
287
+ value: boolean;
288
+ }
289
+ interface TypeTypeof extends BaseNode {
290
+ type: 'TypeTypeof';
291
+ expression: Expression;
292
+ }
293
+ interface TypeParenthesized extends BaseNode {
294
+ type: 'TypeParenthesized';
295
+ type_: Type;
296
+ }
297
+ interface TypeVariadic extends BaseNode {
298
+ type: 'TypeVariadic';
299
+ base: Type;
300
+ }
301
+
302
+ declare class LexError extends Error {
303
+ line: number;
304
+ column: number;
305
+ constructor(message: string, line: number, column: number);
306
+ }
307
+
308
+ declare class ParseError extends Error {
309
+ line: number;
310
+ column: number;
311
+ constructor(message: string, line: number, column: number);
312
+ }
313
+
314
+ type BindingKind = 'local' | 'parameter' | 'for-loop' | 'for-in' | 'local-function';
315
+ interface Binding {
316
+ id: number;
317
+ name: string;
318
+ kind: BindingKind;
319
+ declaration: Identifier;
320
+ }
321
+ /**
322
+ * Resolves every Identifier's lexical scope in place, mutating the tree.
323
+ * Run this once, right after parsing and before any obfuscation pass reads
324
+ * `.scope` / `.bindingId` — renaming, global-mapping, vmify, etc. all depend
325
+ * on this having already run.
326
+ */
327
+ declare function resolveScopes(chunk: Chunk): Chunk;
328
+
329
+ interface GeneratorOptions {
330
+ /** Emit everything on a single line, statements separated by `;`, instead of pretty-printed/indented. */
331
+ minify?: boolean;
332
+ }
333
+ declare function generate(chunk: Chunk, options?: GeneratorOptions): string;
334
+
335
+ type StepConfig = {
336
+ name: 'Vmify';
337
+ } | {
338
+ name: 'RenameVariables';
339
+ } | {
340
+ name: 'ConstantArray';
341
+ } | {
342
+ name: 'EncryptStrings';
343
+ } | {
344
+ name: 'EncryptNumbers';
345
+ } | {
346
+ name: 'StringsToExpressions';
347
+ min?: number;
348
+ max?: number;
349
+ } | {
350
+ name: 'NumbersToExpressions';
351
+ min?: number;
352
+ max?: number;
353
+ } | {
354
+ name: 'InsertJunk';
355
+ probability?: number;
356
+ maxPerBlock?: number;
357
+ } | {
358
+ name: "GlobalMapping";
359
+ globalTableName?: string;
360
+ } | {
361
+ name: "WrapInFunction";
362
+ };
363
+ interface ObfuscateOptions {
364
+ steps: StepConfig[];
365
+ /** Emit the final output as a single `;`-joined line instead of pretty-printed/indented. Default: false. */
366
+ minify?: boolean;
12
367
  }
13
- export declare function obfuscate(text: string, config?: PrometheusPreset | PrometheusConfig, luaVersion?: 'Lua51' | 'LuaU'): Promise<string>;
14
- export {};
368
+
369
+ /**
370
+ * Obfuscates Lua/Luau source code by parsing it and running the requested
371
+ * pipeline of passes over the AST, in the order given, then re-emitting
372
+ * source.
373
+ *
374
+ * obfuscate(src, 'luaU', { steps: [
375
+ * { name: 'Vmify' },
376
+ * { name: 'RenameVariables' },
377
+ * { name: 'ConstantArray' },
378
+ * { name: 'EncryptStrings' },
379
+ * { name: 'StringsToExpressions', min: 5, max: 20 },
380
+ * { name: 'NumbersToExpressions', min: 5, max: 20 },
381
+ * ]})
382
+ */
383
+ declare function obfuscate(source: string, dialect: DialectName, options: ObfuscateOptions): string;
384
+
385
+ /**
386
+ * Parses source code and returns an AST (Chunk) with lexical scope already
387
+ * resolved: every Identifier's `.scope` ('local' | 'parameter' | 'upvalue' |
388
+ * 'global') and `.bindingId` accurately reflect where it's actually bound,
389
+ * not just the parser's syntactic guess at the declaration site.
390
+ *
391
+ * parse(source, 'lua5.1') -> parse as standard Lua 5.1 syntax
392
+ * parse(source, 'luaU') -> parse as Luau syntax (types, continue, string interpolation, attributes, etc.)
393
+ *
394
+ * Throws a ParseError when it encounters syntax the dialect doesn't support
395
+ * (e.g. parsing `local x <const> = 1` while the dialect is lua5.1).
396
+ */
397
+ declare function parse(source: string, dialect: DialectName): Chunk;
398
+
399
+ export { type AssignmentStatement, type AssignmentTarget, type Attribute, type BaseNode, type BinaryExpression, type BinaryOperator, type Binding, type BindingKind, type BooleanLiteral, type BreakStatement, type CallExpression, type CallStatement, type Chunk, type CompoundAssignmentStatement, type ContinueStatement, type DialectName, type DoStatement, type ElseClause, type ElseifClause, type Expression, type ForGenericStatement, type ForNumericStatement, type FunctionDeclaration, type FunctionParameter, type GeneratorOptions, type GenericTypeParameter, type GotoStatement, type Identifier, type IfClause, type IfExpression, type IfStatement, type IndexExpression, type InterpolatedStringExpression, type LabelStatement, LexError, type LocalStatement, type LogicalExpression, type MemberExpression, type NilLiteral, type NumericLiteral, type ObfuscateOptions, type ParenthesizedExpression, ParseError, type Position, type RepeatStatement, type ReturnStatement, type SourceLocation, type Statement, type StepConfig, type StringCallExpression, type StringLiteral, type TableCallExpression, type TableConstructorExpression, type TableField, type TableKey, type TableKeyString, type TableValue, type Type, type TypeFunction, type TypeIntersection, type TypeList, type TypeLiteralBoolean, type TypeLiteralString, type TypeOptional, type TypeParenthesized, type TypeReference, type TypeTable, type TypeTableField, type TypeTypeof, type TypeUnion, type TypeVariadic, type UnaryExpression, UnknownDialectError, type VarargLiteral, type WhileStatement, generate, obfuscate, parse, resolveScopes };