luau-obfuscator 1.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.
@@ -0,0 +1,79 @@
1
+ import { Program } from 'luau-parser';
2
+
3
+ interface StringsToExpressionsOptions {
4
+ /** 청크 하나에 들어가는 바이트 개수 최소값 */
5
+ min: number;
6
+ /** 청크 하나에 들어가는 바이트 개수 최대값 */
7
+ max: number;
8
+ }
9
+
10
+ interface NumbersToExpressionsOptions {
11
+ /** 랜덤 보조항의 최소 절댓값 */
12
+ min: number;
13
+ /** 랜덤 보조항의 최대 절댓값 */
14
+ max: number;
15
+ }
16
+
17
+ interface RenameVariablesOptions {
18
+ random?: () => string;
19
+ }
20
+
21
+ interface GlobalMappingOptions {
22
+ /** 전역들을 담아둘 최상단 local 테이블 변수 이름. RenameVariables가 이후에
23
+ * 다시 실행되면 이 이름도 다른 이름으로 한 번 더 바뀜. */
24
+ tableName: string;
25
+ }
26
+
27
+ interface EncryptStringsOptions {
28
+ }
29
+
30
+ interface EncryptNumbersOptions {
31
+ }
32
+
33
+ type ObfuscateConfigEach<C> = ({
34
+ active: true;
35
+ } & C) | {
36
+ active: false;
37
+ };
38
+ type ObfuscateConfig = {
39
+ Vmify: ObfuscateConfigEach<{}>;
40
+ Minify: ObfuscateConfigEach<{}>;
41
+ StringsToExpressions: ObfuscateConfigEach<StringsToExpressionsOptions>;
42
+ NumbersToExpressions: ObfuscateConfigEach<NumbersToExpressionsOptions>;
43
+ EncryptStrings: ObfuscateConfigEach<EncryptStringsOptions>;
44
+ EncryptNumbers: ObfuscateConfigEach<EncryptNumbersOptions>;
45
+ RenameVariables: ObfuscateConfigEach<RenameVariablesOptions>;
46
+ GlobalMapping: ObfuscateConfigEach<GlobalMappingOptions>;
47
+ ConstantArray: ObfuscateConfigEach<{}>;
48
+ InsertJunk: ObfuscateConfigEach<{
49
+ probability: number;
50
+ maxPerBlock: number;
51
+ }>;
52
+ WrapInFunction: ObfuscateConfigEach<{}>;
53
+ };
54
+ type ExtractOptions<T> = T extends {
55
+ active: true;
56
+ } ? Omit<T, "active"> : never;
57
+ /**
58
+ * 사용자가 넘기는 partial config.
59
+ * 각 feature는 `{active:false}`를 통째로 넘기거나,
60
+ * `{active:true}` + 옵션 일부만 override 하는 형태만 허용.
61
+ * (재귀적 DeepMerge는 이 판별 유니온 구조를 깨서 쓰지 않음)
62
+ */
63
+ type ObfuscatePartialConfig = {
64
+ [K in keyof ObfuscateConfig]?: {
65
+ active: false;
66
+ } | ({
67
+ active: true;
68
+ } & Partial<ExtractOptions<ObfuscateConfig[K]>>);
69
+ };
70
+ declare const ObfuscateDefault: ObfuscateConfig;
71
+
72
+ type PassFn = (program: Program, options: any) => void;
73
+ declare const PASS_ORDER: (keyof ObfuscateConfig)[];
74
+ declare const PASS_MAP: Partial<Record<keyof ObfuscateConfig, PassFn>>;
75
+
76
+ declare function obfuscateByAst(program: Program, PConfig?: ObfuscatePartialConfig): string;
77
+ declare function obfuscate(source: string, PConfig?: ObfuscatePartialConfig): string;
78
+
79
+ export { type ObfuscateConfig, type ObfuscateConfigEach, ObfuscateDefault, type ObfuscatePartialConfig, PASS_MAP, PASS_ORDER, obfuscate, obfuscateByAst };
@@ -0,0 +1,79 @@
1
+ import { Program } from 'luau-parser';
2
+
3
+ interface StringsToExpressionsOptions {
4
+ /** 청크 하나에 들어가는 바이트 개수 최소값 */
5
+ min: number;
6
+ /** 청크 하나에 들어가는 바이트 개수 최대값 */
7
+ max: number;
8
+ }
9
+
10
+ interface NumbersToExpressionsOptions {
11
+ /** 랜덤 보조항의 최소 절댓값 */
12
+ min: number;
13
+ /** 랜덤 보조항의 최대 절댓값 */
14
+ max: number;
15
+ }
16
+
17
+ interface RenameVariablesOptions {
18
+ random?: () => string;
19
+ }
20
+
21
+ interface GlobalMappingOptions {
22
+ /** 전역들을 담아둘 최상단 local 테이블 변수 이름. RenameVariables가 이후에
23
+ * 다시 실행되면 이 이름도 다른 이름으로 한 번 더 바뀜. */
24
+ tableName: string;
25
+ }
26
+
27
+ interface EncryptStringsOptions {
28
+ }
29
+
30
+ interface EncryptNumbersOptions {
31
+ }
32
+
33
+ type ObfuscateConfigEach<C> = ({
34
+ active: true;
35
+ } & C) | {
36
+ active: false;
37
+ };
38
+ type ObfuscateConfig = {
39
+ Vmify: ObfuscateConfigEach<{}>;
40
+ Minify: ObfuscateConfigEach<{}>;
41
+ StringsToExpressions: ObfuscateConfigEach<StringsToExpressionsOptions>;
42
+ NumbersToExpressions: ObfuscateConfigEach<NumbersToExpressionsOptions>;
43
+ EncryptStrings: ObfuscateConfigEach<EncryptStringsOptions>;
44
+ EncryptNumbers: ObfuscateConfigEach<EncryptNumbersOptions>;
45
+ RenameVariables: ObfuscateConfigEach<RenameVariablesOptions>;
46
+ GlobalMapping: ObfuscateConfigEach<GlobalMappingOptions>;
47
+ ConstantArray: ObfuscateConfigEach<{}>;
48
+ InsertJunk: ObfuscateConfigEach<{
49
+ probability: number;
50
+ maxPerBlock: number;
51
+ }>;
52
+ WrapInFunction: ObfuscateConfigEach<{}>;
53
+ };
54
+ type ExtractOptions<T> = T extends {
55
+ active: true;
56
+ } ? Omit<T, "active"> : never;
57
+ /**
58
+ * 사용자가 넘기는 partial config.
59
+ * 각 feature는 `{active:false}`를 통째로 넘기거나,
60
+ * `{active:true}` + 옵션 일부만 override 하는 형태만 허용.
61
+ * (재귀적 DeepMerge는 이 판별 유니온 구조를 깨서 쓰지 않음)
62
+ */
63
+ type ObfuscatePartialConfig = {
64
+ [K in keyof ObfuscateConfig]?: {
65
+ active: false;
66
+ } | ({
67
+ active: true;
68
+ } & Partial<ExtractOptions<ObfuscateConfig[K]>>);
69
+ };
70
+ declare const ObfuscateDefault: ObfuscateConfig;
71
+
72
+ type PassFn = (program: Program, options: any) => void;
73
+ declare const PASS_ORDER: (keyof ObfuscateConfig)[];
74
+ declare const PASS_MAP: Partial<Record<keyof ObfuscateConfig, PassFn>>;
75
+
76
+ declare function obfuscateByAst(program: Program, PConfig?: ObfuscatePartialConfig): string;
77
+ declare function obfuscate(source: string, PConfig?: ObfuscatePartialConfig): string;
78
+
79
+ export { type ObfuscateConfig, type ObfuscateConfigEach, ObfuscateDefault, type ObfuscatePartialConfig, PASS_MAP, PASS_ORDER, obfuscate, obfuscateByAst };