@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,296 @@
1
+ import { logger } from '@wyw-in-js/shared';
2
+ import { collectExportsAndImports, sideEffectImport } from '../utils/collectExportsAndImports';
3
+ import { getFileIdx } from '../utils/getFileIdx';
4
+ import { isRemoved } from '../utils/isRemoved';
5
+ import { applyAction, dereference, findActionForNode, reference, removeWithRelated } from '../utils/scopeHelpers';
6
+ import { invalidateTraversalCache } from '../utils/traversalCache';
7
+ const EXT_REGEX = /\.[0-9a-z]+$/;
8
+ const ALLOWED_EXTENSIONS = ['.js', '.cjs', '.mjs'];
9
+ function shouldKeepSideEffect(importPath) {
10
+ const [ext] = importPath.match(EXT_REGEX) || [''];
11
+ return ext === '' || ALLOWED_EXTENSIONS.includes(ext);
12
+ }
13
+ function getBindingForExport(exportPath) {
14
+ if (exportPath.isIdentifier()) {
15
+ return exportPath.scope.getBinding(exportPath.node.name);
16
+ }
17
+ const variableDeclarator = exportPath.findParent(p => p.isVariableDeclarator());
18
+ if (variableDeclarator) {
19
+ const id = variableDeclarator.get('id');
20
+ if (id.isIdentifier()) {
21
+ return variableDeclarator.scope.getBinding(id.node.name);
22
+ }
23
+ }
24
+ if (exportPath.isAssignmentExpression()) {
25
+ const left = exportPath.get('left');
26
+ if (left.isIdentifier()) {
27
+ return exportPath.scope.getBinding(left.node.name);
28
+ }
29
+ }
30
+ if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {
31
+ return exportPath.scope.getBinding(exportPath.node.id.name);
32
+ }
33
+ return undefined;
34
+ }
35
+ const withoutRemoved = items => items.filter(({
36
+ local
37
+ }) => !isRemoved(local));
38
+ function rearrangeExports({
39
+ types: t
40
+ }, root, exportRefs, exports) {
41
+ const rearranged = {
42
+ ...exports
43
+ };
44
+ const rootScope = root.scope;
45
+ exportRefs.forEach((refs, name) => {
46
+ if (refs.length <= 1) {
47
+ if (refs.length === 1) {
48
+ // Maybe exports is assigned to another variable?
49
+ const declarator = refs[0].findParent(p => p.isVariableDeclarator());
50
+ if (!declarator) {
51
+ return;
52
+ }
53
+ } else {
54
+ return;
55
+ }
56
+ }
57
+ const uid = rootScope.generateUid(name);
58
+ // Define variable in the beginning
59
+ const [declaration] = root.unshiftContainer('body', [t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))])]);
60
+ rootScope.registerDeclaration(declaration);
61
+
62
+ // Replace every reference with defined variable
63
+ refs.forEach(ref => {
64
+ const [replaced] = ref.replaceWith(t.identifier(uid));
65
+ if (replaced.isBindingIdentifier()) {
66
+ rootScope.registerConstantViolation(replaced);
67
+ if (replaced.parentPath?.parentPath?.isVariableDeclarator()) {
68
+ // This is `const foo = exports.foo = "value"` case
69
+ reference(replaced, replaced, true);
70
+ }
71
+ } else {
72
+ reference(replaced);
73
+ }
74
+ });
75
+
76
+ // Assign defined variable to the export
77
+ const [pushed] = root.pushContainer('body', [t.expressionStatement(t.assignmentExpression('=', t.memberExpression(t.identifier('exports'), t.identifier(name)), t.identifier(uid)))]);
78
+ const local = pushed.get('expression.right');
79
+ reference(local);
80
+ rearranged[name] = local;
81
+ });
82
+ return rearranged;
83
+ }
84
+ export default function shakerPlugin(babel, {
85
+ keepSideEffects = false,
86
+ ifUnknownExport = 'skip-shaking',
87
+ onlyExports
88
+ }) {
89
+ const shakerLogger = logger.extend('shaker');
90
+ return {
91
+ name: '@wyw-in-js/transform/shaker',
92
+ pre(file) {
93
+ this.filename = file.opts.filename;
94
+ const log = shakerLogger.extend(getFileIdx(this.filename));
95
+ log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);
96
+ const onlyExportsSet = new Set(onlyExports);
97
+ const collected = collectExportsAndImports(file.path);
98
+ const sideEffectImports = collected.imports.filter(sideEffectImport);
99
+ log('import-and-exports', [`imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`, `exports: ${Object.values(collected.exports).length}`, `reexports: ${collected.reexports.length}`].join(', '));
100
+
101
+ // We cannot just throw out exports if they are referred in the code
102
+ // Let's dome some replacements
103
+ const exports = rearrangeExports(babel, file.path, collected.exportRefs, collected.exports);
104
+ Object.values(exports).forEach(local => {
105
+ if (local.isAssignmentExpression()) {
106
+ const left = local.get('left');
107
+ if (left.isIdentifier()) {
108
+ // For some reason babel does not mark id in AssignmentExpression as a reference
109
+ // So we need to do it manually
110
+ reference(left, left, true);
111
+ }
112
+ }
113
+ });
114
+ const hasLinariaPreval = exports.__linariaPreval !== undefined;
115
+ const hasDefault = exports.default !== undefined;
116
+
117
+ // If __linariaPreval is not exported, we can remove it from onlyExports
118
+ if (onlyExportsSet.has('__linariaPreval') && !hasLinariaPreval) {
119
+ onlyExportsSet.delete('__linariaPreval');
120
+ }
121
+ if (onlyExportsSet.size === 0) {
122
+ // Fast-lane: if there are no exports to keep, we can just shake out the whole file
123
+ this.imports = [];
124
+ this.exports = {};
125
+ this.reexports = [];
126
+ this.deadExports = Object.keys(exports);
127
+ file.path.get('body').forEach(p => {
128
+ p.remove();
129
+ });
130
+ return;
131
+ }
132
+ const importedAsSideEffect = onlyExportsSet.has('side-effect');
133
+ onlyExportsSet.delete('side-effect');
134
+
135
+ // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be
136
+ // shaken as they will break interopRequireDefault babel helper
137
+ // See example in shaker-plugin.test.ts
138
+ // Real-world example was found in preact/compat npm package
139
+ if (onlyExportsSet.has('default') && hasDefault && !collected.isEsModule) {
140
+ this.imports = collected.imports;
141
+ this.exports = exports;
142
+ this.reexports = collected.reexports;
143
+ this.deadExports = [];
144
+ return;
145
+ }
146
+ if (!onlyExportsSet.has('*')) {
147
+ // __esModule should be kept alive
148
+ onlyExportsSet.add('__esModule');
149
+ const aliveExports = new Set();
150
+ const importNames = collected.imports.map(({
151
+ imported
152
+ }) => imported);
153
+ Object.entries(exports).forEach(([exported, local]) => {
154
+ if (onlyExportsSet.has(exported)) {
155
+ aliveExports.add(local);
156
+ } else if (importNames.includes(local.node.name || '')) {
157
+ aliveExports.add(local);
158
+ } else if ([...aliveExports].some(alive => alive === local)) {
159
+ // It's possible to export multiple values from a single variable initializer, e.g
160
+ // export const { foo, bar } = baz();
161
+ // We need to treat all of them as used if any of them are used, since otherwise
162
+ // we'll attempt to delete the baz() call
163
+ aliveExports.add(local);
164
+ }
165
+ });
166
+ collected.reexports.forEach(exp => {
167
+ if (onlyExportsSet.has(exp.exported)) {
168
+ aliveExports.add(exp.local);
169
+ }
170
+ });
171
+ const exportToPath = new Map();
172
+ Object.entries(exports).forEach(([exported, local]) => {
173
+ exportToPath.set(exported, local);
174
+ });
175
+ collected.reexports.forEach(exp => {
176
+ exportToPath.set(exp.exported, exp.local);
177
+ });
178
+ const notFoundExports = [...onlyExportsSet].filter(exp => exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)));
179
+ exportToPath.clear();
180
+ const isAllExportsFound = notFoundExports.length === 0;
181
+ if (!isAllExportsFound && ifUnknownExport !== 'ignore') {
182
+ if (ifUnknownExport === 'error') {
183
+ throw new Error(`Unknown export(s) requested: ${onlyExports.join(',')}`);
184
+ }
185
+ if (ifUnknownExport === 'reexport-all') {
186
+ // If there are unknown exports, we have keep alive all re-exports.
187
+ if (exports['*'] !== undefined) {
188
+ aliveExports.add(exports['*']);
189
+ }
190
+ collected.reexports.forEach(exp => {
191
+ if (exp.exported === '*') {
192
+ aliveExports.add(exp.local);
193
+ }
194
+ });
195
+ }
196
+ if (ifUnknownExport === 'skip-shaking') {
197
+ this.imports = collected.imports;
198
+ this.exports = exports;
199
+ this.reexports = collected.reexports;
200
+ this.deadExports = [];
201
+ return;
202
+ }
203
+ }
204
+ const forDeleting = [...Object.values(exports), ...collected.reexports.map(i => i.local)].filter(exp => !aliveExports.has(exp));
205
+ if (!keepSideEffects && !importedAsSideEffect) {
206
+ // Remove all imports that don't import something explicitly and should not be kept
207
+ sideEffectImports.forEach(i => {
208
+ if (!shouldKeepSideEffect(i.source)) {
209
+ forDeleting.push(i.local);
210
+ }
211
+ });
212
+ }
213
+ const deleted = new Set();
214
+ let dereferenced = [];
215
+ let changed = true;
216
+ while (changed && deleted.size < forDeleting.length) {
217
+ changed = false;
218
+ // eslint-disable-next-line no-restricted-syntax
219
+ for (const path of forDeleting) {
220
+ if (deleted.has(path)) {
221
+ // eslint-disable-next-line no-continue
222
+ continue;
223
+ }
224
+ const binding = getBindingForExport(path);
225
+ const action = findActionForNode(path);
226
+ const parent = action?.[1];
227
+ const outerReferences = (binding?.referencePaths || []).filter(ref => ref !== parent && !parent?.isAncestor(ref));
228
+ if (outerReferences.length > 0 && path.isIdentifier()) {
229
+ // Temporary deref it in order to simplify further checks.
230
+ dereference(path);
231
+ dereferenced.push(path);
232
+ }
233
+ if (!deleted.has(path) && (!binding || outerReferences.length === 0)) {
234
+ if (action) {
235
+ applyAction(action);
236
+ } else {
237
+ removeWithRelated([path]);
238
+ }
239
+ deleted.add(path);
240
+ changed = true;
241
+ }
242
+ }
243
+ dereferenced.forEach(path => {
244
+ // If path is still alive, we need to reference it back
245
+ if (!isRemoved(path)) {
246
+ reference(path);
247
+ }
248
+ });
249
+ dereferenced = [];
250
+ }
251
+ }
252
+ this.imports = withoutRemoved(collected.imports);
253
+ this.exports = {};
254
+ this.deadExports = [];
255
+ Object.entries(exports).forEach(([exported, local]) => {
256
+ if (isRemoved(local)) {
257
+ this.deadExports.push(exported);
258
+ } else {
259
+ this.exports[exported] = local;
260
+ }
261
+ });
262
+ this.reexports = withoutRemoved(collected.reexports);
263
+ },
264
+ visitor: {},
265
+ post(file) {
266
+ const log = shakerLogger.extend(getFileIdx(file.opts.filename));
267
+ const processedImports = new Set();
268
+ const imports = new Map();
269
+ const addImport = ({
270
+ imported,
271
+ source
272
+ }) => {
273
+ if (processedImports.has(`${source}:${imported}`)) {
274
+ return;
275
+ }
276
+ if (!imports.has(source)) {
277
+ imports.set(source, []);
278
+ }
279
+ if (imported) {
280
+ imports.get(source).push(imported);
281
+ }
282
+ processedImports.add(`${source}:${imported}`);
283
+ };
284
+ this.imports.forEach(addImport);
285
+ this.reexports.forEach(addImport);
286
+ log('end', `remaining imports: %O`, imports);
287
+
288
+ // eslint-disable-next-line no-param-reassign
289
+ file.metadata.linariaEvaluator = {
290
+ imports
291
+ };
292
+ invalidateTraversalCache(file.path);
293
+ }
294
+ };
295
+ }
296
+ //# sourceMappingURL=shaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shaker.js","names":["logger","collectExportsAndImports","sideEffectImport","getFileIdx","isRemoved","applyAction","dereference","findActionForNode","reference","removeWithRelated","invalidateTraversalCache","EXT_REGEX","ALLOWED_EXTENSIONS","shouldKeepSideEffect","importPath","ext","match","includes","getBindingForExport","exportPath","isIdentifier","scope","getBinding","node","name","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","withoutRemoved","items","filter","local","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","ref","replaced","replaceWith","isBindingIdentifier","registerConstantViolation","parentPath","pushed","pushContainer","expressionStatement","assignmentExpression","memberExpression","shakerPlugin","babel","keepSideEffects","ifUnknownExport","onlyExports","shakerLogger","extend","pre","file","filename","opts","log","join","onlyExportsSet","Set","collected","path","sideEffectImports","imports","Object","values","reexports","hasLinariaPreval","__linariaPreval","hasDefault","default","has","delete","size","deadExports","keys","remove","importedAsSideEffect","isEsModule","add","aliveExports","importNames","map","imported","entries","exported","some","alive","exp","exportToPath","Map","set","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","source","push","deleted","dereferenced","changed","binding","action","parent","outerReferences","referencePaths","isAncestor","visitor","post","processedImports","addImport","metadata","linariaEvaluator"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n Identifier,\n MemberExpression,\n Program,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\n\nconst EXT_REGEX = /\\.[0-9a-z]+$/;\nconst ALLOWED_EXTENSIONS = ['.js', '.cjs', '.mjs'];\n\nfunction shouldKeepSideEffect(importPath: string) {\n const [ext] = importPath.match(EXT_REGEX) || [''];\n\n return ext === '' || ALLOWED_EXTENSIONS.includes(ext);\n}\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n keepSideEffects?: boolean;\n onlyExports: string[];\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return exportPath.scope.getBinding(exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return exportPath.scope.getBinding(left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n return exportPath.scope.getBinding(exportPath.node.id!.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n rootScope.registerConstantViolation(replaced);\n if (replaced.parentPath?.parentPath?.isVariableDeclarator()) {\n // This is `const foo = exports.foo = \"value\"` case\n reference(replaced, replaced, true);\n }\n } else {\n reference(replaced);\n }\n });\n\n // Assign defined variable to the export\n const [pushed] = root.pushContainer('body', [\n t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n ),\n ]);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n onlyExports,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const collected = collectExportsAndImports(file.path);\n const sideEffectImports = collected.imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${collected.imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasLinariaPreval = exports.__linariaPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __linariaPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__linariaPreval') && !hasLinariaPreval) {\n onlyExportsSet.delete('__linariaPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = collected.imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n } else if (\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n } else if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = collected.imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Remove all imports that don't import something explicitly and should not be kept\n sideEffectImports.forEach((i) => {\n if (!shouldKeepSideEffect(i.source)) {\n forDeleting.push(i.local);\n }\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed && deleted.size < forDeleting.length) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => ref !== parent && !parent?.isAncestor(ref)\n );\n if (outerReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n if (\n !deleted.has(path) &&\n (!binding || outerReferences.length === 0)\n ) {\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n }\n }\n\n this.imports = withoutRemoved(collected.imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).linariaEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"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"}
package/esm/shaker.js ADDED
@@ -0,0 +1,50 @@
1
+ import { hasShakerMetadata } from './utils/ShakerMetadata';
2
+ import { getPluginKey } from './utils/getPluginKey';
3
+ const hasKeyInList = (plugin, list) => {
4
+ const pluginKey = getPluginKey(plugin);
5
+ return pluginKey ? list.some(i => pluginKey.includes(i)) : false;
6
+ };
7
+ const safeResolve = (id, paths) => {
8
+ try {
9
+ return require.resolve(id, {
10
+ paths: paths.filter(i => i !== null)
11
+ });
12
+ } catch {
13
+ return null;
14
+ }
15
+ };
16
+ const shaker = (evalConfig, ast, code, {
17
+ highPriorityPlugins,
18
+ ...config
19
+ }, babel) => {
20
+ const preShakePlugins = evalConfig.plugins?.filter(i => hasKeyInList(i, highPriorityPlugins)) ?? [];
21
+ const plugins = [...preShakePlugins, [require.resolve('./plugins/shaker'), config], ...(evalConfig.plugins ?? []).filter(i => !hasKeyInList(i, highPriorityPlugins))];
22
+ const hasCommonjsPlugin = evalConfig.plugins?.some(i => getPluginKey(i) === 'transform-modules-commonjs');
23
+ if (!hasCommonjsPlugin) {
24
+ plugins.push(require.resolve('@babel/plugin-transform-modules-commonjs'));
25
+ }
26
+ if (evalConfig.filename?.endsWith('.ts') || evalConfig.filename?.endsWith('.tsx')) {
27
+ const hasTypescriptPlugin = evalConfig.plugins?.some(i => getPluginKey(i) === 'transform-typescript');
28
+ if (!hasTypescriptPlugin) {
29
+ const preset = safeResolve('@babel/preset-typescript', [evalConfig.filename]);
30
+ const plugin = safeResolve('@babel/plugin-transform-typescript', [evalConfig.filename, preset]);
31
+ if (plugin) {
32
+ plugins.push(plugin);
33
+ }
34
+ }
35
+ }
36
+ const transformOptions = {
37
+ ...evalConfig,
38
+ caller: {
39
+ name: 'linaria'
40
+ },
41
+ plugins
42
+ };
43
+ const transformed = babel.transformFromAstSync(ast, code, transformOptions);
44
+ if (!transformed || !hasShakerMetadata(transformed.metadata)) {
45
+ throw new Error(`${evalConfig.filename} has no shaker metadata`);
46
+ }
47
+ return [transformed.ast, transformed.code ?? '', transformed.metadata.linariaEvaluator.imports];
48
+ };
49
+ export default shaker;
50
+ //# sourceMappingURL=shaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shaker.js","names":["hasShakerMetadata","getPluginKey","hasKeyInList","plugin","list","pluginKey","some","i","includes","safeResolve","id","paths","require","resolve","filter","shaker","evalConfig","ast","code","highPriorityPlugins","config","babel","preShakePlugins","plugins","hasCommonjsPlugin","push","filename","endsWith","hasTypescriptPlugin","preset","transformOptions","caller","name","transformed","transformFromAstSync","metadata","Error","linariaEvaluator","imports"],"sources":["../src/shaker.ts"],"sourcesContent":["import type { TransformOptions, PluginItem } from '@babel/core';\n\nimport type { Evaluator } from '@wyw-in-js/shared';\n\nimport { hasShakerMetadata } from './utils/ShakerMetadata';\nimport { getPluginKey } from './utils/getPluginKey';\n\nconst hasKeyInList = (plugin: PluginItem, list: string[]): boolean => {\n const pluginKey = getPluginKey(plugin);\n return pluginKey ? list.some((i) => pluginKey.includes(i)) : false;\n};\n\nconst safeResolve = (id: string, paths: (string | null)[]): string | null => {\n try {\n return require.resolve(id, {\n paths: paths.filter((i) => i !== null) as string[],\n });\n } catch {\n return null;\n }\n};\n\nconst shaker: Evaluator = (\n evalConfig,\n ast,\n code,\n { highPriorityPlugins, ...config },\n babel\n) => {\n const preShakePlugins =\n evalConfig.plugins?.filter((i) => hasKeyInList(i, highPriorityPlugins)) ??\n [];\n\n const plugins = [\n ...preShakePlugins,\n [require.resolve('./plugins/shaker'), config],\n ...(evalConfig.plugins ?? []).filter(\n (i) => !hasKeyInList(i, highPriorityPlugins)\n ),\n ];\n\n const hasCommonjsPlugin = evalConfig.plugins?.some(\n (i) => getPluginKey(i) === 'transform-modules-commonjs'\n );\n\n if (!hasCommonjsPlugin) {\n plugins.push(require.resolve('@babel/plugin-transform-modules-commonjs'));\n }\n\n if (\n evalConfig.filename?.endsWith('.ts') ||\n evalConfig.filename?.endsWith('.tsx')\n ) {\n const hasTypescriptPlugin = evalConfig.plugins?.some(\n (i) => getPluginKey(i) === 'transform-typescript'\n );\n\n if (!hasTypescriptPlugin) {\n const preset = safeResolve('@babel/preset-typescript', [\n evalConfig.filename,\n ]);\n const plugin = safeResolve('@babel/plugin-transform-typescript', [\n evalConfig.filename,\n preset,\n ]);\n\n if (plugin) {\n plugins.push(plugin);\n }\n }\n }\n\n const transformOptions: TransformOptions = {\n ...evalConfig,\n caller: {\n name: 'linaria',\n },\n plugins,\n };\n\n const transformed = babel.transformFromAstSync(ast, code, transformOptions);\n\n if (!transformed || !hasShakerMetadata(transformed.metadata)) {\n throw new Error(`${evalConfig.filename} has no shaker metadata`);\n }\n\n return [\n transformed.ast!,\n transformed.code ?? '',\n transformed.metadata.linariaEvaluator.imports,\n ];\n};\n\nexport default shaker;\n"],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ /* eslint-disable no-param-reassign */
2
+
3
+ import { getFileIdx } from '../utils/getFileIdx';
4
+ const hasKey = (obj, key) => (typeof obj === 'object' || typeof obj === 'function') && obj !== null && key in obj;
5
+ const VALUES = Symbol('values');
6
+ const isProxy = obj => typeof obj === 'object' && obj !== null && VALUES in obj;
7
+ export const createExports = log => {
8
+ let exports = {};
9
+ const lazyFields = new Set();
10
+ return new Proxy(exports, {
11
+ get: (_target, key) => {
12
+ if (key === VALUES) {
13
+ return exports;
14
+ }
15
+ let value;
16
+ if (key in exports) {
17
+ value = exports[key];
18
+ } else {
19
+ // Support Object.prototype methods on `exports`
20
+ // e.g `exports.hasOwnProperty`
21
+ value = Reflect.get(exports, key);
22
+ }
23
+ if (value === undefined && 'default' in exports) {
24
+ const defaultValue = exports.default;
25
+ if (hasKey(defaultValue, key)) {
26
+ log('⚠️ %s has been found in `default`. It indicates that ESM to CJS conversion went wrong.', key);
27
+ value = defaultValue[key];
28
+ }
29
+ }
30
+ if (value !== undefined && lazyFields.has(key)) {
31
+ value = value();
32
+ }
33
+ log('get %s: %o', key, value);
34
+ return value;
35
+ },
36
+ has: (_target, key) => {
37
+ if (key === VALUES) return true;
38
+ return key in exports;
39
+ },
40
+ ownKeys: () => {
41
+ return Object.keys(exports);
42
+ },
43
+ set: (_target, key, value) => {
44
+ if (key === VALUES) {
45
+ exports = value;
46
+ return true;
47
+ }
48
+ if (key !== '__esModule') {
49
+ log('set %s: %o', key, value);
50
+ }
51
+ if (value !== undefined) {
52
+ exports[key] = value;
53
+ lazyFields.delete(key);
54
+ }
55
+ return true;
56
+ },
57
+ defineProperty: (_target, key, descriptor) => {
58
+ const {
59
+ value
60
+ } = descriptor;
61
+ if (value !== undefined) {
62
+ if (key !== '__esModule') {
63
+ log('defineProperty %s with value %o', key, value);
64
+ }
65
+ exports[key] = value;
66
+ lazyFields.delete(key);
67
+ return true;
68
+ }
69
+ if ('get' in descriptor) {
70
+ if (lazyFields.has(key)) {
71
+ const prev = exports[key];
72
+ exports[key] = () => {
73
+ const v = descriptor.get?.();
74
+ if (v !== undefined) {
75
+ return v;
76
+ }
77
+ return prev();
78
+ };
79
+ } else {
80
+ const prev = exports[key];
81
+ exports[key] = () => {
82
+ const v = descriptor.get?.();
83
+ if (v !== undefined) {
84
+ return v;
85
+ }
86
+ return prev;
87
+ };
88
+ }
89
+ lazyFields.add(key);
90
+ log('defineProperty %s with getter', key);
91
+ }
92
+ return true;
93
+ },
94
+ getOwnPropertyDescriptor: (_target, key) => {
95
+ if (key in exports) return {
96
+ enumerable: true,
97
+ configurable: true
98
+ };
99
+ return undefined;
100
+ }
101
+ });
102
+ };
103
+ const EXPORTS = Symbol('exports');
104
+ let entrypointSeqId = 0;
105
+ export class BaseEntrypoint {
106
+ static createExports = createExports;
107
+ // eslint-disable-next-line no-plusplus
108
+ seqId = entrypointSeqId++;
109
+ #exports;
110
+ constructor(services, evaluatedOnly, exports, generation, name, only, parents) {
111
+ this.services = services;
112
+ this.evaluatedOnly = evaluatedOnly;
113
+ this.generation = generation;
114
+ this.name = name;
115
+ this.only = only;
116
+ this.parents = parents;
117
+ this.idx = getFileIdx(name);
118
+ this.log = parents[0]?.log.extend(this.ref, '->') ?? services.log.extend(this.ref);
119
+ let isExportsInherited = false;
120
+ if (exports) {
121
+ if (isProxy(exports)) {
122
+ this.#exports = exports;
123
+ isExportsInherited = true;
124
+ } else {
125
+ this.#exports = createExports(this.log);
126
+ this.#exports[EXPORTS] = exports;
127
+ }
128
+ this.exports = exports;
129
+ } else {
130
+ this.#exports = BaseEntrypoint.createExports(this.log);
131
+ }
132
+ services.eventEmitter.entrypointEvent(this.seqId, {
133
+ class: this.constructor.name,
134
+ evaluatedOnly: this.evaluatedOnly,
135
+ filename: name,
136
+ generation,
137
+ idx: this.idx,
138
+ isExportsInherited,
139
+ only,
140
+ parentId: parents[0]?.seqId ?? null,
141
+ type: 'created'
142
+ });
143
+ }
144
+ get exports() {
145
+ if (EXPORTS in this.#exports) {
146
+ return this.#exports[EXPORTS];
147
+ }
148
+ return this.#exports;
149
+ }
150
+ set exports(value) {
151
+ if (isProxy(value)) {
152
+ this.#exports[VALUES] = value[VALUES];
153
+ } else {
154
+ this.#exports[EXPORTS] = value;
155
+ }
156
+ }
157
+ get ref() {
158
+ return `${this.idx}#${this.generation}`;
159
+ }
160
+ get exportsProxy() {
161
+ return this.#exports;
162
+ }
163
+ }
164
+ //# sourceMappingURL=BaseEntrypoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseEntrypoint.js","names":["getFileIdx","hasKey","obj","key","VALUES","Symbol","isProxy","createExports","log","exports","lazyFields","Set","Proxy","get","_target","value","Reflect","undefined","defaultValue","default","has","ownKeys","Object","keys","set","delete","defineProperty","descriptor","prev","v","add","getOwnPropertyDescriptor","enumerable","configurable","EXPORTS","entrypointSeqId","BaseEntrypoint","seqId","constructor","services","evaluatedOnly","generation","name","only","parents","idx","extend","ref","isExportsInherited","eventEmitter","entrypointEvent","class","filename","parentId","type","exportsProxy"],"sources":["../../src/transform/BaseEntrypoint.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { Debugger } from '@wyw-in-js/shared';\n\nimport type { ParentEntrypoint } from '../types';\nimport { getFileIdx } from '../utils/getFileIdx';\n\nimport type { Services } from './types';\n\nconst hasKey = <TKey extends string | symbol>(\n obj: unknown,\n key: TKey\n): obj is Record<TKey, unknown> =>\n (typeof obj === 'object' || typeof obj === 'function') &&\n obj !== null &&\n key in obj;\n\nconst VALUES = Symbol('values');\n\nconst isProxy = (\n obj: unknown\n): obj is { [VALUES]: Record<string | symbol, unknown> } =>\n typeof obj === 'object' && obj !== null && VALUES in obj;\n\nexport const createExports = (log: Debugger) => {\n let exports: Record<string | symbol, unknown> = {};\n const lazyFields = new Set<string | symbol>();\n\n return new Proxy(exports, {\n get: (_target, key) => {\n if (key === VALUES) {\n return exports;\n }\n\n let value: unknown;\n if (key in exports) {\n value = exports[key];\n } else {\n // Support Object.prototype methods on `exports`\n // e.g `exports.hasOwnProperty`\n value = Reflect.get(exports, key);\n }\n\n if (value === undefined && 'default' in exports) {\n const defaultValue = exports.default;\n if (hasKey(defaultValue, key)) {\n log(\n '⚠️ %s has been found in `default`. It indicates that ESM to CJS conversion went wrong.',\n key\n );\n value = defaultValue[key];\n }\n }\n\n if (value !== undefined && lazyFields.has(key)) {\n value = (value as () => unknown)();\n }\n\n log('get %s: %o', key, value);\n return value;\n },\n has: (_target, key) => {\n if (key === VALUES) return true;\n return key in exports;\n },\n ownKeys: () => {\n return Object.keys(exports);\n },\n set: (_target, key, value) => {\n if (key === VALUES) {\n exports = value;\n return true;\n }\n\n if (key !== '__esModule') {\n log('set %s: %o', key, value);\n }\n\n if (value !== undefined) {\n exports[key] = value;\n lazyFields.delete(key);\n }\n\n return true;\n },\n defineProperty: (_target, key, descriptor) => {\n const { value } = descriptor;\n if (value !== undefined) {\n if (key !== '__esModule') {\n log('defineProperty %s with value %o', key, value);\n }\n\n exports[key] = value;\n lazyFields.delete(key);\n\n return true;\n }\n\n if ('get' in descriptor) {\n if (lazyFields.has(key)) {\n const prev = exports[key] as () => void;\n exports[key] = () => {\n const v = descriptor.get?.();\n if (v !== undefined) {\n return v;\n }\n\n return prev();\n };\n } else {\n const prev = exports[key];\n exports[key] = () => {\n const v = descriptor.get?.();\n if (v !== undefined) {\n return v;\n }\n\n return prev;\n };\n }\n\n lazyFields.add(key);\n log('defineProperty %s with getter', key);\n }\n\n return true;\n },\n getOwnPropertyDescriptor: (_target, key) => {\n if (key in exports)\n return {\n enumerable: true,\n configurable: true,\n };\n\n return undefined;\n },\n });\n};\n\nconst EXPORTS = Symbol('exports');\n\nlet entrypointSeqId = 0;\n\nexport abstract class BaseEntrypoint {\n public static createExports = createExports;\n\n public readonly idx: string;\n\n public readonly log: Debugger;\n\n // eslint-disable-next-line no-plusplus\n public readonly seqId = entrypointSeqId++;\n\n readonly #exports: Record<string | symbol, unknown>;\n\n protected constructor(\n protected services: Services,\n public readonly evaluatedOnly: string[],\n exports: Record<string | symbol, unknown> | undefined,\n public readonly generation: number,\n public readonly name: string,\n public readonly only: string[],\n public readonly parents: ParentEntrypoint[]\n ) {\n this.idx = getFileIdx(name);\n this.log =\n parents[0]?.log.extend(this.ref, '->') ?? services.log.extend(this.ref);\n\n let isExportsInherited = false;\n if (exports) {\n if (isProxy(exports)) {\n this.#exports = exports;\n isExportsInherited = true;\n } else {\n this.#exports = createExports(this.log);\n this.#exports[EXPORTS] = exports;\n }\n this.exports = exports;\n } else {\n this.#exports = BaseEntrypoint.createExports(this.log);\n }\n\n services.eventEmitter.entrypointEvent(this.seqId, {\n class: this.constructor.name,\n evaluatedOnly: this.evaluatedOnly,\n filename: name,\n generation,\n idx: this.idx,\n isExportsInherited,\n only,\n parentId: parents[0]?.seqId ?? null,\n type: 'created',\n });\n }\n\n public get exports(): Record<string | symbol, unknown> {\n if (EXPORTS in this.#exports) {\n return this.#exports[EXPORTS] as Record<string | symbol, unknown>;\n }\n\n return this.#exports;\n }\n\n public set exports(value: unknown) {\n if (isProxy(value)) {\n this.#exports[VALUES] = value[VALUES];\n } else {\n this.#exports[EXPORTS] = value;\n }\n }\n\n public get ref() {\n return `${this.idx}#${this.generation}`;\n }\n\n protected get exportsProxy() {\n return this.#exports;\n }\n}\n"],"mappings":"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"}