js-confuser 2.0.0-alpha.5 → 2.0.1
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.
- package/.github/ISSUE_TEMPLATE/bug_report.md +43 -43
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
- package/.github/workflows/node.js.yml +28 -28
- package/.prettierrc +4 -4
- package/CHANGELOG.md +1015 -989
- package/CODE_OF_CONDUCT.md +131 -131
- package/CONTRIBUTING.md +52 -52
- package/LICENSE +21 -21
- package/Migration.md +72 -71
- package/README.md +86 -78
- package/dist/constants.js +43 -43
- package/dist/index.js +14 -23
- package/dist/obfuscator.js +31 -25
- package/dist/order.js +4 -4
- package/dist/presets.js +31 -31
- package/dist/templates/integrityTemplate.js +4 -4
- package/dist/templates/template.js +1 -2
- package/dist/transforms/astScrambler.js +1 -2
- package/dist/transforms/calculator.js +1 -2
- package/dist/transforms/controlFlowFlattening.js +93 -63
- package/dist/transforms/deadCode.js +1 -2
- package/dist/transforms/dispatcher.js +4 -5
- package/dist/transforms/extraction/duplicateLiteralsRemoval.js +1 -2
- package/dist/transforms/extraction/objectExtraction.js +1 -2
- package/dist/transforms/finalizer.js +1 -2
- package/dist/transforms/flatten.js +1 -2
- package/dist/transforms/identifier/globalConcealing.js +15 -2
- package/dist/transforms/identifier/movedDeclarations.js +8 -7
- package/dist/transforms/identifier/renameVariables.js +7 -7
- package/dist/transforms/lock/integrity.js +11 -10
- package/dist/transforms/lock/lock.js +2 -3
- package/dist/transforms/minify.js +11 -29
- package/dist/transforms/opaquePredicates.js +1 -2
- package/dist/transforms/pack.js +5 -2
- package/dist/transforms/plugin.js +18 -19
- package/dist/transforms/preparation.js +16 -16
- package/dist/transforms/renameLabels.js +1 -2
- package/dist/transforms/rgf.js +8 -9
- package/dist/transforms/shuffle.js +1 -2
- package/dist/transforms/string/encoding.js +1 -2
- package/dist/transforms/string/stringCompression.js +3 -4
- package/dist/transforms/string/stringConcealing.js +8 -3
- package/dist/transforms/string/stringEncoding.js +1 -2
- package/dist/transforms/variableMasking.js +1 -2
- package/dist/utils/NameGen.js +2 -2
- package/dist/utils/PredicateGen.js +1 -2
- package/dist/utils/ast-utils.js +87 -88
- package/dist/utils/function-utils.js +8 -8
- package/dist/utils/node.js +5 -6
- package/dist/utils/object-utils.js +4 -4
- package/dist/utils/random-utils.js +20 -20
- package/dist/utils/static-utils.js +1 -2
- package/dist/validateOptions.js +4 -7
- package/index.d.ts +17 -17
- package/package.json +61 -59
- package/src/constants.ts +168 -168
- package/src/index.ts +118 -118
- package/src/obfuscationResult.ts +49 -49
- package/src/obfuscator.ts +501 -497
- package/src/options.ts +407 -407
- package/src/order.ts +54 -54
- package/src/presets.ts +125 -125
- package/src/templates/bufferToStringTemplate.ts +57 -57
- package/src/templates/deadCodeTemplates.ts +1185 -1185
- package/src/templates/getGlobalTemplate.ts +76 -76
- package/src/templates/integrityTemplate.ts +64 -64
- package/src/templates/setFunctionLengthTemplate.ts +11 -11
- package/src/templates/stringCompressionTemplate.ts +20 -20
- package/src/templates/tamperProtectionTemplates.ts +120 -120
- package/src/templates/template.ts +224 -224
- package/src/transforms/astScrambler.ts +99 -99
- package/src/transforms/calculator.ts +99 -99
- package/src/transforms/controlFlowFlattening.ts +1716 -1664
- package/src/transforms/deadCode.ts +82 -82
- package/src/transforms/dispatcher.ts +450 -450
- package/src/transforms/extraction/duplicateLiteralsRemoval.ts +156 -158
- package/src/transforms/extraction/objectExtraction.ts +186 -186
- package/src/transforms/finalizer.ts +74 -74
- package/src/transforms/flatten.ts +421 -420
- package/src/transforms/identifier/globalConcealing.ts +315 -295
- package/src/transforms/identifier/movedDeclarations.ts +252 -251
- package/src/transforms/identifier/renameVariables.ts +328 -321
- package/src/transforms/lock/integrity.ts +117 -114
- package/src/transforms/lock/lock.ts +418 -425
- package/src/transforms/minify.ts +615 -629
- package/src/transforms/opaquePredicates.ts +100 -100
- package/src/transforms/pack.ts +239 -231
- package/src/transforms/plugin.ts +173 -173
- package/src/transforms/preparation.ts +349 -347
- package/src/transforms/renameLabels.ts +175 -175
- package/src/transforms/rgf.ts +322 -322
- package/src/transforms/shuffle.ts +82 -82
- package/src/transforms/string/encoding.ts +144 -144
- package/src/transforms/string/stringCompression.ts +128 -128
- package/src/transforms/string/stringConcealing.ts +312 -298
- package/src/transforms/string/stringEncoding.ts +80 -80
- package/src/transforms/string/stringSplitting.ts +77 -77
- package/src/transforms/variableMasking.ts +257 -257
- package/src/utils/IntGen.ts +33 -33
- package/src/utils/NameGen.ts +116 -116
- package/src/utils/PredicateGen.ts +61 -61
- package/src/utils/ast-utils.ts +663 -663
- package/src/utils/function-utils.ts +50 -50
- package/src/utils/gen-utils.ts +48 -48
- package/src/utils/node.ts +78 -78
- package/src/utils/object-utils.ts +21 -21
- package/src/utils/random-utils.ts +93 -93
- package/src/utils/static-utils.ts +66 -66
- package/src/validateOptions.ts +256 -259
- package/tsconfig.json +13 -14
- package/dist/probability.js +0 -1
- package/dist/transforms/functionOutlining.js +0 -230
- package/dist/utils/ControlObject.js +0 -125
package/src/order.ts
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Describes the order of transformations.
|
|
3
|
-
*/
|
|
4
|
-
export enum Order {
|
|
5
|
-
Preparation = 0,
|
|
6
|
-
|
|
7
|
-
ObjectExtraction = 1,
|
|
8
|
-
|
|
9
|
-
Flatten = 2,
|
|
10
|
-
|
|
11
|
-
Lock = 3,
|
|
12
|
-
|
|
13
|
-
RGF = 4,
|
|
14
|
-
|
|
15
|
-
Dispatcher = 6,
|
|
16
|
-
|
|
17
|
-
DeadCode = 8,
|
|
18
|
-
|
|
19
|
-
Calculator = 9,
|
|
20
|
-
|
|
21
|
-
GlobalConcealing = 12,
|
|
22
|
-
|
|
23
|
-
OpaquePredicates = 13,
|
|
24
|
-
|
|
25
|
-
StringSplitting = 16,
|
|
26
|
-
|
|
27
|
-
StringConcealing = 17,
|
|
28
|
-
|
|
29
|
-
StringCompression = 18,
|
|
30
|
-
|
|
31
|
-
VariableMasking = 20,
|
|
32
|
-
|
|
33
|
-
DuplicateLiteralsRemoval = 22,
|
|
34
|
-
|
|
35
|
-
Shuffle = 23,
|
|
36
|
-
|
|
37
|
-
ControlFlowFlattening = 24,
|
|
38
|
-
|
|
39
|
-
MovedDeclarations = 25,
|
|
40
|
-
|
|
41
|
-
RenameLabels = 27,
|
|
42
|
-
|
|
43
|
-
Minify = 28,
|
|
44
|
-
|
|
45
|
-
AstScrambler = 29,
|
|
46
|
-
|
|
47
|
-
RenameVariables = 30,
|
|
48
|
-
|
|
49
|
-
Finalizer = 35,
|
|
50
|
-
|
|
51
|
-
Pack = 36,
|
|
52
|
-
|
|
53
|
-
Integrity = 37, // Must run last
|
|
54
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Describes the order of transformations.
|
|
3
|
+
*/
|
|
4
|
+
export enum Order {
|
|
5
|
+
Preparation = 0,
|
|
6
|
+
|
|
7
|
+
ObjectExtraction = 1,
|
|
8
|
+
|
|
9
|
+
Flatten = 2,
|
|
10
|
+
|
|
11
|
+
Lock = 3,
|
|
12
|
+
|
|
13
|
+
RGF = 4,
|
|
14
|
+
|
|
15
|
+
Dispatcher = 6,
|
|
16
|
+
|
|
17
|
+
DeadCode = 8,
|
|
18
|
+
|
|
19
|
+
Calculator = 9,
|
|
20
|
+
|
|
21
|
+
GlobalConcealing = 12,
|
|
22
|
+
|
|
23
|
+
OpaquePredicates = 13,
|
|
24
|
+
|
|
25
|
+
StringSplitting = 16,
|
|
26
|
+
|
|
27
|
+
StringConcealing = 17,
|
|
28
|
+
|
|
29
|
+
StringCompression = 18,
|
|
30
|
+
|
|
31
|
+
VariableMasking = 20,
|
|
32
|
+
|
|
33
|
+
DuplicateLiteralsRemoval = 22,
|
|
34
|
+
|
|
35
|
+
Shuffle = 23,
|
|
36
|
+
|
|
37
|
+
ControlFlowFlattening = 24,
|
|
38
|
+
|
|
39
|
+
MovedDeclarations = 25,
|
|
40
|
+
|
|
41
|
+
RenameLabels = 27,
|
|
42
|
+
|
|
43
|
+
Minify = 28,
|
|
44
|
+
|
|
45
|
+
AstScrambler = 29,
|
|
46
|
+
|
|
47
|
+
RenameVariables = 30,
|
|
48
|
+
|
|
49
|
+
Finalizer = 35,
|
|
50
|
+
|
|
51
|
+
Pack = 36,
|
|
52
|
+
|
|
53
|
+
Integrity = 37, // Must run last
|
|
54
|
+
}
|
package/src/presets.ts
CHANGED
|
@@ -1,125 +1,125 @@
|
|
|
1
|
-
import { ObfuscateOptions } from "./options";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* - High Obfuscation preset
|
|
5
|
-
*
|
|
6
|
-
* **This preset is unsafe and may break your code.**
|
|
7
|
-
*
|
|
8
|
-
* Security risks:
|
|
9
|
-
*
|
|
10
|
-
* - Function constructor (`Pack`)
|
|
11
|
-
* - Escapes strict-mode constraints (`Pack`)
|
|
12
|
-
* - Use of `with` statement (`Control Flow Flattening`)
|
|
13
|
-
* - Object.prototype pollution (`Opaque Predicates`)
|
|
14
|
-
* - Bloats file size (`Dead Code` and `String Compression` can add up to 50kb)
|
|
15
|
-
*/
|
|
16
|
-
const highPreset: ObfuscateOptions = {
|
|
17
|
-
target: "node",
|
|
18
|
-
preset: "high",
|
|
19
|
-
|
|
20
|
-
calculator: true,
|
|
21
|
-
compact: true,
|
|
22
|
-
hexadecimalNumbers: true,
|
|
23
|
-
controlFlowFlattening: 0.5,
|
|
24
|
-
deadCode: 0.25,
|
|
25
|
-
dispatcher: true,
|
|
26
|
-
duplicateLiteralsRemoval: 0.75,
|
|
27
|
-
flatten: true,
|
|
28
|
-
globalConcealing: true,
|
|
29
|
-
identifierGenerator: "randomized",
|
|
30
|
-
minify: true,
|
|
31
|
-
movedDeclarations: true,
|
|
32
|
-
objectExtraction: true,
|
|
33
|
-
opaquePredicates: 0.75,
|
|
34
|
-
renameVariables: true,
|
|
35
|
-
renameGlobals: true,
|
|
36
|
-
shuffle: true,
|
|
37
|
-
variableMasking: 0.75,
|
|
38
|
-
stringConcealing: true,
|
|
39
|
-
stringCompression: true,
|
|
40
|
-
stringEncoding: true,
|
|
41
|
-
stringSplitting: 0.75,
|
|
42
|
-
astScrambler: true,
|
|
43
|
-
|
|
44
|
-
// Experimental
|
|
45
|
-
// functionOutlining: false,
|
|
46
|
-
|
|
47
|
-
// Security risks
|
|
48
|
-
pack: true,
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* - Medium Obfuscation preset
|
|
53
|
-
*
|
|
54
|
-
* **This preset is unsafe and may break your code.**
|
|
55
|
-
*
|
|
56
|
-
* Security risks:
|
|
57
|
-
*
|
|
58
|
-
* - Function constructor (`Pack`)
|
|
59
|
-
* - Escapes strict-mode constraints (`Pack`)
|
|
60
|
-
* - Use of `with` statement (`Control Flow Flattening`)
|
|
61
|
-
* - Object.prototype pollution (`Opaque Predicates`)
|
|
62
|
-
* - Bloats file size (`Dead Code` can add up to 50kb)
|
|
63
|
-
*/
|
|
64
|
-
const mediumPreset: ObfuscateOptions = {
|
|
65
|
-
target: "node",
|
|
66
|
-
preset: "medium",
|
|
67
|
-
|
|
68
|
-
calculator: true,
|
|
69
|
-
compact: true,
|
|
70
|
-
hexadecimalNumbers: true,
|
|
71
|
-
controlFlowFlattening: 0.25,
|
|
72
|
-
deadCode: 0.1,
|
|
73
|
-
dispatcher: 0.5,
|
|
74
|
-
duplicateLiteralsRemoval: 0.5,
|
|
75
|
-
globalConcealing: true,
|
|
76
|
-
identifierGenerator: "randomized",
|
|
77
|
-
minify: true,
|
|
78
|
-
movedDeclarations: true,
|
|
79
|
-
objectExtraction: true,
|
|
80
|
-
renameVariables: true,
|
|
81
|
-
renameGlobals: true,
|
|
82
|
-
shuffle: true,
|
|
83
|
-
variableMasking: 0.5,
|
|
84
|
-
stringConcealing: true,
|
|
85
|
-
stringSplitting: 0.25,
|
|
86
|
-
astScrambler: true,
|
|
87
|
-
pack: true,
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* - Low Obfuscation preset
|
|
92
|
-
*
|
|
93
|
-
* A balanced preset that provides basic obfuscation.
|
|
94
|
-
*
|
|
95
|
-
*/
|
|
96
|
-
const lowPreset: ObfuscateOptions = {
|
|
97
|
-
target: "node",
|
|
98
|
-
preset: "low",
|
|
99
|
-
|
|
100
|
-
calculator: true,
|
|
101
|
-
compact: true,
|
|
102
|
-
hexadecimalNumbers: true,
|
|
103
|
-
deadCode: 0.05,
|
|
104
|
-
dispatcher: 0.25,
|
|
105
|
-
duplicateLiteralsRemoval: 0.5,
|
|
106
|
-
identifierGenerator: "randomized",
|
|
107
|
-
minify: true,
|
|
108
|
-
movedDeclarations: true,
|
|
109
|
-
objectExtraction: true,
|
|
110
|
-
renameVariables: true,
|
|
111
|
-
renameGlobals: true,
|
|
112
|
-
stringConcealing: true,
|
|
113
|
-
astScrambler: true,
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Built-in obfuscator presets.
|
|
118
|
-
*/
|
|
119
|
-
const presets = {
|
|
120
|
-
high: highPreset,
|
|
121
|
-
medium: mediumPreset,
|
|
122
|
-
low: lowPreset,
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
export default presets;
|
|
1
|
+
import { ObfuscateOptions } from "./options";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* - High Obfuscation preset
|
|
5
|
+
*
|
|
6
|
+
* **This preset is unsafe and may break your code.**
|
|
7
|
+
*
|
|
8
|
+
* Security risks:
|
|
9
|
+
*
|
|
10
|
+
* - Function constructor (`Pack`)
|
|
11
|
+
* - Escapes strict-mode constraints (`Pack`)
|
|
12
|
+
* - Use of `with` statement (`Control Flow Flattening`)
|
|
13
|
+
* - Object.prototype pollution (`Opaque Predicates`)
|
|
14
|
+
* - Bloats file size (`Dead Code` and `String Compression` can add up to 50kb)
|
|
15
|
+
*/
|
|
16
|
+
const highPreset: ObfuscateOptions = {
|
|
17
|
+
target: "node",
|
|
18
|
+
preset: "high",
|
|
19
|
+
|
|
20
|
+
calculator: true,
|
|
21
|
+
compact: true,
|
|
22
|
+
hexadecimalNumbers: true,
|
|
23
|
+
controlFlowFlattening: 0.5,
|
|
24
|
+
deadCode: 0.25,
|
|
25
|
+
dispatcher: true,
|
|
26
|
+
duplicateLiteralsRemoval: 0.75,
|
|
27
|
+
flatten: true,
|
|
28
|
+
globalConcealing: true,
|
|
29
|
+
identifierGenerator: "randomized",
|
|
30
|
+
minify: true,
|
|
31
|
+
movedDeclarations: true,
|
|
32
|
+
objectExtraction: true,
|
|
33
|
+
opaquePredicates: 0.75,
|
|
34
|
+
renameVariables: true,
|
|
35
|
+
renameGlobals: true,
|
|
36
|
+
shuffle: true,
|
|
37
|
+
variableMasking: 0.75,
|
|
38
|
+
stringConcealing: true,
|
|
39
|
+
stringCompression: true,
|
|
40
|
+
stringEncoding: true,
|
|
41
|
+
stringSplitting: 0.75,
|
|
42
|
+
astScrambler: true,
|
|
43
|
+
|
|
44
|
+
// Experimental
|
|
45
|
+
// functionOutlining: false,
|
|
46
|
+
|
|
47
|
+
// Security risks
|
|
48
|
+
pack: true,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* - Medium Obfuscation preset
|
|
53
|
+
*
|
|
54
|
+
* **This preset is unsafe and may break your code.**
|
|
55
|
+
*
|
|
56
|
+
* Security risks:
|
|
57
|
+
*
|
|
58
|
+
* - Function constructor (`Pack`)
|
|
59
|
+
* - Escapes strict-mode constraints (`Pack`)
|
|
60
|
+
* - Use of `with` statement (`Control Flow Flattening`)
|
|
61
|
+
* - Object.prototype pollution (`Opaque Predicates`)
|
|
62
|
+
* - Bloats file size (`Dead Code` can add up to 50kb)
|
|
63
|
+
*/
|
|
64
|
+
const mediumPreset: ObfuscateOptions = {
|
|
65
|
+
target: "node",
|
|
66
|
+
preset: "medium",
|
|
67
|
+
|
|
68
|
+
calculator: true,
|
|
69
|
+
compact: true,
|
|
70
|
+
hexadecimalNumbers: true,
|
|
71
|
+
controlFlowFlattening: 0.25,
|
|
72
|
+
deadCode: 0.1,
|
|
73
|
+
dispatcher: 0.5,
|
|
74
|
+
duplicateLiteralsRemoval: 0.5,
|
|
75
|
+
globalConcealing: true,
|
|
76
|
+
identifierGenerator: "randomized",
|
|
77
|
+
minify: true,
|
|
78
|
+
movedDeclarations: true,
|
|
79
|
+
objectExtraction: true,
|
|
80
|
+
renameVariables: true,
|
|
81
|
+
renameGlobals: true,
|
|
82
|
+
shuffle: true,
|
|
83
|
+
variableMasking: 0.5,
|
|
84
|
+
stringConcealing: true,
|
|
85
|
+
stringSplitting: 0.25,
|
|
86
|
+
astScrambler: true,
|
|
87
|
+
pack: true,
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* - Low Obfuscation preset
|
|
92
|
+
*
|
|
93
|
+
* A balanced preset that provides basic obfuscation.
|
|
94
|
+
*
|
|
95
|
+
*/
|
|
96
|
+
const lowPreset: ObfuscateOptions = {
|
|
97
|
+
target: "node",
|
|
98
|
+
preset: "low",
|
|
99
|
+
|
|
100
|
+
calculator: true,
|
|
101
|
+
compact: true,
|
|
102
|
+
hexadecimalNumbers: true,
|
|
103
|
+
deadCode: 0.05,
|
|
104
|
+
dispatcher: 0.25,
|
|
105
|
+
duplicateLiteralsRemoval: 0.5,
|
|
106
|
+
identifierGenerator: "randomized",
|
|
107
|
+
minify: true,
|
|
108
|
+
movedDeclarations: true,
|
|
109
|
+
objectExtraction: true,
|
|
110
|
+
renameVariables: true,
|
|
111
|
+
renameGlobals: true,
|
|
112
|
+
stringConcealing: true,
|
|
113
|
+
astScrambler: true,
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Built-in obfuscator presets.
|
|
118
|
+
*/
|
|
119
|
+
const presets = {
|
|
120
|
+
high: highPreset,
|
|
121
|
+
medium: mediumPreset,
|
|
122
|
+
low: lowPreset,
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export default presets;
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import Template from "./template";
|
|
2
|
-
|
|
3
|
-
export const BufferToStringTemplate = new Template(`
|
|
4
|
-
{GetGlobalTemplate}
|
|
5
|
-
|
|
6
|
-
var __globalObject = {getGlobalFnName}() || {};
|
|
7
|
-
var __TextDecoder = __globalObject["TextDecoder"];
|
|
8
|
-
var __Uint8Array = __globalObject["Uint8Array"];
|
|
9
|
-
var __Buffer = __globalObject["Buffer"];
|
|
10
|
-
var __String = __globalObject["String"] || String;
|
|
11
|
-
var __Array = __globalObject["Array"] || Array;
|
|
12
|
-
|
|
13
|
-
var utf8ArrayToStr = (function () {
|
|
14
|
-
var charCache = new __Array(128); // Preallocate the cache for the common single byte chars
|
|
15
|
-
var charFromCodePt = __String["fromCodePoint"] || __String["fromCharCode"];
|
|
16
|
-
var result = [];
|
|
17
|
-
|
|
18
|
-
return function (array) {
|
|
19
|
-
var codePt;
|
|
20
|
-
var byte1;
|
|
21
|
-
var buffLen = array["length"];
|
|
22
|
-
|
|
23
|
-
result["length"] = 0;
|
|
24
|
-
|
|
25
|
-
for (var i = 0; i < buffLen;) {
|
|
26
|
-
byte1 = array[i++];
|
|
27
|
-
|
|
28
|
-
if (byte1 <= 0x7F) {
|
|
29
|
-
codePt = byte1;
|
|
30
|
-
} else if (byte1 <= 0xDF) {
|
|
31
|
-
codePt = ((byte1 & 0x1F) << 6) | (array[i++] & 0x3F);
|
|
32
|
-
} else if (byte1 <= 0xEF) {
|
|
33
|
-
codePt = ((byte1 & 0x0F) << 12) | ((array[i++] & 0x3F) << 6) | (array[i++] & 0x3F);
|
|
34
|
-
} else if (__String["fromCodePoint"]) {
|
|
35
|
-
codePt = ((byte1 & 0x07) << 18) | ((array[i++] & 0x3F) << 12) | ((array[i++] & 0x3F) << 6) | (array[i++] & 0x3F);
|
|
36
|
-
} else {
|
|
37
|
-
codePt = 63; // Cannot convert four byte code points, so use "?" instead
|
|
38
|
-
i += 3;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
result["push"](charCache[codePt] || (charCache[codePt] = charFromCodePt(codePt)));
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return result["join"]('');
|
|
45
|
-
};
|
|
46
|
-
})();
|
|
47
|
-
|
|
48
|
-
function {BufferToString}(buffer){
|
|
49
|
-
if(typeof __TextDecoder !== "undefined" && __TextDecoder) {
|
|
50
|
-
return new __TextDecoder()["decode"](new __Uint8Array(buffer));
|
|
51
|
-
} else if(typeof __Buffer !== "undefined" && __Buffer) {
|
|
52
|
-
return __Buffer["from"](buffer)["toString"]("utf-8");
|
|
53
|
-
} else {
|
|
54
|
-
return utf8ArrayToStr(buffer);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
`);
|
|
1
|
+
import Template from "./template";
|
|
2
|
+
|
|
3
|
+
export const BufferToStringTemplate = new Template(`
|
|
4
|
+
{GetGlobalTemplate}
|
|
5
|
+
|
|
6
|
+
var __globalObject = {getGlobalFnName}() || {};
|
|
7
|
+
var __TextDecoder = __globalObject["TextDecoder"];
|
|
8
|
+
var __Uint8Array = __globalObject["Uint8Array"];
|
|
9
|
+
var __Buffer = __globalObject["Buffer"];
|
|
10
|
+
var __String = __globalObject["String"] || String;
|
|
11
|
+
var __Array = __globalObject["Array"] || Array;
|
|
12
|
+
|
|
13
|
+
var utf8ArrayToStr = (function () {
|
|
14
|
+
var charCache = new __Array(128); // Preallocate the cache for the common single byte chars
|
|
15
|
+
var charFromCodePt = __String["fromCodePoint"] || __String["fromCharCode"];
|
|
16
|
+
var result = [];
|
|
17
|
+
|
|
18
|
+
return function (array) {
|
|
19
|
+
var codePt;
|
|
20
|
+
var byte1;
|
|
21
|
+
var buffLen = array["length"];
|
|
22
|
+
|
|
23
|
+
result["length"] = 0;
|
|
24
|
+
|
|
25
|
+
for (var i = 0; i < buffLen;) {
|
|
26
|
+
byte1 = array[i++];
|
|
27
|
+
|
|
28
|
+
if (byte1 <= 0x7F) {
|
|
29
|
+
codePt = byte1;
|
|
30
|
+
} else if (byte1 <= 0xDF) {
|
|
31
|
+
codePt = ((byte1 & 0x1F) << 6) | (array[i++] & 0x3F);
|
|
32
|
+
} else if (byte1 <= 0xEF) {
|
|
33
|
+
codePt = ((byte1 & 0x0F) << 12) | ((array[i++] & 0x3F) << 6) | (array[i++] & 0x3F);
|
|
34
|
+
} else if (__String["fromCodePoint"]) {
|
|
35
|
+
codePt = ((byte1 & 0x07) << 18) | ((array[i++] & 0x3F) << 12) | ((array[i++] & 0x3F) << 6) | (array[i++] & 0x3F);
|
|
36
|
+
} else {
|
|
37
|
+
codePt = 63; // Cannot convert four byte code points, so use "?" instead
|
|
38
|
+
i += 3;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
result["push"](charCache[codePt] || (charCache[codePt] = charFromCodePt(codePt)));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return result["join"]('');
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
|
|
48
|
+
function {BufferToString}(buffer){
|
|
49
|
+
if(typeof __TextDecoder !== "undefined" && __TextDecoder) {
|
|
50
|
+
return new __TextDecoder()["decode"](new __Uint8Array(buffer));
|
|
51
|
+
} else if(typeof __Buffer !== "undefined" && __Buffer) {
|
|
52
|
+
return __Buffer["from"](buffer)["toString"]("utf-8");
|
|
53
|
+
} else {
|
|
54
|
+
return utf8ArrayToStr(buffer);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
`);
|