@atlaspack/core 2.16.2-canary.48 → 2.16.2-canary.481

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 (380) hide show
  1. package/CHANGELOG.md +1324 -0
  2. package/dist/AssetGraph.js +523 -0
  3. package/dist/Atlaspack.js +701 -0
  4. package/dist/AtlaspackConfig.js +324 -0
  5. package/dist/AtlaspackConfig.schema.js +117 -0
  6. package/dist/BundleGraph.js +1906 -0
  7. package/dist/CommittedAsset.js +142 -0
  8. package/dist/Dependency.js +125 -0
  9. package/dist/Environment.js +132 -0
  10. package/dist/EnvironmentManager.js +108 -0
  11. package/dist/IdentifierRegistry.js +38 -0
  12. package/dist/InternalConfig.js +37 -0
  13. package/dist/PackagerRunner.js +470 -0
  14. package/dist/ReporterRunner.js +151 -0
  15. package/dist/RequestTracker.js +1297 -0
  16. package/dist/SymbolPropagation.js +624 -0
  17. package/dist/TargetDescriptor.schema.js +146 -0
  18. package/dist/Transformation.js +514 -0
  19. package/dist/UncommittedAsset.js +310 -0
  20. package/dist/Validation.js +196 -0
  21. package/dist/applyRuntimes.js +384 -0
  22. package/dist/assetUtils.js +169 -0
  23. package/dist/atlaspack-v3/AtlaspackV3.js +83 -0
  24. package/dist/atlaspack-v3/NapiWorkerPool.js +114 -0
  25. package/dist/atlaspack-v3/fs.js +53 -0
  26. package/dist/atlaspack-v3/index.js +25 -0
  27. package/dist/atlaspack-v3/jsCallable.js +16 -0
  28. package/dist/atlaspack-v3/worker/compat/asset-symbols.js +190 -0
  29. package/dist/atlaspack-v3/worker/compat/bitflags.js +98 -0
  30. package/dist/atlaspack-v3/worker/compat/dependency.js +43 -0
  31. package/dist/atlaspack-v3/worker/compat/environment.js +57 -0
  32. package/dist/atlaspack-v3/worker/compat/index.js +24 -0
  33. package/dist/atlaspack-v3/worker/compat/mutable-asset.js +152 -0
  34. package/dist/atlaspack-v3/worker/compat/plugin-config.js +64 -0
  35. package/dist/atlaspack-v3/worker/compat/plugin-options.js +137 -0
  36. package/dist/atlaspack-v3/worker/compat/plugin-tracer.js +10 -0
  37. package/dist/atlaspack-v3/worker/compat/target.js +14 -0
  38. package/dist/atlaspack-v3/worker/side-effect-detector.js +243 -0
  39. package/dist/atlaspack-v3/worker/worker.js +398 -0
  40. package/dist/constants.js +17 -0
  41. package/dist/dumpGraphToGraphViz.js +281 -0
  42. package/dist/index.js +62 -0
  43. package/dist/loadAtlaspackPlugin.js +128 -0
  44. package/dist/loadDotEnv.js +41 -0
  45. package/dist/projectPath.js +83 -0
  46. package/dist/public/Asset.js +279 -0
  47. package/dist/public/Bundle.js +224 -0
  48. package/dist/public/BundleGraph.js +371 -0
  49. package/dist/public/BundleGroup.js +53 -0
  50. package/dist/public/Config.js +286 -0
  51. package/dist/public/Dependency.js +138 -0
  52. package/dist/public/Environment.js +278 -0
  53. package/dist/public/MutableBundleGraph.js +277 -0
  54. package/dist/public/PluginOptions.js +80 -0
  55. package/dist/public/Symbols.js +248 -0
  56. package/dist/public/Target.js +69 -0
  57. package/dist/registerCoreWithSerializer.js +38 -0
  58. package/dist/requests/AssetGraphRequest.js +430 -0
  59. package/dist/requests/AssetGraphRequestRust.js +471 -0
  60. package/dist/requests/AssetRequest.js +130 -0
  61. package/dist/requests/AtlaspackBuildRequest.js +98 -0
  62. package/dist/requests/AtlaspackConfigRequest.js +493 -0
  63. package/dist/requests/BundleGraphRequest.js +381 -0
  64. package/dist/requests/BundleGraphRequestRust.js +324 -0
  65. package/dist/requests/BundleGraphRequestUtils.js +262 -0
  66. package/dist/requests/ConfigRequest.js +246 -0
  67. package/dist/requests/DevDepRequest.js +204 -0
  68. package/dist/requests/EntryRequest.js +314 -0
  69. package/dist/requests/PackageRequest.js +89 -0
  70. package/dist/requests/PathRequest.js +349 -0
  71. package/dist/requests/TargetRequest.js +1316 -0
  72. package/dist/requests/ValidationRequest.js +49 -0
  73. package/dist/requests/WriteBundleRequest.js +522 -0
  74. package/dist/requests/WriteBundlesRequest.js +190 -0
  75. package/dist/requests/asset-graph-diff.js +128 -0
  76. package/dist/requests/asset-graph-dot.js +131 -0
  77. package/dist/resolveOptions.js +267 -0
  78. package/dist/rustWorkerThreadDylibHack.js +19 -0
  79. package/dist/serializerCore.browser.js +43 -0
  80. package/dist/summarizeRequest.js +39 -0
  81. package/dist/types.js +31 -0
  82. package/dist/utils.js +172 -0
  83. package/dist/worker.js +123 -0
  84. package/lib/AssetGraph.js +53 -15
  85. package/lib/Atlaspack.js +140 -56
  86. package/lib/AtlaspackConfig.js +17 -6
  87. package/lib/AtlaspackConfig.schema.js +16 -5
  88. package/lib/BundleGraph.js +390 -43
  89. package/lib/CommittedAsset.js +8 -2
  90. package/lib/Dependency.js +9 -3
  91. package/lib/Environment.js +16 -10
  92. package/lib/EnvironmentManager.js +143 -0
  93. package/lib/IdentifierRegistry.js +2 -4
  94. package/lib/InternalConfig.js +3 -2
  95. package/lib/PackagerRunner.js +46 -82
  96. package/lib/ReporterRunner.js +8 -12
  97. package/lib/RequestTracker.js +191 -152
  98. package/lib/SymbolPropagation.js +52 -29
  99. package/lib/TargetDescriptor.schema.js +10 -1
  100. package/lib/Transformation.js +68 -19
  101. package/lib/UncommittedAsset.js +17 -24
  102. package/lib/Validation.js +20 -5
  103. package/lib/applyRuntimes.js +98 -7
  104. package/lib/assetUtils.js +16 -6
  105. package/lib/atlaspack-v3/AtlaspackV3.js +58 -15
  106. package/lib/atlaspack-v3/NapiWorkerPool.js +63 -2
  107. package/lib/atlaspack-v3/fs.js +4 -1
  108. package/lib/atlaspack-v3/index.js +28 -1
  109. package/lib/atlaspack-v3/jsCallable.js +0 -2
  110. package/lib/atlaspack-v3/worker/compat/asset-symbols.js +7 -4
  111. package/lib/atlaspack-v3/worker/compat/bitflags.js +31 -25
  112. package/lib/atlaspack-v3/worker/compat/dependency.js +4 -1
  113. package/lib/atlaspack-v3/worker/compat/environment.js +10 -7
  114. package/lib/atlaspack-v3/worker/compat/index.js +0 -11
  115. package/lib/atlaspack-v3/worker/compat/mutable-asset.js +16 -11
  116. package/lib/atlaspack-v3/worker/compat/plugin-config.js +14 -35
  117. package/lib/atlaspack-v3/worker/compat/plugin-options.js +16 -2
  118. package/lib/atlaspack-v3/worker/compat/plugin-tracer.js +3 -0
  119. package/lib/atlaspack-v3/worker/compat/target.js +2 -0
  120. package/lib/atlaspack-v3/worker/index.js +3 -0
  121. package/lib/atlaspack-v3/worker/side-effect-detector.js +214 -0
  122. package/lib/atlaspack-v3/worker/worker.js +231 -79
  123. package/lib/constants.js +0 -1
  124. package/lib/dumpGraphToGraphViz.js +72 -17
  125. package/lib/index.js +46 -3
  126. package/lib/loadAtlaspackPlugin.js +2 -3
  127. package/lib/loadDotEnv.js +5 -2
  128. package/lib/projectPath.js +6 -1
  129. package/lib/public/Asset.js +22 -12
  130. package/lib/public/Bundle.js +16 -18
  131. package/lib/public/BundleGraph.js +27 -25
  132. package/lib/public/BundleGroup.js +5 -6
  133. package/lib/public/Config.js +118 -18
  134. package/lib/public/Dependency.js +9 -7
  135. package/lib/public/Environment.js +13 -8
  136. package/lib/public/MutableBundleGraph.js +56 -15
  137. package/lib/public/PluginOptions.js +2 -2
  138. package/lib/public/Symbols.js +12 -12
  139. package/lib/public/Target.js +8 -7
  140. package/lib/registerCoreWithSerializer.js +7 -4
  141. package/lib/requests/AssetGraphRequest.js +61 -40
  142. package/lib/requests/AssetGraphRequestRust.js +314 -82
  143. package/lib/requests/AssetRequest.js +24 -7
  144. package/lib/requests/AtlaspackBuildRequest.js +53 -7
  145. package/lib/requests/AtlaspackConfigRequest.js +29 -19
  146. package/lib/requests/BundleGraphRequest.js +61 -130
  147. package/lib/requests/BundleGraphRequestRust.js +381 -0
  148. package/lib/requests/BundleGraphRequestUtils.js +280 -0
  149. package/lib/requests/ConfigRequest.js +55 -7
  150. package/lib/requests/DevDepRequest.js +32 -6
  151. package/lib/requests/EntryRequest.js +4 -3
  152. package/lib/requests/PackageRequest.js +56 -12
  153. package/lib/requests/PathRequest.js +26 -6
  154. package/lib/requests/TargetRequest.js +129 -60
  155. package/lib/requests/ValidationRequest.js +6 -2
  156. package/lib/requests/WriteBundleRequest.js +329 -20
  157. package/lib/requests/WriteBundlesRequest.js +64 -10
  158. package/lib/requests/asset-graph-diff.js +13 -8
  159. package/lib/requests/asset-graph-dot.js +2 -8
  160. package/lib/resolveOptions.js +37 -14
  161. package/lib/rustWorkerThreadDylibHack.js +0 -1
  162. package/lib/serializerCore.browser.js +1 -2
  163. package/lib/summarizeRequest.js +1 -1
  164. package/lib/types/AssetGraph.d.ts +55 -0
  165. package/lib/types/Atlaspack.d.ts +52 -0
  166. package/lib/types/AtlaspackConfig.d.ts +65 -0
  167. package/lib/types/AtlaspackConfig.schema.d.ts +53 -0
  168. package/lib/types/BundleGraph.d.ts +232 -0
  169. package/lib/types/CommittedAsset.d.ts +23 -0
  170. package/lib/types/Dependency.d.ts +44 -0
  171. package/lib/types/Environment.d.ts +11 -0
  172. package/lib/types/EnvironmentManager.d.ts +37 -0
  173. package/lib/types/IdentifierRegistry.d.ts +6 -0
  174. package/lib/types/InternalConfig.d.ts +23 -0
  175. package/lib/types/PackagerRunner.d.ts +85 -0
  176. package/lib/types/ReporterRunner.d.ts +25 -0
  177. package/lib/types/RequestTracker.d.ts +385 -0
  178. package/lib/types/SymbolPropagation.d.ts +11 -0
  179. package/lib/types/TargetDescriptor.schema.d.ts +5 -0
  180. package/lib/types/Transformation.d.ts +72 -0
  181. package/lib/types/UncommittedAsset.d.ts +61 -0
  182. package/lib/types/Validation.d.ts +37 -0
  183. package/lib/types/applyRuntimes.d.ts +25 -0
  184. package/lib/types/assetUtils.d.ts +42 -0
  185. package/lib/types/atlaspack-v3/AtlaspackV3.d.ts +35 -0
  186. package/lib/types/atlaspack-v3/NapiWorkerPool.d.ts +13 -0
  187. package/lib/types/atlaspack-v3/fs.d.ts +13 -0
  188. package/lib/types/atlaspack-v3/index.d.ts +6 -0
  189. package/lib/types/atlaspack-v3/jsCallable.d.ts +1 -0
  190. package/lib/types/atlaspack-v3/worker/compat/asset-symbols.d.ts +51 -0
  191. package/lib/types/atlaspack-v3/worker/compat/bitflags.d.ts +14 -0
  192. package/lib/types/atlaspack-v3/worker/compat/dependency.d.ts +25 -0
  193. package/lib/types/atlaspack-v3/worker/compat/environment.d.ts +27 -0
  194. package/{src/atlaspack-v3/worker/compat/index.js → lib/types/atlaspack-v3/worker/compat/index.d.ts} +0 -2
  195. package/lib/types/atlaspack-v3/worker/compat/mutable-asset.d.ts +49 -0
  196. package/lib/types/atlaspack-v3/worker/compat/plugin-config.d.ts +29 -0
  197. package/lib/types/atlaspack-v3/worker/compat/plugin-options.d.ts +23 -0
  198. package/lib/types/atlaspack-v3/worker/compat/plugin-tracer.d.ts +5 -0
  199. package/lib/types/atlaspack-v3/worker/compat/target.d.ts +11 -0
  200. package/lib/types/atlaspack-v3/worker/side-effect-detector.d.ts +76 -0
  201. package/lib/types/atlaspack-v3/worker/worker.d.ts +81 -0
  202. package/lib/types/constants.d.ts +13 -0
  203. package/lib/types/dumpGraphToGraphViz.d.ts +10 -0
  204. package/lib/types/index.d.ts +8 -0
  205. package/lib/types/loadAtlaspackPlugin.d.ts +8 -0
  206. package/lib/types/loadDotEnv.d.ts +3 -0
  207. package/lib/types/projectPath.d.ts +19 -0
  208. package/lib/types/public/Asset.d.ts +74 -0
  209. package/lib/types/public/Bundle.d.ts +45 -0
  210. package/lib/types/public/BundleGraph.d.ts +72 -0
  211. package/lib/types/public/BundleGroup.d.ts +12 -0
  212. package/lib/types/public/Config.d.ts +75 -0
  213. package/lib/types/public/Dependency.d.ts +32 -0
  214. package/lib/types/public/Environment.d.ts +34 -0
  215. package/lib/types/public/MutableBundleGraph.d.ts +26 -0
  216. package/lib/types/public/PluginOptions.d.ts +25 -0
  217. package/lib/types/public/Symbols.d.ts +81 -0
  218. package/lib/types/public/Target.d.ts +16 -0
  219. package/lib/types/registerCoreWithSerializer.d.ts +2 -0
  220. package/lib/types/requests/AssetGraphRequest.d.ts +76 -0
  221. package/lib/types/requests/AssetGraphRequestRust.d.ts +21 -0
  222. package/lib/types/requests/AssetRequest.d.ts +16 -0
  223. package/lib/types/requests/AtlaspackBuildRequest.d.ts +33 -0
  224. package/lib/types/requests/AtlaspackConfigRequest.d.ts +45 -0
  225. package/lib/types/requests/BundleGraphRequest.d.ts +28 -0
  226. package/lib/types/requests/BundleGraphRequestRust.d.ts +34 -0
  227. package/lib/types/requests/BundleGraphRequestUtils.d.ts +38 -0
  228. package/lib/types/requests/ConfigRequest.d.ts +67 -0
  229. package/lib/types/requests/DevDepRequest.d.ts +30 -0
  230. package/lib/types/requests/EntryRequest.d.ts +36 -0
  231. package/lib/types/requests/PackageRequest.d.ts +27 -0
  232. package/lib/types/requests/PathRequest.d.ts +48 -0
  233. package/lib/types/requests/TargetRequest.d.ts +48 -0
  234. package/lib/types/requests/ValidationRequest.d.ts +20 -0
  235. package/lib/types/requests/WriteBundleRequest.d.ts +80 -0
  236. package/lib/types/requests/WriteBundlesRequest.d.ts +32 -0
  237. package/lib/types/requests/asset-graph-diff.d.ts +1 -0
  238. package/lib/types/requests/asset-graph-dot.d.ts +9 -0
  239. package/lib/types/resolveOptions.d.ts +3 -0
  240. package/lib/types/rustWorkerThreadDylibHack.d.ts +9 -0
  241. package/lib/types/serializerCore.browser.d.ts +3 -0
  242. package/lib/types/summarizeRequest.d.ts +10 -0
  243. package/lib/types/types.d.ts +496 -0
  244. package/lib/types/utils.d.ts +23 -0
  245. package/lib/types/worker.d.ts +44 -0
  246. package/lib/types.js +8 -1
  247. package/lib/utils.js +18 -3
  248. package/lib/worker.js +32 -15
  249. package/package.json +26 -36
  250. package/src/{AssetGraph.js → AssetGraph.ts} +87 -51
  251. package/src/{Atlaspack.js → Atlaspack.ts} +181 -72
  252. package/src/{AtlaspackConfig.schema.js → AtlaspackConfig.schema.ts} +25 -19
  253. package/src/{AtlaspackConfig.js → AtlaspackConfig.ts} +78 -54
  254. package/src/{BundleGraph.js → BundleGraph.ts} +575 -145
  255. package/src/{CommittedAsset.js → CommittedAsset.ts} +15 -13
  256. package/src/{Dependency.js → Dependency.ts} +59 -42
  257. package/src/{Environment.js → Environment.ts} +24 -15
  258. package/src/EnvironmentManager.ts +154 -0
  259. package/src/{IdentifierRegistry.js → IdentifierRegistry.ts} +1 -4
  260. package/src/{InternalConfig.js → InternalConfig.ts} +22 -23
  261. package/src/{PackagerRunner.js → PackagerRunner.ts} +114 -159
  262. package/src/{ReporterRunner.js → ReporterRunner.ts} +13 -18
  263. package/src/{RequestTracker.js → RequestTracker.ts} +444 -355
  264. package/src/{SymbolPropagation.js → SymbolPropagation.ts} +178 -61
  265. package/src/{TargetDescriptor.schema.js → TargetDescriptor.schema.ts} +10 -1
  266. package/src/{Transformation.js → Transformation.ts} +110 -65
  267. package/src/{UncommittedAsset.js → UncommittedAsset.ts} +45 -49
  268. package/src/{Validation.js → Validation.ts} +32 -17
  269. package/src/{applyRuntimes.js → applyRuntimes.ts} +135 -26
  270. package/src/{assetUtils.js → assetUtils.ts} +49 -36
  271. package/src/atlaspack-v3/AtlaspackV3.ts +183 -0
  272. package/src/atlaspack-v3/NapiWorkerPool.ts +129 -0
  273. package/src/atlaspack-v3/{fs.js → fs.ts} +8 -4
  274. package/src/atlaspack-v3/{index.js → index.ts} +3 -4
  275. package/src/atlaspack-v3/jsCallable.ts +14 -0
  276. package/src/atlaspack-v3/worker/compat/{asset-symbols.js → asset-symbols.ts} +40 -30
  277. package/src/atlaspack-v3/worker/compat/bitflags.ts +102 -0
  278. package/src/atlaspack-v3/worker/compat/{dependency.js → dependency.ts} +13 -13
  279. package/src/atlaspack-v3/worker/compat/{environment.js → environment.ts} +13 -9
  280. package/src/atlaspack-v3/worker/compat/index.ts +8 -0
  281. package/src/atlaspack-v3/worker/compat/{mutable-asset.js → mutable-asset.ts} +21 -20
  282. package/src/atlaspack-v3/worker/compat/{plugin-config.js → plugin-config.ts} +25 -56
  283. package/src/atlaspack-v3/worker/compat/{plugin-options.js → plugin-options.ts} +19 -5
  284. package/src/atlaspack-v3/worker/compat/{plugin-tracer.js → plugin-tracer.ts} +2 -2
  285. package/src/atlaspack-v3/worker/compat/{target.js → target.ts} +3 -4
  286. package/src/atlaspack-v3/worker/index.js +2 -1
  287. package/src/atlaspack-v3/worker/side-effect-detector.ts +298 -0
  288. package/src/atlaspack-v3/worker/worker.ts +548 -0
  289. package/src/{constants.js → constants.ts} +0 -3
  290. package/src/{dumpGraphToGraphViz.js → dumpGraphToGraphViz.ts} +73 -28
  291. package/src/index.ts +18 -0
  292. package/src/{loadAtlaspackPlugin.js → loadAtlaspackPlugin.ts} +8 -9
  293. package/src/{loadDotEnv.js → loadDotEnv.ts} +2 -2
  294. package/src/{projectPath.js → projectPath.ts} +20 -9
  295. package/src/public/{Asset.js → Asset.ts} +41 -28
  296. package/src/public/{Bundle.js → Bundle.ts} +28 -29
  297. package/src/public/{BundleGraph.js → BundleGraph.ts} +103 -68
  298. package/src/public/{BundleGroup.js → BundleGroup.ts} +7 -10
  299. package/src/public/{Config.js → Config.ts} +171 -33
  300. package/src/public/{Dependency.js → Dependency.ts} +20 -17
  301. package/src/public/{Environment.js → Environment.ts} +28 -17
  302. package/src/public/{MutableBundleGraph.js → MutableBundleGraph.ts} +55 -24
  303. package/src/public/{PluginOptions.js → PluginOptions.ts} +6 -6
  304. package/src/public/{Symbols.js → Symbols.ts} +75 -36
  305. package/src/public/{Target.js → Target.ts} +10 -8
  306. package/src/{registerCoreWithSerializer.js → registerCoreWithSerializer.ts} +9 -7
  307. package/src/requests/{AssetGraphRequest.js → AssetGraphRequest.ts} +117 -90
  308. package/src/requests/AssetGraphRequestRust.ts +557 -0
  309. package/src/requests/{AssetRequest.js → AssetRequest.ts} +24 -18
  310. package/src/requests/AtlaspackBuildRequest.ts +168 -0
  311. package/src/requests/{AtlaspackConfigRequest.js → AtlaspackConfigRequest.ts} +72 -58
  312. package/src/requests/{BundleGraphRequest.js → BundleGraphRequest.ts} +119 -199
  313. package/src/requests/BundleGraphRequestRust.ts +470 -0
  314. package/src/requests/BundleGraphRequestUtils.ts +323 -0
  315. package/src/requests/{ConfigRequest.js → ConfigRequest.ts} +110 -50
  316. package/src/requests/{DevDepRequest.js → DevDepRequest.ts} +60 -35
  317. package/src/requests/{EntryRequest.js → EntryRequest.ts} +36 -31
  318. package/src/requests/{PackageRequest.js → PackageRequest.ts} +52 -25
  319. package/src/requests/{PathRequest.js → PathRequest.ts} +47 -37
  320. package/src/requests/{TargetRequest.js → TargetRequest.ts} +265 -179
  321. package/src/requests/{ValidationRequest.js → ValidationRequest.ts} +18 -17
  322. package/src/requests/WriteBundleRequest.ts +734 -0
  323. package/src/requests/{WriteBundlesRequest.js → WriteBundlesRequest.ts} +134 -50
  324. package/src/requests/{asset-graph-diff.js → asset-graph-diff.ts} +25 -21
  325. package/src/requests/{asset-graph-dot.js → asset-graph-dot.ts} +8 -12
  326. package/src/{resolveOptions.js → resolveOptions.ts} +57 -27
  327. package/src/{rustWorkerThreadDylibHack.js → rustWorkerThreadDylibHack.ts} +1 -4
  328. package/src/{serializerCore.browser.js → serializerCore.browser.ts} +2 -3
  329. package/src/{summarizeRequest.js → summarizeRequest.ts} +17 -5
  330. package/src/types.ts +651 -0
  331. package/src/{utils.js → utils.ts} +52 -21
  332. package/src/{worker.js → worker.ts} +50 -42
  333. package/test/{AssetGraph.test.js → AssetGraph.test.ts} +5 -8
  334. package/test/{Atlaspack.test.js → Atlaspack.test.ts} +5 -10
  335. package/test/{AtlaspackConfig.test.js → AtlaspackConfig.test.ts} +0 -5
  336. package/test/{AtlaspackConfigRequest.test.js → AtlaspackConfigRequest.test.ts} +76 -16
  337. package/test/{BundleGraph.test.js → BundleGraph.test.ts} +8 -13
  338. package/test/{Dependency.test.js → Dependency.test.ts} +2 -3
  339. package/test/{EntryRequest.test.js → EntryRequest.test.ts} +1 -6
  340. package/test/Environment.test.ts +153 -0
  341. package/test/EnvironmentManager.test.ts +188 -0
  342. package/test/{IdentifierRegistry.test.js → IdentifierRegistry.test.ts} +2 -4
  343. package/test/{InternalAsset.test.js → InternalAsset.test.ts} +2 -7
  344. package/test/PackagerRunner.test.ts +0 -0
  345. package/test/{PublicAsset.test.js → PublicAsset.test.ts} +2 -7
  346. package/test/{PublicBundle.test.js → PublicBundle.test.ts} +1 -2
  347. package/test/{PublicDependency.test.js → PublicDependency.test.ts} +0 -2
  348. package/test/PublicEnvironment.test.ts +49 -0
  349. package/test/{PublicMutableBundleGraph.test.js → PublicMutableBundleGraph.test.ts} +6 -11
  350. package/test/{RequestTracker.test.js → RequestTracker.test.ts} +136 -58
  351. package/test/{SymbolPropagation.test.js → SymbolPropagation.test.ts} +124 -74
  352. package/test/{TargetRequest.test.js → TargetRequest.test.ts} +91 -92
  353. package/test/fixtures/config-with-reporters/.parcelrc +7 -0
  354. package/test/fixtures/custom-targets/package.json +6 -0
  355. package/test/public/Config.test.ts +104 -0
  356. package/test/requests/AssetGraphRequestRust.test.ts +443 -0
  357. package/test/requests/{ConfigRequest.test.js → ConfigRequest.test.ts} +202 -13
  358. package/test/requests/{DevDepRequest.test.js → DevDepRequest.test.ts} +0 -2
  359. package/test/requests/WriteBundleRequest.test.ts +602 -0
  360. package/test/{test-utils.js → test-utils.ts} +3 -4
  361. package/test/{utils.test.js → utils.test.ts} +1 -3
  362. package/tsconfig.json +60 -0
  363. package/tsconfig.tsbuildinfo +1 -0
  364. package/index.d.ts +0 -30
  365. package/lib/atlaspack-v3/worker/compat/plugin-logger.js +0 -29
  366. package/src/atlaspack-v3/AtlaspackV3.js +0 -87
  367. package/src/atlaspack-v3/NapiWorkerPool.js +0 -53
  368. package/src/atlaspack-v3/jsCallable.js +0 -18
  369. package/src/atlaspack-v3/worker/compat/bitflags.js +0 -100
  370. package/src/atlaspack-v3/worker/compat/plugin-logger.js +0 -47
  371. package/src/atlaspack-v3/worker/worker.js +0 -369
  372. package/src/index.js +0 -13
  373. package/src/requests/AssetGraphRequestRust.js +0 -263
  374. package/src/requests/AtlaspackBuildRequest.js +0 -111
  375. package/src/requests/WriteBundleRequest.js +0 -369
  376. package/src/types.js +0 -600
  377. package/test/Environment.test.js +0 -119
  378. package/test/PackagerRunner.test.js +0 -27
  379. package/test/PublicEnvironment.test.js +0 -27
  380. package/test/requests/AssetGraphRequestRust.test.js +0 -411
@@ -0,0 +1,548 @@
1
+ /* eslint-disable import/first */
2
+ import {SideEffectDetector} from './side-effect-detector';
3
+
4
+ // Install side effect detection patches BEFORE importing any modules that use fs
5
+ const sideEffectDetector = new SideEffectDetector();
6
+ sideEffectDetector.install();
7
+
8
+ import assert from 'assert';
9
+ import * as napi from '@atlaspack/rust';
10
+ // @ts-expect-error TS2305
11
+ import type {JsCallable} from '@atlaspack/rust';
12
+ import {NodeFS} from '@atlaspack/fs';
13
+ import {NodePackageManager} from '@atlaspack/package-manager';
14
+ import type {
15
+ Resolver,
16
+ Transformer,
17
+ FilePath,
18
+ FileSystem,
19
+ } from '@atlaspack/types';
20
+ import type {FeatureFlags} from '@atlaspack/feature-flags';
21
+ import {parentPort} from 'worker_threads';
22
+ import logger from '@atlaspack/logger';
23
+ import * as module from 'module';
24
+
25
+ import {jsCallable} from '../jsCallable';
26
+ import {PluginLogger} from '@atlaspack/logger';
27
+ import {
28
+ Environment,
29
+ Dependency,
30
+ PluginConfig,
31
+ PluginTracer,
32
+ PluginOptions,
33
+ MutableAsset,
34
+ bundleBehaviorMap,
35
+ dependencyPriorityMap,
36
+ } from './compat';
37
+
38
+ const CONFIG = Symbol.for('parcel-plugin-config');
39
+
40
+ export class AtlaspackWorker {
41
+ #resolvers: Map<string, ResolverState<any>>;
42
+ #transformers: Map<string, TransformerState<any>>;
43
+ #fs: FileSystem;
44
+ #packageManager: NodePackageManager;
45
+ #options: Options | undefined;
46
+ #sideEffectDetector: SideEffectDetector;
47
+
48
+ constructor() {
49
+ this.#resolvers = new Map();
50
+ this.#transformers = new Map();
51
+ this.#fs = new NodeFS();
52
+ this.#packageManager = new NodePackageManager(this.#fs, '/');
53
+ this.#sideEffectDetector = sideEffectDetector; // Use the global detector that was installed before imports
54
+ }
55
+
56
+ clearState() {
57
+ this.#resolvers.clear();
58
+ this.#transformers.clear();
59
+ this.#options = undefined;
60
+ }
61
+
62
+ loadPlugin: JsCallable<[LoadPluginOptions], Promise<undefined>> = jsCallable(
63
+ async ({kind, specifier, resolveFrom, options}) => {
64
+ // Use packageManager.require() instead of dynamic import() to support TypeScript plugins
65
+ let resolvedModule = await this.#packageManager.require(
66
+ specifier,
67
+ resolveFrom,
68
+ {shouldAutoInstall: false},
69
+ );
70
+
71
+ let instance = undefined;
72
+ // Check for CommonJS export (module.exports = new Plugin(...))
73
+ if (resolvedModule[CONFIG]) {
74
+ instance = resolvedModule[CONFIG];
75
+ } else if (resolvedModule.default && resolvedModule.default[CONFIG]) {
76
+ // ESM default export
77
+ instance = resolvedModule.default[CONFIG];
78
+ } else if (
79
+ resolvedModule.default &&
80
+ resolvedModule.default.default &&
81
+ resolvedModule.default.default[CONFIG]
82
+ ) {
83
+ // Double-wrapped default export
84
+ instance = resolvedModule.default.default[CONFIG];
85
+ } else {
86
+ throw new Error(
87
+ `Plugin could not be resolved\n\t${kind}\n\t${resolveFrom}\n\t${specifier}`,
88
+ );
89
+ }
90
+
91
+ if (this.#options == null) {
92
+ this.#options = {
93
+ ...options,
94
+ inputFS: this.#fs,
95
+ outputFS: this.#fs,
96
+ packageManager: this.#packageManager,
97
+ shouldAutoInstall: false,
98
+ };
99
+ }
100
+
101
+ // Set feature flags in the worker process
102
+ let featureFlagsModule = await this.#packageManager.require(
103
+ '@atlaspack/feature-flags',
104
+ __filename,
105
+ {shouldAutoInstall: false},
106
+ );
107
+ featureFlagsModule.setFeatureFlags(options.featureFlags);
108
+
109
+ switch (kind) {
110
+ case 'resolver':
111
+ this.#resolvers.set(specifier, {resolver: instance});
112
+ break;
113
+ case 'transformer': {
114
+ return this.initializeTransformer(instance, specifier);
115
+ }
116
+ }
117
+ },
118
+ );
119
+
120
+ runResolverResolve: JsCallable<
121
+ [RunResolverResolveOptions],
122
+ Promise<RunResolverResolveResult>
123
+ > = jsCallable(
124
+ async ({key, dependency: napiDependency, specifier, pipeline}) => {
125
+ const state = this.#resolvers.get(key);
126
+ if (!state) {
127
+ throw new Error(`Resolver not found: ${key}`);
128
+ }
129
+
130
+ const env = new Environment(napiDependency.env);
131
+ const dependency = new Dependency(napiDependency, env);
132
+
133
+ const defaultOptions = {
134
+ logger: new PluginLogger({origin: key}),
135
+ tracer: new PluginTracer(),
136
+ options: new PluginOptions(this.options),
137
+ } as const;
138
+
139
+ if (!('config' in state)) {
140
+ // @ts-expect-error TS2345
141
+ state.config = await state.resolver.loadConfig?.({
142
+ config: new PluginConfig(
143
+ {
144
+ env: napiDependency.env,
145
+ plugin: key,
146
+ isSource: true,
147
+ searchPath: 'index',
148
+ },
149
+ this.options,
150
+ ),
151
+ ...defaultOptions,
152
+ });
153
+ }
154
+
155
+ // @ts-expect-error TS2345
156
+ const result = await state.resolver.resolve({
157
+ specifier,
158
+ dependency,
159
+ pipeline,
160
+ config: state.config,
161
+ ...defaultOptions,
162
+ });
163
+
164
+ if (!result) {
165
+ return {
166
+ invalidations: [],
167
+ resolution: {type: 'unresolved'},
168
+ };
169
+ }
170
+
171
+ if (result.isExcluded) {
172
+ return {
173
+ invalidations: [],
174
+ resolution: {type: 'excluded'},
175
+ };
176
+ }
177
+ // A resolver may return a result without filePath to indicate it didn't
178
+ // resolve the dependency (equivalent to returning null). The JS-side
179
+ // PathRequest treats this as "try the next resolver".
180
+ if (!result.filePath) {
181
+ return {
182
+ invalidations: [],
183
+ resolution: {type: 'unresolved'},
184
+ };
185
+ }
186
+
187
+ return {
188
+ invalidations: [],
189
+ resolution: {
190
+ type: 'resolved',
191
+ filePath: result.filePath,
192
+ canDefer: result.canDefer || false,
193
+ sideEffects: result.sideEffects ?? true,
194
+ code: result.code ?? undefined,
195
+ meta: result.meta || undefined,
196
+ pipeline: result.pipeline || undefined,
197
+ priority: dependencyPriorityMap.intoNullable(result.priority),
198
+ query: result.query && result.query.toString(),
199
+ },
200
+ };
201
+ },
202
+ );
203
+
204
+ runTransformerTransform: JsCallable<
205
+ [RunTransformerTransformOptions, Buffer, string | null | undefined],
206
+ Promise<RunTransformerTransformResult>
207
+ > = jsCallable(async ({key, asset: innerAsset}, contents, map) => {
208
+ const instance = this.#transformers.get(key);
209
+ if (!instance) {
210
+ throw new Error(`Transformer not found: ${key}`);
211
+ }
212
+
213
+ let {transformer, config, allowedEnv = new Set()} = instance;
214
+
215
+ let cacheBailouts = [];
216
+
217
+ const resolveFunc = (from: string, to: string): Promise<any> => {
218
+ let customRequire = module.createRequire(from);
219
+ let resolvedPath = customRequire.resolve(to);
220
+ // Tranformer not cacheable due to use of the resolve function
221
+
222
+ cacheBailouts.push(`resolve(${from}, ${to})`);
223
+
224
+ return Promise.resolve(resolvedPath);
225
+ };
226
+
227
+ const env = new Environment(innerAsset.env);
228
+ let mutableAsset = new MutableAsset(
229
+ innerAsset,
230
+ // @ts-expect-error TS2345
231
+ contents,
232
+ env,
233
+ this.#fs,
234
+ map,
235
+ this.options.projectRoot,
236
+ );
237
+
238
+ const pluginOptions = new PluginOptions(this.options);
239
+ const defaultOptions = {
240
+ logger: new PluginLogger({origin: key}),
241
+ tracer: new PluginTracer(),
242
+ options: pluginOptions,
243
+ } as const;
244
+
245
+ if (transformer.loadConfig) {
246
+ if (config != null) {
247
+ throw new Error(
248
+ `Transformer (${key}) should not implement 'setup' and 'loadConfig'`,
249
+ );
250
+ }
251
+ // @ts-expect-error TS2345
252
+ config = await transformer.loadConfig({
253
+ config: new PluginConfig(
254
+ {
255
+ plugin: key,
256
+ isSource: innerAsset.isSource,
257
+ searchPath: innerAsset.filePath,
258
+ env,
259
+ },
260
+ this.options,
261
+ ),
262
+ ...defaultOptions,
263
+ });
264
+
265
+ // Transformer uses the deprecated loadConfig API, so mark as not
266
+ // cachable
267
+ cacheBailouts.push(`Transformer.loadConfig`);
268
+ }
269
+
270
+ if (transformer.parse) {
271
+ const ast = await transformer.parse({
272
+ // @ts-expect-error TS2322
273
+ asset: mutableAsset,
274
+ config,
275
+ resolve: resolveFunc,
276
+ ...defaultOptions,
277
+ });
278
+ if (ast) {
279
+ mutableAsset.setAST(ast);
280
+ }
281
+ cacheBailouts.push(`Transformer.parse`);
282
+ }
283
+
284
+ const [result, sideEffects] =
285
+ await this.#sideEffectDetector.monitorSideEffects(key, () =>
286
+ transformer.transform({
287
+ // @ts-expect-error TS2322
288
+ asset: mutableAsset,
289
+ config,
290
+ resolve: resolveFunc,
291
+ ...defaultOptions,
292
+ }),
293
+ );
294
+
295
+ if (sideEffects.envUsage.didEnumerate) {
296
+ cacheBailouts.push(`Env access: enumeration of process.env`);
297
+ }
298
+
299
+ for (let variable of sideEffects.envUsage.vars) {
300
+ if (variable in allowedEnv) {
301
+ continue;
302
+ }
303
+
304
+ cacheBailouts.push(`Env access: ${variable}`);
305
+ }
306
+
307
+ for (let {method, path} of sideEffects.fsUsage) {
308
+ cacheBailouts.push(`FS usage: ${method}(${path})`);
309
+ }
310
+
311
+ assert(
312
+ result.length === 1,
313
+ '[V3] Unimplemented: Multiple asset return from Node transformer',
314
+ );
315
+
316
+ assert(
317
+ result[0] === mutableAsset,
318
+ '[V3] Unimplemented: New asset returned from Node transformer',
319
+ );
320
+
321
+ if (transformer.generate) {
322
+ const ast = await mutableAsset.getAST();
323
+ if (ast) {
324
+ const output = await transformer.generate({
325
+ // @ts-expect-error TS2322
326
+ asset: mutableAsset,
327
+ ast,
328
+ ...defaultOptions,
329
+ });
330
+
331
+ if (typeof output.content === 'string') {
332
+ mutableAsset.setCode(output.content);
333
+ } else if (output.content instanceof Buffer) {
334
+ mutableAsset.setBuffer(output.content);
335
+ } else {
336
+ // @ts-expect-error TS2345
337
+ mutableAsset.setStream(output.content);
338
+ }
339
+
340
+ if (output.map) {
341
+ mutableAsset.setMap(output.map);
342
+ }
343
+ }
344
+ }
345
+
346
+ let assetBuffer: Buffer | null = await mutableAsset.getBuffer();
347
+
348
+ // If the asset has no code, we set the buffer to null, which we can
349
+ // detect in Rust, to avoid passing back an empty buffer, which we can't.
350
+ if (assetBuffer.length === 0) {
351
+ assetBuffer = null;
352
+ }
353
+
354
+ if (pluginOptions.used) {
355
+ // Plugin options accessed, so not cachable
356
+ cacheBailouts.push(`Plugin options accessed`);
357
+ }
358
+
359
+ return [
360
+ {
361
+ id: mutableAsset.id,
362
+ bundleBehavior: bundleBehaviorMap.intoNullable(
363
+ mutableAsset.bundleBehavior,
364
+ ),
365
+ code: [],
366
+ filePath: mutableAsset.filePath,
367
+ isBundleSplittable: mutableAsset.isBundleSplittable,
368
+ isSource: mutableAsset.isSource,
369
+ meta: mutableAsset.meta,
370
+ pipeline: mutableAsset.pipeline,
371
+ // Query should be undefined if it's empty
372
+ query: mutableAsset.query.toString() || undefined,
373
+ sideEffects: mutableAsset.sideEffects,
374
+ symbols: mutableAsset.symbols.intoNapi(),
375
+ type: mutableAsset.type,
376
+ uniqueKey: mutableAsset.uniqueKey,
377
+ },
378
+ assetBuffer,
379
+ // Only send back the map if it has changed
380
+ mutableAsset.isMapDirty
381
+ ? // @ts-expect-error TS2533
382
+ JSON.stringify((await mutableAsset.getMap()).toVLQ())
383
+ : '',
384
+ // Limit to first 10 bailouts
385
+ cacheBailouts.slice(0, 10),
386
+ ];
387
+ });
388
+
389
+ get options() {
390
+ if (this.#options == null) {
391
+ throw new Error('Plugin options have not been initialized');
392
+ }
393
+ return this.#options;
394
+ }
395
+
396
+ async initializeTransformer(instance: Transformer<any>, specifier: string) {
397
+ let transformer = instance;
398
+ let setup, config, allowedEnv;
399
+
400
+ let packageManager = new NodePackageManager(
401
+ this.#fs,
402
+ this.options.projectRoot,
403
+ );
404
+
405
+ if (transformer.setup) {
406
+ let setupResult = await transformer.setup({
407
+ logger: new PluginLogger({origin: specifier}),
408
+ options: new PluginOptions({
409
+ ...this.options,
410
+ shouldAutoInstall: false,
411
+ inputFS: this.#fs,
412
+ outputFS: this.#fs,
413
+ packageManager,
414
+ }),
415
+ config: new PluginConfig(
416
+ {
417
+ plugin: specifier,
418
+ searchPath: 'index',
419
+ // Consider project setup config as source
420
+ isSource: true,
421
+ },
422
+ this.options,
423
+ ),
424
+ });
425
+ config = setupResult?.config;
426
+ allowedEnv = Object.fromEntries(
427
+ setupResult?.env?.map((env) => [env, process.env[env]]) || [],
428
+ );
429
+
430
+ // Always add the following env vars to the cache key
431
+ allowedEnv['NODE_ENV'] = process.env['NODE_ENV'];
432
+
433
+ setup = {
434
+ conditions: setupResult?.conditions,
435
+ config,
436
+ env: allowedEnv,
437
+ disableCache: setupResult?.disableCache,
438
+ };
439
+ }
440
+
441
+ this.#transformers.set(specifier, {
442
+ transformer,
443
+ config,
444
+ packageManager,
445
+ allowedEnv,
446
+ });
447
+
448
+ return setup;
449
+ }
450
+ }
451
+
452
+ // Forward all logger events from this worker thread to the main thread so
453
+ // they are re-emitted into the main-thread logger and reach reporters.
454
+ logger.onLog((event) => {
455
+ parentPort?.postMessage({type: 'logEvent', event});
456
+ });
457
+
458
+ // Create napi worker and send it back to main thread
459
+ const worker = new AtlaspackWorker();
460
+ const napiWorker = napi.newNodejsWorker(worker);
461
+ parentPort?.postMessage(napiWorker);
462
+
463
+ parentPort?.setMaxListeners(parentPort.getMaxListeners() + 1);
464
+ parentPort?.addListener('message', (message: unknown) => {
465
+ if (message === 'clearState') {
466
+ worker.clearState();
467
+ parentPort?.postMessage('stateCleared');
468
+ }
469
+ });
470
+
471
+ type ResolverState<T> = {
472
+ resolver: Resolver<T>;
473
+ config?: T;
474
+ packageManager?: NodePackageManager;
475
+ };
476
+
477
+ type TransformerState<ConfigType> = {
478
+ packageManager?: NodePackageManager;
479
+ transformer: Transformer<ConfigType>;
480
+ config?: ConfigType;
481
+ allowedEnv?: Record<string, string | undefined>;
482
+ };
483
+
484
+ type LoadPluginOptions = {
485
+ kind: 'resolver' | 'transformer';
486
+ specifier: string;
487
+ resolveFrom: string;
488
+ options: RpcPluginOptions;
489
+ };
490
+
491
+ type RpcPluginOptions = {
492
+ projectRoot: string;
493
+ mode: string;
494
+ featureFlags: FeatureFlags;
495
+ };
496
+
497
+ type Options = RpcPluginOptions & {
498
+ inputFS: FileSystem;
499
+ outputFS: FileSystem;
500
+ packageManager: NodePackageManager;
501
+ shouldAutoInstall: boolean;
502
+ };
503
+
504
+ type RunResolverResolveOptions = {
505
+ key: string;
506
+ // @ts-expect-error TS2694
507
+ dependency: napi.Dependency;
508
+ specifier: FilePath;
509
+ pipeline: string | null | undefined;
510
+ };
511
+
512
+ type RunResolverResolveResult = {
513
+ invalidations: Array<any>;
514
+ resolution:
515
+ | {
516
+ type: 'unresolved';
517
+ }
518
+ | {
519
+ type: 'excluded';
520
+ }
521
+ | {
522
+ type: 'resolved';
523
+ canDefer: boolean;
524
+ filePath: string;
525
+ sideEffects: boolean;
526
+ code?: string;
527
+ meta?: unknown;
528
+ pipeline?: string;
529
+ priority?: number | null | undefined;
530
+ query?: string;
531
+ };
532
+ };
533
+
534
+ type RunTransformerTransformOptions = {
535
+ key: string;
536
+ // @ts-expect-error TS2724
537
+ env: napi.Environment;
538
+ // @ts-expect-error TS2694
539
+ asset: napi.Asset;
540
+ };
541
+
542
+ type RunTransformerTransformResult = [
543
+ // @ts-expect-error TS2694
544
+ napi.RpcAssetResult,
545
+ Buffer,
546
+ string,
547
+ boolean,
548
+ ];
@@ -1,6 +1,3 @@
1
- // @flow strict-local
2
-
3
- // $FlowFixMe
4
1
  import {version} from '../package.json';
5
2
 
6
3
  export const ATLASPACK_VERSION = version;