@wyw-in-js/transform 0.1.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 (480) hide show
  1. package/LICENSE +21 -0
  2. package/esm/babel.js +2 -0
  3. package/esm/babel.js.map +1 -0
  4. package/esm/cache.js +80 -0
  5. package/esm/cache.js.map +1 -0
  6. package/esm/debug/fileReporter.js +144 -0
  7. package/esm/debug/fileReporter.js.map +1 -0
  8. package/esm/evaluators/index.js +14 -0
  9. package/esm/evaluators/index.js.map +1 -0
  10. package/esm/index.js +24 -0
  11. package/esm/index.js.map +1 -0
  12. package/esm/module.js +316 -0
  13. package/esm/module.js.map +1 -0
  14. package/esm/options/babel-merge.d.js +2 -0
  15. package/esm/options/babel-merge.d.js.map +1 -0
  16. package/esm/options/buildOptions.js +28 -0
  17. package/esm/options/buildOptions.js.map +1 -0
  18. package/esm/options/loadBabelOptions.js +24 -0
  19. package/esm/options/loadBabelOptions.js.map +1 -0
  20. package/esm/plugins/babel-transform.js +53 -0
  21. package/esm/plugins/babel-transform.js.map +1 -0
  22. package/esm/plugins/collector.js +66 -0
  23. package/esm/plugins/collector.js.map +1 -0
  24. package/esm/plugins/dynamic-import.js +28 -0
  25. package/esm/plugins/dynamic-import.js.map +1 -0
  26. package/esm/plugins/preeval.js +75 -0
  27. package/esm/plugins/preeval.js.map +1 -0
  28. package/esm/plugins/shaker.js +296 -0
  29. package/esm/plugins/shaker.js.map +1 -0
  30. package/esm/shaker.js +50 -0
  31. package/esm/shaker.js.map +1 -0
  32. package/esm/transform/BaseEntrypoint.js +164 -0
  33. package/esm/transform/BaseEntrypoint.js.map +1 -0
  34. package/esm/transform/Entrypoint.helpers.js +168 -0
  35. package/esm/transform/Entrypoint.helpers.js.map +1 -0
  36. package/esm/transform/Entrypoint.js +212 -0
  37. package/esm/transform/Entrypoint.js.map +1 -0
  38. package/esm/transform/Entrypoint.types.js +2 -0
  39. package/esm/transform/Entrypoint.types.js.map +1 -0
  40. package/esm/transform/EvaluatedEntrypoint.js +6 -0
  41. package/esm/transform/EvaluatedEntrypoint.js.map +1 -0
  42. package/esm/transform/actions/AbortError.js +8 -0
  43. package/esm/transform/actions/AbortError.js.map +1 -0
  44. package/esm/transform/actions/BaseAction.js +134 -0
  45. package/esm/transform/actions/BaseAction.js.map +1 -0
  46. package/esm/transform/actions/UnprocessedEntrypointError.js +8 -0
  47. package/esm/transform/actions/UnprocessedEntrypointError.js.map +1 -0
  48. package/esm/transform/actions/actionRunner.js +73 -0
  49. package/esm/transform/actions/actionRunner.js.map +1 -0
  50. package/esm/transform/actions/types.js +2 -0
  51. package/esm/transform/actions/types.js.map +1 -0
  52. package/esm/transform/generators/baseProcessingHandlers.js +22 -0
  53. package/esm/transform/generators/baseProcessingHandlers.js.map +1 -0
  54. package/esm/transform/generators/collect.js +58 -0
  55. package/esm/transform/generators/collect.js.map +1 -0
  56. package/esm/transform/generators/evalFile.js +50 -0
  57. package/esm/transform/generators/evalFile.js.map +1 -0
  58. package/esm/transform/generators/explodeReexports.js +63 -0
  59. package/esm/transform/generators/explodeReexports.js.map +1 -0
  60. package/esm/transform/generators/extract.js +120 -0
  61. package/esm/transform/generators/extract.js.map +1 -0
  62. package/esm/transform/generators/getExports.js +73 -0
  63. package/esm/transform/generators/getExports.js.map +1 -0
  64. package/esm/transform/generators/index.js +13 -0
  65. package/esm/transform/generators/index.js.map +1 -0
  66. package/esm/transform/generators/processEntrypoint.js +43 -0
  67. package/esm/transform/generators/processEntrypoint.js.map +1 -0
  68. package/esm/transform/generators/processImports.js +23 -0
  69. package/esm/transform/generators/processImports.js.map +1 -0
  70. package/esm/transform/generators/resolveImports.js +148 -0
  71. package/esm/transform/generators/resolveImports.js.map +1 -0
  72. package/esm/transform/generators/transform.js +117 -0
  73. package/esm/transform/generators/transform.js.map +1 -0
  74. package/esm/transform/generators/workflow.js +82 -0
  75. package/esm/transform/generators/workflow.js.map +1 -0
  76. package/esm/transform/helpers/loadLinariaOptions.js +66 -0
  77. package/esm/transform/helpers/loadLinariaOptions.js.map +1 -0
  78. package/esm/transform/helpers/withDefaultServices.js +21 -0
  79. package/esm/transform/helpers/withDefaultServices.js.map +1 -0
  80. package/esm/transform/rootLog.js +3 -0
  81. package/esm/transform/rootLog.js.map +1 -0
  82. package/esm/transform/types.js +2 -0
  83. package/esm/transform/types.js.map +1 -0
  84. package/esm/transform.js +121 -0
  85. package/esm/transform.js.map +1 -0
  86. package/esm/types.js +2 -0
  87. package/esm/types.js.map +1 -0
  88. package/esm/utils/EventEmitter.js +52 -0
  89. package/esm/utils/EventEmitter.js.map +1 -0
  90. package/esm/utils/ShakerMetadata.js +2 -0
  91. package/esm/utils/ShakerMetadata.js.map +1 -0
  92. package/esm/utils/TransformMetadata.js +11 -0
  93. package/esm/utils/TransformMetadata.js.map +1 -0
  94. package/esm/utils/addIdentifierToLinariaPreval.js +68 -0
  95. package/esm/utils/addIdentifierToLinariaPreval.js.map +1 -0
  96. package/esm/utils/collectExportsAndImports.js +974 -0
  97. package/esm/utils/collectExportsAndImports.js.map +1 -0
  98. package/esm/utils/collectTemplateDependencies.js +219 -0
  99. package/esm/utils/collectTemplateDependencies.js.map +1 -0
  100. package/esm/utils/createId.js +6 -0
  101. package/esm/utils/createId.js.map +1 -0
  102. package/esm/utils/dispose-polyfill.js +6 -0
  103. package/esm/utils/dispose-polyfill.js.map +1 -0
  104. package/esm/utils/findIdentifiers.js +62 -0
  105. package/esm/utils/findIdentifiers.js.map +1 -0
  106. package/esm/utils/findPackageJSON.js +22 -0
  107. package/esm/utils/findPackageJSON.js.map +1 -0
  108. package/esm/utils/getFileIdx.js +10 -0
  109. package/esm/utils/getFileIdx.js.map +1 -0
  110. package/esm/utils/getPluginKey.js +13 -0
  111. package/esm/utils/getPluginKey.js.map +1 -0
  112. package/esm/utils/getScope.js +6 -0
  113. package/esm/utils/getScope.js.map +1 -0
  114. package/esm/utils/getSource.js +15 -0
  115. package/esm/utils/getSource.js.map +1 -0
  116. package/esm/utils/getTagProcessor.js +304 -0
  117. package/esm/utils/getTagProcessor.js.map +1 -0
  118. package/esm/utils/getVisitorKeys.js +5 -0
  119. package/esm/utils/getVisitorKeys.js.map +1 -0
  120. package/esm/utils/hasLinariaPreval.js +7 -0
  121. package/esm/utils/hasLinariaPreval.js.map +1 -0
  122. package/esm/utils/isExports.js +22 -0
  123. package/esm/utils/isExports.js.map +1 -0
  124. package/esm/utils/isGlobal.js +6 -0
  125. package/esm/utils/isGlobal.js.map +1 -0
  126. package/esm/utils/isNode.js +2 -0
  127. package/esm/utils/isNode.js.map +1 -0
  128. package/esm/utils/isNodePath.js +4 -0
  129. package/esm/utils/isNodePath.js.map +1 -0
  130. package/esm/utils/isNotNull.js +4 -0
  131. package/esm/utils/isNotNull.js.map +1 -0
  132. package/esm/utils/isRemoved.js +46 -0
  133. package/esm/utils/isRemoved.js.map +1 -0
  134. package/esm/utils/isRequire.js +13 -0
  135. package/esm/utils/isRequire.js.map +1 -0
  136. package/esm/utils/isSerializable.js +13 -0
  137. package/esm/utils/isSerializable.js.map +1 -0
  138. package/esm/utils/isTypedNode.js +6 -0
  139. package/esm/utils/isTypedNode.js.map +1 -0
  140. package/esm/utils/isUnnecessaryReactCall.js +72 -0
  141. package/esm/utils/isUnnecessaryReactCall.js.map +1 -0
  142. package/esm/utils/peek.js +2 -0
  143. package/esm/utils/peek.js.map +1 -0
  144. package/esm/utils/processTemplateExpression.js +11 -0
  145. package/esm/utils/processTemplateExpression.js.map +1 -0
  146. package/esm/utils/removeDangerousCode.js +127 -0
  147. package/esm/utils/removeDangerousCode.js.map +1 -0
  148. package/esm/utils/scopeHelpers.js +514 -0
  149. package/esm/utils/scopeHelpers.js.map +1 -0
  150. package/esm/utils/traversalCache.js +28 -0
  151. package/esm/utils/traversalCache.js.map +1 -0
  152. package/esm/utils/unwrapSequence.js +14 -0
  153. package/esm/utils/unwrapSequence.js.map +1 -0
  154. package/esm/utils/valueToLiteral.js +59 -0
  155. package/esm/utils/valueToLiteral.js.map +1 -0
  156. package/esm/utils/visitors/JSXElementsRemover.js +51 -0
  157. package/esm/utils/visitors/JSXElementsRemover.js.map +1 -0
  158. package/esm/vm/createVmContext.js +72 -0
  159. package/esm/vm/createVmContext.js.map +1 -0
  160. package/esm/vm/process.js +29 -0
  161. package/esm/vm/process.js.map +1 -0
  162. package/lib/babel.js +2 -0
  163. package/lib/babel.js.map +1 -0
  164. package/lib/cache.js +87 -0
  165. package/lib/cache.js.map +1 -0
  166. package/lib/debug/fileReporter.js +153 -0
  167. package/lib/debug/fileReporter.js.map +1 -0
  168. package/lib/evaluators/index.js +20 -0
  169. package/lib/evaluators/index.js.map +1 -0
  170. package/lib/index.js +225 -0
  171. package/lib/index.js.map +1 -0
  172. package/lib/module.js +327 -0
  173. package/lib/module.js.map +1 -0
  174. package/lib/options/babel-merge.d.js +2 -0
  175. package/lib/options/babel-merge.d.js.map +1 -0
  176. package/lib/options/buildOptions.js +35 -0
  177. package/lib/options/buildOptions.js.map +1 -0
  178. package/lib/options/loadBabelOptions.js +31 -0
  179. package/lib/options/loadBabelOptions.js.map +1 -0
  180. package/lib/plugins/babel-transform.js +60 -0
  181. package/lib/plugins/babel-transform.js.map +1 -0
  182. package/lib/plugins/collector.js +76 -0
  183. package/lib/plugins/collector.js.map +1 -0
  184. package/lib/plugins/dynamic-import.js +34 -0
  185. package/lib/plugins/dynamic-import.js.map +1 -0
  186. package/lib/plugins/preeval.js +82 -0
  187. package/lib/plugins/preeval.js.map +1 -0
  188. package/lib/plugins/shaker.js +303 -0
  189. package/lib/plugins/shaker.js.map +1 -0
  190. package/lib/shaker.js +58 -0
  191. package/lib/shaker.js.map +1 -0
  192. package/lib/transform/BaseEntrypoint.js +175 -0
  193. package/lib/transform/BaseEntrypoint.js.map +1 -0
  194. package/lib/transform/Entrypoint.helpers.js +182 -0
  195. package/lib/transform/Entrypoint.helpers.js.map +1 -0
  196. package/lib/transform/Entrypoint.js +226 -0
  197. package/lib/transform/Entrypoint.js.map +1 -0
  198. package/lib/transform/Entrypoint.types.js +2 -0
  199. package/lib/transform/Entrypoint.types.js.map +1 -0
  200. package/lib/transform/EvaluatedEntrypoint.js +13 -0
  201. package/lib/transform/EvaluatedEntrypoint.js.map +1 -0
  202. package/lib/transform/actions/AbortError.js +16 -0
  203. package/lib/transform/actions/AbortError.js.map +1 -0
  204. package/lib/transform/actions/BaseAction.js +144 -0
  205. package/lib/transform/actions/BaseAction.js.map +1 -0
  206. package/lib/transform/actions/UnprocessedEntrypointError.js +16 -0
  207. package/lib/transform/actions/UnprocessedEntrypointError.js.map +1 -0
  208. package/lib/transform/actions/actionRunner.js +82 -0
  209. package/lib/transform/actions/actionRunner.js.map +1 -0
  210. package/lib/transform/actions/types.js +2 -0
  211. package/lib/transform/actions/types.js.map +1 -0
  212. package/lib/transform/generators/baseProcessingHandlers.js +27 -0
  213. package/lib/transform/generators/baseProcessingHandlers.js.map +1 -0
  214. package/lib/transform/generators/collect.js +66 -0
  215. package/lib/transform/generators/collect.js.map +1 -0
  216. package/lib/transform/generators/evalFile.js +57 -0
  217. package/lib/transform/generators/evalFile.js.map +1 -0
  218. package/lib/transform/generators/explodeReexports.js +70 -0
  219. package/lib/transform/generators/explodeReexports.js.map +1 -0
  220. package/lib/transform/generators/extract.js +128 -0
  221. package/lib/transform/generators/extract.js.map +1 -0
  222. package/lib/transform/generators/getExports.js +80 -0
  223. package/lib/transform/generators/getExports.js.map +1 -0
  224. package/lib/transform/generators/index.js +19 -0
  225. package/lib/transform/generators/index.js.map +1 -0
  226. package/lib/transform/generators/processEntrypoint.js +49 -0
  227. package/lib/transform/generators/processEntrypoint.js.map +1 -0
  228. package/lib/transform/generators/processImports.js +29 -0
  229. package/lib/transform/generators/processImports.js.map +1 -0
  230. package/lib/transform/generators/resolveImports.js +158 -0
  231. package/lib/transform/generators/resolveImports.js.map +1 -0
  232. package/lib/transform/generators/transform.js +130 -0
  233. package/lib/transform/generators/transform.js.map +1 -0
  234. package/lib/transform/generators/workflow.js +90 -0
  235. package/lib/transform/generators/workflow.js.map +1 -0
  236. package/lib/transform/helpers/loadLinariaOptions.js +73 -0
  237. package/lib/transform/helpers/loadLinariaOptions.js.map +1 -0
  238. package/lib/transform/helpers/withDefaultServices.js +30 -0
  239. package/lib/transform/helpers/withDefaultServices.js.map +1 -0
  240. package/lib/transform/rootLog.js +9 -0
  241. package/lib/transform/rootLog.js.map +1 -0
  242. package/lib/transform/types.js +8 -0
  243. package/lib/transform/types.js.map +1 -0
  244. package/lib/transform.js +128 -0
  245. package/lib/transform.js.map +1 -0
  246. package/lib/types.js +2 -0
  247. package/lib/types.js.map +1 -0
  248. package/lib/utils/EventEmitter.js +61 -0
  249. package/lib/utils/EventEmitter.js.map +1 -0
  250. package/lib/utils/ShakerMetadata.js +9 -0
  251. package/lib/utils/ShakerMetadata.js.map +1 -0
  252. package/lib/utils/TransformMetadata.js +19 -0
  253. package/lib/utils/TransformMetadata.js.map +1 -0
  254. package/lib/utils/addIdentifierToLinariaPreval.js +75 -0
  255. package/lib/utils/addIdentifierToLinariaPreval.js.map +1 -0
  256. package/lib/utils/collectExportsAndImports.js +990 -0
  257. package/lib/utils/collectExportsAndImports.js.map +1 -0
  258. package/lib/utils/collectTemplateDependencies.js +233 -0
  259. package/lib/utils/collectTemplateDependencies.js.map +1 -0
  260. package/lib/utils/createId.js +13 -0
  261. package/lib/utils/createId.js.map +1 -0
  262. package/lib/utils/dispose-polyfill.js +9 -0
  263. package/lib/utils/dispose-polyfill.js.map +1 -0
  264. package/lib/utils/findIdentifiers.js +73 -0
  265. package/lib/utils/findIdentifiers.js.map +1 -0
  266. package/lib/utils/findPackageJSON.js +29 -0
  267. package/lib/utils/findPackageJSON.js.map +1 -0
  268. package/lib/utils/getFileIdx.js +16 -0
  269. package/lib/utils/getFileIdx.js.map +1 -0
  270. package/lib/utils/getPluginKey.js +21 -0
  271. package/lib/utils/getPluginKey.js.map +1 -0
  272. package/lib/utils/getScope.js +12 -0
  273. package/lib/utils/getScope.js.map +1 -0
  274. package/lib/utils/getSource.js +24 -0
  275. package/lib/utils/getSource.js.map +1 -0
  276. package/lib/utils/getTagProcessor.js +318 -0
  277. package/lib/utils/getTagProcessor.js.map +1 -0
  278. package/lib/utils/getVisitorKeys.js +11 -0
  279. package/lib/utils/getVisitorKeys.js.map +1 -0
  280. package/lib/utils/hasLinariaPreval.js +13 -0
  281. package/lib/utils/hasLinariaPreval.js.map +1 -0
  282. package/lib/utils/isExports.js +27 -0
  283. package/lib/utils/isExports.js.map +1 -0
  284. package/lib/utils/isGlobal.js +13 -0
  285. package/lib/utils/isGlobal.js.map +1 -0
  286. package/lib/utils/isNode.js +9 -0
  287. package/lib/utils/isNode.js.map +1 -0
  288. package/lib/utils/isNodePath.js +10 -0
  289. package/lib/utils/isNodePath.js.map +1 -0
  290. package/lib/utils/isNotNull.js +10 -0
  291. package/lib/utils/isNotNull.js.map +1 -0
  292. package/lib/utils/isRemoved.js +52 -0
  293. package/lib/utils/isRemoved.js.map +1 -0
  294. package/lib/utils/isRequire.js +18 -0
  295. package/lib/utils/isRequire.js.map +1 -0
  296. package/lib/utils/isSerializable.js +19 -0
  297. package/lib/utils/isSerializable.js.map +1 -0
  298. package/lib/utils/isTypedNode.js +13 -0
  299. package/lib/utils/isTypedNode.js.map +1 -0
  300. package/lib/utils/isUnnecessaryReactCall.js +81 -0
  301. package/lib/utils/isUnnecessaryReactCall.js.map +1 -0
  302. package/lib/utils/peek.js +9 -0
  303. package/lib/utils/peek.js.map +1 -0
  304. package/lib/utils/processTemplateExpression.js +18 -0
  305. package/lib/utils/processTemplateExpression.js.map +1 -0
  306. package/lib/utils/removeDangerousCode.js +134 -0
  307. package/lib/utils/removeDangerousCode.js.map +1 -0
  308. package/lib/utils/scopeHelpers.js +544 -0
  309. package/lib/utils/scopeHelpers.js.map +1 -0
  310. package/lib/utils/traversalCache.js +38 -0
  311. package/lib/utils/traversalCache.js.map +1 -0
  312. package/lib/utils/unwrapSequence.js +20 -0
  313. package/lib/utils/unwrapSequence.js.map +1 -0
  314. package/lib/utils/valueToLiteral.js +65 -0
  315. package/lib/utils/valueToLiteral.js.map +1 -0
  316. package/lib/utils/visitors/JSXElementsRemover.js +57 -0
  317. package/lib/utils/visitors/JSXElementsRemover.js.map +1 -0
  318. package/lib/vm/createVmContext.js +80 -0
  319. package/lib/vm/createVmContext.js.map +1 -0
  320. package/lib/vm/process.js +38 -0
  321. package/lib/vm/process.js.map +1 -0
  322. package/package.json +63 -0
  323. package/types/babel.d.ts +2 -0
  324. package/types/babel.js +2 -0
  325. package/types/cache.d.ts +24 -0
  326. package/types/cache.js +85 -0
  327. package/types/debug/fileReporter.d.ts +27 -0
  328. package/types/debug/fileReporter.js +151 -0
  329. package/types/evaluators/index.d.ts +10 -0
  330. package/types/evaluators/index.js +15 -0
  331. package/types/index.d.ts +30 -0
  332. package/types/index.js +69 -0
  333. package/types/module.d.ts +62 -0
  334. package/types/module.js +318 -0
  335. package/types/options/buildOptions.d.ts +7 -0
  336. package/types/options/buildOptions.js +35 -0
  337. package/types/options/loadBabelOptions.d.ts +3 -0
  338. package/types/options/loadBabelOptions.js +27 -0
  339. package/types/plugins/babel-transform.d.ts +4 -0
  340. package/types/plugins/babel-transform.js +49 -0
  341. package/types/plugins/collector.d.ts +16 -0
  342. package/types/plugins/collector.js +67 -0
  343. package/types/plugins/dynamic-import.d.ts +6 -0
  344. package/types/plugins/dynamic-import.js +32 -0
  345. package/types/plugins/preeval.d.ts +16 -0
  346. package/types/plugins/preeval.js +69 -0
  347. package/types/plugins/shaker.d.ts +11 -0
  348. package/types/plugins/shaker.js +299 -0
  349. package/types/shaker.d.ts +3 -0
  350. package/types/shaker.js +64 -0
  351. package/types/transform/BaseEntrypoint.d.ts +23 -0
  352. package/types/transform/BaseEntrypoint.js +182 -0
  353. package/types/transform/Entrypoint.d.ts +50 -0
  354. package/types/transform/Entrypoint.helpers.d.ts +14 -0
  355. package/types/transform/Entrypoint.helpers.js +169 -0
  356. package/types/transform/Entrypoint.js +223 -0
  357. package/types/transform/Entrypoint.types.d.ts +23 -0
  358. package/types/transform/Entrypoint.types.js +2 -0
  359. package/types/transform/EvaluatedEntrypoint.d.ts +16 -0
  360. package/types/transform/EvaluatedEntrypoint.js +9 -0
  361. package/types/transform/actions/AbortError.d.ts +4 -0
  362. package/types/transform/actions/AbortError.js +12 -0
  363. package/types/transform/actions/BaseAction.d.ts +40 -0
  364. package/types/transform/actions/BaseAction.js +149 -0
  365. package/types/transform/actions/UnprocessedEntrypointError.d.ts +6 -0
  366. package/types/transform/actions/UnprocessedEntrypointError.js +13 -0
  367. package/types/transform/actions/actionRunner.d.ts +4 -0
  368. package/types/transform/actions/actionRunner.js +86 -0
  369. package/types/transform/actions/types.d.ts +15 -0
  370. package/types/transform/actions/types.js +2 -0
  371. package/types/transform/generators/baseProcessingHandlers.d.ts +17 -0
  372. package/types/transform/generators/baseProcessingHandlers.js +23 -0
  373. package/types/transform/generators/collect.d.ts +6 -0
  374. package/types/transform/generators/collect.js +57 -0
  375. package/types/transform/generators/evalFile.d.ts +6 -0
  376. package/types/transform/generators/evalFile.js +56 -0
  377. package/types/transform/generators/explodeReexports.d.ts +7 -0
  378. package/types/transform/generators/explodeReexports.js +67 -0
  379. package/types/transform/generators/extract.d.ts +8 -0
  380. package/types/transform/generators/extract.js +116 -0
  381. package/types/transform/generators/getExports.d.ts +8 -0
  382. package/types/transform/generators/getExports.js +65 -0
  383. package/types/transform/generators/index.d.ts +15 -0
  384. package/types/transform/generators/index.js +15 -0
  385. package/types/transform/generators/processEntrypoint.d.ts +9 -0
  386. package/types/transform/generators/processEntrypoint.js +88 -0
  387. package/types/transform/generators/processImports.d.ts +5 -0
  388. package/types/transform/generators/processImports.js +21 -0
  389. package/types/transform/generators/resolveImports.d.ts +9 -0
  390. package/types/transform/generators/resolveImports.js +124 -0
  391. package/types/transform/generators/transform.d.ts +17 -0
  392. package/types/transform/generators/transform.js +115 -0
  393. package/types/transform/generators/workflow.d.ts +7 -0
  394. package/types/transform/generators/workflow.js +77 -0
  395. package/types/transform/helpers/loadLinariaOptions.d.ts +6 -0
  396. package/types/transform/helpers/loadLinariaOptions.js +86 -0
  397. package/types/transform/helpers/withDefaultServices.d.ts +5 -0
  398. package/types/transform/helpers/withDefaultServices.js +40 -0
  399. package/types/transform/rootLog.d.ts +3 -0
  400. package/types/transform/rootLog.js +5 -0
  401. package/types/transform/types.d.ts +137 -0
  402. package/types/transform/types.js +4 -0
  403. package/types/transform.d.ts +20 -0
  404. package/types/transform.js +121 -0
  405. package/types/types.d.ts +72 -0
  406. package/types/types.js +5 -0
  407. package/types/utils/EventEmitter.d.ts +58 -0
  408. package/types/utils/EventEmitter.js +61 -0
  409. package/types/utils/ShakerMetadata.d.ts +7 -0
  410. package/types/utils/ShakerMetadata.js +5 -0
  411. package/types/utils/TransformMetadata.d.ts +13 -0
  412. package/types/utils/TransformMetadata.js +17 -0
  413. package/types/utils/addIdentifierToLinariaPreval.d.ts +4 -0
  414. package/types/utils/addIdentifierToLinariaPreval.js +75 -0
  415. package/types/utils/collectExportsAndImports.d.ts +31 -0
  416. package/types/utils/collectExportsAndImports.js +962 -0
  417. package/types/utils/collectTemplateDependencies.d.ts +17 -0
  418. package/types/utils/collectTemplateDependencies.js +212 -0
  419. package/types/utils/createId.d.ts +2 -0
  420. package/types/utils/createId.js +9 -0
  421. package/types/utils/dispose-polyfill.d.ts +0 -0
  422. package/types/utils/dispose-polyfill.js +5 -0
  423. package/types/utils/findIdentifiers.d.ts +6 -0
  424. package/types/utils/findIdentifiers.js +68 -0
  425. package/types/utils/findPackageJSON.d.ts +1 -0
  426. package/types/utils/findPackageJSON.js +29 -0
  427. package/types/utils/getFileIdx.d.ts +1 -0
  428. package/types/utils/getFileIdx.js +13 -0
  429. package/types/utils/getPluginKey.d.ts +2 -0
  430. package/types/utils/getPluginKey.js +16 -0
  431. package/types/utils/getScope.d.ts +2 -0
  432. package/types/utils/getScope.js +11 -0
  433. package/types/utils/getSource.d.ts +2 -0
  434. package/types/utils/getSource.js +22 -0
  435. package/types/utils/getTagProcessor.d.ts +6 -0
  436. package/types/utils/getTagProcessor.js +315 -0
  437. package/types/utils/getVisitorKeys.d.ts +5 -0
  438. package/types/utils/getVisitorKeys.js +8 -0
  439. package/types/utils/hasLinariaPreval.d.ts +4 -0
  440. package/types/utils/hasLinariaPreval.js +9 -0
  441. package/types/utils/isExports.d.ts +6 -0
  442. package/types/utils/isExports.js +20 -0
  443. package/types/utils/isGlobal.d.ts +2 -0
  444. package/types/utils/isGlobal.js +9 -0
  445. package/types/utils/isNode.d.ts +2 -0
  446. package/types/utils/isNode.js +7 -0
  447. package/types/utils/isNodePath.d.ts +3 -0
  448. package/types/utils/isNodePath.js +7 -0
  449. package/types/utils/isNotNull.d.ts +1 -0
  450. package/types/utils/isNotNull.js +7 -0
  451. package/types/utils/isRemoved.d.ts +5 -0
  452. package/types/utils/isRemoved.js +42 -0
  453. package/types/utils/isRequire.d.ts +6 -0
  454. package/types/utils/isRequire.js +15 -0
  455. package/types/utils/isSerializable.d.ts +2 -0
  456. package/types/utils/isSerializable.js +18 -0
  457. package/types/utils/isTypedNode.d.ts +5 -0
  458. package/types/utils/isTypedNode.js +9 -0
  459. package/types/utils/isUnnecessaryReactCall.d.ts +3 -0
  460. package/types/utils/isUnnecessaryReactCall.js +76 -0
  461. package/types/utils/peek.d.ts +1 -0
  462. package/types/utils/peek.js +5 -0
  463. package/types/utils/processTemplateExpression.d.ts +5 -0
  464. package/types/utils/processTemplateExpression.js +17 -0
  465. package/types/utils/removeDangerousCode.d.ts +3 -0
  466. package/types/utils/removeDangerousCode.js +144 -0
  467. package/types/utils/scopeHelpers.d.ts +12 -0
  468. package/types/utils/scopeHelpers.js +568 -0
  469. package/types/utils/traversalCache.d.ts +5 -0
  470. package/types/utils/traversalCache.js +36 -0
  471. package/types/utils/unwrapSequence.d.ts +8 -0
  472. package/types/utils/unwrapSequence.js +17 -0
  473. package/types/utils/valueToLiteral.d.ts +3 -0
  474. package/types/utils/valueToLiteral.js +64 -0
  475. package/types/utils/visitors/JSXElementsRemover.d.ts +3 -0
  476. package/types/utils/visitors/JSXElementsRemover.js +52 -0
  477. package/types/vm/createVmContext.d.ts +7 -0
  478. package/types/vm/createVmContext.js +92 -0
  479. package/types/vm/process.d.ts +25 -0
  480. package/types/vm/process.js +32 -0
@@ -0,0 +1,974 @@
1
+ /* eslint @typescript-eslint/no-use-before-define: ["error", { "functions": false }] */
2
+ /* eslint-disable no-restricted-syntax,no-continue */
3
+
4
+ import { logger } from '@wyw-in-js/shared';
5
+ import { getScope } from './getScope';
6
+ import { isExports } from './isExports';
7
+ import { isNotNull } from './isNotNull';
8
+ import { isRequire } from './isRequire';
9
+ import { isTypedNode } from './isTypedNode';
10
+ import { getTraversalCache } from './traversalCache';
11
+
12
+ // '*' means re-export all
13
+
14
+ export const sideEffectImport = item => item.imported === 'side-effect';
15
+ export const explicitImport = item => item.imported !== 'side-effect';
16
+ function getValue({
17
+ node
18
+ }) {
19
+ return node.type === 'Identifier' ? node.name : node.value;
20
+ }
21
+
22
+ // We ignore imports and exports of types
23
+ const isType = p => 'importKind' in p.node && p.node.importKind === 'type' || 'exportKind' in p.node && p.node.exportKind === 'type';
24
+
25
+ // Force TypeScript to check, that we have implementation for every possible specifier
26
+
27
+ const collectors = {
28
+ ImportSpecifier(path, source) {
29
+ if (isType(path)) return [];
30
+ const imported = getValue(path.get('imported'));
31
+ const local = path.get('local');
32
+ return [{
33
+ imported,
34
+ local,
35
+ source,
36
+ type: 'esm'
37
+ }];
38
+ },
39
+ ImportDefaultSpecifier(path, source) {
40
+ const local = path.get('local');
41
+ return [{
42
+ imported: 'default',
43
+ local,
44
+ source,
45
+ type: 'esm'
46
+ }];
47
+ },
48
+ ImportNamespaceSpecifier(path, source) {
49
+ const local = path.get('local');
50
+ return unfoldNamespaceImport({
51
+ imported: '*',
52
+ local,
53
+ source,
54
+ type: 'esm'
55
+ });
56
+ }
57
+ };
58
+ function collectFromImportDeclaration(path, state) {
59
+ // If importKind is specified, and it's not a value, ignore that import
60
+ if (isType(path)) return;
61
+ const source = getValue(path.get('source'));
62
+ const specifiers = path.get('specifiers');
63
+ if (specifiers.length === 0) {
64
+ state.imports.push({
65
+ imported: 'side-effect',
66
+ local: path,
67
+ source
68
+ });
69
+ }
70
+ specifiers.forEach(specifier => {
71
+ if (specifier.isImportSpecifier() && isType(specifier)) return;
72
+ const collector = collectors[specifier.node.type];
73
+ state.imports.push(...collector(specifier, source));
74
+ });
75
+ }
76
+ function getAncestorsWhile(path, cond) {
77
+ const result = [];
78
+ let current = path;
79
+ while (current && cond(current)) {
80
+ result.push(current);
81
+ current = current.parentPath;
82
+ }
83
+ return result;
84
+ }
85
+ function whatIsDestructed(objectPattern) {
86
+ const destructedProps = [];
87
+ objectPattern.traverse({
88
+ Identifier(identifier) {
89
+ if (identifier.isBindingIdentifier()) {
90
+ const parent = identifier.parentPath;
91
+ if (parent.isObjectProperty({
92
+ value: identifier.node
93
+ })) {
94
+ const chain = getAncestorsWhile(parent, p => p !== objectPattern).filter(isTypedNode('ObjectProperty')).map(p => {
95
+ const key = p.get('key');
96
+ if (!key.isIdentifier()) {
97
+ // TODO: try to process other type of keys or at least warn about this
98
+ return null;
99
+ }
100
+ return key;
101
+ }).filter(isNotNull);
102
+ chain.reverse();
103
+ if (chain.length > 0) {
104
+ destructedProps.push({
105
+ what: chain[0].node.name,
106
+ as: identifier
107
+ });
108
+ }
109
+ return;
110
+ }
111
+ if (parent.isRestElement({
112
+ argument: identifier.node
113
+ })) {
114
+ destructedProps.push({
115
+ what: '*',
116
+ as: identifier
117
+ });
118
+ }
119
+ }
120
+ }
121
+ });
122
+ return destructedProps;
123
+ }
124
+ const debug = logger.extend('evaluator:collectExportsAndImports');
125
+ function importFromVariableDeclarator(path, isSync) {
126
+ const id = path.get('id');
127
+ if (id.isIdentifier()) {
128
+ // It's the simplest case when the full namespace is imported
129
+ return [{
130
+ as: id,
131
+ what: '*'
132
+ }];
133
+ }
134
+ if (!isSync) {
135
+ // Something went wrong
136
+ // Is it something like `const { … } = import(…)`?
137
+ debug('`import` should be awaited');
138
+ return [];
139
+ }
140
+ if (id.isObjectPattern()) {
141
+ return whatIsDestructed(id);
142
+ }
143
+
144
+ // What else it can be?
145
+ debug('importFromVariableDeclarator: unknown type of id %o', id.node.type);
146
+ return [];
147
+ }
148
+ const findIIFE = path => {
149
+ if (path.isCallExpression() && path.get('callee').isFunctionExpression()) {
150
+ return path;
151
+ }
152
+ if (!path.parentPath) {
153
+ return null;
154
+ }
155
+ return findIIFE(path.parentPath);
156
+ };
157
+ function exportFromVariableDeclarator(path) {
158
+ const id = path.get('id');
159
+ const init = path.get('init');
160
+
161
+ // If there is no init and id is an identifier, we should find IIFE
162
+ if (!init.node && id.isIdentifier()) {
163
+ const binding = getScope(path).getBinding(id.node.name);
164
+ if (!binding) {
165
+ return {};
166
+ }
167
+ const iife = [...binding.referencePaths, ...binding.constantViolations, binding.path].map(findIIFE).find(isNotNull);
168
+ if (!iife) {
169
+ return {};
170
+ }
171
+ return {
172
+ [id.node.name]: iife
173
+ };
174
+ }
175
+ if (!init || !init.isExpression()) {
176
+ return {};
177
+ }
178
+ if (id.isIdentifier()) {
179
+ // It is `export const a = 1;`
180
+ return {
181
+ [id.node.name]: init
182
+ };
183
+ }
184
+ if (id.isObjectPattern()) {
185
+ // It is `export const { a, ...rest } = obj;`
186
+ return whatIsDestructed(id).reduce((acc, destructed) => ({
187
+ ...acc,
188
+ [destructed.as.node.name]: init
189
+ }), {});
190
+ }
191
+
192
+ // What else it can be?
193
+ debug('exportFromVariableDeclarator: unknown type of id %o', id.node.type);
194
+ return {};
195
+ }
196
+ function collectFromDynamicImport(path, state) {
197
+ const {
198
+ parentPath: callExpression
199
+ } = path;
200
+ if (!callExpression.isCallExpression()) {
201
+ // It's wrong `import`
202
+ return;
203
+ }
204
+ const [sourcePath] = callExpression.get('arguments');
205
+ if (!sourcePath || !sourcePath.isStringLiteral()) {
206
+ // Import should have at least one argument, and it should be StringLiteral
207
+ return;
208
+ }
209
+ const source = sourcePath.node.value;
210
+ let {
211
+ parentPath: container,
212
+ key
213
+ } = callExpression;
214
+ let isAwaited = false;
215
+ if (container.isAwaitExpression()) {
216
+ // If it's not awaited import, it imports the full namespace
217
+ isAwaited = true;
218
+ key = container.key;
219
+ container = container.parentPath;
220
+ }
221
+
222
+ // Is it `const something = await import("something")`?
223
+ if (key === 'init' && container.isVariableDeclarator()) {
224
+ importFromVariableDeclarator(container, isAwaited).map(prop => state.imports.push({
225
+ imported: prop.what,
226
+ local: prop.as,
227
+ source,
228
+ type: 'dynamic'
229
+ }));
230
+ }
231
+ }
232
+ function getCalleeName(path) {
233
+ const callee = path.get('callee');
234
+ if (callee.isIdentifier()) {
235
+ return callee.node.name;
236
+ }
237
+ if (callee.isMemberExpression()) {
238
+ const property = callee.get('property');
239
+ if (property.isIdentifier()) {
240
+ return property.node.name;
241
+ }
242
+ }
243
+ return undefined;
244
+ }
245
+ function getImportExportTypeByInteropFunction(path) {
246
+ const name = getCalleeName(path);
247
+ if (name === undefined) {
248
+ return undefined;
249
+ }
250
+ if (name.startsWith('__exportStar')) {
251
+ return 're-export:*';
252
+ }
253
+ if (name.startsWith('_interopRequireDefault') || name.startsWith('__importDefault')) {
254
+ return 'default';
255
+ }
256
+ if (name.startsWith('_interopRequireWildcard') || name.startsWith('__importStar') || name.startsWith('__toESM')) {
257
+ return 'import:*';
258
+ }
259
+ if (name.startsWith('__rest') || name.startsWith('__objRest') || name.startsWith('_objectDestructuringEmpty')) {
260
+ return 'import:*';
261
+ }
262
+ return undefined;
263
+ }
264
+ function isAlreadyProcessed(path) {
265
+ if (path.isCallExpression() && path.get('callee').isIdentifier({
266
+ name: '__toCommonJS'
267
+ })) {
268
+ // because its esbuild and we already processed all exports
269
+ return true;
270
+ }
271
+ return false;
272
+ }
273
+ function collectFromRequire(path, state) {
274
+ if (!isRequire(path)) return;
275
+
276
+ // This method can be reached many times from multiple visitors for the same path
277
+ // So we need to check if we already processed it
278
+ if (state.processedRequires.has(path)) return;
279
+ state.processedRequires.add(path);
280
+ const {
281
+ parentPath: callExpression
282
+ } = path;
283
+ if (!callExpression.isCallExpression()) {
284
+ // It's wrong `require`
285
+ return;
286
+ }
287
+ const [sourcePath] = callExpression.get('arguments');
288
+ if (!sourcePath || !sourcePath.isStringLiteral()) {
289
+ // Import should have at least one argument, and it should be StringLiteral
290
+ return;
291
+ }
292
+ const source = sourcePath.node.value;
293
+ const {
294
+ parentPath: container,
295
+ key
296
+ } = callExpression;
297
+ if (container.isCallExpression() && key === 0) {
298
+ // It may be transpiled import such as
299
+ // `var _atomic = _interopRequireDefault(require("@linaria/atomic"));`
300
+ const imported = getImportExportTypeByInteropFunction(container);
301
+ if (!imported) {
302
+ // It's not a transpiled import.
303
+ // TODO: Can we guess that it's a namespace import?
304
+ debug('Unknown wrapper of require: %o', container.node.callee);
305
+ return;
306
+ }
307
+ if (imported === 're-export:*') {
308
+ state.reexports.push({
309
+ exported: '*',
310
+ imported: '*',
311
+ local: path,
312
+ source
313
+ });
314
+ return;
315
+ }
316
+ let {
317
+ parentPath: variableDeclarator
318
+ } = container;
319
+ if (variableDeclarator.isCallExpression()) {
320
+ if (variableDeclarator.get('callee').isIdentifier({
321
+ name: '_extends'
322
+ })) {
323
+ variableDeclarator = variableDeclarator.parentPath;
324
+ }
325
+ }
326
+ if (!variableDeclarator.isVariableDeclarator()) {
327
+ // TODO: Where else it can be?
328
+ debug('Unexpected require inside %o', variableDeclarator.node.type);
329
+ return;
330
+ }
331
+ const id = variableDeclarator.get('id');
332
+ if (!id.isIdentifier()) {
333
+ debug('Id should be Identifier %o', variableDeclarator.node.type);
334
+ return;
335
+ }
336
+ if (imported === 'import:*') {
337
+ const unfolded = unfoldNamespaceImport({
338
+ imported: '*',
339
+ local: id,
340
+ source,
341
+ type: 'cjs'
342
+ });
343
+ state.imports.push(...unfolded);
344
+ } else {
345
+ state.imports.push({
346
+ imported,
347
+ local: id,
348
+ source,
349
+ type: 'cjs'
350
+ });
351
+ }
352
+ }
353
+ if (container.isMemberExpression()) {
354
+ // It is `require('@linaria/shaker').dep`
355
+ const property = container.get('property');
356
+ if (!property.isIdentifier() && !property.isStringLiteral()) {
357
+ debug('Property should be Identifier or StringLiteral %s', property.node.type);
358
+ return;
359
+ }
360
+ const {
361
+ parentPath: variableDeclarator
362
+ } = container;
363
+ if (variableDeclarator.isVariableDeclarator()) {
364
+ // It is `const … = require('@linaria/shaker').dep`;
365
+ const id = variableDeclarator.get('id');
366
+ if (id.isIdentifier()) {
367
+ state.imports.push({
368
+ imported: getValue(property),
369
+ local: id,
370
+ source,
371
+ type: 'cjs'
372
+ });
373
+ } else {
374
+ debug('Id should be Identifier %o', variableDeclarator.node.type);
375
+ }
376
+ } else {
377
+ // Maybe require is passed as an argument to some function?
378
+ // Just use the whole MemberExpression as a local
379
+ state.imports.push({
380
+ imported: getValue(property),
381
+ local: container,
382
+ source,
383
+ type: 'cjs'
384
+ });
385
+ }
386
+ return;
387
+ }
388
+
389
+ // Is it `const something = require("something")`?
390
+ if (key === 'init' && container.isVariableDeclarator()) {
391
+ importFromVariableDeclarator(container, true).forEach(prop => {
392
+ if (prop.what === '*') {
393
+ const unfolded = unfoldNamespaceImport({
394
+ imported: '*',
395
+ local: prop.as,
396
+ source,
397
+ type: 'cjs'
398
+ });
399
+ state.imports.push(...unfolded);
400
+ } else {
401
+ state.imports.push({
402
+ imported: prop.what,
403
+ local: prop.as,
404
+ source,
405
+ type: 'cjs'
406
+ });
407
+ }
408
+ });
409
+ }
410
+ if (container.isExpressionStatement()) {
411
+ // Looks like standalone require
412
+ state.imports.push({
413
+ imported: 'side-effect',
414
+ local: container,
415
+ source
416
+ });
417
+ }
418
+ }
419
+ function collectFromVariableDeclarator(path, state) {
420
+ let found = false;
421
+ path.traverse({
422
+ Identifier(identifierPath) {
423
+ if (isRequire(identifierPath)) {
424
+ collectFromRequire(identifierPath, state);
425
+ found = true;
426
+ }
427
+ }
428
+ });
429
+ if (found) {
430
+ path.skip();
431
+ }
432
+ }
433
+ function isChainOfVoidAssignment(path) {
434
+ const right = path.get('right');
435
+ if (right.isUnaryExpression({
436
+ operator: 'void'
437
+ })) {
438
+ return true;
439
+ }
440
+ if (right.isAssignmentExpression()) {
441
+ return isChainOfVoidAssignment(right);
442
+ }
443
+ return false;
444
+ }
445
+ function getReturnValue(path) {
446
+ if (path.node.params.length !== 0) return undefined;
447
+ const body = path.get('body');
448
+ if (body.isExpression()) {
449
+ return body;
450
+ }
451
+ if (body.node.body.length === 1) {
452
+ const returnStatement = body.get('body')?.[0];
453
+ if (!returnStatement.isReturnStatement()) return undefined;
454
+ const argument = returnStatement.get('argument');
455
+ if (!argument.isExpression()) return undefined;
456
+ return argument;
457
+ }
458
+ return undefined;
459
+ }
460
+ function getGetterValueFromDescriptor(descriptor) {
461
+ const props = descriptor.get('properties').filter(isTypedNode('ObjectProperty'));
462
+ const getter = props.find(p => p.get('key').isIdentifier({
463
+ name: 'get'
464
+ }));
465
+ const value = getter?.get('value');
466
+ if (value?.isFunctionExpression() || value?.isArrowFunctionExpression()) {
467
+ return getReturnValue(value);
468
+ }
469
+ const valueProp = props.find(p => p.get('key').isIdentifier({
470
+ name: 'value'
471
+ }));
472
+ const valueValue = valueProp?.get('value');
473
+ return valueValue?.isExpression() ? valueValue : undefined;
474
+ }
475
+ function addExport(path, exported, state) {
476
+ function getRelatedImport() {
477
+ if (path.isMemberExpression()) {
478
+ const object = path.get('object');
479
+ if (!object.isIdentifier()) {
480
+ return undefined;
481
+ }
482
+ const objectBinding = object.scope.getBinding(object.node.name);
483
+ if (!objectBinding) {
484
+ return undefined;
485
+ }
486
+ if (objectBinding.path.isVariableDeclarator()) {
487
+ collectFromVariableDeclarator(objectBinding.path, state);
488
+ }
489
+ const found = state.imports.find(i => objectBinding.identifier === i.local.node || objectBinding.referencePaths.some(p => i.local.isAncestor(p)));
490
+ if (!found) {
491
+ return undefined;
492
+ }
493
+ const property = path.get('property');
494
+ let what = '*';
495
+ if (path.node.computed && property.isStringLiteral()) {
496
+ what = property.node.value;
497
+ } else if (!path.node.computed && property.isIdentifier()) {
498
+ what = property.node.name;
499
+ }
500
+ return {
501
+ import: {
502
+ ...found,
503
+ local: path
504
+ },
505
+ what
506
+ };
507
+ }
508
+ return undefined;
509
+ }
510
+ const relatedImport = getRelatedImport();
511
+ if (relatedImport) {
512
+ // eslint-disable-next-line no-param-reassign
513
+ state.reexports.push({
514
+ local: relatedImport.import.local,
515
+ imported: relatedImport.import.imported,
516
+ source: relatedImport.import.source,
517
+ exported
518
+ });
519
+ } else {
520
+ // eslint-disable-next-line no-param-reassign
521
+ state.exports[exported] = path;
522
+ }
523
+ }
524
+ function collectFromExports(path, state) {
525
+ if (!isExports(path)) return;
526
+ if (path.parentPath.isMemberExpression({
527
+ object: path.node
528
+ })) {
529
+ // It is `exports.prop = …`
530
+ const memberExpression = path.parentPath;
531
+ const property = memberExpression.get('property');
532
+ if (!property.isIdentifier() || memberExpression.node.computed) {
533
+ return;
534
+ }
535
+ const exportName = property.node.name;
536
+ const saveRef = () => {
537
+ // Save all export.____ usages for later
538
+ if (!state.exportRefs.has(exportName)) {
539
+ state.exportRefs.set(exportName, []);
540
+ }
541
+ state.exportRefs.get(exportName).push(memberExpression);
542
+ };
543
+ const assignmentExpression = memberExpression.parentPath;
544
+ if (!assignmentExpression.isAssignmentExpression({
545
+ left: memberExpression.node
546
+ })) {
547
+ // If it's not `exports.prop = …`. Just save it.
548
+ saveRef();
549
+ return;
550
+ }
551
+ const right = assignmentExpression.get('right');
552
+ if (isChainOfVoidAssignment(assignmentExpression)) {
553
+ // It is `exports.foo = void 0`
554
+ return;
555
+ }
556
+ const {
557
+ name
558
+ } = property.node;
559
+ if (name === '__esModule') {
560
+ // eslint-disable-next-line no-param-reassign
561
+ state.isEsModule = true;
562
+ return;
563
+ }
564
+ saveRef();
565
+ // eslint-disable-next-line no-param-reassign
566
+ state.exports[property.node.name] = right;
567
+ return;
568
+ }
569
+ if (path.parentPath.isCallExpression() && path.parentPath.get('callee').matchesPattern('Object.defineProperty')) {
570
+ const [obj, prop, descriptor] = path.parentPath.get('arguments');
571
+ if (obj?.isIdentifier(path.node) && prop?.isStringLiteral() && descriptor?.isObjectExpression()) {
572
+ if (prop.node.value === '__esModule') {
573
+ // eslint-disable-next-line no-param-reassign
574
+ state.isEsModule = true;
575
+ } else {
576
+ /**
577
+ * Object.defineProperty(exports, "token", {
578
+ * enumerable: true,
579
+ * get: function get() {
580
+ * return _unknownPackage.token;
581
+ * }
582
+ * });
583
+ */
584
+ const exported = prop.node.value;
585
+ const local = getGetterValueFromDescriptor(descriptor);
586
+ if (local) {
587
+ addExport(local, exported, state);
588
+ }
589
+ }
590
+ } else if (obj?.isIdentifier(path.node) && prop?.isIdentifier() && descriptor?.isObjectExpression()) {
591
+ /**
592
+ * Object.defineProperty(exports, key, {
593
+ * enumerable: true,
594
+ * get: function get() {
595
+ * return _unknownPackage[key];
596
+ * }
597
+ * });
598
+ */
599
+ const local = getGetterValueFromDescriptor(descriptor);
600
+ if (local) {
601
+ addExport(local, '*', state);
602
+ }
603
+ }
604
+ }
605
+ }
606
+ function collectFromRequireOrExports(path, state) {
607
+ if (isRequire(path)) {
608
+ collectFromRequire(path, state);
609
+ } else if (isExports(path)) {
610
+ collectFromExports(path, state);
611
+ }
612
+ }
613
+ function unfoldNamespaceImport(importItem) {
614
+ const result = [];
615
+ const {
616
+ local
617
+ } = importItem;
618
+ if (!local.isIdentifier()) {
619
+ // TODO: handle it
620
+ return [importItem];
621
+ }
622
+ const binding = getScope(local).getBinding(local.node.name);
623
+ if (!binding?.referenced) {
624
+ // Imported namespace is not referenced and probably not used,
625
+ // but it can have side effects, so we should keep it as is
626
+ return [importItem];
627
+ }
628
+ for (const referencePath of binding?.referencePaths ?? []) {
629
+ if (referencePath.find(ancestor => ancestor.isTSType() || ancestor.isFlowType())) {
630
+ continue;
631
+ }
632
+ const {
633
+ parentPath
634
+ } = referencePath;
635
+ if (parentPath?.isMemberExpression() && referencePath.key === 'object') {
636
+ const property = parentPath.get('property');
637
+ const object = parentPath.get('object');
638
+ let imported;
639
+ if (parentPath.node.computed && property.isStringLiteral()) {
640
+ imported = property.node.value;
641
+ } else if (!parentPath.node.computed && property.isIdentifier()) {
642
+ imported = property.node.name;
643
+ } else {
644
+ imported = null;
645
+ }
646
+ if (object.isIdentifier() && imported) {
647
+ result.push({
648
+ ...importItem,
649
+ imported,
650
+ local: parentPath
651
+ });
652
+ } else {
653
+ result.push(importItem);
654
+ break;
655
+ }
656
+ continue;
657
+ }
658
+ if (parentPath?.isVariableDeclarator() && referencePath.key === 'init') {
659
+ importFromVariableDeclarator(parentPath, true).map(prop => result.push({
660
+ ...importItem,
661
+ imported: prop.what,
662
+ local: prop.as
663
+ }));
664
+ continue;
665
+ }
666
+ if (parentPath?.isCallExpression() && referencePath.listKey === 'arguments') {
667
+ // The defined variable is used as a function argument. Let's try to figure out what is imported.
668
+ const importType = getImportExportTypeByInteropFunction(parentPath);
669
+ if (!importType) {
670
+ // Imported value is used as an unknown function argument,
671
+ // so we can't predict usage and import it as is.
672
+ result.push(importItem);
673
+ break;
674
+ }
675
+ if (importType === 'default') {
676
+ result.push({
677
+ ...importItem,
678
+ imported: 'default',
679
+ local: parentPath.get('id')
680
+ });
681
+ continue;
682
+ }
683
+ if (importType === 'import:*') {
684
+ result.push(importItem);
685
+ break;
686
+ }
687
+ debug('unfoldNamespaceImports: unknown import type %o', importType);
688
+ result.push(importItem);
689
+ continue;
690
+ }
691
+ if (parentPath?.isExportSpecifier() || parentPath?.isExportDefaultDeclaration()) {
692
+ // The whole namespace is re-exported
693
+ result.push(importItem);
694
+ break;
695
+ }
696
+
697
+ // Otherwise, we can't predict usage and import it as is
698
+ // TODO: handle more cases
699
+ debug('unfoldNamespaceImports: unknown reference %o', referencePath.node.type);
700
+ result.push(importItem);
701
+ break;
702
+ }
703
+ return result;
704
+ }
705
+ function collectFromExportAllDeclaration(path, state) {
706
+ if (isType(path)) return;
707
+ const source = path.get('source')?.node?.value;
708
+ if (!source) return;
709
+
710
+ // It is `export * from './css';`
711
+ state.reexports.push({
712
+ exported: '*',
713
+ imported: '*',
714
+ local: path,
715
+ source
716
+ });
717
+ }
718
+ function collectFromExportSpecifier(path, source, state) {
719
+ if (path.isExportSpecifier()) {
720
+ const exported = getValue(path.get('exported'));
721
+ if (source) {
722
+ // It is `export { foo } from './css';`
723
+ const imported = path.get('local').node.name;
724
+ state.reexports.push({
725
+ exported,
726
+ imported,
727
+ local: path,
728
+ source
729
+ });
730
+ } else {
731
+ const local = path.get('local');
732
+ // eslint-disable-next-line no-param-reassign
733
+ state.exports[exported] = local;
734
+ }
735
+ return;
736
+ }
737
+ if (path.isExportDefaultSpecifier() && source) {
738
+ // It is `export default from './css';`
739
+ state.reexports.push({
740
+ exported: 'default',
741
+ imported: 'default',
742
+ local: path,
743
+ source
744
+ });
745
+ }
746
+ if (path.isExportNamespaceSpecifier() && source) {
747
+ const exported = path.get('exported').node.name;
748
+ // It is `export * as foo from './css';`
749
+ state.reexports.push({
750
+ exported,
751
+ imported: '*',
752
+ local: path,
753
+ source
754
+ });
755
+ }
756
+
757
+ // TODO: handle other cases
758
+ debug('collectFromExportSpecifier: unprocessed ExportSpecifier %o', path.node.type);
759
+ }
760
+ function collectFromExportNamedDeclaration(path, state) {
761
+ if (isType(path)) return;
762
+ const source = path.get('source')?.node?.value;
763
+ const specifiers = path.get('specifiers');
764
+ if (specifiers) {
765
+ specifiers.forEach(specifier => collectFromExportSpecifier(specifier, source, state));
766
+ }
767
+ const declaration = path.get('declaration');
768
+ if (declaration.isVariableDeclaration()) {
769
+ declaration.get('declarations').forEach(declarator => {
770
+ // eslint-disable-next-line no-param-reassign
771
+ state.exports = {
772
+ ...state.exports,
773
+ ...exportFromVariableDeclarator(declarator)
774
+ };
775
+ });
776
+ }
777
+ if (declaration.isTSEnumDeclaration()) {
778
+ // eslint-disable-next-line no-param-reassign
779
+ state.exports[declaration.get('id').node.name] = declaration;
780
+ }
781
+ if (declaration.isFunctionDeclaration()) {
782
+ const id = declaration.get('id');
783
+ if (id.isIdentifier()) {
784
+ // eslint-disable-next-line no-param-reassign
785
+ state.exports[id.node.name] = id;
786
+ }
787
+ }
788
+ if (declaration.isClassDeclaration()) {
789
+ const id = declaration.get('id');
790
+ if (id.isIdentifier()) {
791
+ // eslint-disable-next-line no-param-reassign
792
+ state.exports[id.node.name] = id;
793
+ }
794
+ }
795
+ }
796
+ function collectFromExportDefaultDeclaration(path, state) {
797
+ if (isType(path)) return;
798
+
799
+ // eslint-disable-next-line no-param-reassign
800
+ state.exports.default = path.get('declaration');
801
+ }
802
+ function collectFromAssignmentExpression(path, state) {
803
+ if (isChainOfVoidAssignment(path)) {
804
+ return;
805
+ }
806
+ const left = path.get('left');
807
+ const right = path.get('right');
808
+ let exported;
809
+ if (left.isMemberExpression() && isExports(left.get('object'))) {
810
+ const property = left.get('property');
811
+ if (property.isIdentifier()) {
812
+ exported = property.node.name;
813
+ }
814
+ } else if (isExports(left)) {
815
+ // module.exports = ...
816
+ if (!isAlreadyProcessed(right)) {
817
+ exported = 'default';
818
+ }
819
+ }
820
+ if (!exported) return;
821
+ if (!right.isCallExpression() || !isRequire(right.get('callee'))) {
822
+ // eslint-disable-next-line no-param-reassign
823
+ state.exports[exported] = right;
824
+ return;
825
+ }
826
+ const sourcePath = right.get('arguments')?.[0];
827
+ const source = sourcePath.isStringLiteral() ? sourcePath.node.value : undefined;
828
+ if (!source) return;
829
+
830
+ // It is `exports.foo = require('./css');`
831
+
832
+ if (state.exports[exported]) {
833
+ // eslint-disable-next-line no-param-reassign
834
+ delete state.exports[exported];
835
+ }
836
+ state.reexports.push({
837
+ exported,
838
+ imported: '*',
839
+ local: path,
840
+ source
841
+ });
842
+ path.skip();
843
+ }
844
+ function collectFromExportStarCall(path, state) {
845
+ const [requireCall, exports] = path.get('arguments');
846
+ if (!isExports(exports)) return;
847
+ if (!requireCall.isCallExpression()) return;
848
+ const callee = requireCall.get('callee');
849
+ const sourcePath = requireCall.get('arguments')?.[0];
850
+ if (!isRequire(callee) || !sourcePath.isStringLiteral()) return;
851
+ const source = sourcePath.node.value;
852
+ if (!source) return;
853
+ state.reexports.push({
854
+ exported: '*',
855
+ imported: '*',
856
+ local: path,
857
+ source
858
+ });
859
+ path.skip();
860
+ }
861
+ function collectFromMap(map, state) {
862
+ const properties = map.get('properties');
863
+ properties.forEach(property => {
864
+ if (!property.isObjectProperty()) return;
865
+ const key = property.get('key');
866
+ const value = property.get('value');
867
+ if (!key.isIdentifier()) return;
868
+ const exported = key.node.name;
869
+ if (!value.isFunction()) return;
870
+ if (value.node.params.length !== 0) return;
871
+ const returnValue = getReturnValue(value);
872
+ if (!returnValue) return;
873
+ addExport(returnValue, exported, state);
874
+ });
875
+ }
876
+ function collectFromEsbuildExportCall(path, state) {
877
+ const [sourceExports, map] = path.get('arguments');
878
+ if (!sourceExports.isIdentifier({
879
+ name: 'source_exports'
880
+ })) return;
881
+ if (!map.isObjectExpression()) return;
882
+ collectFromMap(map, state);
883
+ path.skip();
884
+ }
885
+ function collectFromEsbuildReExportCall(path, state) {
886
+ const [sourceExports, requireCall, exports] = path.get('arguments');
887
+ if (!sourceExports.isIdentifier({
888
+ name: 'source_exports'
889
+ })) return;
890
+ if (!requireCall.isCallExpression()) return;
891
+ if (!isExports(exports)) return;
892
+ const callee = requireCall.get('callee');
893
+ if (!isRequire(callee)) return;
894
+ const sourcePath = requireCall.get('arguments')?.[0];
895
+ if (!sourcePath.isStringLiteral()) return;
896
+ state.reexports.push({
897
+ exported: '*',
898
+ imported: '*',
899
+ local: path,
900
+ source: sourcePath.node.value
901
+ });
902
+ path.skip();
903
+ }
904
+ function collectFromSwcExportCall(path, state) {
905
+ const [exports, map] = path.get('arguments');
906
+ if (!isExports(exports)) return;
907
+ if (!map.isObjectExpression()) return;
908
+ collectFromMap(map, state);
909
+ path.skip();
910
+ }
911
+ function collectFromCallExpression(path, state) {
912
+ const maybeExportStart = path.get('callee');
913
+ if (!maybeExportStart.isIdentifier()) {
914
+ return;
915
+ }
916
+ const {
917
+ name
918
+ } = maybeExportStart.node;
919
+
920
+ // TypeScript
921
+ if (name.startsWith('__exportStar')) {
922
+ collectFromExportStarCall(path, state);
923
+ return;
924
+ }
925
+
926
+ // swc
927
+ if (name === '_exportStar') {
928
+ collectFromExportStarCall(path, state);
929
+ }
930
+ if (name === '_export') {
931
+ collectFromSwcExportCall(path, state);
932
+ }
933
+
934
+ // esbuild
935
+ if (name === '__export') {
936
+ collectFromEsbuildExportCall(path, state);
937
+ }
938
+ if (name === '__reExport') {
939
+ collectFromEsbuildReExportCall(path, state);
940
+ }
941
+ }
942
+ export function collectExportsAndImports(path, cacheMode = 'enabled') {
943
+ const localState = {
944
+ deadExports: [],
945
+ exportRefs: new Map(),
946
+ exports: {},
947
+ imports: [],
948
+ reexports: [],
949
+ isEsModule: path.node.sourceType === 'module',
950
+ processedRequires: new WeakSet()
951
+ };
952
+ const cache = cacheMode !== 'disabled' ? getTraversalCache(path, 'collectExportsAndImports') : undefined;
953
+ if (cacheMode === 'enabled' && cache?.has(path)) {
954
+ return cache.get(path) ?? localState;
955
+ }
956
+ path.traverse({
957
+ AssignmentExpression: collectFromAssignmentExpression,
958
+ CallExpression: collectFromCallExpression,
959
+ ExportAllDeclaration: collectFromExportAllDeclaration,
960
+ ExportDefaultDeclaration: collectFromExportDefaultDeclaration,
961
+ ExportNamedDeclaration: collectFromExportNamedDeclaration,
962
+ ImportDeclaration: collectFromImportDeclaration,
963
+ Import: collectFromDynamicImport,
964
+ Identifier: collectFromRequireOrExports,
965
+ VariableDeclarator: collectFromVariableDeclarator
966
+ }, localState);
967
+ const {
968
+ processedRequires,
969
+ ...state
970
+ } = localState;
971
+ cache?.set(path, state);
972
+ return state;
973
+ }
974
+ //# sourceMappingURL=collectExportsAndImports.js.map