@@ -2,6 +2,7 @@ import { writeFileSync } from 'node:fs'
22import type { CompatStatement , Identifier , StatusBlock } from 'runtime-compat-data'
33import rawCompatData from 'runtime-compat-data'
44import type { PreprocessCompatData , PreprocessCompatStatement } from './src/types'
5+ import { parseJsonKeys , stringifyJsonKeys } from './src/utils'
56
67/**
78 * Compress raw compat data to single level flatmap
@@ -48,7 +49,7 @@ const mapCompatData = new Map<string, PreprocessCompatStatement>()
4849 const subData = compatData [ key ]
4950 if ( key === '__compat' ) {
5051 const preprocessCompatStatement = extractPreprocessCompatStatement ( subData as never )
51- mapCompatData . set ( JSON . stringify ( parentKeys ) , preprocessCompatStatement )
52+ mapCompatData . set ( stringifyJsonKeys ( parentKeys ) , preprocessCompatStatement )
5253 } else {
5354 // Only chain keys if "__compat" exists
5455 const nodeHasCompatData = ! keys . includes ( '__compat' )
@@ -61,7 +62,7 @@ const mapCompatData = new Map<string, PreprocessCompatStatement>()
6162}
6263
6364/**
64- * Sort mapped compat data into different AST detection scenarios
65+ * Sort mapped compat data into different AST detection apiContext
6566 */
6667const preprocessCompatData : PreprocessCompatData = {
6768 class : { } ,
@@ -75,7 +76,7 @@ const preprocessCompatData: PreprocessCompatData = {
7576 const isPascalCase = ( s : string | undefined ) => s ?. match ( / ^ [ A - Z ] + .* / )
7677
7778 for ( const [ jsonKeys , preprocessCompatStatement ] of mapCompatData . entries ( ) ) {
78- const keys = JSON . parse ( jsonKeys ) as string [ ]
79+ const keys = parseJsonKeys ( jsonKeys )
7980 if ( keys . length === 1 ) {
8081 if ( isPascalCase ( keys [ 0 ] ) ) {
8182 // PascalCase, hence a class
@@ -87,24 +88,24 @@ const preprocessCompatData: PreprocessCompatData = {
8788 } else if ( keys . length === 2 ) {
8889 if ( keys [ 0 ] === keys [ 1 ] )
8990 // Duplicate keys are class constructors
90- preprocessCompatData . class [ JSON . stringify ( [ keys [ 0 ] ] ) ] = preprocessCompatStatement
91+ preprocessCompatData . class [ stringifyJsonKeys ( [ keys [ 0 ] ! ] ) ] = preprocessCompatStatement
9192 else if ( keys [ 1 ] ?. match ( '_static' ) ) {
9293 // Static methods have '_static'
93- const newKeys = JSON . stringify ( [ keys [ 0 ] , keys [ 1 ] ?. replace ( '_static' , '' ) ] )
94+ const newKeys = stringifyJsonKeys ( [ keys [ 0 ] ! , keys [ 1 ] ?. replace ( '_static' , '' ) ] )
9495 if ( isPascalCase ( keys [ 0 ] ) )
9596 preprocessCompatData . classProperty [ newKeys ] = preprocessCompatStatement
9697 else preprocessCompatData . globalClassProperty [ newKeys ] = preprocessCompatStatement
9798 } else if ( keys [ 1 ] ?. match ( '_event' ) ) {
9899 // Events have '_event'
99- const newKeys = JSON . stringify ( [ keys [ 0 ] , keys [ 1 ] ?. replace ( '_event' , '' ) ] )
100+ const newKeys = stringifyJsonKeys ( [ keys [ 0 ] ! , keys [ 1 ] ?. replace ( '_event' , '' ) ] )
100101 preprocessCompatData . eventListener [ newKeys ] = preprocessCompatStatement
101102 } else if ( ! keys [ 1 ] ?. match ( '_' ) )
102103 // Normal class property
103104 preprocessCompatData . classProperty [ jsonKeys ] = preprocessCompatStatement
104105 else preprocessCompatData . misc [ jsonKeys ] = preprocessCompatStatement
105106 } else {
106107 // Not sure how to analyse
107- preprocessCompatData . misc [ JSON . stringify ( [ keys [ 0 ] ] ) ] = preprocessCompatStatement
108+ preprocessCompatData . misc [ stringifyJsonKeys ( [ keys [ 0 ] ! ] ) ] = preprocessCompatStatement
108109 }
109110 }
110111}
0 commit comments