@@ -227,6 +227,87 @@ describe('ScopeIdentifiersTransformer ClassDeclaration identifiers', () => {
227
227
} ) ;
228
228
} ) ;
229
229
} ) ;
230
+
231
+ describe ( 'Variant #3: target `service-worker' , ( ) => {
232
+ describe ( 'Variant #1: correct class name references in global scope' , ( ) => {
233
+ const classNameIdentifierRegExp : RegExp = / c l a s s A * \{ / ;
234
+ const outerClassNameReferenceRegExp : RegExp = / c o n s o l e \[ ' l o g ' ] \( A \) ; / ;
235
+ const innerClassNameReferenceRegExp : RegExp = / r e t u r n A ; / ;
236
+
237
+ let obfuscatedCode : string ;
238
+
239
+ before ( ( ) => {
240
+ const code : string = readFileAsString ( __dirname + '/fixtures/class-name-references-global-scope.js' ) ;
241
+
242
+ obfuscatedCode = JavaScriptObfuscator . obfuscate (
243
+ code ,
244
+ {
245
+ ...NO_ADDITIONAL_NODES_PRESET ,
246
+ target : ObfuscationTarget . ServiceWorker
247
+ }
248
+ ) . getObfuscatedCode ( ) ;
249
+ } ) ;
250
+
251
+ it ( 'match #1: shouldn\'t transform class name' , ( ) => {
252
+ assert . match ( obfuscatedCode , classNameIdentifierRegExp ) ;
253
+ } ) ;
254
+
255
+ it ( 'match #2: shouldn\'t transform class name reference outside of class' , ( ) => {
256
+ assert . match ( obfuscatedCode , outerClassNameReferenceRegExp ) ;
257
+ } ) ;
258
+
259
+ it ( 'match #3: shouldn\'t transform class name reference inside class' , ( ) => {
260
+ assert . match ( obfuscatedCode , innerClassNameReferenceRegExp ) ;
261
+ } ) ;
262
+ } ) ;
263
+
264
+ describe ( 'Variant #2: correct class name references in function scope' , ( ) => {
265
+ const classNameIdentifierRegExp : RegExp = / c l a s s ( _ 0 x [ a - f 0 - 9 ] { 4 , 6 } ) * \{ / ;
266
+ const outerClassNameReferenceRegExp : RegExp = / c o n s o l e \[ ' l o g ' ] \( ( _ 0 x [ a - f 0 - 9 ] { 4 , 6 } ) \) ; / ;
267
+ const innerClassNameReferenceRegExp : RegExp = / r e t u r n ( _ 0 x [ a - f 0 - 9 ] { 4 , 6 } ) ; / ;
268
+
269
+ let obfuscatedCode : string ;
270
+ let classNameIdentifier : string ;
271
+ let outerClassNameReferenceIdentifierName : string ;
272
+ let innerClassNameReferenceIdentifierName : string ;
273
+
274
+ before ( ( ) => {
275
+ const code : string = readFileAsString ( __dirname + '/fixtures/class-name-references-function-scope.js' ) ;
276
+
277
+ obfuscatedCode = JavaScriptObfuscator . obfuscate (
278
+ code ,
279
+ {
280
+ ...NO_ADDITIONAL_NODES_PRESET ,
281
+ target : ObfuscationTarget . ServiceWorker
282
+ }
283
+ ) . getObfuscatedCode ( ) ;
284
+
285
+ classNameIdentifier = getRegExpMatch ( obfuscatedCode , classNameIdentifierRegExp ) ;
286
+ outerClassNameReferenceIdentifierName = getRegExpMatch ( obfuscatedCode , outerClassNameReferenceRegExp ) ;
287
+ innerClassNameReferenceIdentifierName = getRegExpMatch ( obfuscatedCode , innerClassNameReferenceRegExp ) ;
288
+ } ) ;
289
+
290
+ it ( 'match #1: should transform class name' , ( ) => {
291
+ assert . match ( obfuscatedCode , classNameIdentifierRegExp ) ;
292
+ } ) ;
293
+
294
+ it ( 'match #2: should transform class name reference outside of class' , ( ) => {
295
+ assert . match ( obfuscatedCode , outerClassNameReferenceRegExp ) ;
296
+ } ) ;
297
+
298
+ it ( 'match #3: should transform class name reference inside class' , ( ) => {
299
+ assert . match ( obfuscatedCode , innerClassNameReferenceRegExp ) ;
300
+ } ) ;
301
+
302
+ it ( 'match #4: should generate same identifier names for class name and outer class name reference' , ( ) => {
303
+ assert . equal ( classNameIdentifier , outerClassNameReferenceIdentifierName ) ;
304
+ } ) ;
305
+
306
+ it ( 'match #5: should generate same identifier names for class name and inner class name reference' , ( ) => {
307
+ assert . equal ( classNameIdentifier , innerClassNameReferenceIdentifierName ) ;
308
+ } ) ;
309
+ } ) ;
310
+ } ) ;
230
311
} ) ;
231
312
232
313
describe ( 'Variant #2: `renameGlobals` option is enabled' , ( ) => {
@@ -479,6 +560,104 @@ describe('ScopeIdentifiersTransformer ClassDeclaration identifiers', () => {
479
560
} ) ;
480
561
} ) ;
481
562
} ) ;
563
+
564
+ describe ( 'Variant #4: target: `service-worker' , ( ) => {
565
+ describe ( 'Variant #1: correct class name references in global scope' , ( ) => {
566
+ const classNameIdentifierRegExp : RegExp = / c l a s s ( _ 0 x [ a - f 0 - 9 ] { 4 , 6 } ) * \{ / ;
567
+ const outerClassNameReferenceRegExp : RegExp = / c o n s o l e \[ ' l o g ' ] \( ( _ 0 x [ a - f 0 - 9 ] { 4 , 6 } ) \) ; / ;
568
+ const innerClassNameReferenceRegExp : RegExp = / r e t u r n ( _ 0 x [ a - f 0 - 9 ] { 4 , 6 } ) ; / ;
569
+
570
+ let obfuscatedCode : string ;
571
+ let classNameIdentifier : string ;
572
+ let outerClassNameReferenceIdentifierName : string ;
573
+ let innerClassNameReferenceIdentifierName : string ;
574
+
575
+ before ( ( ) => {
576
+ const code : string = readFileAsString ( __dirname + '/fixtures/class-name-references-global-scope.js' ) ;
577
+
578
+ obfuscatedCode = JavaScriptObfuscator . obfuscate (
579
+ code ,
580
+ {
581
+ ...NO_ADDITIONAL_NODES_PRESET ,
582
+ renameGlobals : true ,
583
+ target : ObfuscationTarget . ServiceWorker
584
+ }
585
+ ) . getObfuscatedCode ( ) ;
586
+
587
+ classNameIdentifier = getRegExpMatch ( obfuscatedCode , classNameIdentifierRegExp ) ;
588
+ outerClassNameReferenceIdentifierName = getRegExpMatch ( obfuscatedCode , outerClassNameReferenceRegExp ) ;
589
+ innerClassNameReferenceIdentifierName = getRegExpMatch ( obfuscatedCode , innerClassNameReferenceRegExp ) ;
590
+ } ) ;
591
+
592
+ it ( 'match #1: should transform class name' , ( ) => {
593
+ assert . match ( obfuscatedCode , classNameIdentifierRegExp ) ;
594
+ } ) ;
595
+
596
+ it ( 'match #2: should transform class name reference outside of class' , ( ) => {
597
+ assert . match ( obfuscatedCode , outerClassNameReferenceRegExp ) ;
598
+ } ) ;
599
+
600
+ it ( 'match #3: should transform class name reference inside class' , ( ) => {
601
+ assert . match ( obfuscatedCode , innerClassNameReferenceRegExp ) ;
602
+ } ) ;
603
+
604
+ it ( 'match #4: should generate same identifier names for class name and outer class name reference' , ( ) => {
605
+ assert . equal ( classNameIdentifier , outerClassNameReferenceIdentifierName ) ;
606
+ } ) ;
607
+
608
+ it ( 'match #5: should generate same identifier names for class name and inner class name reference' , ( ) => {
609
+ assert . equal ( classNameIdentifier , innerClassNameReferenceIdentifierName ) ;
610
+ } ) ;
611
+ } ) ;
612
+
613
+ describe ( 'Variant #2: correct class name references in function scope' , ( ) => {
614
+ const classNameIdentifierRegExp : RegExp = / c l a s s ( _ 0 x [ a - f 0 - 9 ] { 4 , 6 } ) * \{ / ;
615
+ const outerClassNameReferenceRegExp : RegExp = / c <
8000
span class=pl-s>on s o l e \[ ' l o g ' ] \( ( _ 0 x [ a - f 0 - 9 ] { 4 , 6 } ) \) ; / ;
616
+ const innerClassNameReferenceRegExp : RegExp = / r e t u r n ( _ 0 x [ a - f 0 - 9 ] { 4 , 6 } ) ; / ;
617
+
618
+ let obfuscatedCode : string ;
619
+ let classNameIdentifier : string ;
620
+ let outerClassNameReferenceIdentifierName : string ;
621
+ let innerClassNameReferenceIdentifierName : string ;
622
+
623
+ before ( ( ) => {
624
+ const code : string = readFileAsString ( __dirname + '/fixtures/class-name-references-function-scope.js' ) ;
625
+
626
+ obfuscatedCode = JavaScriptObfuscator . obfuscate (
627
+ code ,
628
+ {
629
+ ...NO_ADDITIONAL_NODES_PRESET ,
630
+ renameGlobals : true ,
631
+ target : ObfuscationTarget . ServiceWorker
632
+ }
633
+ ) . getObfuscatedCode ( ) ;
634
+
635
+ classNameIdentifier = getRegExpMatch ( obfuscatedCode , classNameIdentifierRegExp ) ;
17A6
636
+ outerClassNameReferenceIdentifierName = getRegExpMatch ( obfuscatedCode , outerClassNameReferenceRegExp ) ;
637
+ innerClassNameReferenceIdentifierName = getRegExpMatch ( obfuscatedCode , innerClassNameReferenceRegExp ) ;
638
+ } ) ;
639
+
640
+ it ( 'match #1: should transform class name' , ( ) => {
641
+ assert . match ( obfuscatedCode , classNameIdentifierRegExp ) ;
642
+ } ) ;
643
+
644
+ it ( 'match #2: should transform class name reference outside of class' , ( ) => {
645
+ assert . match ( obfuscatedCode , outerClassNameReferenceRegExp ) ;
646
+ } ) ;
647
+
648
+ it ( 'match #3: should transform class name reference inside class' , ( ) => {
649
+ assert . match ( obfuscatedCode , innerClassNameReferenceRegExp ) ;
650
+ } ) ;
651
+
652
+ it ( 'match #4: should generate same identifier names for class name and outer class name reference' , ( ) => {
653
+ assert . equal ( classNameIdentifier , outerClassNameReferenceIdentifierName ) ;
654
+ } ) ;
655
+
656
+ it ( 'match #5: should generate same identifier names for class name and inner class name reference' , ( ) => {
657
+ assert . equal ( classNameIdentifier , innerClassNameReferenceIdentifierName ) ;
658
+ } ) ;
659
+ } ) ;
660
+ } ) ;
482
661
} ) ;
483
662
} ) ;
484
663
0 commit comments