@wyw-in-js/transform 0.8.0 → 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.
Files changed (327) hide show
  1. package/esm/babel.js.map +1 -1
  2. package/esm/cache.js +15 -4
  3. package/esm/cache.js.map +1 -1
  4. package/esm/debug/fileReporter.js.map +1 -1
  5. package/esm/evaluators/index.js.map +1 -1
  6. package/esm/index.js.map +1 -1
  7. package/esm/module.js +174 -15
  8. package/esm/module.js.map +1 -1
  9. package/esm/options/buildOptions.js +123 -4
  10. package/esm/options/buildOptions.js.map +1 -1
  11. package/esm/options/buildOptions.test.js +41 -0
  12. package/esm/options/buildOptions.test.js.map +1 -0
  13. package/esm/options/loadBabelOptions.js.map +1 -1
  14. package/esm/plugins/babel-transform.js.map +1 -1
  15. package/esm/plugins/collector.js.map +1 -1
  16. package/esm/plugins/dynamic-import.js +35 -12
  17. package/esm/plugins/dynamic-import.js.map +1 -1
  18. package/esm/plugins/preeval.js +4 -0
  19. package/esm/plugins/preeval.js.map +1 -1
  20. package/esm/plugins/shaker.js +170 -23
  21. package/esm/plugins/shaker.js.map +1 -1
  22. package/esm/shaker.js +6 -3
  23. package/esm/shaker.js.map +1 -1
  24. package/esm/transform/BaseEntrypoint.js.map +1 -1
  25. package/esm/transform/Entrypoint.helpers.js +105 -15
  26. package/esm/transform/Entrypoint.helpers.js.map +1 -1
  27. package/esm/transform/Entrypoint.js +13 -2
  28. package/esm/transform/Entrypoint.js.map +1 -1
  29. package/esm/transform/Entrypoint.types.js.map +1 -1
  30. package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
  31. package/esm/transform/actions/AbortError.js.map +1 -1
  32. package/esm/transform/actions/BaseAction.js +5 -0
  33. package/esm/transform/actions/BaseAction.js.map +1 -1
  34. package/esm/transform/actions/UnprocessedEntrypointError.js.map +1 -1
  35. package/esm/transform/actions/actionRunner.js.map +1 -1
  36. package/esm/transform/actions/types.js.map +1 -1
  37. package/esm/transform/generators/baseProcessingHandlers.js.map +1 -1
  38. package/esm/transform/generators/collect.js.map +1 -1
  39. package/esm/transform/generators/createStylisPreprocessor.js +118 -2
  40. package/esm/transform/generators/createStylisPreprocessor.js.map +1 -1
  41. package/esm/transform/generators/evalFile.js.map +1 -1
  42. package/esm/transform/generators/explodeReexports.js +10 -10
  43. package/esm/transform/generators/explodeReexports.js.map +1 -1
  44. package/esm/transform/generators/extract.js.map +1 -1
  45. package/esm/transform/generators/getExports.js.map +1 -1
  46. package/esm/transform/generators/index.js.map +1 -1
  47. package/esm/transform/generators/processEntrypoint.js +5 -8
  48. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  49. package/esm/transform/generators/processImports.js.map +1 -1
  50. package/esm/transform/generators/resolveImports.js +41 -2
  51. package/esm/transform/generators/resolveImports.js.map +1 -1
  52. package/esm/transform/generators/transform.js +7 -3
  53. package/esm/transform/generators/transform.js.map +1 -1
  54. package/esm/transform/generators/workflow.js.map +1 -1
  55. package/esm/transform/helpers/loadWywOptions.js +15 -2
  56. package/esm/transform/helpers/loadWywOptions.js.map +1 -1
  57. package/esm/transform/helpers/withDefaultServices.js +2 -0
  58. package/esm/transform/helpers/withDefaultServices.js.map +1 -1
  59. package/esm/transform/isStaticallyEvaluatableModule.js +153 -0
  60. package/esm/transform/isStaticallyEvaluatableModule.js.map +1 -0
  61. package/esm/transform/rootLog.js.map +1 -1
  62. package/esm/transform/types.js.map +1 -1
  63. package/esm/transform.js +15 -6
  64. package/esm/transform.js.map +1 -1
  65. package/esm/types.js.map +1 -1
  66. package/esm/utils/EventEmitter.js.map +1 -1
  67. package/esm/utils/ShakerMetadata.js.map +1 -1
  68. package/esm/utils/TransformMetadata.js.map +1 -1
  69. package/esm/utils/addIdentifierToWywPreval.js.map +1 -1
  70. package/esm/utils/collectExportsAndImports.js +97 -6
  71. package/esm/utils/collectExportsAndImports.js.map +1 -1
  72. package/esm/utils/collectTemplateDependencies.js +1 -1
  73. package/esm/utils/collectTemplateDependencies.js.map +1 -1
  74. package/esm/utils/createId.js.map +1 -1
  75. package/esm/utils/dispose-polyfill.js.map +1 -1
  76. package/esm/utils/findIdentifiers.js.map +1 -1
  77. package/esm/utils/getConstantStringValue.js +58 -0
  78. package/esm/utils/getConstantStringValue.js.map +1 -0
  79. package/esm/utils/getFileIdx.js.map +1 -1
  80. package/esm/utils/getMemberExpressionPropertyName.js +11 -0
  81. package/esm/utils/getMemberExpressionPropertyName.js.map +1 -0
  82. package/esm/utils/getPluginKey.js.map +1 -1
  83. package/esm/utils/getScope.js.map +1 -1
  84. package/esm/utils/getSource.js.map +1 -1
  85. package/esm/utils/getTagProcessor.js +34 -6
  86. package/esm/utils/getTagProcessor.js.map +1 -1
  87. package/esm/utils/getVisitorKeys.js.map +1 -1
  88. package/esm/utils/hasWywPreval.js.map +1 -1
  89. package/esm/utils/importOverrides.js +47 -0
  90. package/esm/utils/importOverrides.js.map +1 -0
  91. package/esm/utils/isExports.js.map +1 -1
  92. package/esm/utils/isGlobal.js.map +1 -1
  93. package/esm/utils/isNode.js.map +1 -1
  94. package/esm/utils/isNodePath.js.map +1 -1
  95. package/esm/utils/isNotNull.js.map +1 -1
  96. package/esm/utils/isRemoved.js.map +1 -1
  97. package/esm/utils/isRequire.js.map +1 -1
  98. package/esm/utils/isSerializable.js.map +1 -1
  99. package/esm/utils/isTypedNode.js.map +1 -1
  100. package/esm/utils/isUnnecessaryReactCall.js.map +1 -1
  101. package/esm/utils/parseRequest.js +29 -0
  102. package/esm/utils/parseRequest.js.map +1 -0
  103. package/esm/utils/peek.js.map +1 -1
  104. package/esm/utils/removeDangerousCode.js +32 -2
  105. package/esm/utils/removeDangerousCode.js.map +1 -1
  106. package/esm/utils/replaceImportMetaEnv.js +44 -0
  107. package/esm/utils/replaceImportMetaEnv.js.map +1 -0
  108. package/esm/utils/scopeHelpers.js.map +1 -1
  109. package/esm/utils/traversalCache.js.map +1 -1
  110. package/esm/utils/unwrapExpression.js +18 -0
  111. package/esm/utils/unwrapExpression.js.map +1 -0
  112. package/esm/utils/unwrapSequence.js.map +1 -1
  113. package/esm/utils/valueToLiteral.js.map +1 -1
  114. package/esm/utils/visitors/JSXElementsRemover.js.map +1 -1
  115. package/esm/vm/createVmContext.js +44 -0
  116. package/esm/vm/createVmContext.js.map +1 -1
  117. package/esm/vm/process.js.map +1 -1
  118. package/lib/babel.js.map +1 -1
  119. package/lib/cache.js +16 -5
  120. package/lib/cache.js.map +1 -1
  121. package/lib/debug/fileReporter.js +1 -1
  122. package/lib/debug/fileReporter.js.map +1 -1
  123. package/lib/evaluators/index.js.map +1 -1
  124. package/lib/index.js +1 -1
  125. package/lib/index.js.map +1 -1
  126. package/lib/module.js +177 -16
  127. package/lib/module.js.map +1 -1
  128. package/lib/options/buildOptions.js +127 -6
  129. package/lib/options/buildOptions.js.map +1 -1
  130. package/lib/options/buildOptions.test.js +44 -0
  131. package/lib/options/buildOptions.test.js.map +1 -0
  132. package/lib/options/loadBabelOptions.js.map +1 -1
  133. package/lib/plugins/babel-transform.js.map +1 -1
  134. package/lib/plugins/collector.js.map +1 -1
  135. package/lib/plugins/dynamic-import.js +34 -12
  136. package/lib/plugins/dynamic-import.js.map +1 -1
  137. package/lib/plugins/preeval.js +4 -0
  138. package/lib/plugins/preeval.js.map +1 -1
  139. package/lib/plugins/shaker.js +172 -22
  140. package/lib/plugins/shaker.js.map +1 -1
  141. package/lib/shaker.js +8 -4
  142. package/lib/shaker.js.map +1 -1
  143. package/lib/transform/BaseEntrypoint.js.map +1 -1
  144. package/lib/transform/Entrypoint.helpers.js +106 -15
  145. package/lib/transform/Entrypoint.helpers.js.map +1 -1
  146. package/lib/transform/Entrypoint.js +13 -2
  147. package/lib/transform/Entrypoint.js.map +1 -1
  148. package/lib/transform/Entrypoint.types.js.map +1 -1
  149. package/lib/transform/EvaluatedEntrypoint.js.map +1 -1
  150. package/lib/transform/actions/AbortError.js.map +1 -1
  151. package/lib/transform/actions/BaseAction.js +5 -0
  152. package/lib/transform/actions/BaseAction.js.map +1 -1
  153. package/lib/transform/actions/UnprocessedEntrypointError.js.map +1 -1
  154. package/lib/transform/actions/actionRunner.js.map +1 -1
  155. package/lib/transform/actions/types.js.map +1 -1
  156. package/lib/transform/generators/baseProcessingHandlers.js.map +1 -1
  157. package/lib/transform/generators/collect.js.map +1 -1
  158. package/lib/transform/generators/createStylisPreprocessor.js +119 -3
  159. package/lib/transform/generators/createStylisPreprocessor.js.map +1 -1
  160. package/lib/transform/generators/evalFile.js +1 -1
  161. package/lib/transform/generators/evalFile.js.map +1 -1
  162. package/lib/transform/generators/explodeReexports.js +11 -11
  163. package/lib/transform/generators/explodeReexports.js.map +1 -1
  164. package/lib/transform/generators/extract.js.map +1 -1
  165. package/lib/transform/generators/getExports.js.map +1 -1
  166. package/lib/transform/generators/index.js.map +1 -1
  167. package/lib/transform/generators/processEntrypoint.js +5 -8
  168. package/lib/transform/generators/processEntrypoint.js.map +1 -1
  169. package/lib/transform/generators/processImports.js.map +1 -1
  170. package/lib/transform/generators/resolveImports.js +41 -2
  171. package/lib/transform/generators/resolveImports.js.map +1 -1
  172. package/lib/transform/generators/transform.js +8 -3
  173. package/lib/transform/generators/transform.js.map +1 -1
  174. package/lib/transform/generators/workflow.js.map +1 -1
  175. package/lib/transform/helpers/loadWywOptions.js +16 -2
  176. package/lib/transform/helpers/loadWywOptions.js.map +1 -1
  177. package/lib/transform/helpers/withDefaultServices.js +3 -2
  178. package/lib/transform/helpers/withDefaultServices.js.map +1 -1
  179. package/lib/transform/isStaticallyEvaluatableModule.js +159 -0
  180. package/lib/transform/isStaticallyEvaluatableModule.js.map +1 -0
  181. package/lib/transform/rootLog.js.map +1 -1
  182. package/lib/transform/types.js.map +1 -1
  183. package/lib/transform.js +15 -6
  184. package/lib/transform.js.map +1 -1
  185. package/lib/types.js.map +1 -1
  186. package/lib/utils/EventEmitter.js.map +1 -1
  187. package/lib/utils/ShakerMetadata.js.map +1 -1
  188. package/lib/utils/TransformMetadata.js.map +1 -1
  189. package/lib/utils/addIdentifierToWywPreval.js.map +1 -1
  190. package/lib/utils/collectExportsAndImports.js +97 -6
  191. package/lib/utils/collectExportsAndImports.js.map +1 -1
  192. package/lib/utils/collectTemplateDependencies.js +1 -1
  193. package/lib/utils/collectTemplateDependencies.js.map +1 -1
  194. package/lib/utils/createId.js.map +1 -1
  195. package/lib/utils/dispose-polyfill.js.map +1 -1
  196. package/lib/utils/findIdentifiers.js.map +1 -1
  197. package/lib/utils/getConstantStringValue.js +66 -0
  198. package/lib/utils/getConstantStringValue.js.map +1 -0
  199. package/lib/utils/getFileIdx.js.map +1 -1
  200. package/lib/utils/getMemberExpressionPropertyName.js +18 -0
  201. package/lib/utils/getMemberExpressionPropertyName.js.map +1 -0
  202. package/lib/utils/getPluginKey.js.map +1 -1
  203. package/lib/utils/getScope.js.map +1 -1
  204. package/lib/utils/getSource.js +1 -1
  205. package/lib/utils/getSource.js.map +1 -1
  206. package/lib/utils/getTagProcessor.js +33 -6
  207. package/lib/utils/getTagProcessor.js.map +1 -1
  208. package/lib/utils/getVisitorKeys.js.map +1 -1
  209. package/lib/utils/hasWywPreval.js.map +1 -1
  210. package/lib/utils/importOverrides.js +57 -0
  211. package/lib/utils/importOverrides.js.map +1 -0
  212. package/lib/utils/isExports.js.map +1 -1
  213. package/lib/utils/isGlobal.js.map +1 -1
  214. package/lib/utils/isNode.js.map +1 -1
  215. package/lib/utils/isNodePath.js.map +1 -1
  216. package/lib/utils/isNotNull.js.map +1 -1
  217. package/lib/utils/isRemoved.js.map +1 -1
  218. package/lib/utils/isRequire.js.map +1 -1
  219. package/lib/utils/isSerializable.js.map +1 -1
  220. package/lib/utils/isTypedNode.js.map +1 -1
  221. package/lib/utils/isUnnecessaryReactCall.js.map +1 -1
  222. package/lib/utils/parseRequest.js +37 -0
  223. package/lib/utils/parseRequest.js.map +1 -0
  224. package/lib/utils/peek.js.map +1 -1
  225. package/lib/utils/removeDangerousCode.js +32 -2
  226. package/lib/utils/removeDangerousCode.js.map +1 -1
  227. package/lib/utils/replaceImportMetaEnv.js +50 -0
  228. package/lib/utils/replaceImportMetaEnv.js.map +1 -0
  229. package/lib/utils/scopeHelpers.js.map +1 -1
  230. package/lib/utils/traversalCache.js.map +1 -1
  231. package/lib/utils/unwrapExpression.js +25 -0
  232. package/lib/utils/unwrapExpression.js.map +1 -0
  233. package/lib/utils/unwrapSequence.js.map +1 -1
  234. package/lib/utils/valueToLiteral.js.map +1 -1
  235. package/lib/utils/visitors/JSXElementsRemover.js.map +1 -1
  236. package/lib/vm/createVmContext.js +45 -2
  237. package/lib/vm/createVmContext.js.map +1 -1
  238. package/lib/vm/process.js.map +1 -1
  239. package/package.json +13 -15
  240. package/types/cache.d.ts +1 -1
  241. package/types/cache.js +15 -4
  242. package/types/evaluators/index.js +1 -1
  243. package/types/module.d.ts +1 -2
  244. package/types/module.js +189 -11
  245. package/types/options/buildOptions.d.ts +0 -1
  246. package/types/options/buildOptions.js +125 -9
  247. package/types/options/loadBabelOptions.js +1 -2
  248. package/types/plugins/babel-transform.js +1 -1
  249. package/types/plugins/collector.js +3 -3
  250. package/types/plugins/dynamic-import.js +38 -18
  251. package/types/plugins/preeval.js +5 -2
  252. package/types/plugins/shaker.d.ts +4 -1
  253. package/types/plugins/shaker.js +189 -24
  254. package/types/shaker.js +9 -3
  255. package/types/transform/BaseEntrypoint.d.ts +0 -1
  256. package/types/transform/Entrypoint.helpers.d.ts +0 -1
  257. package/types/transform/Entrypoint.helpers.js +122 -25
  258. package/types/transform/Entrypoint.js +14 -2
  259. package/types/transform/Entrypoint.types.d.ts +0 -1
  260. package/types/transform/EvaluatedEntrypoint.d.ts +0 -1
  261. package/types/transform/actions/BaseAction.d.ts +1 -1
  262. package/types/transform/actions/BaseAction.js +5 -0
  263. package/types/transform/actions/actionRunner.js +2 -3
  264. package/types/transform/generators/collect.js +1 -2
  265. package/types/transform/generators/createStylisPreprocessor.d.ts +0 -1
  266. package/types/transform/generators/createStylisPreprocessor.js +168 -13
  267. package/types/transform/generators/evalFile.js +1 -2
  268. package/types/transform/generators/explodeReexports.js +12 -15
  269. package/types/transform/generators/extract.js +1 -2
  270. package/types/transform/generators/getExports.js +2 -3
  271. package/types/transform/generators/processEntrypoint.js +13 -7
  272. package/types/transform/generators/processImports.js +1 -2
  273. package/types/transform/generators/resolveImports.js +41 -5
  274. package/types/transform/generators/transform.d.ts +1 -1
  275. package/types/transform/generators/transform.js +16 -6
  276. package/types/transform/generators/workflow.js +1 -2
  277. package/types/transform/helpers/loadWywOptions.js +16 -5
  278. package/types/transform/helpers/withDefaultServices.d.ts +1 -1
  279. package/types/transform/helpers/withDefaultServices.js +19 -8
  280. package/types/transform/isStaticallyEvaluatableModule.d.ts +2 -0
  281. package/types/transform/isStaticallyEvaluatableModule.js +177 -0
  282. package/types/transform/rootLog.d.ts +0 -1
  283. package/types/transform/types.d.ts +1 -1
  284. package/types/transform.js +17 -9
  285. package/types/types.d.ts +1 -1
  286. package/types/utils/addIdentifierToWywPreval.js +2 -3
  287. package/types/utils/collectExportsAndImports.js +102 -20
  288. package/types/utils/collectTemplateDependencies.js +3 -4
  289. package/types/utils/findIdentifiers.js +2 -3
  290. package/types/utils/getConstantStringValue.d.ts +2 -0
  291. package/types/utils/getConstantStringValue.js +94 -0
  292. package/types/utils/getFileIdx.js +1 -2
  293. package/types/utils/getMemberExpressionPropertyName.d.ts +2 -0
  294. package/types/utils/getMemberExpressionPropertyName.js +46 -0
  295. package/types/utils/getScope.js +1 -2
  296. package/types/utils/getTagProcessor.js +35 -9
  297. package/types/utils/getVisitorKeys.js +1 -2
  298. package/types/utils/hasWywPreval.js +1 -1
  299. package/types/utils/importOverrides.d.ts +19 -0
  300. package/types/utils/importOverrides.js +40 -0
  301. package/types/utils/isExports.js +1 -2
  302. package/types/utils/isNodePath.js +1 -2
  303. package/types/utils/isNotNull.js +1 -2
  304. package/types/utils/isRemoved.js +1 -2
  305. package/types/utils/isRequire.js +1 -2
  306. package/types/utils/isSerializable.js +1 -2
  307. package/types/utils/isUnnecessaryReactCall.js +1 -2
  308. package/types/utils/parseRequest.d.ts +7 -0
  309. package/types/utils/parseRequest.js +29 -0
  310. package/types/utils/removeDangerousCode.js +37 -2
  311. package/types/utils/replaceImportMetaEnv.d.ts +3 -0
  312. package/types/utils/replaceImportMetaEnv.js +39 -0
  313. package/types/utils/scopeHelpers.js +7 -8
  314. package/types/utils/traversalCache.d.ts +1 -1
  315. package/types/utils/unwrapExpression.d.ts +2 -0
  316. package/types/utils/unwrapExpression.js +57 -0
  317. package/types/utils/unwrapSequence.js +1 -2
  318. package/types/utils/valueToLiteral.js +1 -2
  319. package/types/utils/visitors/JSXElementsRemover.js +1 -2
  320. package/types/vm/createVmContext.d.ts +0 -1
  321. package/types/vm/createVmContext.js +68 -9
  322. package/types/vm/process.d.ts +0 -2
  323. package/LICENSE +0 -21
  324. package/esm/options/babel-merge.d.js +0 -2
  325. package/esm/options/babel-merge.d.js.map +0 -1
  326. package/lib/options/babel-merge.d.js +0 -2
  327. package/lib/options/babel-merge.d.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"removeDangerousCode.js","names":["types","t","nonType","isUnnecessaryReactCall","applyAction","removeWithRelated","JSXElementsRemover","collectExportsAndImports","isGlobal","id","scope","name","node","hasBinding","hasGlobal","ssrCheckFields","Set","forbiddenGlobals","isBrowserGlobal","has","isSSRCheckField","getPropertyName","path","isIdentifier","isStringLiteral","value","getImport","programPath","findParent","p","isProgram","undefined","imports","binding","getBinding","matched","find","imp","imported","isAncestor","local","source","isMemberExpression","leftPath","get","rightPath","getTypeImport","isImportSpecifier","parentPath","isImportDeclaration","importDeclaration","importedNode","isTSQualifiedName","isImportDefaultSpecifier","isImportNamespaceSpecifier","isTypeMatch","typeAnnotation","isTSTypeAnnotation","typeReference","isTSTypeReference","typeName","matchedImport","includes","isHOC","hocs","calleePath","isCallExpression","defaultPlaceholder","defaultReactComponentTypes","removeDangerousCode","options","componentTypes","react","Array","isArray","idx","indexOf","splice","traverse","CallExpression","enter","arrowFunctionExpression","nullLiteral","JSXElement","JSXFragment","MemberExpression","state","obj","prop","windowScoped","add","globals","filter","MetaProperty","Identifier","parent","isUnaryExpression","operator","isTSTypeQuery","isClassProperty","key","push","UnaryExpression","arg","type","VariableDeclarator","init","isExpression"],"sources":["../../src/utils/removeDangerousCode.ts"],"sourcesContent":["import type { NodePath } from '@babel/core';\nimport { types as t } from '@babel/core';\nimport type {\n CallExpression,\n Expression,\n Identifier,\n Program,\n V8IntrinsicIdentifier,\n} from '@babel/types';\n\nimport type { CodeRemoverOptions } from '@wyw-in-js/shared';\nimport { nonType } from './findIdentifiers';\nimport { isUnnecessaryReactCall } from './isUnnecessaryReactCall';\nimport { applyAction, removeWithRelated } from './scopeHelpers';\nimport { JSXElementsRemover } from './visitors/JSXElementsRemover';\nimport type { IImport } from './collectExportsAndImports';\nimport { collectExportsAndImports } from './collectExportsAndImports';\n\nconst isGlobal = (id: NodePath<Identifier>): boolean => {\n if (!nonType(id)) {\n return false;\n }\n\n const { scope } = id;\n const { name } = id.node;\n return !scope.hasBinding(name) && scope.hasGlobal(name);\n};\n\nconst ssrCheckFields = new Set([\n 'document',\n 'location',\n 'navigator',\n 'sessionStorage',\n 'localStorage',\n 'window',\n]);\n\nconst forbiddenGlobals = new Set([\n ...ssrCheckFields,\n '$RefreshReg$',\n 'XMLHttpRequest',\n 'clearImmediate',\n 'clearInterval',\n 'clearTimeout',\n 'fetch',\n 'navigator',\n 'setImmediate',\n 'setInterval',\n 'setTimeout',\n]);\n\nconst isBrowserGlobal = (id: NodePath<Identifier>) => {\n return forbiddenGlobals.has(id.node.name) && isGlobal(id);\n};\n\nconst isSSRCheckField = (id: NodePath<Identifier>) => {\n return ssrCheckFields.has(id.node.name) && isGlobal(id);\n};\n\nconst getPropertyName = (path: NodePath): string | null => {\n if (path.isIdentifier()) {\n return path.node.name;\n }\n\n if (path.isStringLiteral()) {\n return path.node.value;\n }\n\n return null;\n};\n\nconst getImport = (path: NodePath): [string, string] | undefined => {\n const programPath = path.findParent((p) => p.isProgram()) as\n | NodePath<Program>\n | undefined;\n if (!programPath) {\n return undefined;\n }\n\n const { imports } = collectExportsAndImports(programPath);\n\n if (path.isIdentifier()) {\n const binding = path.scope.getBinding(path.node.name);\n const matched =\n binding &&\n imports.find(\n (imp): imp is IImport =>\n imp.imported !== 'side-effect' && binding.path.isAncestor(imp.local)\n );\n\n if (matched) {\n return [matched.source, matched.imported];\n }\n }\n\n if (path.isMemberExpression()) {\n const leftPath = path.get('object');\n if (!leftPath.isIdentifier()) {\n // Nested member expression. Not supported yet.\n return undefined;\n }\n\n const rightPath = path.get('property');\n if (!rightPath.isIdentifier()) {\n return undefined;\n }\n\n const binding = path.scope.getBinding(leftPath.node.name);\n const matched =\n binding &&\n imports.find(\n (imp): imp is IImport =>\n imp.imported !== 'side-effect' && binding.path.isAncestor(imp.local)\n );\n\n if (matched) {\n return [matched.source, rightPath.node.name];\n }\n }\n\n return undefined;\n};\n\nconst getTypeImport = (path: NodePath): [string, string] | undefined => {\n // We are looking for either Identifier or TSQualifiedName in path\n if (path.isIdentifier()) {\n const binding = path.scope.getBinding(path.node.name);\n if (!binding) {\n return undefined;\n }\n\n if (\n !binding.path.isImportSpecifier() ||\n !binding.path.parentPath.isImportDeclaration()\n ) {\n return undefined;\n }\n\n const importDeclaration = binding.path.parentPath;\n const imported = binding.path.get('imported');\n const source = importDeclaration.node.source.value;\n const importedNode = imported.node;\n return [\n source,\n t.isIdentifier(importedNode) ? importedNode.name : importedNode.value,\n ];\n }\n\n if (path.isTSQualifiedName()) {\n const leftPath = path.get('left');\n if (!leftPath.isIdentifier()) {\n // Nested type. Not supported yet.\n return undefined;\n }\n\n const rightPath = path.get('right');\n\n const binding = path.scope.getBinding(leftPath.node.name);\n if (!binding) {\n return undefined;\n }\n\n if (\n (!binding.path.isImportDefaultSpecifier() &&\n !binding.path.isImportNamespaceSpecifier()) ||\n !binding.path.parentPath.isImportDeclaration()\n ) {\n return undefined;\n }\n\n return [binding.path.parentPath.node.source.value, rightPath.node.name];\n }\n\n return undefined;\n};\n\nconst isTypeMatch = (\n id: NodePath<Identifier>,\n types: Record<string, string[]>\n): boolean => {\n const typeAnnotation = id.get('typeAnnotation');\n if (!typeAnnotation.isTSTypeAnnotation()) {\n return false;\n }\n\n const typeReference = typeAnnotation.get('typeAnnotation');\n if (!typeReference.isTSTypeReference()) {\n return false;\n }\n\n const typeName = typeReference.get('typeName');\n const matchedImport = getTypeImport(typeName);\n return (\n matchedImport !== undefined &&\n matchedImport[0] in types &&\n types[matchedImport[0]].includes(matchedImport[1])\n );\n};\n\nconst isHOC = (\n path: NodePath<CallExpression>,\n hocs: Record<string, string[]>\n) => {\n let calleePath: NodePath<V8IntrinsicIdentifier | Expression> = path;\n while (calleePath.isCallExpression()) {\n calleePath = calleePath.get('callee');\n }\n\n const matchedImport = getImport(calleePath);\n return (\n matchedImport !== undefined &&\n matchedImport[0] in hocs &&\n hocs[matchedImport[0]].includes(matchedImport[1])\n );\n};\n\nconst defaultPlaceholder = '...';\n\nconst defaultReactComponentTypes = [\n 'ExoticComponent',\n 'FC',\n 'ForwardRefExoticComponent',\n 'FunctionComponent',\n 'LazyExoticComponent',\n 'MemoExoticComponent',\n 'NamedExoticComponent',\n];\n\nexport const removeDangerousCode = (\n programPath: NodePath<Program>,\n options?: CodeRemoverOptions\n) => {\n const hocs = options?.hocs ?? {};\n\n const componentTypes = options?.componentTypes ?? {\n react: [defaultPlaceholder],\n };\n\n if (\n Array.isArray(componentTypes.react) &&\n componentTypes.react.includes(defaultPlaceholder)\n ) {\n const idx = componentTypes.react.indexOf(defaultPlaceholder);\n componentTypes.react = [...componentTypes.react];\n componentTypes.react.splice(idx, 1, ...defaultReactComponentTypes);\n }\n\n programPath.traverse(\n {\n // JSX can be replaced with a dummy value,\n // but we have to do it after we processed template tags.\n CallExpression: {\n enter(p) {\n if (isUnnecessaryReactCall(p)) {\n JSXElementsRemover(p);\n }\n\n if (isHOC(p, hocs)) {\n applyAction([\n 'replace',\n p,\n t.arrowFunctionExpression([], t.nullLiteral()),\n ]);\n }\n },\n },\n JSXElement: {\n enter: JSXElementsRemover,\n },\n JSXFragment: {\n enter: JSXElementsRemover,\n },\n MemberExpression(p, state) {\n const obj = p.get('object');\n const prop = p.get('property');\n if (!obj.isIdentifier({ name: 'window' })) {\n return;\n }\n\n const name = getPropertyName(prop);\n if (!name) {\n return;\n }\n\n state.windowScoped.add(name);\n // eslint-disable-next-line no-param-reassign\n state.globals = state.globals.filter((id) => {\n if (id.node.name === name) {\n removeWithRelated([id]);\n return false;\n }\n\n return true;\n });\n },\n MetaProperty(p) {\n // Remove all references to `import.meta`\n removeWithRelated([p]);\n },\n Identifier(p, state) {\n if (p.find((parent) => parent.isTSTypeReference())) {\n // don't mess with TS type references\n return;\n }\n if (isBrowserGlobal(p)) {\n if (\n p.find(\n (parentPath) =>\n parentPath.isUnaryExpression({ operator: 'typeof' }) ||\n parentPath.isTSTypeQuery()\n )\n ) {\n // Ignore `typeof window` expressions\n return;\n }\n\n if (p.parentPath.isClassProperty()) {\n // ignore class property decls\n return;\n }\n if (p.parentPath.isMemberExpression() && p.key === 'property') {\n // ignore e.g this.fetch()\n // window.fetch will be handled by the windowScoped block below\n return;\n }\n\n removeWithRelated([p]);\n\n return;\n }\n\n if (state.windowScoped.has(p.node.name)) {\n removeWithRelated([p]);\n } else if (isGlobal(p)) {\n state.globals.push(p);\n }\n },\n\n // Since we can use happy-dom, typical SSR checks may not work as expected.\n // We need to detect them and replace with an \"undefined\" literal.\n UnaryExpression(p) {\n if (p.node.operator !== 'typeof') {\n return;\n }\n const arg = p.get('argument');\n if (!arg.isIdentifier() || !isSSRCheckField(arg)) {\n return;\n }\n\n applyAction([\n 'replace',\n p,\n { type: 'StringLiteral', value: 'undefined' },\n ]);\n },\n VariableDeclarator(p) {\n const id = p.get('id');\n const init = p.get('init');\n if (\n id.isIdentifier() &&\n isTypeMatch(id, componentTypes) &&\n init.isExpression()\n ) {\n // Variable is typed as a React component. We can replace its value with a null-function.\n applyAction([\n 'replace',\n init,\n t.arrowFunctionExpression([], t.nullLiteral()),\n ]);\n }\n },\n },\n {\n globals: [] as NodePath<Identifier>[],\n windowScoped: new Set<string>(),\n }\n );\n};\n"],"mappings":"AACA,SAASA,KAAK,IAAIC,CAAC,QAAQ,aAAa;AAUxC,SAASC,OAAO,QAAQ,mBAAmB;AAC3C,SAASC,sBAAsB,QAAQ,0BAA0B;AACjE,SAASC,WAAW,EAAEC,iBAAiB,QAAQ,gBAAgB;AAC/D,SAASC,kBAAkB,QAAQ,+BAA+B;AAElE,SAASC,wBAAwB,QAAQ,4BAA4B;AAErE,MAAMC,QAAQ,GAAIC,EAAwB,IAAc;EACtD,IAAI,CAACP,OAAO,CAACO,EAAE,CAAC,EAAE;IAChB,OAAO,KAAK;EACd;EAEA,MAAM;IAAEC;EAAM,CAAC,GAAGD,EAAE;EACpB,MAAM;IAAEE;EAAK,CAAC,GAAGF,EAAE,CAACG,IAAI;EACxB,OAAO,CAACF,KAAK,CAACG,UAAU,CAACF,IAAI,CAAC,IAAID,KAAK,CAACI,SAAS,CAACH,IAAI,CAAC;AACzD,CAAC;AAED,MAAMI,cAAc,GAAG,IAAIC,GAAG,CAAC,CAC7B,UAAU,EACV,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,QAAQ,CACT,CAAC;AAEF,MAAMC,gBAAgB,GAAG,IAAID,GAAG,CAAC,CAC/B,GAAGD,cAAc,EACjB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,OAAO,EACP,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,CACb,CAAC;AAEF,MAAMG,eAAe,GAAIT,EAAwB,IAAK;EACpD,OAAOQ,gBAAgB,CAACE,GAAG,CAACV,EAAE,CAACG,IAAI,CAACD,IAAI,CAAC,IAAIH,QAAQ,CAACC,EAAE,CAAC;AAC3D,CAAC;AAED,MAAMW,eAAe,GAAIX,EAAwB,IAAK;EACpD,OAAOM,cAAc,CAACI,GAAG,CAACV,EAAE,CAACG,IAAI,CAACD,IAAI,CAAC,IAAIH,QAAQ,CAACC,EAAE,CAAC;AACzD,CAAC;AAED,MAAMY,eAAe,GAAIC,IAAc,IAAoB;EACzD,IAAIA,IAAI,CAACC,YAAY,CAAC,CAAC,EAAE;IACvB,OAAOD,IAAI,CAACV,IAAI,CAACD,IAAI;EACvB;EAEA,IAAIW,IAAI,CAACE,eAAe,CAAC,CAAC,EAAE;IAC1B,OAAOF,IAAI,CAACV,IAAI,CAACa,KAAK;EACxB;EAEA,OAAO,IAAI;AACb,CAAC;AAED,MAAMC,SAAS,GAAIJ,IAAc,IAAmC;EAClE,MAAMK,WAAW,GAAGL,IAAI,CAACM,UAAU,CAAEC,CAAC,IAAKA,CAAC,CAACC,SAAS,CAAC,CAAC,CAE3C;EACb,IAAI,CAACH,WAAW,EAAE;IAChB,OAAOI,SAAS;EAClB;EAEA,MAAM;IAAEC;EAAQ,CAAC,GAAGzB,wBAAwB,CAACoB,WAAW,CAAC;EAEzD,IAAIL,IAAI,CAACC,YAAY,CAAC,CAAC,EAAE;IACvB,MAAMU,OAAO,GAAGX,IAAI,CAACZ,KAAK,CAACwB,UAAU,CAACZ,IAAI,CAACV,IAAI,CAACD,IAAI,CAAC;IACrD,MAAMwB,OAAO,GACXF,OAAO,IACPD,OAAO,CAACI,IAAI,CACTC,GAAG,IACFA,GAAG,CAACC,QAAQ,KAAK,aAAa,IAAIL,OAAO,CAACX,IAAI,CAACiB,UAAU,CAACF,GAAG,CAACG,KAAK,CACvE,CAAC;IAEH,IAAIL,OAAO,EAAE;MACX,OAAO,CAACA,OAAO,CAACM,MAAM,EAAEN,OAAO,CAACG,QAAQ,CAAC;IAC3C;EACF;EAEA,IAAIhB,IAAI,CAACoB,kBAAkB,CAAC,CAAC,EAAE;IAC7B,MAAMC,QAAQ,GAAGrB,IAAI,CAACsB,GAAG,CAAC,QAAQ,CAAC;IACnC,IAAI,CAACD,QAAQ,CAACpB,YAAY,CAAC,CAAC,EAAE;MAC5B;MACA,OAAOQ,SAAS;IAClB;IAEA,MAAMc,SAAS,GAAGvB,IAAI,CAACsB,GAAG,CAAC,UAAU,CAAC;IACtC,IAAI,CAACC,SAAS,CAACtB,YAAY,CAAC,CAAC,EAAE;MAC7B,OAAOQ,SAAS;IAClB;IAEA,MAAME,OAAO,GAAGX,IAAI,CAACZ,KAAK,CAACwB,UAAU,CAACS,QAAQ,CAAC/B,IAAI,CAACD,IAAI,CAAC;IACzD,MAAMwB,OAAO,GACXF,OAAO,IACPD,OAAO,CAACI,IAAI,CACTC,GAAG,IACFA,GAAG,CAACC,QAAQ,KAAK,aAAa,IAAIL,OAAO,CAACX,IAAI,CAACiB,UAAU,CAACF,GAAG,CAACG,KAAK,CACvE,CAAC;IAEH,IAAIL,OAAO,EAAE;MACX,OAAO,CAACA,OAAO,CAACM,MAAM,EAAEI,SAAS,CAACjC,IAAI,CAACD,IAAI,CAAC;IAC9C;EACF;EAEA,OAAOoB,SAAS;AAClB,CAAC;AAED,MAAMe,aAAa,GAAIxB,IAAc,IAAmC;EACtE;EACA,IAAIA,IAAI,CAACC,YAAY,CAAC,CAAC,EAAE;IACvB,MAAMU,OAAO,GAAGX,IAAI,CAACZ,KAAK,CAACwB,UAAU,CAACZ,IAAI,CAACV,IAAI,CAACD,IAAI,CAAC;IACrD,IAAI,CAACsB,OAAO,EAAE;MACZ,OAAOF,SAAS;IAClB;IAEA,IACE,CAACE,OAAO,CAACX,IAAI,CAACyB,iBAAiB,CAAC,CAAC,IACjC,CAACd,OAAO,CAACX,IAAI,CAAC0B,UAAU,CAACC,mBAAmB,CAAC,CAAC,EAC9C;MACA,OAAOlB,SAAS;IAClB;IAEA,MAAMmB,iBAAiB,GAAGjB,OAAO,CAACX,IAAI,CAAC0B,UAAU;IACjD,MAAMV,QAAQ,GAAGL,OAAO,CAACX,IAAI,CAACsB,GAAG,CAAC,UAAU,CAAC;IAC7C,MAAMH,MAAM,GAAGS,iBAAiB,CAACtC,IAAI,CAAC6B,MAAM,CAAChB,KAAK;IAClD,MAAM0B,YAAY,GAAGb,QAAQ,CAAC1B,IAAI;IAClC,OAAO,CACL6B,MAAM,EACNxC,CAAC,CAACsB,YAAY,CAAC4B,YAAY,CAAC,GAAGA,YAAY,CAACxC,IAAI,GAAGwC,YAAY,CAAC1B,KAAK,CACtE;EACH;EAEA,IAAIH,IAAI,CAAC8B,iBAAiB,CAAC,CAAC,EAAE;IAC5B,MAAMT,QAAQ,GAAGrB,IAAI,CAACsB,GAAG,CAAC,MAAM,CAAC;IACjC,IAAI,CAACD,QAAQ,CAACpB,YAAY,CAAC,CAAC,EAAE;MAC5B;MACA,OAAOQ,SAAS;IAClB;IAEA,MAAMc,SAAS,GAAGvB,IAAI,CAACsB,GAAG,CAAC,OAAO,CAAC;IAEnC,MAAMX,OAAO,GAAGX,IAAI,CAACZ,KAAK,CAACwB,UAAU,CAACS,QAAQ,CAAC/B,IAAI,CAACD,IAAI,CAAC;IACzD,IAAI,CAACsB,OAAO,EAAE;MACZ,OAAOF,SAAS;IAClB;IAEA,IACG,CAACE,OAAO,CAACX,IAAI,CAAC+B,wBAAwB,CAAC,CAAC,IACvC,CAACpB,OAAO,CAACX,IAAI,CAACgC,0BAA0B,CAAC,CAAC,IAC5C,CAACrB,OAAO,CAACX,IAAI,CAAC0B,UAAU,CAACC,mBAAmB,CAAC,CAAC,EAC9C;MACA,OAAOlB,SAAS;IAClB;IAEA,OAAO,CAACE,OAAO,CAACX,IAAI,CAAC0B,UAAU,CAACpC,IAAI,CAAC6B,MAAM,CAAChB,KAAK,EAAEoB,SAAS,CAACjC,IAAI,CAACD,IAAI,CAAC;EACzE;EAEA,OAAOoB,SAAS;AAClB,CAAC;AAED,MAAMwB,WAAW,GAAGA,CAClB9C,EAAwB,EACxBT,KAA+B,KACnB;EACZ,MAAMwD,cAAc,GAAG/C,EAAE,CAACmC,GAAG,CAAC,gBAAgB,CAAC;EAC/C,IAAI,CAACY,cAAc,CAACC,kBAAkB,CAAC,CAAC,EAAE;IACxC,OAAO,KAAK;EACd;EAEA,MAAMC,aAAa,GAAGF,cAAc,CAACZ,GAAG,CAAC,gBAAgB,CAAC;EAC1D,IAAI,CAACc,aAAa,CAACC,iBAAiB,CAAC,CAAC,EAAE;IACtC,OAAO,KAAK;EACd;EAEA,MAAMC,QAAQ,GAAGF,aAAa,CAACd,GAAG,CAAC,UAAU,CAAC;EAC9C,MAAMiB,aAAa,GAAGf,aAAa,CAACc,QAAQ,CAAC;EAC7C,OACEC,aAAa,KAAK9B,SAAS,IAC3B8B,aAAa,CAAC,CAAC,CAAC,IAAI7D,KAAK,IACzBA,KAAK,CAAC6D,aAAa,CAAC,CAAC,CAAC,CAAC,CAACC,QAAQ,CAACD,aAAa,CAAC,CAAC,CAAC,CAAC;AAEtD,CAAC;AAED,MAAME,KAAK,GAAGA,CACZzC,IAA8B,EAC9B0C,IAA8B,KAC3B;EACH,IAAIC,UAAwD,GAAG3C,IAAI;EACnE,OAAO2C,UAAU,CAACC,gBAAgB,CAAC,CAAC,EAAE;IACpCD,UAAU,GAAGA,UAAU,CAACrB,GAAG,CAAC,QAAQ,CAAC;EACvC;EAEA,MAAMiB,aAAa,GAAGnC,SAAS,CAACuC,UAAU,CAAC;EAC3C,OACEJ,aAAa,KAAK9B,SAAS,IAC3B8B,aAAa,CAAC,CAAC,CAAC,IAAIG,IAAI,IACxBA,IAAI,CAACH,aAAa,CAAC,CAAC,CAAC,CAAC,CAACC,QAAQ,CAACD,aAAa,CAAC,CAAC,CAAC,CAAC;AAErD,CAAC;AAED,MAAMM,kBAAkB,GAAG,KAAK;AAEhC,MAAMC,0BAA0B,GAAG,CACjC,iBAAiB,EACjB,IAAI,EACJ,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,CACvB;AAED,OAAO,MAAMC,mBAAmB,GAAGA,CACjC1C,WAA8B,EAC9B2C,OAA4B,KACzB;EACH,MAAMN,IAAI,GAAGM,OAAO,EAAEN,IAAI,IAAI,CAAC,CAAC;EAEhC,MAAMO,cAAc,GAAGD,OAAO,EAAEC,cAAc,IAAI;IAChDC,KAAK,EAAE,CAACL,kBAAkB;EAC5B,CAAC;EAED,IACEM,KAAK,CAACC,OAAO,CAACH,cAAc,CAACC,KAAK,CAAC,IACnCD,cAAc,CAACC,KAAK,CAACV,QAAQ,CAACK,kBAAkB,CAAC,EACjD;IACA,MAAMQ,GAAG,GAAGJ,cAAc,CAACC,KAAK,CAACI,OAAO,CAACT,kBAAkB,CAAC;IAC5DI,cAAc,CAACC,KAAK,GAAG,CAAC,GAAGD,cAAc,CAACC,KAAK,CAAC;IAChDD,cAAc,CAACC,KAAK,CAACK,MAAM,CAACF,GAAG,EAAE,CAAC,EAAE,GAAGP,0BAA0B,CAAC;EACpE;EAEAzC,WAAW,CAACmD,QAAQ,CAClB;IACE;IACA;IACAC,cAAc,EAAE;MACdC,KAAKA,CAACnD,CAAC,EAAE;QACP,IAAI1B,sBAAsB,CAAC0B,CAAC,CAAC,EAAE;UAC7BvB,kBAAkB,CAACuB,CAAC,CAAC;QACvB;QAEA,IAAIkC,KAAK,CAAClC,CAAC,EAAEmC,IAAI,CAAC,EAAE;UAClB5D,WAAW,CAAC,CACV,SAAS,EACTyB,CAAC,EACD5B,CAAC,CAACgF,uBAAuB,CAAC,EAAE,EAAEhF,CAAC,CAACiF,WAAW,CAAC,CAAC,CAAC,CAC/C,CAAC;QACJ;MACF;IACF,CAAC;IACDC,UAAU,EAAE;MACVH,KAAK,EAAE1E;IACT,CAAC;IACD8E,WAAW,EAAE;MACXJ,KAAK,EAAE1E;IACT,CAAC;IACD+E,gBAAgBA,CAACxD,CAAC,EAAEyD,KAAK,EAAE;MACzB,MAAMC,GAAG,GAAG1D,CAAC,CAACe,GAAG,CAAC,QAAQ,CAAC;MAC3B,MAAM4C,IAAI,GAAG3D,CAAC,CAACe,GAAG,CAAC,UAAU,CAAC;MAC9B,IAAI,CAAC2C,GAAG,CAAChE,YAAY,CAAC;QAAEZ,IAAI,EAAE;MAAS,CAAC,CAAC,EAAE;QACzC;MACF;MAEA,MAAMA,IAAI,GAAGU,eAAe,CAACmE,IAAI,CAAC;MAClC,IAAI,CAAC7E,IAAI,EAAE;QACT;MACF;MAEA2E,KAAK,CAACG,YAAY,CAACC,GAAG,CAAC/E,IAAI,CAAC;MAC5B;MACA2E,KAAK,CAACK,OAAO,GAAGL,KAAK,CAACK,OAAO,CAACC,MAAM,CAAEnF,EAAE,IAAK;QAC3C,IAAIA,EAAE,CAACG,IAAI,CAACD,IAAI,KAAKA,IAAI,EAAE;UACzBN,iBAAiB,CAAC,CAACI,EAAE,CAAC,CAAC;UACvB,OAAO,KAAK;QACd;QAEA,OAAO,IAAI;MACb,CAAC,CAAC;IACJ,CAAC;IACDoF,YAAYA,CAAChE,CAAC,EAAE;MACd;MACAxB,iBAAiB,CAAC,CAACwB,CAAC,CAAC,CAAC;IACxB,CAAC;IACDiE,UAAUA,CAACjE,CAAC,EAAEyD,KAAK,EAAE;MACnB,IAAIzD,CAAC,CAACO,IAAI,CAAE2D,MAAM,IAAKA,MAAM,CAACpC,iBAAiB,CAAC,CAAC,CAAC,EAAE;QAClD;QACA;MACF;MACA,IAAIzC,eAAe,CAACW,CAAC,CAAC,EAAE;QACtB,IACEA,CAAC,CAACO,IAAI,CACHY,UAAU,IACTA,UAAU,CAACgD,iBAAiB,CAAC;UAAEC,QAAQ,EAAE;QAAS,CAAC,CAAC,IACpDjD,UAAU,CAACkD,aAAa,CAAC,CAC7B,CAAC,EACD;UACA;UACA;QACF;QAEA,IAAIrE,CAAC,CAACmB,UAAU,CAACmD,eAAe,CAAC,CAAC,EAAE;UAClC;UACA;QACF;QACA,IAAItE,CAAC,CAACmB,UAAU,CAACN,kBAAkB,CAAC,CAAC,IAAIb,CAAC,CAACuE,GAAG,KAAK,UAAU,EAAE;UAC7D;UACA;UACA;QACF;QAEA/F,iBAAiB,CAAC,CAACwB,CAAC,CAAC,CAAC;QAEtB;MACF;MAEA,IAAIyD,KAAK,CAACG,YAAY,CAACtE,GAAG,CAACU,CAAC,CAACjB,IAAI,CAACD,IAAI,CAAC,EAAE;QACvCN,iBAAiB,CAAC,CAACwB,CAAC,CAAC,CAAC;MACxB,CAAC,MAAM,IAAIrB,QAAQ,CAACqB,CAAC,CAAC,EAAE;QACtByD,KAAK,CAACK,OAAO,CAACU,IAAI,CAACxE,CAAC,CAAC;MACvB;IACF,CAAC;IAED;IACA;IACAyE,eAAeA,CAACzE,CAAC,EAAE;MACjB,IAAIA,CAAC,CAACjB,IAAI,CAACqF,QAAQ,KAAK,QAAQ,EAAE;QAChC;MACF;MACA,MAAMM,GAAG,GAAG1E,CAAC,CAACe,GAAG,CAAC,UAAU,CAAC;MAC7B,IAAI,CAAC2D,GAAG,CAAChF,YAAY,CAAC,CAAC,IAAI,CAACH,eAAe,CAACmF,GAAG,CAAC,EAAE;QAChD;MACF;MAEAnG,WAAW,CAAC,CACV,SAAS,EACTyB,CAAC,EACD;QAAE2E,IAAI,EAAE,eAAe;QAAE/E,KAAK,EAAE;MAAY,CAAC,CAC9C,CAAC;IACJ,CAAC;IACDgF,kBAAkBA,CAAC5E,CAAC,EAAE;MACpB,MAAMpB,EAAE,GAAGoB,CAAC,CAACe,GAAG,CAAC,IAAI,CAAC;MACtB,MAAM8D,IAAI,GAAG7E,CAAC,CAACe,GAAG,CAAC,MAAM,CAAC;MAC1B,IACEnC,EAAE,CAACc,YAAY,CAAC,CAAC,IACjBgC,WAAW,CAAC9C,EAAE,EAAE8D,cAAc,CAAC,IAC/BmC,IAAI,CAACC,YAAY,CAAC,CAAC,EACnB;QACA;QACAvG,WAAW,CAAC,CACV,SAAS,EACTsG,IAAI,EACJzG,CAAC,CAACgF,uBAAuB,CAAC,EAAE,EAAEhF,CAAC,CAACiF,WAAW,CAAC,CAAC,CAAC,CAC/C,CAAC;MACJ;IACF;EACF,CAAC,EACD;IACES,OAAO,EAAE,EAA4B;IACrCF,YAAY,EAAE,IAAIzE,GAAG,CAAS;EAChC,CACF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"removeDangerousCode.js","names":["types","t","nonType","isUnnecessaryReactCall","applyAction","removeWithRelated","JSXElementsRemover","collectExportsAndImports","isGlobal","id","scope","name","node","hasBinding","hasGlobal","ssrCheckFields","Set","forbiddenGlobals","isBrowserGlobal","has","isSSRCheckField","promiseCallbackMethods","getPropertyName","path","isIdentifier","isStringLiteral","value","isPromiseCallbackArgument","ref","get","some","arg","isAncestor","findPromiseCallbackOwner","owner","findParent","parent","isNewExpression","callee","isCallExpression","isMemberExpression","propName","removeForbiddenGlobal","promiseOwner","getImport","programPath","p","isProgram","undefined","imports","binding","getBinding","matched","find","imp","imported","local","source","leftPath","rightPath","getTypeImport","isImportSpecifier","parentPath","isImportDeclaration","importDeclaration","importedNode","isTSQualifiedName","isImportDefaultSpecifier","isImportNamespaceSpecifier","isTypeMatch","typeAnnotation","isTSTypeAnnotation","typeReference","isTSTypeReference","typeName","matchedImport","includes","isHOC","hocs","calleePath","defaultPlaceholder","defaultReactComponentTypes","removeDangerousCode","options","componentTypes","react","Array","isArray","idx","indexOf","splice","traverse","CallExpression","enter","arrowFunctionExpression","nullLiteral","JSXElement","JSXFragment","MemberExpression","state","obj","prop","windowScoped","add","globals","filter","MetaProperty","Identifier","isUnaryExpression","operator","isTSTypeQuery","isClassProperty","key","push","UnaryExpression","type","VariableDeclarator","init","isExpression"],"sources":["../../src/utils/removeDangerousCode.ts"],"sourcesContent":["import type { NodePath } from '@babel/core';\nimport { types as t } from '@babel/core';\nimport type {\n CallExpression,\n Expression,\n Identifier,\n NewExpression,\n Program,\n V8IntrinsicIdentifier,\n} from '@babel/types';\n\nimport type { CodeRemoverOptions } from '@wyw-in-js/shared';\nimport { nonType } from './findIdentifiers';\nimport { isUnnecessaryReactCall } from './isUnnecessaryReactCall';\nimport { applyAction, removeWithRelated } from './scopeHelpers';\nimport { JSXElementsRemover } from './visitors/JSXElementsRemover';\nimport type { IImport } from './collectExportsAndImports';\nimport { collectExportsAndImports } from './collectExportsAndImports';\n\nconst isGlobal = (id: NodePath<Identifier>): boolean => {\n if (!nonType(id)) {\n return false;\n }\n\n const { scope } = id;\n const { name } = id.node;\n return !scope.hasBinding(name) && scope.hasGlobal(name);\n};\n\nconst ssrCheckFields = new Set([\n 'document',\n 'location',\n 'navigator',\n 'sessionStorage',\n 'localStorage',\n 'window',\n]);\n\nconst forbiddenGlobals = new Set([\n ...ssrCheckFields,\n '$RefreshReg$',\n 'XMLHttpRequest',\n 'clearImmediate',\n 'clearInterval',\n 'clearTimeout',\n 'fetch',\n 'navigator',\n 'setImmediate',\n 'setInterval',\n 'setTimeout',\n]);\n\nconst isBrowserGlobal = (id: NodePath<Identifier>) => {\n return forbiddenGlobals.has(id.node.name) && isGlobal(id);\n};\n\nconst isSSRCheckField = (id: NodePath<Identifier>) => {\n return ssrCheckFields.has(id.node.name) && isGlobal(id);\n};\n\nconst promiseCallbackMethods = new Set(['then', 'catch', 'finally']);\n\nconst getPropertyName = (path: NodePath): string | null => {\n if (path.isIdentifier()) {\n return path.node.name;\n }\n\n if (path.isStringLiteral()) {\n return path.node.value;\n }\n\n return null;\n};\n\nconst isPromiseCallbackArgument = (\n path: NodePath<CallExpression | NewExpression>,\n ref: NodePath\n) => {\n return path\n .get('arguments')\n .some((arg) => arg === ref || arg.isAncestor(ref));\n};\n\nconst findPromiseCallbackOwner = (\n path: NodePath\n): NodePath<CallExpression | NewExpression> | null => {\n const owner = path.findParent((parent) => {\n if (parent.isNewExpression()) {\n const callee = parent.get('callee');\n return (\n callee.isIdentifier({ name: 'Promise' }) &&\n isPromiseCallbackArgument(parent, path)\n );\n }\n\n if (parent.isCallExpression()) {\n const callee = parent.get('callee');\n if (!callee.isMemberExpression()) return false;\n const propName = getPropertyName(callee.get('property'));\n return (\n propName !== null &&\n promiseCallbackMethods.has(propName) &&\n isPromiseCallbackArgument(parent, path)\n );\n }\n\n return false;\n });\n\n return owner as NodePath<CallExpression | NewExpression> | null;\n};\n\nconst removeForbiddenGlobal = (path: NodePath) => {\n const promiseOwner = findPromiseCallbackOwner(path);\n if (promiseOwner) {\n removeWithRelated([promiseOwner]);\n } else {\n removeWithRelated([path]);\n }\n};\n\nconst getImport = (path: NodePath): [string, string] | undefined => {\n const programPath = path.findParent((p) => p.isProgram()) as\n | NodePath<Program>\n | undefined;\n if (!programPath) {\n return undefined;\n }\n\n const { imports } = collectExportsAndImports(programPath);\n\n if (path.isIdentifier()) {\n const binding = path.scope.getBinding(path.node.name);\n const matched =\n binding &&\n imports.find(\n (imp): imp is IImport =>\n imp.imported !== 'side-effect' && binding.path.isAncestor(imp.local)\n );\n\n if (matched) {\n return [matched.source, matched.imported];\n }\n }\n\n if (path.isMemberExpression()) {\n const leftPath = path.get('object');\n if (!leftPath.isIdentifier()) {\n // Nested member expression. Not supported yet.\n return undefined;\n }\n\n const rightPath = path.get('property');\n if (!rightPath.isIdentifier()) {\n return undefined;\n }\n\n const binding = path.scope.getBinding(leftPath.node.name);\n const matched =\n binding &&\n imports.find(\n (imp): imp is IImport =>\n imp.imported !== 'side-effect' && binding.path.isAncestor(imp.local)\n );\n\n if (matched) {\n return [matched.source, rightPath.node.name];\n }\n }\n\n return undefined;\n};\n\nconst getTypeImport = (path: NodePath): [string, string] | undefined => {\n // We are looking for either Identifier or TSQualifiedName in path\n if (path.isIdentifier()) {\n const binding = path.scope.getBinding(path.node.name);\n if (!binding) {\n return undefined;\n }\n\n if (\n !binding.path.isImportSpecifier() ||\n !binding.path.parentPath.isImportDeclaration()\n ) {\n return undefined;\n }\n\n const importDeclaration = binding.path.parentPath;\n const imported = binding.path.get('imported');\n const source = importDeclaration.node.source.value;\n const importedNode = imported.node;\n return [\n source,\n t.isIdentifier(importedNode) ? importedNode.name : importedNode.value,\n ];\n }\n\n if (path.isTSQualifiedName()) {\n const leftPath = path.get('left');\n if (!leftPath.isIdentifier()) {\n // Nested type. Not supported yet.\n return undefined;\n }\n\n const rightPath = path.get('right');\n\n const binding = path.scope.getBinding(leftPath.node.name);\n if (!binding) {\n return undefined;\n }\n\n if (\n (!binding.path.isImportDefaultSpecifier() &&\n !binding.path.isImportNamespaceSpecifier()) ||\n !binding.path.parentPath.isImportDeclaration()\n ) {\n return undefined;\n }\n\n return [binding.path.parentPath.node.source.value, rightPath.node.name];\n }\n\n return undefined;\n};\n\nconst isTypeMatch = (\n id: NodePath<Identifier>,\n types: Record<string, string[]>\n): boolean => {\n const typeAnnotation = id.get('typeAnnotation');\n if (!typeAnnotation.isTSTypeAnnotation()) {\n return false;\n }\n\n const typeReference = typeAnnotation.get('typeAnnotation');\n if (!typeReference.isTSTypeReference()) {\n return false;\n }\n\n const typeName = typeReference.get('typeName');\n const matchedImport = getTypeImport(typeName);\n return (\n matchedImport !== undefined &&\n matchedImport[0] in types &&\n types[matchedImport[0]].includes(matchedImport[1])\n );\n};\n\nconst isHOC = (\n path: NodePath<CallExpression>,\n hocs: Record<string, string[]>\n) => {\n let calleePath: NodePath<V8IntrinsicIdentifier | Expression> = path;\n while (calleePath.isCallExpression()) {\n calleePath = calleePath.get('callee');\n }\n\n const matchedImport = getImport(calleePath);\n return (\n matchedImport !== undefined &&\n matchedImport[0] in hocs &&\n hocs[matchedImport[0]].includes(matchedImport[1])\n );\n};\n\nconst defaultPlaceholder = '...';\n\nconst defaultReactComponentTypes = [\n 'ExoticComponent',\n 'FC',\n 'ForwardRefExoticComponent',\n 'FunctionComponent',\n 'LazyExoticComponent',\n 'MemoExoticComponent',\n 'NamedExoticComponent',\n];\n\nexport const removeDangerousCode = (\n programPath: NodePath<Program>,\n options?: CodeRemoverOptions\n) => {\n const hocs = options?.hocs ?? {};\n\n const componentTypes = options?.componentTypes ?? {\n react: [defaultPlaceholder],\n };\n\n if (\n Array.isArray(componentTypes.react) &&\n componentTypes.react.includes(defaultPlaceholder)\n ) {\n const idx = componentTypes.react.indexOf(defaultPlaceholder);\n componentTypes.react = [...componentTypes.react];\n componentTypes.react.splice(idx, 1, ...defaultReactComponentTypes);\n }\n\n programPath.traverse(\n {\n // JSX can be replaced with a dummy value,\n // but we have to do it after we processed template tags.\n CallExpression: {\n enter(p) {\n if (isUnnecessaryReactCall(p)) {\n JSXElementsRemover(p);\n }\n\n if (isHOC(p, hocs)) {\n applyAction([\n 'replace',\n p,\n t.arrowFunctionExpression([], t.nullLiteral()),\n ]);\n }\n },\n },\n JSXElement: {\n enter: JSXElementsRemover,\n },\n JSXFragment: {\n enter: JSXElementsRemover,\n },\n MemberExpression(p, state) {\n const obj = p.get('object');\n const prop = p.get('property');\n if (!obj.isIdentifier({ name: 'window' })) {\n return;\n }\n\n const name = getPropertyName(prop);\n if (!name) {\n return;\n }\n\n state.windowScoped.add(name);\n // eslint-disable-next-line no-param-reassign\n state.globals = state.globals.filter((id) => {\n if (id.node.name === name) {\n removeWithRelated([id]);\n return false;\n }\n\n return true;\n });\n },\n MetaProperty(p) {\n // Remove all references to `import.meta`\n removeWithRelated([p]);\n },\n Identifier(p, state) {\n if (p.find((parent) => parent.isTSTypeReference())) {\n // don't mess with TS type references\n return;\n }\n if (isBrowserGlobal(p)) {\n if (\n p.find(\n (parentPath) =>\n parentPath.isUnaryExpression({ operator: 'typeof' }) ||\n parentPath.isTSTypeQuery()\n )\n ) {\n // Ignore `typeof window` expressions\n return;\n }\n\n if (p.parentPath.isClassProperty()) {\n // ignore class property decls\n return;\n }\n if (p.parentPath.isMemberExpression() && p.key === 'property') {\n // ignore e.g this.fetch()\n // window.fetch will be handled by the windowScoped block below\n return;\n }\n\n removeForbiddenGlobal(p);\n\n return;\n }\n\n if (state.windowScoped.has(p.node.name)) {\n removeForbiddenGlobal(p);\n } else if (isGlobal(p)) {\n state.globals.push(p);\n }\n },\n\n // Since we can use happy-dom, typical SSR checks may not work as expected.\n // We need to detect them and replace with an \"undefined\" literal.\n UnaryExpression(p) {\n if (p.node.operator !== 'typeof') {\n return;\n }\n const arg = p.get('argument');\n if (!arg.isIdentifier() || !isSSRCheckField(arg)) {\n return;\n }\n\n applyAction([\n 'replace',\n p,\n { type: 'StringLiteral', value: 'undefined' },\n ]);\n },\n VariableDeclarator(p) {\n const id = p.get('id');\n const init = p.get('init');\n if (\n id.isIdentifier() &&\n isTypeMatch(id, componentTypes) &&\n init.isExpression()\n ) {\n // Variable is typed as a React component. We can replace its value with a null-function.\n applyAction([\n 'replace',\n init,\n t.arrowFunctionExpression([], t.nullLiteral()),\n ]);\n }\n },\n },\n {\n globals: [] as NodePath<Identifier>[],\n windowScoped: new Set<string>(),\n }\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ const IMPORT_META_ENV = '__wyw_import_meta_env';
2
+ const isRecord = obj => typeof obj === 'object' && obj !== null;
3
+ function isImportMeta(obj) {
4
+ if (!isRecord(obj)) {
5
+ return false;
6
+ }
7
+ const {
8
+ meta,
9
+ property
10
+ } = obj;
11
+ if (!isRecord(meta) || !isRecord(property)) {
12
+ return false;
13
+ }
14
+ return meta.name === 'import' && property.name === 'meta';
15
+ }
16
+ function isImportMetaEnv(node) {
17
+ const {
18
+ computed,
19
+ object,
20
+ property
21
+ } = node;
22
+ if (computed) {
23
+ return false;
24
+ }
25
+ if (!isImportMeta(object)) {
26
+ return false;
27
+ }
28
+ return property.type === 'Identifier' && property.name === 'env';
29
+ }
30
+ export function replaceImportMetaEnv(programPath, t) {
31
+ programPath.traverse({
32
+ MemberExpression(path) {
33
+ if (isImportMetaEnv(path.node)) {
34
+ path.replaceWith(t.identifier(IMPORT_META_ENV));
35
+ }
36
+ },
37
+ OptionalMemberExpression(path) {
38
+ if (isImportMetaEnv(path.node)) {
39
+ path.replaceWith(t.identifier(IMPORT_META_ENV));
40
+ }
41
+ }
42
+ });
43
+ }
44
+ //# sourceMappingURL=replaceImportMetaEnv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replaceImportMetaEnv.js","names":["IMPORT_META_ENV","isRecord","obj","isImportMeta","meta","property","name","isImportMetaEnv","node","computed","object","type","replaceImportMetaEnv","programPath","t","traverse","MemberExpression","path","replaceWith","identifier","OptionalMemberExpression"],"sources":["../../src/utils/replaceImportMetaEnv.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { MemberExpression, OptionalMemberExpression } from '@babel/types';\n\nimport type { Core } from '../babel';\n\nconst IMPORT_META_ENV = '__wyw_import_meta_env';\n\ntype MemberExpressionNode = MemberExpression | OptionalMemberExpression;\n\ntype ImportMetaLike = {\n meta: { name: string };\n property: { name: string };\n};\n\nconst isRecord = (obj: unknown): obj is Record<string, unknown> =>\n typeof obj === 'object' && obj !== null;\n\nfunction isImportMeta(obj: unknown): obj is ImportMetaLike {\n if (!isRecord(obj)) {\n return false;\n }\n\n const { meta, property } = obj;\n\n if (!isRecord(meta) || !isRecord(property)) {\n return false;\n }\n\n return meta.name === 'import' && property.name === 'meta';\n}\n\nfunction isImportMetaEnv(node: MemberExpressionNode): boolean {\n const { computed, object, property } = node;\n\n if (computed) {\n return false;\n }\n\n if (!isImportMeta(object)) {\n return false;\n }\n\n return property.type === 'Identifier' && property.name === 'env';\n}\n\nexport function replaceImportMetaEnv(\n programPath: NodePath,\n t: Core['types']\n): void {\n programPath.traverse({\n MemberExpression(path) {\n if (isImportMetaEnv(path.node)) {\n path.replaceWith(t.identifier(IMPORT_META_ENV));\n }\n },\n OptionalMemberExpression(path) {\n if (isImportMetaEnv(path.node)) {\n path.replaceWith(t.identifier(IMPORT_META_ENV));\n }\n },\n });\n}\n"],"mappings":"AAKA,MAAMA,eAAe,GAAG,uBAAuB;AAS/C,MAAMC,QAAQ,GAAIC,GAAY,IAC5B,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,IAAI;AAEzC,SAASC,YAAYA,CAACD,GAAY,EAAyB;EACzD,IAAI,CAACD,QAAQ,CAACC,GAAG,CAAC,EAAE;IAClB,OAAO,KAAK;EACd;EAEA,MAAM;IAAEE,IAAI;IAAEC;EAAS,CAAC,GAAGH,GAAG;EAE9B,IAAI,CAACD,QAAQ,CAACG,IAAI,CAAC,IAAI,CAACH,QAAQ,CAACI,QAAQ,CAAC,EAAE;IAC1C,OAAO,KAAK;EACd;EAEA,OAAOD,IAAI,CAACE,IAAI,KAAK,QAAQ,IAAID,QAAQ,CAACC,IAAI,KAAK,MAAM;AAC3D;AAEA,SAASC,eAAeA,CAACC,IAA0B,EAAW;EAC5D,MAAM;IAAEC,QAAQ;IAAEC,MAAM;IAAEL;EAAS,CAAC,GAAGG,IAAI;EAE3C,IAAIC,QAAQ,EAAE;IACZ,OAAO,KAAK;EACd;EAEA,IAAI,CAACN,YAAY,CAACO,MAAM,CAAC,EAAE;IACzB,OAAO,KAAK;EACd;EAEA,OAAOL,QAAQ,CAACM,IAAI,KAAK,YAAY,IAAIN,QAAQ,CAACC,IAAI,KAAK,KAAK;AAClE;AAEA,OAAO,SAASM,oBAAoBA,CAClCC,WAAqB,EACrBC,CAAgB,EACV;EACND,WAAW,CAACE,QAAQ,CAAC;IACnBC,gBAAgBA,CAACC,IAAI,EAAE;MACrB,IAAIV,eAAe,CAACU,IAAI,CAACT,IAAI,CAAC,EAAE;QAC9BS,IAAI,CAACC,WAAW,CAACJ,CAAC,CAACK,UAAU,CAACnB,eAAe,CAAC,CAAC;MACjD;IACF,CAAC;IACDoB,wBAAwBA,CAACH,IAAI,EAAE;MAC7B,IAAIV,eAAe,CAACU,IAAI,CAACT,IAAI,CAAC,EAAE;QAC9BS,IAAI,CAACC,WAAW,CAACJ,CAAC,CAACK,UAAU,CAACnB,eAAe,CAAC,CAAC;MACjD;IACF;EACF,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"scopeHelpers.js","names":["NODE_FIELDS","findIdentifiers","nonType","getScope","isNotNull","isRemoved","validateField","node","key","val","field","validate","optional","getBinding","path","binding","name","undefined","reference","referencePath","force","isReferencedIdentifier","referencePaths","includes","referenced","push","references","length","isReferenced","kind","isFunctionExpression","parentPath","isVariableDeclarator","id","get","isIdentifier","idBinding","every","i","find","ancestor","isTSType","isFlowType","isReferencedConstantViolation","p","isAssignmentExpression","isExpressionStatement","dereference","isReference","referencesInConstantViolations","constantViolations","filter","isConstantViolation","nonTypeReferences","dereferenceAll","map","identifierPath","referenceAll","forEach","deletingNodes","WeakSet","isEmptyList","list","has","getPathFromAction","action","Array","isArray","Error","isPrototypeAssignment","left","type","object","property","canFunctionBeDelete","fnPath","fnScope","scope","parentScope","parent","listKey","findActionForNode","add","isProgram","isClassDeclaration","isClassExpression","body","isFunction","isBlockStatement","async","directives","generator","params","isConditionalExpression","alternate","isLogicalExpression","operator","value","right","isObjectProperty","maybeDefineProperty","isCallExpression","matchesPattern","isTemplateLiteral","isForInStatement","isFunctionDeclaration","isObjectMethod","isClassMethod","prevStatement","isIfStatement","isReturnStatement","slice","statement","init","isExportNamedDeclaration","declaration","isTryStatement","referenceEnums","program","traverse","ExpressionStatement","expressionStatement","expression","callee","args","arg","fixed","removeUnreferenced","items","Set","item","hasReferences","forDeleting","identifier","removeWithRelated","result","sort","a","b","localeCompare","getNodeForValue","staticEvaluate","evaluated","evaluate","confident","applyAction","test","isBooleanLiteral","consequent","mutate","remove","replaceWith","paths","rootPath","getProgramParent","actions","affectedPaths","referencedIdentifiers","referencesOfBinding","reduce","acc","ref","isExportDefaultDeclaration","clean","join","fn","dereferenced","mutated","dead","assignments","assignment","declared","Object","values","getOuterBindingIdentifiers","Identifier","isArrayPattern","elements"],"sources":["../../src/utils/scopeHelpers.ts"],"sourcesContent":["/* eslint-disable no-restricted-syntax */\n/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\nimport type { Binding, NodePath } from '@babel/traverse';\nimport type {\n FieldOptions,\n Function as FunctionNode,\n Identifier,\n JSXIdentifier,\n Node,\n Program,\n} from '@babel/types';\nimport { NODE_FIELDS } from '@babel/types';\n\nimport { findIdentifiers, nonType } from './findIdentifiers';\nimport { getScope } from './getScope';\nimport { isNotNull } from './isNotNull';\nimport { isRemoved } from './isRemoved';\n\nfunction validateField(\n node: Node,\n key: string,\n val: unknown,\n field: FieldOptions\n) {\n if (!(field != null && field.validate)) return true;\n if (field.optional && val == null) return true;\n try {\n field.validate(node, key, val);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction getBinding(path: NodePath<Identifier | JSXIdentifier>) {\n const binding = getScope(path).getBinding(path.node.name);\n if (!binding) {\n return undefined;\n }\n\n return binding;\n}\n\nexport function reference(\n path: NodePath<Identifier | JSXIdentifier>,\n referencePath: NodePath = path,\n force = false\n): void {\n if (!force && !path.isReferencedIdentifier()) return;\n\n const binding = getBinding(path);\n if (!binding) return;\n\n if (binding.referencePaths.includes(referencePath)) {\n return;\n }\n\n binding.referenced = true;\n binding.referencePaths.push(referencePath ?? path);\n binding.references = binding.referencePaths.length;\n}\n\nfunction isReferenced(binding: Binding): boolean {\n const { kind, referenced, referencePaths, path } = binding;\n\n if (\n path.isFunctionExpression() &&\n path.key === 'init' &&\n path.parentPath.isVariableDeclarator()\n ) {\n // It is a function expression in a variable declarator\n const id = path.parentPath.get('id');\n if (id.isIdentifier()) {\n const idBinding = getBinding(id);\n return idBinding ? isReferenced(idBinding) : true;\n }\n\n return true;\n }\n\n if (!referenced) {\n return false;\n }\n\n // If it's a param binding, we can't just remove it\n // because it brakes the function signature. Keep it alive for now.\n if ((kind as string) === 'param') {\n return true;\n }\n\n // If all remaining references are in TS/Flow types, binding is unreferenced\n return (\n referencePaths.length > 0 ||\n referencePaths.every((i) =>\n i.find((ancestor) => ancestor.isTSType() || ancestor.isFlowType())\n )\n );\n}\n\nfunction isReferencedConstantViolation(path: NodePath, binding: Binding) {\n if (path.find((p) => p === binding.path)) {\n // function a(flag) { return (a = function(flag) { flag ? 1 : 2 }) }\n // ^ Looks crazy, yeh? Welcome to the wonderful world of transpilers!\n // `a = …` here isn't a reference.\n return false;\n }\n\n if (!path.isReferenced()) {\n return false;\n }\n\n if (\n path.isAssignmentExpression() &&\n path.parentPath.isExpressionStatement()\n ) {\n // A root assignment without a parent expression statement is not a reference\n return false;\n }\n\n return true;\n}\n\nexport function dereference(\n path: NodePath<Identifier | JSXIdentifier>\n): Binding | null {\n const binding = getBinding(path);\n if (!binding) return null;\n\n const isReference = binding.referencePaths.includes(path);\n let referencesInConstantViolations = binding.constantViolations.filter((i) =>\n isReferencedConstantViolation(i, binding)\n );\n\n const isConstantViolation = referencesInConstantViolations.includes(path);\n\n if (!isReference && !isConstantViolation) {\n return null;\n }\n\n if (isReference) {\n binding.referencePaths = binding.referencePaths.filter((i) => i !== path);\n binding.references -= 1;\n } else {\n referencesInConstantViolations = referencesInConstantViolations.filter(\n (i) => i !== path\n );\n }\n\n const nonTypeReferences = binding.referencePaths.filter(nonType);\n binding.referenced =\n nonTypeReferences.length + referencesInConstantViolations.length > 0;\n\n return binding;\n}\n\nfunction dereferenceAll(path: NodePath): Binding[] {\n return findIdentifiers([path])\n .map((identifierPath) => dereference(identifierPath))\n .filter(isNotNull);\n}\n\nexport function referenceAll(path: NodePath): void {\n findIdentifiers([path]).forEach((identifierPath) =>\n reference(identifierPath)\n );\n}\n\nconst deletingNodes = new WeakSet<NodePath>();\n\nconst isEmptyList = (list: NodePath[]) =>\n list.length === 0 || list.every((i) => deletingNodes.has(i));\n\ntype ReplaceAction = [action: 'replace', what: NodePath, by: Node];\ntype RemoveAction = [action: 'remove', what: NodePath];\n\nconst getPathFromAction = (action: RemoveAction | ReplaceAction) => {\n if (!Array.isArray(action)) {\n return action;\n }\n\n if (action[0] === 'replace' || action[0] === 'remove') {\n return action[1];\n }\n\n throw new Error(`Unknown action type: ${action[0]}`);\n};\n\nfunction isPrototypeAssignment(path: NodePath) {\n if (!path.isAssignmentExpression()) {\n return false;\n }\n\n const { left } = path.node;\n if (!left) {\n return false;\n }\n\n if (left.type !== 'MemberExpression') {\n return false;\n }\n\n const { object, property } = left;\n if (!object || !property) {\n return false;\n }\n\n return (\n object.type === 'MemberExpression' &&\n object.property.type === 'Identifier' &&\n object.property.name === 'prototype'\n );\n}\n\nfunction canFunctionBeDelete(fnPath: NodePath<FunctionNode>) {\n if (isPrototypeAssignment(fnPath.parentPath)) {\n // It is a prototype assignment, we can't delete it since we can't find all usages\n return false;\n }\n\n const fnScope = fnPath.scope;\n const parentScope = fnScope.parent;\n if (parentScope.parent) {\n // It isn't a top-level function, so we can't delete it\n return true;\n }\n\n if (fnPath.listKey === 'arguments') {\n // It is passed as an argument to another function, we can't delete it\n return true;\n }\n\n return false;\n}\n\nexport function findActionForNode(\n path: NodePath\n): RemoveAction | ReplaceAction | null {\n if (isRemoved(path)) return null;\n\n deletingNodes.add(path);\n\n const parent = path.parentPath;\n\n if (!parent) return ['remove', path];\n\n if (parent.isProgram()) {\n // Do not delete Program node\n return ['remove', path];\n }\n\n if (parent.isClassDeclaration() || parent.isClassExpression()) {\n if (path.key === 'body') {\n return ['replace', path, { type: 'ClassBody', body: [] }];\n }\n }\n\n if (parent.isFunction()) {\n if (path.listKey === 'params') {\n // Do not remove params of functions\n return null;\n }\n\n if (\n (path.isBlockStatement() && isEmptyList(path.get('body'))) ||\n path === parent.get('body')\n ) {\n if (!canFunctionBeDelete(parent)) {\n return [\n 'replace',\n parent,\n {\n ...parent.node,\n async: false,\n body: {\n type: 'BlockStatement',\n body: [],\n directives: [],\n },\n generator: false,\n params: [],\n },\n ];\n }\n }\n }\n\n if (parent.isConditionalExpression()) {\n if (path.key === 'test') {\n return ['replace', parent, parent.node.alternate];\n }\n\n if (path.key === 'consequent') {\n return ['replace', path, { type: 'Identifier', name: 'undefined' }];\n }\n\n if (path.key === 'alternate') {\n return ['replace', path, { type: 'Identifier', name: 'undefined' }];\n }\n }\n\n if (parent.isLogicalExpression({ operator: '&&' })) {\n return [\n 'replace',\n parent,\n {\n type: 'BooleanLiteral',\n value: false,\n },\n ];\n }\n\n if (parent.isLogicalExpression({ operator: '||' })) {\n return [\n 'replace',\n parent,\n path.key === 'left' ? parent.node.right : parent.node.left,\n ];\n }\n\n if (parent.isObjectProperty()) {\n // let's check if it is a special case with Object.defineProperty\n const key = parent.get('key');\n if (key.isIdentifier({ name: 'get' })) {\n const maybeDefineProperty = parent.parentPath.parentPath;\n if (\n maybeDefineProperty?.isCallExpression() &&\n maybeDefineProperty\n .get('callee')\n .matchesPattern('Object.defineProperty')\n ) {\n return findActionForNode(maybeDefineProperty);\n }\n }\n\n return findActionForNode(parent);\n }\n\n if (parent.isTemplateLiteral()) {\n return [\n 'replace',\n path,\n {\n type: 'StringLiteral',\n value: '',\n },\n ];\n }\n\n if (parent.isAssignmentExpression()) {\n if (path.isAssignmentExpression()) {\n // `foo = bar = 42` should be replaced with `foo = 42`\n return ['replace', path, path.node.right];\n }\n\n return findActionForNode(parent);\n }\n\n if (parent.isCallExpression()) {\n return findActionForNode(parent);\n }\n\n if (parent.isForInStatement({ left: path.node })) {\n return findActionForNode(parent);\n }\n\n if (\n parent.isFunctionExpression({ body: path.node }) ||\n parent.isFunctionDeclaration() ||\n parent.isObjectMethod() ||\n parent.isClassMethod()\n ) {\n return findActionForNode(parent);\n }\n\n if (parent.isBlockStatement()) {\n const body = parent.get('body');\n if (isEmptyList(body)) {\n return findActionForNode(parent);\n }\n\n if (path.listKey === 'body' && typeof path.key === 'number') {\n if (path.key > 0) {\n // We can check whether the previous one can be removed\n const prevStatement = body[path.key - 1];\n if (\n prevStatement.isIfStatement() &&\n prevStatement.get('consequent').isReturnStatement()\n ) {\n // It's `if (…) return …`, we can remove it.\n return findActionForNode(prevStatement);\n }\n } else if (\n body.slice(1).every((statement) => deletingNodes.has(statement))\n ) {\n // If it is the first statement and all other statements\n // are marked for deletion, we can remove the whole block.\n return findActionForNode(parent);\n }\n }\n }\n\n if (parent.isVariableDeclarator()) {\n if (path.key === 'init' && path.isAssignmentExpression()) {\n // We are removing `bar` in `var foo = bar = 42`. Path should be replaced with `var foo = 42`\n return ['replace', path, path.node.right];\n }\n\n const init = parent.get('init');\n if (path.key === 'id' && init.isAssignmentExpression()) {\n // We are removing `foo` in `var foo = bar = 42`. Ignore it.\n return null;\n }\n\n return findActionForNode(parent);\n }\n\n if (\n parent.isExportNamedDeclaration() &&\n ((path.key === 'specifiers' && isEmptyList(parent.get('specifiers'))) ||\n (path.key === 'declaration' && parent.node.declaration === path.node))\n ) {\n return findActionForNode(parent);\n }\n\n for (const key of ['body', 'declarations', 'specifiers']) {\n if (path.listKey === key && typeof path.key === 'number') {\n const list = parent.get(key) as NodePath[];\n if (isEmptyList(list)) {\n return findActionForNode(parent);\n }\n }\n }\n\n if (parent.isTryStatement()) {\n return findActionForNode(parent);\n }\n\n if (!path.listKey && path.key) {\n const field = NODE_FIELDS[parent.type][path.key];\n if (!validateField(parent.node, path.key as string, null, field)) {\n // The parent node isn't valid without this field, so we should remove it also.\n return findActionForNode(parent);\n }\n }\n\n for (const key of [\n 'argument',\n 'block',\n 'body',\n 'callee',\n 'discriminant',\n 'expression',\n 'id',\n 'left',\n 'object',\n 'property',\n 'right',\n 'test',\n ]) {\n if (path.key === key && parent.get(key) === path) {\n return findActionForNode(parent);\n }\n }\n\n return ['remove', path];\n}\n\n// @babel/preset-typescript transpiles enums, but doesn't reference used identifiers.\nfunction referenceEnums(program: NodePath<Program>) {\n /*\n * We are looking for transpiled enums.\n * (function (Colors) {\n * Colors[\"BLUE\"] = \"#27509A\";\n * })(Colors || (Colors = {}));\n */\n program.traverse({\n ExpressionStatement(expressionStatement) {\n const expression = expressionStatement.get('expression');\n if (!expression.isCallExpression()) return;\n\n const callee = expression.get('callee');\n const args = expression.get('arguments');\n if (!callee.isFunctionExpression() || args.length !== 1) return;\n const [arg] = args;\n if (arg.isLogicalExpression({ operator: '||' })) {\n referenceAll(arg);\n }\n },\n });\n}\n\nconst fixed = new WeakSet<NodePath<Program>>();\n\nfunction removeUnreferenced(items: NodePath<Identifier | JSXIdentifier>[]) {\n const referenced = new Set<NodePath<Identifier | JSXIdentifier>>();\n items.forEach((item) => {\n if (!item.node || isRemoved(item)) return;\n const binding = getScope(item).getBinding(item.node.name);\n if (!binding) return;\n const hasReferences =\n binding.referencePaths.filter((i) => !isRemoved(i)).length > 0;\n if (hasReferences) {\n referenced.add(item);\n return;\n }\n\n const forDeleting = [binding.path, ...binding.constantViolations]\n .map(findActionForNode)\n .filter(isNotNull)\n .map(getPathFromAction);\n\n if (forDeleting.length === 0) return;\n\n findIdentifiers(forDeleting).forEach((identifier) => {\n referenced.add(identifier);\n });\n\n removeWithRelated(forDeleting);\n });\n\n const result = [...referenced];\n result.sort((a, b) => a.node?.name.localeCompare(b.node?.name));\n\n return result;\n}\n\nfunction getNodeForValue(value: unknown): Node | undefined {\n if (typeof value === 'string') {\n return {\n type: 'StringLiteral',\n value,\n };\n }\n\n if (typeof value === 'number') {\n return {\n type: 'NumericLiteral',\n value,\n };\n }\n\n if (typeof value === 'boolean') {\n return {\n type: 'BooleanLiteral',\n value,\n };\n }\n\n if (value === null) {\n return {\n type: 'NullLiteral',\n };\n }\n\n if (value === undefined) {\n return {\n type: 'Identifier',\n name: 'undefined',\n };\n }\n\n return undefined;\n}\n\nfunction staticEvaluate(path: NodePath | null | undefined): void {\n if (!path) return;\n const evaluated = path.evaluate();\n if (evaluated.confident) {\n const node = getNodeForValue(evaluated.value);\n if (node) {\n applyAction(['replace', path, node]);\n return;\n }\n }\n\n if (path.isIfStatement()) {\n const test = path.get('test');\n if (!test.isBooleanLiteral()) {\n return;\n }\n\n const { consequent, alternate } = path.node;\n if (test.node.value) {\n applyAction(['replace', path, consequent]);\n } else if (alternate) {\n applyAction(['replace', path, alternate]);\n } else {\n applyAction(['remove', path]);\n }\n }\n}\n\nfunction applyAction(action: ReplaceAction | RemoveAction) {\n mutate(action[1], (p) => {\n if (isRemoved(p)) return;\n\n const parent = p.parentPath;\n\n if (action[0] === 'remove') {\n p.remove();\n }\n\n if (action[0] === 'replace') {\n p.replaceWith(action[2]);\n }\n\n staticEvaluate(parent);\n });\n}\n\nfunction removeWithRelated(paths: NodePath[]) {\n if (paths.length === 0) return;\n\n const rootPath = getScope(paths[0]).getProgramParent()\n .path as NodePath<Program>;\n\n if (!fixed.has(rootPath)) {\n // Some libraries don't care about bindings, references, and other staff\n // So we have to fix the scope before we can detect unused code\n referenceEnums(rootPath);\n fixed.add(rootPath);\n }\n\n const actions: (ReplaceAction | RemoveAction)[] = paths\n .map(findActionForNode)\n .filter(isNotNull);\n\n const affectedPaths = actions.map(getPathFromAction);\n\n let referencedIdentifiers = findIdentifiers(affectedPaths, 'reference');\n referencedIdentifiers.sort(\n (a, b) => a.node?.name.localeCompare(b.node?.name)\n );\n\n const referencesOfBinding = findIdentifiers(affectedPaths, 'declaration')\n .map((i) => (i.node && getScope(i).getBinding(i.node.name)) ?? null)\n .filter(isNotNull)\n .reduce(\n (acc, i) => [...acc, ...i.referencePaths.filter(nonType)],\n [] as NodePath[]\n )\n .filter(\n (ref) =>\n // Do not remove `export default function`\n !ref.isExportDefaultDeclaration() ||\n !ref.get('declaration').isFunctionDeclaration()\n );\n\n actions.forEach(applyAction);\n\n removeWithRelated(referencesOfBinding);\n\n let clean = false;\n while (!clean && referencedIdentifiers.length > 0) {\n const referenced = removeUnreferenced(referencedIdentifiers);\n clean =\n referenced.map((i) => i.node?.name).join('|') ===\n referencedIdentifiers.map((i) => i.node?.name).join('|');\n referencedIdentifiers = referenced;\n }\n}\n\nfunction mutate<T extends NodePath>(path: T, fn: (p: T) => NodePath[] | void) {\n const dereferenced = dereferenceAll(path);\n\n const mutated = fn(path);\n\n referenceAll(path);\n mutated?.forEach((p) => referenceAll(p));\n\n const dead = dereferenced.filter((p) => !isReferenced(p));\n\n const forDeleting: NodePath[] = [];\n dead.forEach((binding) => {\n const assignments = [binding.path, ...binding.constantViolations];\n assignments.forEach((assignment) => {\n const { scope } = assignment;\n const declared = Object.values(\n assignment.getOuterBindingIdentifiers(false)\n );\n if (\n declared.length === 1 &&\n 'name' in declared[0] &&\n declared[0].name === binding.identifier.name\n ) {\n const init = assignment.get('init');\n if (!Array.isArray(init) && init?.isAssignmentExpression()) {\n // `const a = b = 1` → `b = 1`\n assignment.parentPath?.replaceWith({\n type: 'ExpressionStatement',\n expression: init.node,\n });\n\n const left = init.get('left');\n if (left.isIdentifier()) {\n // If it was forcefully referenced in the shaker\n dereference(left);\n }\n\n return;\n }\n // Only one identifier is declared, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n if (\n declared.every(\n (identifier) =>\n identifier.type === 'Identifier' &&\n !scope.getBinding(identifier.name)?.referenced\n )\n ) {\n // No other identifier is referenced, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n // We can't remove the binding, but we can remove the part of it\n assignment.traverse({\n Identifier(identifier) {\n if (identifier.node.name === binding.identifier.name) {\n const parent = identifier.parentPath;\n if (\n parent.isArrayPattern() &&\n identifier.listKey === 'elements' &&\n typeof identifier.key === 'number'\n ) {\n parent.node.elements[identifier.key] = null;\n } else if (parent.isObjectProperty()) {\n forDeleting.push(parent);\n }\n }\n },\n });\n });\n });\n\n removeWithRelated(forDeleting);\n}\n\nexport { applyAction, mutate, removeWithRelated };\n"],"mappings":"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"}
1
+ {"version":3,"file":"scopeHelpers.js","names":["NODE_FIELDS","findIdentifiers","nonType","getScope","isNotNull","isRemoved","validateField","node","key","val","field","validate","optional","getBinding","path","binding","name","undefined","reference","referencePath","force","isReferencedIdentifier","referencePaths","includes","referenced","push","references","length","isReferenced","kind","isFunctionExpression","parentPath","isVariableDeclarator","id","get","isIdentifier","idBinding","every","i","find","ancestor","isTSType","isFlowType","isReferencedConstantViolation","p","isAssignmentExpression","isExpressionStatement","dereference","isReference","referencesInConstantViolations","constantViolations","filter","isConstantViolation","nonTypeReferences","dereferenceAll","map","identifierPath","referenceAll","forEach","deletingNodes","WeakSet","isEmptyList","list","has","getPathFromAction","action","Array","isArray","Error","isPrototypeAssignment","left","type","object","property","canFunctionBeDelete","fnPath","fnScope","scope","parentScope","parent","listKey","findActionForNode","add","isProgram","isClassDeclaration","isClassExpression","body","isFunction","isBlockStatement","async","directives","generator","params","isConditionalExpression","alternate","isLogicalExpression","operator","value","right","isObjectProperty","maybeDefineProperty","isCallExpression","matchesPattern","isTemplateLiteral","isForInStatement","isFunctionDeclaration","isObjectMethod","isClassMethod","prevStatement","isIfStatement","isReturnStatement","slice","statement","init","isExportNamedDeclaration","declaration","isTryStatement","referenceEnums","program","traverse","ExpressionStatement","expressionStatement","expression","callee","args","arg","fixed","removeUnreferenced","items","Set","item","hasReferences","forDeleting","identifier","removeWithRelated","result","sort","a","b","localeCompare","getNodeForValue","staticEvaluate","evaluated","evaluate","confident","applyAction","test","isBooleanLiteral","consequent","mutate","remove","replaceWith","paths","rootPath","getProgramParent","actions","affectedPaths","referencedIdentifiers","referencesOfBinding","reduce","acc","ref","isExportDefaultDeclaration","clean","join","fn","dereferenced","mutated","dead","assignments","assignment","declared","Object","values","getOuterBindingIdentifiers","Identifier","isArrayPattern","elements"],"sources":["../../src/utils/scopeHelpers.ts"],"sourcesContent":["/* eslint-disable no-restricted-syntax */\n/* eslint @typescript-eslint/no-use-before-define: [\"error\", { \"functions\": false }] */\n\nimport type { Binding, NodePath } from '@babel/traverse';\nimport type {\n FieldOptions,\n Function as FunctionNode,\n Identifier,\n JSXIdentifier,\n Node,\n Program,\n} from '@babel/types';\nimport { NODE_FIELDS } from '@babel/types';\n\nimport { findIdentifiers, nonType } from './findIdentifiers';\nimport { getScope } from './getScope';\nimport { isNotNull } from './isNotNull';\nimport { isRemoved } from './isRemoved';\n\nfunction validateField(\n node: Node,\n key: string,\n val: unknown,\n field: FieldOptions\n) {\n if (!(field != null && field.validate)) return true;\n if (field.optional && val == null) return true;\n try {\n field.validate(node, key, val);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction getBinding(path: NodePath<Identifier | JSXIdentifier>) {\n const binding = getScope(path).getBinding(path.node.name);\n if (!binding) {\n return undefined;\n }\n\n return binding;\n}\n\nexport function reference(\n path: NodePath<Identifier | JSXIdentifier>,\n referencePath: NodePath = path,\n force = false\n): void {\n if (!force && !path.isReferencedIdentifier()) return;\n\n const binding = getBinding(path);\n if (!binding) return;\n\n if (binding.referencePaths.includes(referencePath)) {\n return;\n }\n\n binding.referenced = true;\n binding.referencePaths.push(referencePath ?? path);\n binding.references = binding.referencePaths.length;\n}\n\nfunction isReferenced(binding: Binding): boolean {\n const { kind, referenced, referencePaths, path } = binding;\n\n if (\n path.isFunctionExpression() &&\n path.key === 'init' &&\n path.parentPath.isVariableDeclarator()\n ) {\n // It is a function expression in a variable declarator\n const id = path.parentPath.get('id');\n if (id.isIdentifier()) {\n const idBinding = getBinding(id);\n return idBinding ? isReferenced(idBinding) : true;\n }\n\n return true;\n }\n\n if (!referenced) {\n return false;\n }\n\n // If it's a param binding, we can't just remove it\n // because it brakes the function signature. Keep it alive for now.\n if ((kind as string) === 'param') {\n return true;\n }\n\n // If all remaining references are in TS/Flow types, binding is unreferenced\n return (\n referencePaths.length > 0 ||\n referencePaths.every((i) =>\n i.find((ancestor) => ancestor.isTSType() || ancestor.isFlowType())\n )\n );\n}\n\nfunction isReferencedConstantViolation(path: NodePath, binding: Binding) {\n if (path.find((p) => p === binding.path)) {\n // function a(flag) { return (a = function(flag) { flag ? 1 : 2 }) }\n // ^ Looks crazy, yeh? Welcome to the wonderful world of transpilers!\n // `a = …` here isn't a reference.\n return false;\n }\n\n if (!path.isReferenced()) {\n return false;\n }\n\n if (\n path.isAssignmentExpression() &&\n path.parentPath.isExpressionStatement()\n ) {\n // A root assignment without a parent expression statement is not a reference\n return false;\n }\n\n return true;\n}\n\nexport function dereference(\n path: NodePath<Identifier | JSXIdentifier>\n): Binding | null {\n const binding = getBinding(path);\n if (!binding) return null;\n\n const isReference = binding.referencePaths.includes(path);\n let referencesInConstantViolations = binding.constantViolations.filter((i) =>\n isReferencedConstantViolation(i, binding)\n );\n\n const isConstantViolation = referencesInConstantViolations.includes(path);\n\n if (!isReference && !isConstantViolation) {\n return null;\n }\n\n if (isReference) {\n binding.referencePaths = binding.referencePaths.filter((i) => i !== path);\n binding.references -= 1;\n } else {\n referencesInConstantViolations = referencesInConstantViolations.filter(\n (i) => i !== path\n );\n }\n\n const nonTypeReferences = binding.referencePaths.filter(nonType);\n binding.referenced =\n nonTypeReferences.length + referencesInConstantViolations.length > 0;\n\n return binding;\n}\n\nfunction dereferenceAll(path: NodePath): Binding[] {\n return findIdentifiers([path])\n .map((identifierPath) => dereference(identifierPath))\n .filter(isNotNull);\n}\n\nexport function referenceAll(path: NodePath): void {\n findIdentifiers([path]).forEach((identifierPath) =>\n reference(identifierPath)\n );\n}\n\nconst deletingNodes = new WeakSet<NodePath>();\n\nconst isEmptyList = (list: NodePath[]) =>\n list.length === 0 || list.every((i) => deletingNodes.has(i));\n\ntype ReplaceAction = [action: 'replace', what: NodePath, by: Node];\ntype RemoveAction = [action: 'remove', what: NodePath];\n\nconst getPathFromAction = (action: RemoveAction | ReplaceAction) => {\n if (!Array.isArray(action)) {\n return action;\n }\n\n if (action[0] === 'replace' || action[0] === 'remove') {\n return action[1];\n }\n\n throw new Error(`Unknown action type: ${action[0]}`);\n};\n\nfunction isPrototypeAssignment(path: NodePath) {\n if (!path.isAssignmentExpression()) {\n return false;\n }\n\n const { left } = path.node;\n if (!left) {\n return false;\n }\n\n if (left.type !== 'MemberExpression') {\n return false;\n }\n\n const { object, property } = left;\n if (!object || !property) {\n return false;\n }\n\n return (\n object.type === 'MemberExpression' &&\n object.property.type === 'Identifier' &&\n object.property.name === 'prototype'\n );\n}\n\nfunction canFunctionBeDelete(fnPath: NodePath<FunctionNode>) {\n if (isPrototypeAssignment(fnPath.parentPath)) {\n // It is a prototype assignment, we can't delete it since we can't find all usages\n return false;\n }\n\n const fnScope = fnPath.scope;\n const parentScope = fnScope.parent;\n if (parentScope.parent) {\n // It isn't a top-level function, so we can't delete it\n return true;\n }\n\n if (fnPath.listKey === 'arguments') {\n // It is passed as an argument to another function, we can't delete it\n return true;\n }\n\n return false;\n}\n\nexport function findActionForNode(\n path: NodePath\n): RemoveAction | ReplaceAction | null {\n if (isRemoved(path)) return null;\n\n deletingNodes.add(path);\n\n const parent = path.parentPath;\n\n if (!parent) return ['remove', path];\n\n if (parent.isProgram()) {\n // Do not delete Program node\n return ['remove', path];\n }\n\n if (parent.isClassDeclaration() || parent.isClassExpression()) {\n if (path.key === 'body') {\n return ['replace', path, { type: 'ClassBody', body: [] }];\n }\n }\n\n if (parent.isFunction()) {\n if (path.listKey === 'params') {\n // Do not remove params of functions\n return null;\n }\n\n if (\n (path.isBlockStatement() && isEmptyList(path.get('body'))) ||\n path === parent.get('body')\n ) {\n if (!canFunctionBeDelete(parent)) {\n return [\n 'replace',\n parent,\n {\n ...parent.node,\n async: false,\n body: {\n type: 'BlockStatement',\n body: [],\n directives: [],\n },\n generator: false,\n params: [],\n },\n ];\n }\n }\n }\n\n if (parent.isConditionalExpression()) {\n if (path.key === 'test') {\n return ['replace', parent, parent.node.alternate];\n }\n\n if (path.key === 'consequent') {\n return ['replace', path, { type: 'Identifier', name: 'undefined' }];\n }\n\n if (path.key === 'alternate') {\n return ['replace', path, { type: 'Identifier', name: 'undefined' }];\n }\n }\n\n if (parent.isLogicalExpression({ operator: '&&' })) {\n return [\n 'replace',\n parent,\n {\n type: 'BooleanLiteral',\n value: false,\n },\n ];\n }\n\n if (parent.isLogicalExpression({ operator: '||' })) {\n return [\n 'replace',\n parent,\n path.key === 'left' ? parent.node.right : parent.node.left,\n ];\n }\n\n if (parent.isObjectProperty()) {\n // let's check if it is a special case with Object.defineProperty\n const key = parent.get('key');\n if (key.isIdentifier({ name: 'get' })) {\n const maybeDefineProperty = parent.parentPath.parentPath;\n if (\n maybeDefineProperty?.isCallExpression() &&\n maybeDefineProperty\n .get('callee')\n .matchesPattern('Object.defineProperty')\n ) {\n return findActionForNode(maybeDefineProperty);\n }\n }\n\n return findActionForNode(parent);\n }\n\n if (parent.isTemplateLiteral()) {\n return [\n 'replace',\n path,\n {\n type: 'StringLiteral',\n value: '',\n },\n ];\n }\n\n if (parent.isAssignmentExpression()) {\n if (path.isAssignmentExpression()) {\n // `foo = bar = 42` should be replaced with `foo = 42`\n return ['replace', path, path.node.right];\n }\n\n return findActionForNode(parent);\n }\n\n if (parent.isCallExpression()) {\n return findActionForNode(parent);\n }\n\n if (parent.isForInStatement({ left: path.node })) {\n return findActionForNode(parent);\n }\n\n if (\n parent.isFunctionExpression({ body: path.node }) ||\n parent.isFunctionDeclaration() ||\n parent.isObjectMethod() ||\n parent.isClassMethod()\n ) {\n return findActionForNode(parent);\n }\n\n if (parent.isBlockStatement()) {\n const body = parent.get('body');\n if (isEmptyList(body)) {\n return findActionForNode(parent);\n }\n\n if (path.listKey === 'body' && typeof path.key === 'number') {\n if (path.key > 0) {\n // We can check whether the previous one can be removed\n const prevStatement = body[path.key - 1];\n if (\n prevStatement.isIfStatement() &&\n prevStatement.get('consequent').isReturnStatement()\n ) {\n // It's `if (…) return …`, we can remove it.\n return findActionForNode(prevStatement);\n }\n } else if (\n body.slice(1).every((statement) => deletingNodes.has(statement))\n ) {\n // If it is the first statement and all other statements\n // are marked for deletion, we can remove the whole block.\n return findActionForNode(parent);\n }\n }\n }\n\n if (parent.isVariableDeclarator()) {\n if (path.key === 'init' && path.isAssignmentExpression()) {\n // We are removing `bar` in `var foo = bar = 42`. Path should be replaced with `var foo = 42`\n return ['replace', path, path.node.right];\n }\n\n const init = parent.get('init');\n if (path.key === 'id' && init.isAssignmentExpression()) {\n // We are removing `foo` in `var foo = bar = 42`. Ignore it.\n return null;\n }\n\n return findActionForNode(parent);\n }\n\n if (\n parent.isExportNamedDeclaration() &&\n ((path.key === 'specifiers' && isEmptyList(parent.get('specifiers'))) ||\n (path.key === 'declaration' && parent.node.declaration === path.node))\n ) {\n return findActionForNode(parent);\n }\n\n for (const key of ['body', 'declarations', 'specifiers']) {\n if (path.listKey === key && typeof path.key === 'number') {\n const list = parent.get(key) as NodePath[];\n if (isEmptyList(list)) {\n return findActionForNode(parent);\n }\n }\n }\n\n if (parent.isTryStatement()) {\n return findActionForNode(parent);\n }\n\n if (!path.listKey && path.key) {\n const field = NODE_FIELDS[parent.type][path.key];\n if (!validateField(parent.node, path.key as string, null, field)) {\n // The parent node isn't valid without this field, so we should remove it also.\n return findActionForNode(parent);\n }\n }\n\n for (const key of [\n 'argument',\n 'block',\n 'body',\n 'callee',\n 'discriminant',\n 'expression',\n 'id',\n 'left',\n 'object',\n 'property',\n 'right',\n 'test',\n ]) {\n if (path.key === key && parent.get(key) === path) {\n return findActionForNode(parent);\n }\n }\n\n return ['remove', path];\n}\n\n// @babel/preset-typescript transpiles enums, but doesn't reference used identifiers.\nfunction referenceEnums(program: NodePath<Program>) {\n /*\n * We are looking for transpiled enums.\n * (function (Colors) {\n * Colors[\"BLUE\"] = \"#27509A\";\n * })(Colors || (Colors = {}));\n */\n program.traverse({\n ExpressionStatement(expressionStatement) {\n const expression = expressionStatement.get('expression');\n if (!expression.isCallExpression()) return;\n\n const callee = expression.get('callee');\n const args = expression.get('arguments');\n if (!callee.isFunctionExpression() || args.length !== 1) return;\n const [arg] = args;\n if (arg.isLogicalExpression({ operator: '||' })) {\n referenceAll(arg);\n }\n },\n });\n}\n\nconst fixed = new WeakSet<NodePath<Program>>();\n\nfunction removeUnreferenced(items: NodePath<Identifier | JSXIdentifier>[]) {\n const referenced = new Set<NodePath<Identifier | JSXIdentifier>>();\n items.forEach((item) => {\n if (!item.node || isRemoved(item)) return;\n const binding = getScope(item).getBinding(item.node.name);\n if (!binding) return;\n const hasReferences =\n binding.referencePaths.filter((i) => !isRemoved(i)).length > 0;\n if (hasReferences) {\n referenced.add(item);\n return;\n }\n\n const forDeleting = [binding.path, ...binding.constantViolations]\n .map(findActionForNode)\n .filter(isNotNull)\n .map(getPathFromAction);\n\n if (forDeleting.length === 0) return;\n\n findIdentifiers(forDeleting).forEach((identifier) => {\n referenced.add(identifier);\n });\n\n removeWithRelated(forDeleting);\n });\n\n const result = [...referenced];\n result.sort((a, b) => a.node?.name.localeCompare(b.node?.name));\n\n return result;\n}\n\nfunction getNodeForValue(value: unknown): Node | undefined {\n if (typeof value === 'string') {\n return {\n type: 'StringLiteral',\n value,\n };\n }\n\n if (typeof value === 'number') {\n return {\n type: 'NumericLiteral',\n value,\n };\n }\n\n if (typeof value === 'boolean') {\n return {\n type: 'BooleanLiteral',\n value,\n };\n }\n\n if (value === null) {\n return {\n type: 'NullLiteral',\n };\n }\n\n if (value === undefined) {\n return {\n type: 'Identifier',\n name: 'undefined',\n };\n }\n\n return undefined;\n}\n\nfunction staticEvaluate(path: NodePath | null | undefined): void {\n if (!path) return;\n const evaluated = path.evaluate();\n if (evaluated.confident) {\n const node = getNodeForValue(evaluated.value);\n if (node) {\n applyAction(['replace', path, node]);\n return;\n }\n }\n\n if (path.isIfStatement()) {\n const test = path.get('test');\n if (!test.isBooleanLiteral()) {\n return;\n }\n\n const { consequent, alternate } = path.node;\n if (test.node.value) {\n applyAction(['replace', path, consequent]);\n } else if (alternate) {\n applyAction(['replace', path, alternate]);\n } else {\n applyAction(['remove', path]);\n }\n }\n}\n\nfunction applyAction(action: ReplaceAction | RemoveAction) {\n mutate(action[1], (p) => {\n if (isRemoved(p)) return;\n\n const parent = p.parentPath;\n\n if (action[0] === 'remove') {\n p.remove();\n }\n\n if (action[0] === 'replace') {\n p.replaceWith(action[2]);\n }\n\n staticEvaluate(parent);\n });\n}\n\nfunction removeWithRelated(paths: NodePath[]) {\n if (paths.length === 0) return;\n\n const rootPath = getScope(paths[0]).getProgramParent()\n .path as NodePath<Program>;\n\n if (!fixed.has(rootPath)) {\n // Some libraries don't care about bindings, references, and other staff\n // So we have to fix the scope before we can detect unused code\n referenceEnums(rootPath);\n fixed.add(rootPath);\n }\n\n const actions: (ReplaceAction | RemoveAction)[] = paths\n .map(findActionForNode)\n .filter(isNotNull);\n\n const affectedPaths = actions.map(getPathFromAction);\n\n let referencedIdentifiers = findIdentifiers(affectedPaths, 'reference');\n referencedIdentifiers.sort(\n (a, b) => a.node?.name.localeCompare(b.node?.name)\n );\n\n const referencesOfBinding = findIdentifiers(affectedPaths, 'declaration')\n .map((i) => (i.node && getScope(i).getBinding(i.node.name)) ?? null)\n .filter(isNotNull)\n .reduce(\n (acc, i) => [...acc, ...i.referencePaths.filter(nonType)],\n [] as NodePath[]\n )\n .filter(\n (ref) =>\n // Do not remove `export default function`\n !ref.isExportDefaultDeclaration() ||\n !ref.get('declaration').isFunctionDeclaration()\n );\n\n actions.forEach(applyAction);\n\n removeWithRelated(referencesOfBinding);\n\n let clean = false;\n while (!clean && referencedIdentifiers.length > 0) {\n const referenced = removeUnreferenced(referencedIdentifiers);\n clean =\n referenced.map((i) => i.node?.name).join('|') ===\n referencedIdentifiers.map((i) => i.node?.name).join('|');\n referencedIdentifiers = referenced;\n }\n}\n\nfunction mutate<T extends NodePath>(path: T, fn: (p: T) => NodePath[] | void) {\n const dereferenced = dereferenceAll(path);\n\n const mutated = fn(path);\n\n referenceAll(path);\n mutated?.forEach((p) => referenceAll(p));\n\n const dead = dereferenced.filter((p) => !isReferenced(p));\n\n const forDeleting: NodePath[] = [];\n dead.forEach((binding) => {\n const assignments = [binding.path, ...binding.constantViolations];\n assignments.forEach((assignment) => {\n const { scope } = assignment;\n const declared = Object.values(\n assignment.getOuterBindingIdentifiers(false)\n );\n if (\n declared.length === 1 &&\n 'name' in declared[0] &&\n declared[0].name === binding.identifier.name\n ) {\n const init = assignment.get('init');\n if (!Array.isArray(init) && init?.isAssignmentExpression()) {\n // `const a = b = 1` → `b = 1`\n assignment.parentPath?.replaceWith({\n type: 'ExpressionStatement',\n expression: init.node,\n });\n\n const left = init.get('left');\n if (left.isIdentifier()) {\n // If it was forcefully referenced in the shaker\n dereference(left);\n }\n\n return;\n }\n // Only one identifier is declared, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n if (\n declared.every(\n (identifier) =>\n identifier.type === 'Identifier' &&\n !scope.getBinding(identifier.name)?.referenced\n )\n ) {\n // No other identifier is referenced, so we can remove the whole declaration\n forDeleting.push(assignment);\n return;\n }\n\n // We can't remove the binding, but we can remove the part of it\n assignment.traverse({\n Identifier(identifier) {\n if (identifier.node.name === binding.identifier.name) {\n const parent = identifier.parentPath;\n if (\n parent.isArrayPattern() &&\n identifier.listKey === 'elements' &&\n typeof identifier.key === 'number'\n ) {\n parent.node.elements[identifier.key] = null;\n } else if (parent.isObjectProperty()) {\n forDeleting.push(parent);\n }\n }\n },\n });\n });\n });\n\n removeWithRelated(forDeleting);\n}\n\nexport { applyAction, mutate, removeWithRelated };\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"traversalCache.js","names":["caches","WeakMap","getTraversalCache","path","name","programPath","find","p","isProgram","Error","node","type","has","set","Map","cache","get","invalidateTraversalCache","delete"],"sources":["../../src/utils/traversalCache.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Node } from '@babel/types';\n\nconst caches = new WeakMap<\n NodePath,\n Map<string, WeakMap<NodePath | Node, unknown>>\n>();\n\nexport const getTraversalCache = <\n TValue,\n TKey extends NodePath | Node = NodePath,\n>(\n path: NodePath,\n name: string\n) => {\n const programPath = path.find((p) => p.isProgram());\n if (!programPath) {\n throw new Error(`Could not find program for ${path.node.type}`);\n }\n\n if (!caches.has(programPath)) {\n caches.set(programPath, new Map());\n }\n\n const cache = caches.get(programPath)!;\n if (!cache.has(name)) {\n cache.set(name, new WeakMap());\n }\n\n return cache.get(name) as WeakMap<TKey, TValue>;\n};\n\nexport const invalidateTraversalCache = (path: NodePath) => {\n const programPath = path.find((p) => p.isProgram());\n if (!programPath) {\n throw new Error(`Could not find program for ${path.node.type}`);\n }\n\n caches.delete(programPath);\n};\n"],"mappings":"AAGA,MAAMA,MAAM,GAAG,IAAIC,OAAO,CAGxB,CAAC;AAEH,OAAO,MAAMC,iBAAiB,GAAGA,CAI/BC,IAAc,EACdC,IAAY,KACT;EACH,MAAMC,WAAW,GAAGF,IAAI,CAACG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,SAAS,CAAC,CAAC,CAAC;EACnD,IAAI,CAACH,WAAW,EAAE;IAChB,MAAM,IAAII,KAAK,CAAE,8BAA6BN,IAAI,CAACO,IAAI,CAACC,IAAK,EAAC,CAAC;EACjE;EAEA,IAAI,CAACX,MAAM,CAACY,GAAG,CAACP,WAAW,CAAC,EAAE;IAC5BL,MAAM,CAACa,GAAG,CAACR,WAAW,EAAE,IAAIS,GAAG,CAAC,CAAC,CAAC;EACpC;EAEA,MAAMC,KAAK,GAAGf,MAAM,CAACgB,GAAG,CAACX,WAAW,CAAE;EACtC,IAAI,CAACU,KAAK,CAACH,GAAG,CAACR,IAAI,CAAC,EAAE;IACpBW,KAAK,CAACF,GAAG,CAACT,IAAI,EAAE,IAAIH,OAAO,CAAC,CAAC,CAAC;EAChC;EAEA,OAAOc,KAAK,CAACC,GAAG,CAACZ,IAAI,CAAC;AACxB,CAAC;AAED,OAAO,MAAMa,wBAAwB,GAAId,IAAc,IAAK;EAC1D,MAAME,WAAW,GAAGF,IAAI,CAACG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,SAAS,CAAC,CAAC,CAAC;EACnD,IAAI,CAACH,WAAW,EAAE;IAChB,MAAM,IAAII,KAAK,CAAE,8BAA6BN,IAAI,CAACO,IAAI,CAACC,IAAK,EAAC,CAAC;EACjE;EAEAX,MAAM,CAACkB,MAAM,CAACb,WAAW,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"traversalCache.js","names":["caches","WeakMap","getTraversalCache","path","name","programPath","find","p","isProgram","Error","node","type","has","set","Map","cache","get","invalidateTraversalCache","delete"],"sources":["../../src/utils/traversalCache.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Node } from '@babel/types';\n\nconst caches = new WeakMap<\n NodePath,\n Map<string, WeakMap<NodePath | Node, unknown>>\n>();\n\nexport const getTraversalCache = <\n TValue,\n TKey extends NodePath | Node = NodePath,\n>(\n path: NodePath,\n name: string\n) => {\n const programPath = path.find((p) => p.isProgram());\n if (!programPath) {\n throw new Error(`Could not find program for ${path.node.type}`);\n }\n\n if (!caches.has(programPath)) {\n caches.set(programPath, new Map());\n }\n\n const cache = caches.get(programPath)!;\n if (!cache.has(name)) {\n cache.set(name, new WeakMap());\n }\n\n return cache.get(name) as WeakMap<TKey, TValue>;\n};\n\nexport const invalidateTraversalCache = (path: NodePath) => {\n const programPath = path.find((p) => p.isProgram());\n if (!programPath) {\n throw new Error(`Could not find program for ${path.node.type}`);\n }\n\n caches.delete(programPath);\n};\n"],"mappings":"AAGA,MAAMA,MAAM,GAAG,IAAIC,OAAO,CAGxB,CAAC;AAEH,OAAO,MAAMC,iBAAiB,GAAGA,CAI/BC,IAAc,EACdC,IAAY,KACT;EACH,MAAMC,WAAW,GAAGF,IAAI,CAACG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,SAAS,CAAC,CAAC,CAAC;EACnD,IAAI,CAACH,WAAW,EAAE;IAChB,MAAM,IAAII,KAAK,CAAC,8BAA8BN,IAAI,CAACO,IAAI,CAACC,IAAI,EAAE,CAAC;EACjE;EAEA,IAAI,CAACX,MAAM,CAACY,GAAG,CAACP,WAAW,CAAC,EAAE;IAC5BL,MAAM,CAACa,GAAG,CAACR,WAAW,EAAE,IAAIS,GAAG,CAAC,CAAC,CAAC;EACpC;EAEA,MAAMC,KAAK,GAAGf,MAAM,CAACgB,GAAG,CAACX,WAAW,CAAE;EACtC,IAAI,CAACU,KAAK,CAACH,GAAG,CAACR,IAAI,CAAC,EAAE;IACpBW,KAAK,CAACF,GAAG,CAACT,IAAI,EAAE,IAAIH,OAAO,CAAC,CAAC,CAAC;EAChC;EAEA,OAAOc,KAAK,CAACC,GAAG,CAACZ,IAAI,CAAC;AACxB,CAAC;AAED,OAAO,MAAMa,wBAAwB,GAAId,IAAc,IAAK;EAC1D,MAAME,WAAW,GAAGF,IAAI,CAACG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,SAAS,CAAC,CAAC,CAAC;EACnD,IAAI,CAACH,WAAW,EAAE;IAChB,MAAM,IAAII,KAAK,CAAC,8BAA8BN,IAAI,CAACO,IAAI,CAACC,IAAI,EAAE,CAAC;EACjE;EAEAX,MAAM,CAACkB,MAAM,CAACb,WAAW,CAAC;AAC5B,CAAC","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ import * as t from '@babel/types';
2
+ const unwrapOnce = node => {
3
+ if (t.isTSAsExpression(node)) return node.expression;
4
+ if (t.isTSTypeAssertion(node)) return node.expression;
5
+ if (t.isTSNonNullExpression(node)) return node.expression;
6
+ if (t.isParenthesizedExpression(node)) return node.expression;
7
+ return node;
8
+ };
9
+ export function unwrapExpression(node) {
10
+ let current = node;
11
+ let next = unwrapOnce(current);
12
+ while (next !== current) {
13
+ current = next;
14
+ next = unwrapOnce(current);
15
+ }
16
+ return current;
17
+ }
18
+ //# sourceMappingURL=unwrapExpression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unwrapExpression.js","names":["t","unwrapOnce","node","isTSAsExpression","expression","isTSTypeAssertion","isTSNonNullExpression","isParenthesizedExpression","unwrapExpression","current","next"],"sources":["../../src/utils/unwrapExpression.ts"],"sourcesContent":["import type { Expression } from '@babel/types';\nimport * as t from '@babel/types';\n\nconst unwrapOnce = (node: Expression): Expression => {\n if (t.isTSAsExpression(node)) return node.expression;\n if (t.isTSTypeAssertion(node)) return node.expression;\n if (t.isTSNonNullExpression(node)) return node.expression;\n if (t.isParenthesizedExpression(node)) return node.expression;\n return node;\n};\n\nexport function unwrapExpression(node: Expression): Expression {\n let current = node;\n let next = unwrapOnce(current);\n\n while (next !== current) {\n current = next;\n next = unwrapOnce(current);\n }\n\n return current;\n}\n"],"mappings":"AACA,OAAO,KAAKA,CAAC,MAAM,cAAc;AAEjC,MAAMC,UAAU,GAAIC,IAAgB,IAAiB;EACnD,IAAIF,CAAC,CAACG,gBAAgB,CAACD,IAAI,CAAC,EAAE,OAAOA,IAAI,CAACE,UAAU;EACpD,IAAIJ,CAAC,CAACK,iBAAiB,CAACH,IAAI,CAAC,EAAE,OAAOA,IAAI,CAACE,UAAU;EACrD,IAAIJ,CAAC,CAACM,qBAAqB,CAACJ,IAAI,CAAC,EAAE,OAAOA,IAAI,CAACE,UAAU;EACzD,IAAIJ,CAAC,CAACO,yBAAyB,CAACL,IAAI,CAAC,EAAE,OAAOA,IAAI,CAACE,UAAU;EAC7D,OAAOF,IAAI;AACb,CAAC;AAED,OAAO,SAASM,gBAAgBA,CAACN,IAAgB,EAAc;EAC7D,IAAIO,OAAO,GAAGP,IAAI;EAClB,IAAIQ,IAAI,GAAGT,UAAU,CAACQ,OAAO,CAAC;EAE9B,OAAOC,IAAI,KAAKD,OAAO,EAAE;IACvBA,OAAO,GAAGC,IAAI;IACdA,IAAI,GAAGT,UAAU,CAACQ,OAAO,CAAC;EAC5B;EAEA,OAAOA,OAAO;AAChB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"unwrapSequence.js","names":["unwrapSequence","path","isSequenceExpression","expressions","get","lastExpression","pop","undefined"],"sources":["../../src/utils/unwrapSequence.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Expression, V8IntrinsicIdentifier } from '@babel/types';\n\n/**\n * If expression is a sequence like `(a, b, c)`, returns `c`\n * otherwise returns an original expression\n * @param path\n */\nexport function unwrapSequence(\n path: NodePath<Expression | V8IntrinsicIdentifier>\n): NodePath<Expression | V8IntrinsicIdentifier> | undefined {\n if (path.isSequenceExpression()) {\n const [...expressions] = path.get('expressions');\n const lastExpression = expressions.pop();\n return lastExpression ? unwrapSequence(lastExpression) : undefined;\n }\n\n return path;\n}\n"],"mappings":"AAGA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,cAAcA,CAC5BC,IAAkD,EACQ;EAC1D,IAAIA,IAAI,CAACC,oBAAoB,CAAC,CAAC,EAAE;IAC/B,MAAM,CAAC,GAAGC,WAAW,CAAC,GAAGF,IAAI,CAACG,GAAG,CAAC,aAAa,CAAC;IAChD,MAAMC,cAAc,GAAGF,WAAW,CAACG,GAAG,CAAC,CAAC;IACxC,OAAOD,cAAc,GAAGL,cAAc,CAACK,cAAc,CAAC,GAAGE,SAAS;EACpE;EAEA,OAAON,IAAI;AACb"}
1
+ {"version":3,"file":"unwrapSequence.js","names":["unwrapSequence","path","isSequenceExpression","expressions","get","lastExpression","pop","undefined"],"sources":["../../src/utils/unwrapSequence.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Expression, V8IntrinsicIdentifier } from '@babel/types';\n\n/**\n * If expression is a sequence like `(a, b, c)`, returns `c`\n * otherwise returns an original expression\n * @param path\n */\nexport function unwrapSequence(\n path: NodePath<Expression | V8IntrinsicIdentifier>\n): NodePath<Expression | V8IntrinsicIdentifier> | undefined {\n if (path.isSequenceExpression()) {\n const [...expressions] = path.get('expressions');\n const lastExpression = expressions.pop();\n return lastExpression ? unwrapSequence(lastExpression) : undefined;\n }\n\n return path;\n}\n"],"mappings":"AAGA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,cAAcA,CAC5BC,IAAkD,EACQ;EAC1D,IAAIA,IAAI,CAACC,oBAAoB,CAAC,CAAC,EAAE;IAC/B,MAAM,CAAC,GAAGC,WAAW,CAAC,GAAGF,IAAI,CAACG,GAAG,CAAC,aAAa,CAAC;IAChD,MAAMC,cAAc,GAAGF,WAAW,CAACG,GAAG,CAAC,CAAC;IACxC,OAAOD,cAAc,GAAGL,cAAc,CAACK,cAAc,CAAC,GAAGE,SAAS;EACpE;EAEA,OAAON,IAAI;AACb","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"valueToLiteral.js","names":["getSource","isSerializable","valueToLiteral","value","ex","undefined","type","name","Array","isArray","elements","map","v","properties","Object","entries","key","match","computed","shorthand","buildCodeFrameError"],"sources":["../../src/utils/valueToLiteral.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Expression } from '@babel/types';\n\nimport { getSource } from './getSource';\nimport { isSerializable } from './isSerializable';\n\nexport function valueToLiteral(value: unknown, ex: NodePath): Expression {\n if (value === undefined) {\n return {\n type: 'Identifier',\n name: 'undefined',\n };\n }\n\n if (isSerializable(value)) {\n if (value === null) {\n return {\n type: 'NullLiteral',\n };\n }\n\n if (typeof value === 'string') {\n return {\n type: 'StringLiteral',\n value,\n };\n }\n\n if (typeof value === 'number') {\n return {\n type: 'NumericLiteral',\n value,\n };\n }\n\n if (typeof value === 'boolean') {\n return {\n type: 'BooleanLiteral',\n value,\n };\n }\n\n if (Array.isArray(value)) {\n return {\n type: 'ArrayExpression',\n elements: value.map((v) => valueToLiteral(v, ex)),\n };\n }\n\n return {\n type: 'ObjectExpression',\n properties: Object.entries(value).map(([key, v]) => ({\n type: 'ObjectProperty',\n key: key.match(/^[a-zA-Z]\\w*$/)\n ? {\n type: 'Identifier',\n name: key,\n }\n : {\n type: 'StringLiteral',\n value: key,\n },\n value: valueToLiteral(v, ex),\n computed: false,\n shorthand: false,\n })),\n };\n }\n\n throw ex.buildCodeFrameError(\n `The expression evaluated to '${value}', which is probably a mistake. If you want it to be inserted into CSS, explicitly cast or transform the value to a string, e.g. - 'String(${getSource(\n ex\n )})'.`\n );\n}\n"],"mappings":"AAGA,SAASA,SAAS,QAAQ,aAAa;AACvC,SAASC,cAAc,QAAQ,kBAAkB;AAEjD,OAAO,SAASC,cAAcA,CAACC,KAAc,EAAEC,EAAY,EAAc;EACvE,IAAID,KAAK,KAAKE,SAAS,EAAE;IACvB,OAAO;MACLC,IAAI,EAAE,YAAY;MAClBC,IAAI,EAAE;IACR,CAAC;EACH;EAEA,IAAIN,cAAc,CAACE,KAAK,CAAC,EAAE;IACzB,IAAIA,KAAK,KAAK,IAAI,EAAE;MAClB,OAAO;QACLG,IAAI,EAAE;MACR,CAAC;IACH;IAEA,IAAI,OAAOH,KAAK,KAAK,QAAQ,EAAE;MAC7B,OAAO;QACLG,IAAI,EAAE,eAAe;QACrBH;MACF,CAAC;IACH;IAEA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,OAAO;QACLG,IAAI,EAAE,gBAAgB;QACtBH;MACF,CAAC;IACH;IAEA,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAE;MAC9B,OAAO;QACLG,IAAI,EAAE,gBAAgB;QACtBH;MACF,CAAC;IACH;IAEA,IAAIK,KAAK,CAACC,OAAO,CAACN,KAAK,CAAC,EAAE;MACxB,OAAO;QACLG,IAAI,EAAE,iBAAiB;QACvBI,QAAQ,EAAEP,KAAK,CAACQ,GAAG,CAAEC,CAAC,IAAKV,cAAc,CAACU,CAAC,EAAER,EAAE,CAAC;MAClD,CAAC;IACH;IAEA,OAAO;MACLE,IAAI,EAAE,kBAAkB;MACxBO,UAAU,EAAEC,MAAM,CAACC,OAAO,CAACZ,KAAK,CAAC,CAACQ,GAAG,CAAC,CAAC,CAACK,GAAG,EAAEJ,CAAC,CAAC,MAAM;QACnDN,IAAI,EAAE,gBAAgB;QACtBU,GAAG,EAAEA,GAAG,CAACC,KAAK,CAAC,eAAe,CAAC,GAC3B;UACEX,IAAI,EAAE,YAAY;UAClBC,IAAI,EAAES;QACR,CAAC,GACD;UACEV,IAAI,EAAE,eAAe;UACrBH,KAAK,EAAEa;QACT,CAAC;QACLb,KAAK,EAAED,cAAc,CAACU,CAAC,EAAER,EAAE,CAAC;QAC5Bc,QAAQ,EAAE,KAAK;QACfC,SAAS,EAAE;MACb,CAAC,CAAC;IACJ,CAAC;EACH;EAEA,MAAMf,EAAE,CAACgB,mBAAmB,CACzB,gCAA+BjB,KAAM,8IAA6IH,SAAS,CAC1LI,EACF,CAAE,KACJ,CAAC;AACH"}
1
+ {"version":3,"file":"valueToLiteral.js","names":["getSource","isSerializable","valueToLiteral","value","ex","undefined","type","name","Array","isArray","elements","map","v","properties","Object","entries","key","match","computed","shorthand","buildCodeFrameError"],"sources":["../../src/utils/valueToLiteral.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { Expression } from '@babel/types';\n\nimport { getSource } from './getSource';\nimport { isSerializable } from './isSerializable';\n\nexport function valueToLiteral(value: unknown, ex: NodePath): Expression {\n if (value === undefined) {\n return {\n type: 'Identifier',\n name: 'undefined',\n };\n }\n\n if (isSerializable(value)) {\n if (value === null) {\n return {\n type: 'NullLiteral',\n };\n }\n\n if (typeof value === 'string') {\n return {\n type: 'StringLiteral',\n value,\n };\n }\n\n if (typeof value === 'number') {\n return {\n type: 'NumericLiteral',\n value,\n };\n }\n\n if (typeof value === 'boolean') {\n return {\n type: 'BooleanLiteral',\n value,\n };\n }\n\n if (Array.isArray(value)) {\n return {\n type: 'ArrayExpression',\n elements: value.map((v) => valueToLiteral(v, ex)),\n };\n }\n\n return {\n type: 'ObjectExpression',\n properties: Object.entries(value).map(([key, v]) => ({\n type: 'ObjectProperty',\n key: key.match(/^[a-zA-Z]\\w*$/)\n ? {\n type: 'Identifier',\n name: key,\n }\n : {\n type: 'StringLiteral',\n value: key,\n },\n value: valueToLiteral(v, ex),\n computed: false,\n shorthand: false,\n })),\n };\n }\n\n throw ex.buildCodeFrameError(\n `The expression evaluated to '${value}', which is probably a mistake. If you want it to be inserted into CSS, explicitly cast or transform the value to a string, e.g. - 'String(${getSource(\n ex\n )})'.`\n );\n}\n"],"mappings":"AAGA,SAASA,SAAS,QAAQ,aAAa;AACvC,SAASC,cAAc,QAAQ,kBAAkB;AAEjD,OAAO,SAASC,cAAcA,CAACC,KAAc,EAAEC,EAAY,EAAc;EACvE,IAAID,KAAK,KAAKE,SAAS,EAAE;IACvB,OAAO;MACLC,IAAI,EAAE,YAAY;MAClBC,IAAI,EAAE;IACR,CAAC;EACH;EAEA,IAAIN,cAAc,CAACE,KAAK,CAAC,EAAE;IACzB,IAAIA,KAAK,KAAK,IAAI,EAAE;MAClB,OAAO;QACLG,IAAI,EAAE;MACR,CAAC;IACH;IAEA,IAAI,OAAOH,KAAK,KAAK,QAAQ,EAAE;MAC7B,OAAO;QACLG,IAAI,EAAE,eAAe;QACrBH;MACF,CAAC;IACH;IAEA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,OAAO;QACLG,IAAI,EAAE,gBAAgB;QACtBH;MACF,CAAC;IACH;IAEA,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAE;MAC9B,OAAO;QACLG,IAAI,EAAE,gBAAgB;QACtBH;MACF,CAAC;IACH;IAEA,IAAIK,KAAK,CAACC,OAAO,CAACN,KAAK,CAAC,EAAE;MACxB,OAAO;QACLG,IAAI,EAAE,iBAAiB;QACvBI,QAAQ,EAAEP,KAAK,CAACQ,GAAG,CAAEC,CAAC,IAAKV,cAAc,CAACU,CAAC,EAAER,EAAE,CAAC;MAClD,CAAC;IACH;IAEA,OAAO;MACLE,IAAI,EAAE,kBAAkB;MACxBO,UAAU,EAAEC,MAAM,CAACC,OAAO,CAACZ,KAAK,CAAC,CAACQ,GAAG,CAAC,CAAC,CAACK,GAAG,EAAEJ,CAAC,CAAC,MAAM;QACnDN,IAAI,EAAE,gBAAgB;QACtBU,GAAG,EAAEA,GAAG,CAACC,KAAK,CAAC,eAAe,CAAC,GAC3B;UACEX,IAAI,EAAE,YAAY;UAClBC,IAAI,EAAES;QACR,CAAC,GACD;UACEV,IAAI,EAAE,eAAe;UACrBH,KAAK,EAAEa;QACT,CAAC;QACLb,KAAK,EAAED,cAAc,CAACU,CAAC,EAAER,EAAE,CAAC;QAC5Bc,QAAQ,EAAE,KAAK;QACfC,SAAS,EAAE;MACb,CAAC,CAAC;IACJ,CAAC;EACH;EAEA,MAAMf,EAAE,CAACgB,mBAAmB,CAC1B,gCAAgCjB,KAAK,8IAA8IH,SAAS,CAC1LI,EACF,CAAC,KACH,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"JSXElementsRemover.js","names":["types","t","getScope","mutate","getFunctionName","path","isClassMethod","isIdentifier","node","key","name","JSXElementsRemover","nullLiteral","functionScope","getFunctionParent","scopePath","isFunction","emptyBody","blockStatement","returnStatement","decl","findParent","p","isClassDeclaration","replaceWith","functionDeclaration","id","body","get","Array","isArray","Error","params"],"sources":["../../../src/utils/visitors/JSXElementsRemover.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n CallExpression,\n Function as FunctionNode,\n JSX,\n} from '@babel/types';\n\nimport { getScope } from '../getScope';\nimport { mutate } from '../scopeHelpers';\n\nfunction getFunctionName(path: NodePath<FunctionNode>): string | null {\n if (path.isClassMethod() && t.isIdentifier(path.node.key)) {\n return path.node.key.name;\n }\n\n return null;\n}\n\nexport function JSXElementsRemover(path: NodePath<JSX | CallExpression>) {\n // JSX can be safely replaced with null because it is unnecessary for styles\n const nullLiteral = t.nullLiteral();\n\n // We can do even more\n // If that JSX is a result of a function, we can replace the function body.\n const functionScope = getScope(path).getFunctionParent();\n const scopePath = functionScope?.path;\n if (scopePath?.isFunction()) {\n const emptyBody = t.blockStatement([t.returnStatement(nullLiteral)]);\n\n // Is it not just a function, but a method `render`?\n if (getFunctionName(scopePath) === 'render') {\n const decl = scopePath.findParent((p) => p.isClassDeclaration());\n\n // Replace the whole component\n if (decl?.isClassDeclaration()) {\n mutate(decl, (p) => {\n p.replaceWith(t.functionDeclaration(decl.node.id, [], emptyBody));\n });\n\n return;\n }\n }\n\n const body = scopePath.get('body');\n if (Array.isArray(body)) {\n throw new Error(\n \"A body of a function is expected to be a single element but an array was returned. It's possible if JS syntax has been changed since that code was written.\"\n );\n }\n\n const node: typeof scopePath.node = {\n ...scopePath.node,\n body: emptyBody,\n params: [],\n };\n\n mutate(scopePath, (p) => {\n p.replaceWith(node);\n });\n } else {\n mutate(path, (p) => {\n p.replaceWith(nullLiteral);\n });\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,IAAIC,CAAC,QAAQ,aAAa;AAQxC,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,MAAM,QAAQ,iBAAiB;AAExC,SAASC,eAAeA,CAACC,IAA4B,EAAiB;EACpE,IAAIA,IAAI,CAACC,aAAa,CAAC,CAAC,IAAIL,CAAC,CAACM,YAAY,CAACF,IAAI,CAACG,IAAI,CAACC,GAAG,CAAC,EAAE;IACzD,OAAOJ,IAAI,CAACG,IAAI,CAACC,GAAG,CAACC,IAAI;EAC3B;EAEA,OAAO,IAAI;AACb;AAEA,OAAO,SAASC,kBAAkBA,CAACN,IAAoC,EAAE;EACvE;EACA,MAAMO,WAAW,GAAGX,CAAC,CAACW,WAAW,CAAC,CAAC;;EAEnC;EACA;EACA,MAAMC,aAAa,GAAGX,QAAQ,CAACG,IAAI,CAAC,CAACS,iBAAiB,CAAC,CAAC;EACxD,MAAMC,SAAS,GAAGF,aAAa,EAAER,IAAI;EACrC,IAAIU,SAAS,EAAEC,UAAU,CAAC,CAAC,EAAE;IAC3B,MAAMC,SAAS,GAAGhB,CAAC,CAACiB,cAAc,CAAC,CAACjB,CAAC,CAACkB,eAAe,CAACP,WAAW,CAAC,CAAC,CAAC;;IAEpE;IACA,IAAIR,eAAe,CAACW,SAAS,CAAC,KAAK,QAAQ,EAAE;MAC3C,MAAMK,IAAI,GAAGL,SAAS,CAACM,UAAU,CAAEC,CAAC,IAAKA,CAAC,CAACC,kBAAkB,CAAC,CAAC,CAAC;;MAEhE;MACA,IAAIH,IAAI,EAAEG,kBAAkB,CAAC,CAAC,EAAE;QAC9BpB,MAAM,CAACiB,IAAI,EAAGE,CAAC,IAAK;UAClBA,CAAC,CAACE,WAAW,CAACvB,CAAC,CAACwB,mBAAmB,CAACL,IAAI,CAACZ,IAAI,CAACkB,EAAE,EAAE,EAAE,EAAET,SAAS,CAAC,CAAC;QACnE,CAAC,CAAC;QAEF;MACF;IACF;IAEA,MAAMU,IAAI,GAAGZ,SAAS,CAACa,GAAG,CAAC,MAAM,CAAC;IAClC,IAAIC,KAAK,CAACC,OAAO,CAACH,IAAI,CAAC,EAAE;MACvB,MAAM,IAAII,KAAK,CACb,6JACF,CAAC;IACH;IAEA,MAAMvB,IAA2B,GAAG;MAClC,GAAGO,SAAS,CAACP,IAAI;MACjBmB,IAAI,EAAEV,SAAS;MACfe,MAAM,EAAE;IACV,CAAC;IAED7B,MAAM,CAACY,SAAS,EAAGO,CAAC,IAAK;MACvBA,CAAC,CAACE,WAAW,CAAChB,IAAI,CAAC;IACrB,CAAC,CAAC;EACJ,CAAC,MAAM;IACLL,MAAM,CAACE,IAAI,EAAGiB,CAAC,IAAK;MAClBA,CAAC,CAACE,WAAW,CAACZ,WAAW,CAAC;IAC5B,CAAC,CAAC;EACJ;AACF"}
1
+ {"version":3,"file":"JSXElementsRemover.js","names":["types","t","getScope","mutate","getFunctionName","path","isClassMethod","isIdentifier","node","key","name","JSXElementsRemover","nullLiteral","functionScope","getFunctionParent","scopePath","isFunction","emptyBody","blockStatement","returnStatement","decl","findParent","p","isClassDeclaration","replaceWith","functionDeclaration","id","body","get","Array","isArray","Error","params"],"sources":["../../../src/utils/visitors/JSXElementsRemover.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\nimport type {\n CallExpression,\n Function as FunctionNode,\n JSX,\n} from '@babel/types';\n\nimport { getScope } from '../getScope';\nimport { mutate } from '../scopeHelpers';\n\nfunction getFunctionName(path: NodePath<FunctionNode>): string | null {\n if (path.isClassMethod() && t.isIdentifier(path.node.key)) {\n return path.node.key.name;\n }\n\n return null;\n}\n\nexport function JSXElementsRemover(path: NodePath<JSX | CallExpression>) {\n // JSX can be safely replaced with null because it is unnecessary for styles\n const nullLiteral = t.nullLiteral();\n\n // We can do even more\n // If that JSX is a result of a function, we can replace the function body.\n const functionScope = getScope(path).getFunctionParent();\n const scopePath = functionScope?.path;\n if (scopePath?.isFunction()) {\n const emptyBody = t.blockStatement([t.returnStatement(nullLiteral)]);\n\n // Is it not just a function, but a method `render`?\n if (getFunctionName(scopePath) === 'render') {\n const decl = scopePath.findParent((p) => p.isClassDeclaration());\n\n // Replace the whole component\n if (decl?.isClassDeclaration()) {\n mutate(decl, (p) => {\n p.replaceWith(t.functionDeclaration(decl.node.id, [], emptyBody));\n });\n\n return;\n }\n }\n\n const body = scopePath.get('body');\n if (Array.isArray(body)) {\n throw new Error(\n \"A body of a function is expected to be a single element but an array was returned. It's possible if JS syntax has been changed since that code was written.\"\n );\n }\n\n const node: typeof scopePath.node = {\n ...scopePath.node,\n body: emptyBody,\n params: [],\n };\n\n mutate(scopePath, (p) => {\n p.replaceWith(node);\n });\n } else {\n mutate(path, (p) => {\n p.replaceWith(nullLiteral);\n });\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,IAAIC,CAAC,QAAQ,aAAa;AAQxC,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,MAAM,QAAQ,iBAAiB;AAExC,SAASC,eAAeA,CAACC,IAA4B,EAAiB;EACpE,IAAIA,IAAI,CAACC,aAAa,CAAC,CAAC,IAAIL,CAAC,CAACM,YAAY,CAACF,IAAI,CAACG,IAAI,CAACC,GAAG,CAAC,EAAE;IACzD,OAAOJ,IAAI,CAACG,IAAI,CAACC,GAAG,CAACC,IAAI;EAC3B;EAEA,OAAO,IAAI;AACb;AAEA,OAAO,SAASC,kBAAkBA,CAACN,IAAoC,EAAE;EACvE;EACA,MAAMO,WAAW,GAAGX,CAAC,CAACW,WAAW,CAAC,CAAC;;EAEnC;EACA;EACA,MAAMC,aAAa,GAAGX,QAAQ,CAACG,IAAI,CAAC,CAACS,iBAAiB,CAAC,CAAC;EACxD,MAAMC,SAAS,GAAGF,aAAa,EAAER,IAAI;EACrC,IAAIU,SAAS,EAAEC,UAAU,CAAC,CAAC,EAAE;IAC3B,MAAMC,SAAS,GAAGhB,CAAC,CAACiB,cAAc,CAAC,CAACjB,CAAC,CAACkB,eAAe,CAACP,WAAW,CAAC,CAAC,CAAC;;IAEpE;IACA,IAAIR,eAAe,CAACW,SAAS,CAAC,KAAK,QAAQ,EAAE;MAC3C,MAAMK,IAAI,GAAGL,SAAS,CAACM,UAAU,CAAEC,CAAC,IAAKA,CAAC,CAACC,kBAAkB,CAAC,CAAC,CAAC;;MAEhE;MACA,IAAIH,IAAI,EAAEG,kBAAkB,CAAC,CAAC,EAAE;QAC9BpB,MAAM,CAACiB,IAAI,EAAGE,CAAC,IAAK;UAClBA,CAAC,CAACE,WAAW,CAACvB,CAAC,CAACwB,mBAAmB,CAACL,IAAI,CAACZ,IAAI,CAACkB,EAAE,EAAE,EAAE,EAAET,SAAS,CAAC,CAAC;QACnE,CAAC,CAAC;QAEF;MACF;IACF;IAEA,MAAMU,IAAI,GAAGZ,SAAS,CAACa,GAAG,CAAC,MAAM,CAAC;IAClC,IAAIC,KAAK,CAACC,OAAO,CAACH,IAAI,CAAC,EAAE;MACvB,MAAM,IAAII,KAAK,CACb,6JACF,CAAC;IACH;IAEA,MAAMvB,IAA2B,GAAG;MAClC,GAAGO,SAAS,CAACP,IAAI;MACjBmB,IAAI,EAAEV,SAAS;MACfe,MAAM,EAAE;IACV,CAAC;IAED7B,MAAM,CAACY,SAAS,EAAGO,CAAC,IAAK;MACvBA,CAAC,CAACE,WAAW,CAAChB,IAAI,CAAC;IACrB,CAAC,CAAC;EACJ,CAAC,MAAM;IACLL,MAAM,CAACE,IAAI,EAAGiB,CAAC,IAAK;MAClBA,CAAC,CAACE,WAAW,CAACZ,WAAW,CAAC;IAC5B,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
@@ -2,6 +2,46 @@ import * as vm from 'vm';
2
2
  import { isFeatureEnabled } from '@wyw-in-js/shared';
3
3
  import * as process from './process';
4
4
  const NOOP = () => {};
5
+ const IMPORT_META_ENV = '__wyw_import_meta_env';
6
+ let importMetaEnvWarned = false;
7
+ function createImportMetaEnvProxy() {
8
+ const target = Object.create(null);
9
+ const warnOnce = () => {
10
+ if (importMetaEnvWarned) return;
11
+ importMetaEnvWarned = true;
12
+ // eslint-disable-next-line no-console
13
+ console.warn([`[wyw-in-js] import.meta.env was accessed during build-time evaluation, but no env values were provided.`, ``, `If you're using Vite, make sure @wyw-in-js/vite plugin is enabled (it injects Vite env for evaluation).`, `Otherwise provide "__wyw_import_meta_env" via pluginOptions.overrideContext.`].join('\n'));
14
+ };
15
+ return new Proxy(target, {
16
+ get(obj, key) {
17
+ if (typeof key === 'symbol') {
18
+ return Reflect.get(obj, key);
19
+ }
20
+ warnOnce();
21
+ return obj[key];
22
+ },
23
+ has(obj, key) {
24
+ if (typeof key === 'symbol') {
25
+ return Reflect.has(obj, key);
26
+ }
27
+ warnOnce();
28
+ return Reflect.has(obj, key);
29
+ },
30
+ getOwnPropertyDescriptor(obj, key) {
31
+ return Reflect.getOwnPropertyDescriptor(obj, key);
32
+ },
33
+ ownKeys(obj) {
34
+ return Reflect.ownKeys(obj);
35
+ },
36
+ set(obj, key, value) {
37
+ if (typeof key === 'symbol') {
38
+ return Reflect.set(obj, key, value);
39
+ }
40
+ warnOnce();
41
+ return Reflect.set(obj, key, value);
42
+ }
43
+ });
44
+ }
5
45
  function createWindow() {
6
46
  const {
7
47
  Window,
@@ -70,8 +110,12 @@ export function createVmContext(filename, features, additionalContext, overrideC
70
110
  teardown,
71
111
  window
72
112
  } = isHappyDOMEnabled ? createHappyDOMWindow() : createNothing();
113
+ const envContext = {
114
+ [IMPORT_META_ENV]: createImportMetaEnvProxy()
115
+ };
73
116
  const baseContext = createBaseContext(window, overrideContext({
74
117
  __filename: filename,
118
+ ...envContext,
75
119
  ...additionalContext
76
120
  }, filename));
77
121
  const context = vm.createContext(baseContext);
@@ -1 +1 @@
1
- {"version":3,"file":"createVmContext.js","names":["vm","isFeatureEnabled","process","NOOP","createWindow","Window","GlobalWindow","require","HappyWindow","win","Buffer","Uint8Array","setReferencePropertyIfNotPresent","context","key","createBaseContext","additionalContext","baseContext","document","clearImmediate","clearInterval","clearTimeout","setImmediate","requestAnimationFrame","setInterval","setTimeout","createHappyDOMWindow","teardown","happyDOM","abort","window","createNothing","undefined","createVmContext","filename","features","overrideContext","i","isHappyDOMEnabled","__filename","createContext"],"sources":["../../src/vm/createVmContext.ts"],"sourcesContent":["import * as vm from 'vm';\n\nimport type { Window } from 'happy-dom';\n\nimport type { FeatureFlags, StrictOptions } from '@wyw-in-js/shared';\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport * as process from './process';\n\nconst NOOP = () => {};\n\nfunction createWindow(): Window {\n const { Window, GlobalWindow } = require('happy-dom');\n const HappyWindow = GlobalWindow || Window;\n const win = new HappyWindow();\n\n // TODO: browser doesn't expose Buffer, but a lot of dependencies use it\n win.Buffer = Buffer;\n win.Uint8Array = Uint8Array;\n\n return win;\n}\n\n/**\n * `happy-dom` already has required references, so we don't need to set them.\n */\nfunction setReferencePropertyIfNotPresent(\n context: vm.Context,\n key: string\n): void {\n if (context[key] === context) {\n return;\n }\n\n context[key] = context;\n}\n\nfunction createBaseContext(\n win: Window | undefined,\n additionalContext: Partial<vm.Context>\n): Partial<vm.Context> {\n const baseContext: vm.Context = win ?? {};\n\n setReferencePropertyIfNotPresent(baseContext, 'window');\n setReferencePropertyIfNotPresent(baseContext, 'self');\n setReferencePropertyIfNotPresent(baseContext, 'top');\n setReferencePropertyIfNotPresent(baseContext, 'parent');\n setReferencePropertyIfNotPresent(baseContext, 'global');\n setReferencePropertyIfNotPresent(baseContext, 'process');\n\n baseContext.document = win?.document;\n baseContext.process = process;\n\n baseContext.clearImmediate = NOOP;\n baseContext.clearInterval = NOOP;\n baseContext.clearTimeout = NOOP;\n baseContext.setImmediate = NOOP;\n baseContext.requestAnimationFrame = NOOP;\n baseContext.setInterval = NOOP;\n baseContext.setTimeout = NOOP;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in additionalContext) {\n baseContext[key] = additionalContext[key];\n }\n\n return baseContext;\n}\n\nfunction createHappyDOMWindow() {\n const win = createWindow();\n\n return {\n teardown: () => {\n win.happyDOM.abort();\n },\n window: win,\n };\n}\n\nfunction createNothing() {\n return {\n teardown: () => {},\n window: undefined,\n };\n}\n\nexport function createVmContext(\n filename: string,\n features: FeatureFlags<'happyDOM'>,\n additionalContext: Partial<vm.Context>,\n overrideContext: StrictOptions['overrideContext'] = (i) => i\n) {\n const isHappyDOMEnabled = isFeatureEnabled(features, 'happyDOM', filename);\n\n const { teardown, window } = isHappyDOMEnabled\n ? createHappyDOMWindow()\n : createNothing();\n const baseContext = createBaseContext(\n window,\n overrideContext(\n {\n __filename: filename,\n ...additionalContext,\n },\n filename\n )\n );\n\n const context = vm.createContext(baseContext);\n\n return {\n context,\n teardown,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"createVmContext.js","names":["vm","isFeatureEnabled","process","NOOP","IMPORT_META_ENV","importMetaEnvWarned","createImportMetaEnvProxy","target","Object","create","warnOnce","console","warn","join","Proxy","get","obj","key","Reflect","has","getOwnPropertyDescriptor","ownKeys","set","value","createWindow","Window","GlobalWindow","require","HappyWindow","win","Buffer","Uint8Array","setReferencePropertyIfNotPresent","context","createBaseContext","additionalContext","baseContext","document","clearImmediate","clearInterval","clearTimeout","setImmediate","requestAnimationFrame","setInterval","setTimeout","createHappyDOMWindow","teardown","happyDOM","abort","window","createNothing","undefined","createVmContext","filename","features","overrideContext","i","isHappyDOMEnabled","envContext","__filename","createContext"],"sources":["../../src/vm/createVmContext.ts"],"sourcesContent":["import * as vm from 'vm';\n\nimport type { Window } from 'happy-dom';\n\nimport type { FeatureFlags, StrictOptions } from '@wyw-in-js/shared';\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\n\nimport * as process from './process';\n\nconst NOOP = () => {};\nconst IMPORT_META_ENV = '__wyw_import_meta_env';\n\nlet importMetaEnvWarned = false;\n\nfunction createImportMetaEnvProxy(): Record<string, unknown> {\n const target = Object.create(null) as Record<string, unknown>;\n\n const warnOnce = () => {\n if (importMetaEnvWarned) return;\n importMetaEnvWarned = true;\n // eslint-disable-next-line no-console\n console.warn(\n [\n `[wyw-in-js] import.meta.env was accessed during build-time evaluation, but no env values were provided.`,\n ``,\n `If you're using Vite, make sure @wyw-in-js/vite plugin is enabled (it injects Vite env for evaluation).`,\n `Otherwise provide \"__wyw_import_meta_env\" via pluginOptions.overrideContext.`,\n ].join('\\n')\n );\n };\n\n return new Proxy(target, {\n get(obj, key) {\n if (typeof key === 'symbol') {\n return Reflect.get(obj, key);\n }\n\n warnOnce();\n return obj[key];\n },\n has(obj, key) {\n if (typeof key === 'symbol') {\n return Reflect.has(obj, key);\n }\n\n warnOnce();\n return Reflect.has(obj, key);\n },\n getOwnPropertyDescriptor(obj, key) {\n return Reflect.getOwnPropertyDescriptor(obj, key);\n },\n ownKeys(obj) {\n return Reflect.ownKeys(obj);\n },\n set(obj, key, value) {\n if (typeof key === 'symbol') {\n return Reflect.set(obj, key, value);\n }\n\n warnOnce();\n return Reflect.set(obj, key, value);\n },\n });\n}\n\nfunction createWindow(): Window {\n const { Window, GlobalWindow } = require('happy-dom');\n const HappyWindow = GlobalWindow || Window;\n const win = new HappyWindow();\n\n // TODO: browser doesn't expose Buffer, but a lot of dependencies use it\n win.Buffer = Buffer;\n win.Uint8Array = Uint8Array;\n\n return win;\n}\n\n/**\n * `happy-dom` already has required references, so we don't need to set them.\n */\nfunction setReferencePropertyIfNotPresent(\n context: vm.Context,\n key: string\n): void {\n if (context[key] === context) {\n return;\n }\n\n context[key] = context;\n}\n\nfunction createBaseContext(\n win: Window | undefined,\n additionalContext: Partial<vm.Context>\n): Partial<vm.Context> {\n const baseContext: vm.Context = win ?? {};\n\n setReferencePropertyIfNotPresent(baseContext, 'window');\n setReferencePropertyIfNotPresent(baseContext, 'self');\n setReferencePropertyIfNotPresent(baseContext, 'top');\n setReferencePropertyIfNotPresent(baseContext, 'parent');\n setReferencePropertyIfNotPresent(baseContext, 'global');\n setReferencePropertyIfNotPresent(baseContext, 'process');\n\n baseContext.document = win?.document;\n baseContext.process = process;\n\n baseContext.clearImmediate = NOOP;\n baseContext.clearInterval = NOOP;\n baseContext.clearTimeout = NOOP;\n baseContext.setImmediate = NOOP;\n baseContext.requestAnimationFrame = NOOP;\n baseContext.setInterval = NOOP;\n baseContext.setTimeout = NOOP;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in additionalContext) {\n baseContext[key] = additionalContext[key];\n }\n\n return baseContext;\n}\n\nfunction createHappyDOMWindow() {\n const win = createWindow();\n\n return {\n teardown: () => {\n win.happyDOM.abort();\n },\n window: win,\n };\n}\n\nfunction createNothing() {\n return {\n teardown: () => {},\n window: undefined,\n };\n}\n\nexport function createVmContext(\n filename: string,\n features: FeatureFlags<'happyDOM'>,\n additionalContext: Partial<vm.Context>,\n overrideContext: StrictOptions['overrideContext'] = (i) => i\n) {\n const isHappyDOMEnabled = isFeatureEnabled(features, 'happyDOM', filename);\n\n const { teardown, window } = isHappyDOMEnabled\n ? createHappyDOMWindow()\n : createNothing();\n const envContext: Partial<vm.Context> = {\n [IMPORT_META_ENV]: createImportMetaEnvProxy(),\n };\n const baseContext = createBaseContext(\n window,\n overrideContext(\n {\n __filename: filename,\n ...envContext,\n ...additionalContext,\n },\n filename\n )\n );\n\n const context = vm.createContext(baseContext);\n\n return {\n context,\n teardown,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","names":["nextTick","fn","setTimeout","platform","arch","execPath","title","pid","browser","argv","binding","Error","cwd","noop","exit","kill","chdir","umask","dlopen","uptime","memoryUsage","uvCounters","features","env","process"],"sources":["../../src/vm/process.ts"],"sourcesContent":["/**\n * It contains API for mocked process variable available in node environment used to evaluate scripts with node's `vm` in ./module.ts\n */\nexport const nextTick = (fn: (...args: unknown[]) => void) => setTimeout(fn, 0);\n\nexport const platform = 'browser';\nexport const arch = 'browser';\nexport const execPath = 'browser';\nexport const title = 'browser';\nexport const pid = 1;\nexport const browser = true;\nexport const argv = [];\n\nexport const binding = function binding() {\n throw new Error('No such module. (Possibly not yet loaded)');\n};\n\nexport const cwd = () => '/';\n\nconst noop = () => {};\nexport const exit = noop;\nexport const kill = noop;\nexport const chdir = noop;\nexport const umask = noop;\nexport const dlopen = noop;\nexport const uptime = noop;\nexport const memoryUsage = noop;\nexport const uvCounters = noop;\nexport const features = {};\n\nexport const { env } = process;\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,MAAMA,QAAQ,GAAIC,EAAgC,IAAKC,UAAU,CAACD,EAAE,EAAE,CAAC,CAAC;AAE/E,OAAO,MAAME,QAAQ,GAAG,SAAS;AACjC,OAAO,MAAMC,IAAI,GAAG,SAAS;AAC7B,OAAO,MAAMC,QAAQ,GAAG,SAAS;AACjC,OAAO,MAAMC,KAAK,GAAG,SAAS;AAC9B,OAAO,MAAMC,GAAG,GAAG,CAAC;AACpB,OAAO,MAAMC,OAAO,GAAG,IAAI;AAC3B,OAAO,MAAMC,IAAI,GAAG,EAAE;AAEtB,OAAO,MAAMC,OAAO,GAAG,SAASA,OAAOA,CAAA,EAAG;EACxC,MAAM,IAAIC,KAAK,CAAC,2CAA2C,CAAC;AAC9D,CAAC;AAED,OAAO,MAAMC,GAAG,GAAGA,CAAA,KAAM,GAAG;AAE5B,MAAMC,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;AACrB,OAAO,MAAMC,IAAI,GAAGD,IAAI;AACxB,OAAO,MAAME,IAAI,GAAGF,IAAI;AACxB,OAAO,MAAMG,KAAK,GAAGH,IAAI;AACzB,OAAO,MAAMI,KAAK,GAAGJ,IAAI;AACzB,OAAO,MAAMK,MAAM,GAAGL,IAAI;AAC1B,OAAO,MAAMM,MAAM,GAAGN,IAAI;AAC1B,OAAO,MAAMO,WAAW,GAAGP,IAAI;AAC/B,OAAO,MAAMQ,UAAU,GAAGR,IAAI;AAC9B,OAAO,MAAMS,QAAQ,GAAG,CAAC,CAAC;AAE1B,OAAO,MAAM;EAAEC;AAAI,CAAC,GAAGC,OAAO"}
1
+ {"version":3,"file":"process.js","names":["nextTick","fn","setTimeout","platform","arch","execPath","title","pid","browser","argv","binding","Error","cwd","noop","exit","kill","chdir","umask","dlopen","uptime","memoryUsage","uvCounters","features","env","process"],"sources":["../../src/vm/process.ts"],"sourcesContent":["/**\n * It contains API for mocked process variable available in node environment used to evaluate scripts with node's `vm` in ./module.ts\n */\nexport const nextTick = (fn: (...args: unknown[]) => void) => setTimeout(fn, 0);\n\nexport const platform = 'browser';\nexport const arch = 'browser';\nexport const execPath = 'browser';\nexport const title = 'browser';\nexport const pid = 1;\nexport const browser = true;\nexport const argv = [];\n\nexport const binding = function binding() {\n throw new Error('No such module. (Possibly not yet loaded)');\n};\n\nexport const cwd = () => '/';\n\nconst noop = () => {};\nexport const exit = noop;\nexport const kill = noop;\nexport const chdir = noop;\nexport const umask = noop;\nexport const dlopen = noop;\nexport const uptime = noop;\nexport const memoryUsage = noop;\nexport const uvCounters = noop;\nexport const features = {};\n\nexport const { env } = process;\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,MAAMA,QAAQ,GAAIC,EAAgC,IAAKC,UAAU,CAACD,EAAE,EAAE,CAAC,CAAC;AAE/E,OAAO,MAAME,QAAQ,GAAG,SAAS;AACjC,OAAO,MAAMC,IAAI,GAAG,SAAS;AAC7B,OAAO,MAAMC,QAAQ,GAAG,SAAS;AACjC,OAAO,MAAMC,KAAK,GAAG,SAAS;AAC9B,OAAO,MAAMC,GAAG,GAAG,CAAC;AACpB,OAAO,MAAMC,OAAO,GAAG,IAAI;AAC3B,OAAO,MAAMC,IAAI,GAAG,EAAE;AAEtB,OAAO,MAAMC,OAAO,GAAG,SAASA,OAAOA,CAAA,EAAG;EACxC,MAAM,IAAIC,KAAK,CAAC,2CAA2C,CAAC;AAC9D,CAAC;AAED,OAAO,MAAMC,GAAG,GAAGA,CAAA,KAAM,GAAG;AAE5B,MAAMC,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;AACrB,OAAO,MAAMC,IAAI,GAAGD,IAAI;AACxB,OAAO,MAAME,IAAI,GAAGF,IAAI;AACxB,OAAO,MAAMG,KAAK,GAAGH,IAAI;AACzB,OAAO,MAAMI,KAAK,GAAGJ,IAAI;AACzB,OAAO,MAAMK,MAAM,GAAGL,IAAI;AAC1B,OAAO,MAAMM,MAAM,GAAGN,IAAI;AAC1B,OAAO,MAAMO,WAAW,GAAGP,IAAI;AAC/B,OAAO,MAAMQ,UAAU,GAAGR,IAAI;AAC9B,OAAO,MAAMS,QAAQ,GAAG,CAAC,CAAC;AAE1B,OAAO,MAAM;EAAEC;AAAI,CAAC,GAAGC,OAAO","ignoreList":[]}
package/lib/babel.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"babel.js","names":[],"sources":["../src/babel.ts"],"sourcesContent":["import type core from '@babel/core';\n\nexport type Core = typeof core;\n"],"mappings":""}
1
+ {"version":3,"file":"babel.js","names":[],"sources":["../src/babel.ts"],"sourcesContent":["import type core from '@babel/core';\n\nexport type Core = typeof core;\n"],"mappings":"","ignoreList":[]}