@atlaspack/core 2.16.2-canary.5 → 2.16.2-canary.500

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 +1452 -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 +160 -57
  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 +38 -40
  96. package/lib/ReporterRunner.js +8 -12
  97. package/lib/RequestTracker.js +336 -168
  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 +23 -13
  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 +239 -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 +25 -7
  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 +60 -27
  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 +67 -124
  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 +336 -18
  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 +35 -10
  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 +27 -33
  250. package/src/{AssetGraph.js → AssetGraph.ts} +87 -51
  251. package/src/{Atlaspack.js → Atlaspack.ts} +203 -73
  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} +109 -103
  262. package/src/{ReporterRunner.js → ReporterRunner.ts} +13 -18
  263. package/src/{RequestTracker.js → RequestTracker.ts} +672 -347
  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} +50 -39
  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} +102 -50
  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} +114 -77
  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} +117 -187
  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} +55 -23
  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} +149 -59
  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} +4 -11
  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 -362
  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 -362
  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
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.AtlaspackWorker = void 0;
7
+ var _sideEffectDetector = require("./side-effect-detector");
7
8
  function _assert() {
8
9
  const data = _interopRequireDefault(require("assert"));
9
10
  _assert = function () {
@@ -39,6 +40,13 @@ function _worker_threads() {
39
40
  };
40
41
  return data;
41
42
  }
43
+ function _logger() {
44
+ const data = _interopRequireWildcard(require("@atlaspack/logger"));
45
+ _logger = function () {
46
+ return data;
47
+ };
48
+ return data;
49
+ }
42
50
  function _module() {
43
51
  const data = _interopRequireWildcard(require("module"));
44
52
  _module = function () {
@@ -48,36 +56,74 @@ function _module() {
48
56
  }
49
57
  var _jsCallable = require("../jsCallable");
50
58
  var _compat = require("./compat");
51
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
52
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
53
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
59
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
60
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
61
+ /* eslint-disable import/first */
62
+
63
+ // Install side effect detection patches BEFORE importing any modules that use fs
64
+ const sideEffectDetector = new _sideEffectDetector.SideEffectDetector();
65
+ sideEffectDetector.install();
66
+
67
+ // @ts-expect-error TS2305
68
+
54
69
  const CONFIG = Symbol.for('parcel-plugin-config');
55
70
  class AtlaspackWorker {
56
71
  #resolvers;
57
72
  #transformers;
58
73
  #fs;
74
+ #packageManager;
75
+ #options;
76
+ #sideEffectDetector;
59
77
  constructor() {
60
78
  this.#resolvers = new Map();
61
79
  this.#transformers = new Map();
62
80
  this.#fs = new (_fs().NodeFS)();
81
+ this.#packageManager = new (_packageManager().NodePackageManager)(this.#fs, '/');
82
+ this.#sideEffectDetector = sideEffectDetector; // Use the global detector that was installed before imports
83
+ }
84
+ clearState() {
85
+ this.#resolvers.clear();
86
+ this.#transformers.clear();
87
+ this.#options = undefined;
63
88
  }
64
89
  loadPlugin = (0, _jsCallable.jsCallable)(async ({
65
90
  kind,
66
91
  specifier,
67
- resolveFrom
92
+ resolveFrom,
93
+ options
68
94
  }) => {
69
- let customRequire = _module().createRequire(resolveFrom);
70
- let resolvedPath = customRequire.resolve(specifier);
71
- // $FlowFixMe
72
- let resolvedModule = await import(resolvedPath);
95
+ // Use packageManager.require() instead of dynamic import() to support TypeScript plugins
96
+ let resolvedModule = await this.#packageManager.require(specifier, resolveFrom, {
97
+ shouldAutoInstall: false
98
+ });
73
99
  let instance = undefined;
74
- if (resolvedModule.default && resolvedModule.default[CONFIG]) {
100
+ // Check for CommonJS export (module.exports = new Plugin(...))
101
+ if (resolvedModule[CONFIG]) {
102
+ instance = resolvedModule[CONFIG];
103
+ } else if (resolvedModule.default && resolvedModule.default[CONFIG]) {
104
+ // ESM default export
75
105
  instance = resolvedModule.default[CONFIG];
76
106
  } else if (resolvedModule.default && resolvedModule.default.default && resolvedModule.default.default[CONFIG]) {
107
+ // Double-wrapped default export
77
108
  instance = resolvedModule.default.default[CONFIG];
78
109
  } else {
79
110
  throw new Error(`Plugin could not be resolved\n\t${kind}\n\t${resolveFrom}\n\t${specifier}`);
80
111
  }
112
+ if (this.#options == null) {
113
+ this.#options = {
114
+ ...options,
115
+ inputFS: this.#fs,
116
+ outputFS: this.#fs,
117
+ packageManager: this.#packageManager,
118
+ shouldAutoInstall: false
119
+ };
120
+ }
121
+
122
+ // Set feature flags in the worker process
123
+ let featureFlagsModule = await this.#packageManager.require('@atlaspack/feature-flags', __filename, {
124
+ shouldAutoInstall: false
125
+ });
126
+ featureFlagsModule.setFeatureFlags(options.featureFlags);
81
127
  switch (kind) {
82
128
  case 'resolver':
83
129
  this.#resolvers.set(specifier, {
@@ -85,55 +131,45 @@ class AtlaspackWorker {
85
131
  });
86
132
  break;
87
133
  case 'transformer':
88
- this.#transformers.set(specifier, {
89
- transformer: instance
90
- });
91
- break;
134
+ {
135
+ return this.initializeTransformer(instance, specifier);
136
+ }
92
137
  }
93
138
  });
94
139
  runResolverResolve = (0, _jsCallable.jsCallable)(async ({
95
140
  key,
96
141
  dependency: napiDependency,
97
142
  specifier,
98
- pipeline,
99
- pluginOptions
143
+ pipeline
100
144
  }) => {
101
145
  const state = this.#resolvers.get(key);
102
146
  if (!state) {
103
147
  throw new Error(`Resolver not found: ${key}`);
104
148
  }
105
- let packageManager = state.packageManager;
106
- if (!packageManager) {
107
- packageManager = new (_packageManager().NodePackageManager)(this.#fs, pluginOptions.projectRoot);
108
- state.packageManager = packageManager;
109
- }
110
149
  const env = new _compat.Environment(napiDependency.env);
111
150
  const dependency = new _compat.Dependency(napiDependency, env);
112
151
  const defaultOptions = {
113
- logger: new _compat.PluginLogger(),
152
+ logger: new (_logger().PluginLogger)({
153
+ origin: key
154
+ }),
114
155
  tracer: new _compat.PluginTracer(),
115
- options: new _compat.PluginOptions({
116
- ...pluginOptions,
117
- packageManager,
118
- shouldAutoInstall: false,
119
- inputFS: this.#fs,
120
- outputFS: this.#fs
121
- })
156
+ options: new _compat.PluginOptions(this.options)
122
157
  };
123
158
  if (!('config' in state)) {
124
159
  var _state$resolver$loadC, _state$resolver;
160
+ // @ts-expect-error TS2345
125
161
  state.config = await ((_state$resolver$loadC = (_state$resolver = state.resolver).loadConfig) === null || _state$resolver$loadC === void 0 ? void 0 : _state$resolver$loadC.call(_state$resolver, {
126
162
  config: new _compat.PluginConfig({
127
- env,
163
+ env: napiDependency.env,
164
+ plugin: key,
128
165
  isSource: true,
129
- searchPath: specifier,
130
- projectRoot: pluginOptions.projectRoot,
131
- fs: this.#fs,
132
- packageManager
133
- }),
166
+ searchPath: 'index'
167
+ }, this.options),
134
168
  ...defaultOptions
135
169
  }));
136
170
  }
171
+
172
+ // @ts-expect-error TS2345
137
173
  const result = await state.resolver.resolve({
138
174
  specifier,
139
175
  dependency,
@@ -149,14 +185,33 @@ class AtlaspackWorker {
149
185
  }
150
186
  };
151
187
  }
188
+ if (result.isExcluded) {
189
+ return {
190
+ invalidations: [],
191
+ resolution: {
192
+ type: 'excluded'
193
+ }
194
+ };
195
+ }
196
+ // A resolver may return a result without filePath to indicate it didn't
197
+ // resolve the dependency (equivalent to returning null). The JS-side
198
+ // PathRequest treats this as "try the next resolver".
199
+ if (!result.filePath) {
200
+ return {
201
+ invalidations: [],
202
+ resolution: {
203
+ type: 'unresolved'
204
+ }
205
+ };
206
+ }
152
207
  return {
153
208
  invalidations: [],
154
209
  resolution: {
155
210
  type: 'resolved',
156
- filePath: result.filePath || '',
211
+ filePath: result.filePath,
157
212
  canDefer: result.canDefer || false,
158
- sideEffects: result.sideEffects || false,
159
- code: result.code || undefined,
213
+ sideEffects: result.sideEffects ?? true,
214
+ code: result.code ?? undefined,
160
215
  meta: result.meta || undefined,
161
216
  pipeline: result.pipeline || undefined,
162
217
  priority: _compat.dependencyPriorityMap.intoNullable(result.priority),
@@ -166,52 +221,60 @@ class AtlaspackWorker {
166
221
  });
167
222
  runTransformerTransform = (0, _jsCallable.jsCallable)(async ({
168
223
  key,
169
- env: napiEnv,
170
- options,
171
224
  asset: innerAsset
172
225
  }, contents, map) => {
173
- var _transformer$loadConf;
174
- const state = this.#transformers.get(key);
175
- if (!state) {
226
+ const instance = this.#transformers.get(key);
227
+ if (!instance) {
176
228
  throw new Error(`Transformer not found: ${key}`);
177
229
  }
178
- let packageManager = state.packageManager;
179
- if (!packageManager) {
180
- packageManager = new (_packageManager().NodePackageManager)(this.#fs, options.projectRoot);
181
- state.packageManager = packageManager;
182
- }
183
- const transformer = state.transformer;
230
+ let {
231
+ transformer,
232
+ config,
233
+ allowedEnv = new Set()
234
+ } = instance;
235
+ let cacheBailouts = [];
184
236
  const resolveFunc = (from, to) => {
185
237
  let customRequire = _module().createRequire(from);
186
238
  let resolvedPath = customRequire.resolve(to);
239
+ // Tranformer not cacheable due to use of the resolve function
240
+
241
+ cacheBailouts.push(`resolve(${from}, ${to})`);
187
242
  return Promise.resolve(resolvedPath);
188
243
  };
189
- const env = new _compat.Environment(napiEnv);
190
- const mutableAsset = new _compat.MutableAsset(innerAsset, contents, env, this.#fs, map, options.projectRoot);
244
+ const env = new _compat.Environment(innerAsset.env);
245
+ let mutableAsset = new _compat.MutableAsset(innerAsset,
246
+ // @ts-expect-error TS2345
247
+ contents, env, this.#fs, map, this.options.projectRoot);
248
+ const pluginOptions = new _compat.PluginOptions(this.options);
191
249
  const defaultOptions = {
192
- logger: new _compat.PluginLogger(),
250
+ logger: new (_logger().PluginLogger)({
251
+ origin: key
252
+ }),
193
253
  tracer: new _compat.PluginTracer(),
194
- options: new _compat.PluginOptions({
195
- ...options,
196
- packageManager,
197
- shouldAutoInstall: false,
198
- inputFS: this.#fs,
199
- outputFS: this.#fs
200
- })
254
+ options: pluginOptions
201
255
  };
202
- const config = await ((_transformer$loadConf = transformer.loadConfig) === null || _transformer$loadConf === void 0 ? void 0 : _transformer$loadConf.call(transformer, {
203
- config: new _compat.PluginConfig({
204
- env,
205
- isSource: true,
206
- searchPath: innerAsset.filePath,
207
- projectRoot: options.projectRoot,
208
- fs: this.#fs,
209
- packageManager
210
- }),
211
- ...defaultOptions
212
- }));
256
+ if (transformer.loadConfig) {
257
+ if (config != null) {
258
+ throw new Error(`Transformer (${key}) should not implement 'setup' and 'loadConfig'`);
259
+ }
260
+ // @ts-expect-error TS2345
261
+ config = await transformer.loadConfig({
262
+ config: new _compat.PluginConfig({
263
+ plugin: key,
264
+ isSource: innerAsset.isSource,
265
+ searchPath: innerAsset.filePath,
266
+ env
267
+ }, this.options),
268
+ ...defaultOptions
269
+ });
270
+
271
+ // Transformer uses the deprecated loadConfig API, so mark as not
272
+ // cachable
273
+ cacheBailouts.push(`Transformer.loadConfig`);
274
+ }
213
275
  if (transformer.parse) {
214
276
  const ast = await transformer.parse({
277
+ // @ts-expect-error TS2322
215
278
  asset: mutableAsset,
216
279
  config,
217
280
  resolve: resolveFunc,
@@ -220,18 +283,37 @@ class AtlaspackWorker {
220
283
  if (ast) {
221
284
  mutableAsset.setAST(ast);
222
285
  }
286
+ cacheBailouts.push(`Transformer.parse`);
223
287
  }
224
- const result = await state.transformer.transform({
288
+ const [result, sideEffects] = await this.#sideEffectDetector.monitorSideEffects(key, () => transformer.transform({
289
+ // @ts-expect-error TS2322
225
290
  asset: mutableAsset,
226
291
  config,
227
292
  resolve: resolveFunc,
228
293
  ...defaultOptions
229
- });
294
+ }));
295
+ if (sideEffects.envUsage.didEnumerate) {
296
+ cacheBailouts.push(`Env access: enumeration of process.env`);
297
+ }
298
+ for (let variable of sideEffects.envUsage.vars) {
299
+ if (variable in allowedEnv) {
300
+ continue;
301
+ }
302
+ cacheBailouts.push(`Env access: ${variable}`);
303
+ }
304
+ for (let {
305
+ method,
306
+ path
307
+ } of sideEffects.fsUsage) {
308
+ cacheBailouts.push(`FS usage: ${method}(${path})`);
309
+ }
310
+ (0, _assert().default)(result.length === 1, '[V3] Unimplemented: Multiple asset return from Node transformer');
311
+ (0, _assert().default)(result[0] === mutableAsset, '[V3] Unimplemented: New asset returned from Node transformer');
230
312
  if (transformer.generate) {
231
313
  const ast = await mutableAsset.getAST();
232
314
  if (ast) {
233
- // $FlowFixMe "Cannot call `transformer.generate` because undefined [1] is not a function." 🤷‍♀️
234
315
  const output = await transformer.generate({
316
+ // @ts-expect-error TS2322
235
317
  asset: mutableAsset,
236
318
  ast,
237
319
  ...defaultOptions
@@ -241,6 +323,7 @@ class AtlaspackWorker {
241
323
  } else if (output.content instanceof Buffer) {
242
324
  mutableAsset.setBuffer(output.content);
243
325
  } else {
326
+ // @ts-expect-error TS2345
244
327
  mutableAsset.setStream(output.content);
245
328
  }
246
329
  if (output.map) {
@@ -248,8 +331,17 @@ class AtlaspackWorker {
248
331
  }
249
332
  }
250
333
  }
251
- (0, _assert().default)(result.length === 1, '[V3] Unimplemented: Multiple asset return from Node transformer');
252
- (0, _assert().default)(result[0] === mutableAsset, '[V3] Unimplemented: New asset returned from Node transformer');
334
+ let assetBuffer = await mutableAsset.getBuffer();
335
+
336
+ // If the asset has no code, we set the buffer to null, which we can
337
+ // detect in Rust, to avoid passing back an empty buffer, which we can't.
338
+ if (assetBuffer.length === 0) {
339
+ assetBuffer = null;
340
+ }
341
+ if (pluginOptions.used) {
342
+ // Plugin options accessed, so not cachable
343
+ cacheBailouts.push(`Plugin options accessed`);
344
+ }
253
345
  return [{
254
346
  id: mutableAsset.id,
255
347
  bundleBehavior: _compat.bundleBehaviorMap.intoNullable(mutableAsset.bundleBehavior),
@@ -265,16 +357,84 @@ class AtlaspackWorker {
265
357
  symbols: mutableAsset.symbols.intoNapi(),
266
358
  type: mutableAsset.type,
267
359
  uniqueKey: mutableAsset.uniqueKey
268
- }, await mutableAsset.getBuffer(),
360
+ }, assetBuffer,
269
361
  // Only send back the map if it has changed
270
362
  mutableAsset.isMapDirty ?
271
- // $FlowFixMe A dirty map means this will be valid
272
- JSON.stringify((await mutableAsset.getMap()).toVLQ()) : ''];
363
+ // @ts-expect-error TS2533
364
+ JSON.stringify((await mutableAsset.getMap()).toVLQ()) : '',
365
+ // Limit to first 10 bailouts
366
+ cacheBailouts.slice(0, 10)];
273
367
  });
368
+ get options() {
369
+ if (this.#options == null) {
370
+ throw new Error('Plugin options have not been initialized');
371
+ }
372
+ return this.#options;
373
+ }
374
+ async initializeTransformer(instance, specifier) {
375
+ let transformer = instance;
376
+ let setup, config, allowedEnv;
377
+ let packageManager = new (_packageManager().NodePackageManager)(this.#fs, this.options.projectRoot);
378
+ if (transformer.setup) {
379
+ var _setupResult$env;
380
+ let setupResult = await transformer.setup({
381
+ logger: new (_logger().PluginLogger)({
382
+ origin: specifier
383
+ }),
384
+ options: new _compat.PluginOptions({
385
+ ...this.options,
386
+ shouldAutoInstall: false,
387
+ inputFS: this.#fs,
388
+ outputFS: this.#fs,
389
+ packageManager
390
+ }),
391
+ config: new _compat.PluginConfig({
392
+ plugin: specifier,
393
+ searchPath: 'index',
394
+ // Consider project setup config as source
395
+ isSource: true
396
+ }, this.options)
397
+ });
398
+ config = setupResult === null || setupResult === void 0 ? void 0 : setupResult.config;
399
+ allowedEnv = Object.fromEntries((setupResult === null || setupResult === void 0 || (_setupResult$env = setupResult.env) === null || _setupResult$env === void 0 ? void 0 : _setupResult$env.map(env => [env, process.env[env]])) || []);
400
+
401
+ // Always add the following env vars to the cache key
402
+ allowedEnv['NODE_ENV'] = process.env['NODE_ENV'];
403
+ setup = {
404
+ conditions: setupResult === null || setupResult === void 0 ? void 0 : setupResult.conditions,
405
+ config,
406
+ env: allowedEnv,
407
+ disableCache: setupResult === null || setupResult === void 0 ? void 0 : setupResult.disableCache
408
+ };
409
+ }
410
+ this.#transformers.set(specifier, {
411
+ transformer,
412
+ config,
413
+ packageManager,
414
+ allowedEnv
415
+ });
416
+ return setup;
417
+ }
274
418
  }
275
419
 
276
- // Create napi worker and send it back to main thread
420
+ // Forward all logger events from this worker thread to the main thread so
421
+ // they are re-emitted into the main-thread logger and reach reporters.
277
422
  exports.AtlaspackWorker = AtlaspackWorker;
423
+ _logger().default.onLog(event => {
424
+ _worker_threads().parentPort === null || _worker_threads().parentPort === void 0 || _worker_threads().parentPort.postMessage({
425
+ type: 'logEvent',
426
+ event
427
+ });
428
+ });
429
+
430
+ // Create napi worker and send it back to main thread
278
431
  const worker = new AtlaspackWorker();
279
432
  const napiWorker = napi().newNodejsWorker(worker);
280
- _worker_threads().parentPort === null || _worker_threads().parentPort === void 0 || _worker_threads().parentPort.postMessage(napiWorker);
433
+ _worker_threads().parentPort === null || _worker_threads().parentPort === void 0 || _worker_threads().parentPort.postMessage(napiWorker);
434
+ _worker_threads().parentPort === null || _worker_threads().parentPort === void 0 || _worker_threads().parentPort.setMaxListeners(_worker_threads().parentPort.getMaxListeners() + 1);
435
+ _worker_threads().parentPort === null || _worker_threads().parentPort === void 0 || _worker_threads().parentPort.addListener('message', message => {
436
+ if (message === 'clearState') {
437
+ worker.clearState();
438
+ _worker_threads().parentPort === null || _worker_threads().parentPort === void 0 || _worker_threads().parentPort.postMessage('stateCleared');
439
+ }
440
+ });
package/lib/constants.js CHANGED
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.VALID = exports.STARTUP = exports.OPTION_CHANGE = exports.INITIAL_BUILD = exports.HASH_REF_REGEX = exports.HASH_REF_PREFIX = exports.HASH_REF_HASH_LEN = exports.FILE_UPDATE = exports.FILE_DELETE = exports.FILE_CREATE = exports.ERROR = exports.ENV_CHANGE = exports.ATLASPACK_VERSION = void 0;
7
7
  var _package = require("../package.json");
8
- // $FlowFixMe
9
8
  const ATLASPACK_VERSION = exports.ATLASPACK_VERSION = _package.version;
10
9
  const HASH_REF_PREFIX = exports.HASH_REF_PREFIX = 'HASH_REF_';
11
10
  const HASH_REF_HASH_LEN = exports.HASH_REF_HASH_LEN = 16;