@matter/tools 0.11.0-alpha.0-20241005-e3e4e4a7a

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 (414) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +100 -0
  3. package/bin/build.js +10 -0
  4. package/bin/prepare-chip.js +5 -0
  5. package/bin/run.js +7 -0
  6. package/bin/test.js +7 -0
  7. package/bin/version.js +7 -0
  8. package/chip/Dockerfile +23 -0
  9. package/dist/cjs/building/builder.d.ts +35 -0
  10. package/dist/cjs/building/builder.d.ts.map +1 -0
  11. package/dist/cjs/building/builder.js +210 -0
  12. package/dist/cjs/building/builder.js.map +6 -0
  13. package/dist/cjs/building/cli.d.ts +7 -0
  14. package/dist/cjs/building/cli.d.ts.map +1 -0
  15. package/dist/cjs/building/cli.js +100 -0
  16. package/dist/cjs/building/cli.js.map +6 -0
  17. package/dist/cjs/building/error.d.ts +16 -0
  18. package/dist/cjs/building/error.d.ts.map +1 -0
  19. package/dist/cjs/building/error.js +50 -0
  20. package/dist/cjs/building/error.js.map +6 -0
  21. package/dist/cjs/building/graph.d.ts +37 -0
  22. package/dist/cjs/building/graph.d.ts.map +1 -0
  23. package/dist/cjs/building/graph.js +222 -0
  24. package/dist/cjs/building/graph.js.map +6 -0
  25. package/dist/cjs/building/project.d.ts +56 -0
  26. package/dist/cjs/building/project.d.ts.map +1 -0
  27. package/dist/cjs/building/project.js +239 -0
  28. package/dist/cjs/building/project.js.map +6 -0
  29. package/dist/cjs/building/tsconfig.d.ts +16 -0
  30. package/dist/cjs/building/tsconfig.d.ts.map +1 -0
  31. package/dist/cjs/building/tsconfig.js +70 -0
  32. package/dist/cjs/building/tsconfig.js.map +6 -0
  33. package/dist/cjs/building/typescript/context.d.ts +16 -0
  34. package/dist/cjs/building/typescript/context.d.ts.map +1 -0
  35. package/dist/cjs/building/typescript/context.js +82 -0
  36. package/dist/cjs/building/typescript/context.js.map +6 -0
  37. package/dist/cjs/building/typescript/incremental-compiler.d.ts +10 -0
  38. package/dist/cjs/building/typescript/incremental-compiler.d.ts.map +1 -0
  39. package/dist/cjs/building/typescript/incremental-compiler.js +119 -0
  40. package/dist/cjs/building/typescript/incremental-compiler.js.map +6 -0
  41. package/dist/cjs/building/typescript/language-service.d.ts +13 -0
  42. package/dist/cjs/building/typescript/language-service.d.ts.map +1 -0
  43. package/dist/cjs/building/typescript/language-service.js +109 -0
  44. package/dist/cjs/building/typescript/language-service.js.map +6 -0
  45. package/dist/cjs/building/typescript/solution-builder.d.ts +10 -0
  46. package/dist/cjs/building/typescript/solution-builder.d.ts.map +1 -0
  47. package/dist/cjs/building/typescript/solution-builder.js +72 -0
  48. package/dist/cjs/building/typescript/solution-builder.js.map +6 -0
  49. package/dist/cjs/building/typescript.d.ts +13 -0
  50. package/dist/cjs/building/typescript.d.ts.map +1 -0
  51. package/dist/cjs/building/typescript.js +31 -0
  52. package/dist/cjs/building/typescript.js.map +6 -0
  53. package/dist/cjs/index.d.ts +15 -0
  54. package/dist/cjs/index.d.ts.map +1 -0
  55. package/dist/cjs/index.js +32 -0
  56. package/dist/cjs/index.js.map +6 -0
  57. package/dist/cjs/package.json +3 -0
  58. package/dist/cjs/running/cli.d.ts +19 -0
  59. package/dist/cjs/running/cli.d.ts.map +1 -0
  60. package/dist/cjs/running/cli.js +82 -0
  61. package/dist/cjs/running/cli.js.map +6 -0
  62. package/dist/cjs/running/execute.d.ts +8 -0
  63. package/dist/cjs/running/execute.d.ts.map +1 -0
  64. package/dist/cjs/running/execute.js +82 -0
  65. package/dist/cjs/running/execute.js.map +6 -0
  66. package/dist/cjs/testing/chip/pics-file.d.ts +20 -0
  67. package/dist/cjs/testing/chip/pics-file.d.ts.map +1 -0
  68. package/dist/cjs/testing/chip/pics-file.js +79 -0
  69. package/dist/cjs/testing/chip/pics-file.js.map +6 -0
  70. package/dist/cjs/testing/chip.d.ts +60 -0
  71. package/dist/cjs/testing/chip.d.ts.map +1 -0
  72. package/dist/cjs/testing/chip.js +306 -0
  73. package/dist/cjs/testing/chip.js.map +6 -0
  74. package/dist/cjs/testing/cli.d.ts +9 -0
  75. package/dist/cjs/testing/cli.d.ts.map +1 -0
  76. package/dist/cjs/testing/cli.js +117 -0
  77. package/dist/cjs/testing/cli.js.map +6 -0
  78. package/dist/cjs/testing/failure-detail.d.ts +19 -0
  79. package/dist/cjs/testing/failure-detail.d.ts.map +1 -0
  80. package/dist/cjs/testing/failure-detail.js +143 -0
  81. package/dist/cjs/testing/failure-detail.js.map +6 -0
  82. package/dist/cjs/testing/files.d.ts +8 -0
  83. package/dist/cjs/testing/files.d.ts.map +1 -0
  84. package/dist/cjs/testing/files.js +52 -0
  85. package/dist/cjs/testing/files.js.map +6 -0
  86. package/dist/cjs/testing/global-declarations.d.ts +38 -0
  87. package/dist/cjs/testing/global-declarations.d.ts.map +1 -0
  88. package/dist/cjs/testing/global-declarations.js +8 -0
  89. package/dist/cjs/testing/global-declarations.js.map +6 -0
  90. package/dist/cjs/testing/global-definitions.d.ts +7 -0
  91. package/dist/cjs/testing/global-definitions.d.ts.map +1 -0
  92. package/dist/cjs/testing/global-definitions.js +50 -0
  93. package/dist/cjs/testing/global-definitions.js.map +6 -0
  94. package/dist/cjs/testing/mocha.d.ts +36 -0
  95. package/dist/cjs/testing/mocha.d.ts.map +1 -0
  96. package/dist/cjs/testing/mocha.js +155 -0
  97. package/dist/cjs/testing/mocha.js.map +6 -0
  98. package/dist/cjs/testing/mocharc.cjs +68 -0
  99. package/dist/cjs/testing/mocharc.d.cts +7 -0
  100. package/dist/cjs/testing/mocks/crypto.d.ts +7 -0
  101. package/dist/cjs/testing/mocks/crypto.d.ts.map +1 -0
  102. package/dist/cjs/testing/mocks/crypto.js +79 -0
  103. package/dist/cjs/testing/mocks/crypto.js.map +6 -0
  104. package/dist/cjs/testing/mocks/environment.d.ts +7 -0
  105. package/dist/cjs/testing/mocks/environment.d.ts.map +1 -0
  106. package/dist/cjs/testing/mocks/environment.js +7 -0
  107. package/dist/cjs/testing/mocks/environment.js.map +6 -0
  108. package/dist/cjs/testing/mocks/index.d.ts +10 -0
  109. package/dist/cjs/testing/mocks/index.d.ts.map +1 -0
  110. package/dist/cjs/testing/mocks/index.js +27 -0
  111. package/dist/cjs/testing/mocks/index.js.map +6 -0
  112. package/dist/cjs/testing/mocks/logging.d.ts +28 -0
  113. package/dist/cjs/testing/mocks/logging.d.ts.map +1 -0
  114. package/dist/cjs/testing/mocks/logging.js +93 -0
  115. package/dist/cjs/testing/mocks/logging.js.map +6 -0
  116. package/dist/cjs/testing/mocks/time.d.ts +88 -0
  117. package/dist/cjs/testing/mocks/time.d.ts.map +1 -0
  118. package/dist/cjs/testing/mocks/time.js +250 -0
  119. package/dist/cjs/testing/mocks/time.js.map +6 -0
  120. package/dist/cjs/testing/node.d.ts +16 -0
  121. package/dist/cjs/testing/node.d.ts.map +1 -0
  122. package/dist/cjs/testing/node.js +108 -0
  123. package/dist/cjs/testing/node.js.map +6 -0
  124. package/dist/cjs/testing/options.d.ts +19 -0
  125. package/dist/cjs/testing/options.d.ts.map +1 -0
  126. package/dist/cjs/testing/options.js +62 -0
  127. package/dist/cjs/testing/options.js.map +6 -0
  128. package/dist/cjs/testing/reporter.d.ts +50 -0
  129. package/dist/cjs/testing/reporter.d.ts.map +1 -0
  130. package/dist/cjs/testing/reporter.js +137 -0
  131. package/dist/cjs/testing/reporter.js.map +6 -0
  132. package/dist/cjs/testing/runner.d.ts +22 -0
  133. package/dist/cjs/testing/runner.d.ts.map +1 -0
  134. package/dist/cjs/testing/runner.js +116 -0
  135. package/dist/cjs/testing/runner.js.map +6 -0
  136. package/dist/cjs/testing/web.d.ts +8 -0
  137. package/dist/cjs/testing/web.d.ts.map +1 -0
  138. package/dist/cjs/testing/web.js +165 -0
  139. package/dist/cjs/testing/web.js.map +6 -0
  140. package/dist/cjs/util/bootstrap.mjs +105 -0
  141. package/dist/cjs/util/docker.d.ts +27 -0
  142. package/dist/cjs/util/docker.d.ts.map +1 -0
  143. package/dist/cjs/util/docker.js +163 -0
  144. package/dist/cjs/util/docker.js.map +6 -0
  145. package/dist/cjs/util/errors.d.ts +8 -0
  146. package/dist/cjs/util/errors.d.ts.map +1 -0
  147. package/dist/cjs/util/errors.js +55 -0
  148. package/dist/cjs/util/errors.js.map +6 -0
  149. package/dist/cjs/util/index.d.ts +8 -0
  150. package/dist/cjs/util/index.d.ts.map +1 -0
  151. package/dist/cjs/util/index.js +25 -0
  152. package/dist/cjs/util/index.js.map +6 -0
  153. package/dist/cjs/util/node-shims.d.ts +7 -0
  154. package/dist/cjs/util/node-shims.d.ts.map +1 -0
  155. package/dist/cjs/util/node-shims.js +12 -0
  156. package/dist/cjs/util/node-shims.js.map +6 -0
  157. package/dist/cjs/util/package.d.ts +61 -0
  158. package/dist/cjs/util/package.d.ts.map +1 -0
  159. package/dist/cjs/util/package.js +324 -0
  160. package/dist/cjs/util/package.js.map +6 -0
  161. package/dist/cjs/util/progress.d.ts +31 -0
  162. package/dist/cjs/util/progress.d.ts.map +1 -0
  163. package/dist/cjs/util/progress.js +232 -0
  164. package/dist/cjs/util/progress.js.map +6 -0
  165. package/dist/cjs/util/tools-path.cjs +13 -0
  166. package/dist/cjs/util/tools-path.d.cts +7 -0
  167. package/dist/cjs/util/trace-unhandled.d.ts +9 -0
  168. package/dist/cjs/util/trace-unhandled.d.ts.map +1 -0
  169. package/dist/cjs/util/trace-unhandled.js +48 -0
  170. package/dist/cjs/util/trace-unhandled.js.map +6 -0
  171. package/dist/cjs/util/wtf.d.ts +10 -0
  172. package/dist/cjs/util/wtf.d.ts.map +1 -0
  173. package/dist/cjs/util/wtf.js +53 -0
  174. package/dist/cjs/util/wtf.js.map +6 -0
  175. package/dist/cjs/versioning/cli.d.ts +7 -0
  176. package/dist/cjs/versioning/cli.d.ts.map +1 -0
  177. package/dist/cjs/versioning/cli.js +62 -0
  178. package/dist/cjs/versioning/cli.js.map +6 -0
  179. package/dist/cjs/versioning/versioner.d.ts +18 -0
  180. package/dist/cjs/versioning/versioner.d.ts.map +1 -0
  181. package/dist/cjs/versioning/versioner.js +145 -0
  182. package/dist/cjs/versioning/versioner.js.map +6 -0
  183. package/dist/esm/building/builder.d.ts +35 -0
  184. package/dist/esm/building/builder.d.ts.map +1 -0
  185. package/dist/esm/building/builder.js +180 -0
  186. package/dist/esm/building/builder.js.map +6 -0
  187. package/dist/esm/building/cli.d.ts +7 -0
  188. package/dist/esm/building/cli.d.ts.map +1 -0
  189. package/dist/esm/building/cli.js +70 -0
  190. package/dist/esm/building/cli.js.map +6 -0
  191. package/dist/esm/building/error.d.ts +16 -0
  192. package/dist/esm/building/error.d.ts.map +1 -0
  193. package/dist/esm/building/error.js +30 -0
  194. package/dist/esm/building/error.js.map +6 -0
  195. package/dist/esm/building/graph.d.ts +37 -0
  196. package/dist/esm/building/graph.d.ts.map +1 -0
  197. package/dist/esm/building/graph.js +192 -0
  198. package/dist/esm/building/graph.js.map +6 -0
  199. package/dist/esm/building/project.d.ts +56 -0
  200. package/dist/esm/building/project.d.ts.map +1 -0
  201. package/dist/esm/building/project.js +219 -0
  202. package/dist/esm/building/project.js.map +6 -0
  203. package/dist/esm/building/tsconfig.d.ts +16 -0
  204. package/dist/esm/building/tsconfig.d.ts.map +1 -0
  205. package/dist/esm/building/tsconfig.js +50 -0
  206. package/dist/esm/building/tsconfig.js.map +6 -0
  207. package/dist/esm/building/typescript/context.d.ts +16 -0
  208. package/dist/esm/building/typescript/context.d.ts.map +1 -0
  209. package/dist/esm/building/typescript/context.js +68 -0
  210. package/dist/esm/building/typescript/context.js.map +6 -0
  211. package/dist/esm/building/typescript/incremental-compiler.d.ts +10 -0
  212. package/dist/esm/building/typescript/incremental-compiler.d.ts.map +1 -0
  213. package/dist/esm/building/typescript/incremental-compiler.js +99 -0
  214. package/dist/esm/building/typescript/incremental-compiler.js.map +6 -0
  215. package/dist/esm/building/typescript/language-service.d.ts +13 -0
  216. package/dist/esm/building/typescript/language-service.d.ts.map +1 -0
  217. package/dist/esm/building/typescript/language-service.js +99 -0
  218. package/dist/esm/building/typescript/language-service.js.map +6 -0
  219. package/dist/esm/building/typescript/solution-builder.d.ts +10 -0
  220. package/dist/esm/building/typescript/solution-builder.d.ts.map +1 -0
  221. package/dist/esm/building/typescript/solution-builder.js +52 -0
  222. package/dist/esm/building/typescript/solution-builder.js.map +6 -0
  223. package/dist/esm/building/typescript.d.ts +13 -0
  224. package/dist/esm/building/typescript.d.ts.map +1 -0
  225. package/dist/esm/building/typescript.js +11 -0
  226. package/dist/esm/building/typescript.js.map +6 -0
  227. package/dist/esm/index.d.ts +15 -0
  228. package/dist/esm/index.d.ts.map +1 -0
  229. package/dist/esm/index.js +15 -0
  230. package/dist/esm/index.js.map +6 -0
  231. package/dist/esm/package.json +3 -0
  232. package/dist/esm/running/cli.d.ts +19 -0
  233. package/dist/esm/running/cli.d.ts.map +1 -0
  234. package/dist/esm/running/cli.js +62 -0
  235. package/dist/esm/running/cli.js.map +6 -0
  236. package/dist/esm/running/execute.d.ts +8 -0
  237. package/dist/esm/running/execute.d.ts.map +1 -0
  238. package/dist/esm/running/execute.js +52 -0
  239. package/dist/esm/running/execute.js.map +6 -0
  240. package/dist/esm/testing/chip/pics-file.d.ts +20 -0
  241. package/dist/esm/testing/chip/pics-file.d.ts.map +1 -0
  242. package/dist/esm/testing/chip/pics-file.js +59 -0
  243. package/dist/esm/testing/chip/pics-file.js.map +6 -0
  244. package/dist/esm/testing/chip.d.ts +60 -0
  245. package/dist/esm/testing/chip.d.ts.map +1 -0
  246. package/dist/esm/testing/chip.js +286 -0
  247. package/dist/esm/testing/chip.js.map +6 -0
  248. package/dist/esm/testing/cli.d.ts +9 -0
  249. package/dist/esm/testing/cli.d.ts.map +1 -0
  250. package/dist/esm/testing/cli.js +87 -0
  251. package/dist/esm/testing/cli.js.map +6 -0
  252. package/dist/esm/testing/failure-detail.d.ts +19 -0
  253. package/dist/esm/testing/failure-detail.d.ts.map +1 -0
  254. package/dist/esm/testing/failure-detail.js +113 -0
  255. package/dist/esm/testing/failure-detail.js.map +6 -0
  256. package/dist/esm/testing/files.d.ts +8 -0
  257. package/dist/esm/testing/files.d.ts.map +1 -0
  258. package/dist/esm/testing/files.js +32 -0
  259. package/dist/esm/testing/files.js.map +6 -0
  260. package/dist/esm/testing/global-declarations.d.ts +38 -0
  261. package/dist/esm/testing/global-declarations.d.ts.map +1 -0
  262. package/dist/esm/testing/global-declarations.js +7 -0
  263. package/dist/esm/testing/global-declarations.js.map +6 -0
  264. package/dist/esm/testing/global-definitions.d.ts +7 -0
  265. package/dist/esm/testing/global-definitions.d.ts.map +1 -0
  266. package/dist/esm/testing/global-definitions.js +27 -0
  267. package/dist/esm/testing/global-definitions.js.map +6 -0
  268. package/dist/esm/testing/mocha.d.ts +36 -0
  269. package/dist/esm/testing/mocha.d.ts.map +1 -0
  270. package/dist/esm/testing/mocha.js +135 -0
  271. package/dist/esm/testing/mocha.js.map +6 -0
  272. package/dist/esm/testing/mocharc.cjs +68 -0
  273. package/dist/esm/testing/mocharc.d.cts +7 -0
  274. package/dist/esm/testing/mocks/crypto.d.ts +7 -0
  275. package/dist/esm/testing/mocks/crypto.d.ts.map +1 -0
  276. package/dist/esm/testing/mocks/crypto.js +59 -0
  277. package/dist/esm/testing/mocks/crypto.js.map +6 -0
  278. package/dist/esm/testing/mocks/environment.d.ts +7 -0
  279. package/dist/esm/testing/mocks/environment.d.ts.map +1 -0
  280. package/dist/esm/testing/mocks/environment.js +6 -0
  281. package/dist/esm/testing/mocks/environment.js.map +6 -0
  282. package/dist/esm/testing/mocks/index.d.ts +10 -0
  283. package/dist/esm/testing/mocks/index.d.ts.map +1 -0
  284. package/dist/esm/testing/mocks/index.js +10 -0
  285. package/dist/esm/testing/mocks/index.js.map +6 -0
  286. package/dist/esm/testing/mocks/logging.d.ts +28 -0
  287. package/dist/esm/testing/mocks/logging.d.ts.map +1 -0
  288. package/dist/esm/testing/mocks/logging.js +63 -0
  289. package/dist/esm/testing/mocks/logging.js.map +6 -0
  290. package/dist/esm/testing/mocks/time.d.ts +88 -0
  291. package/dist/esm/testing/mocks/time.d.ts.map +1 -0
  292. package/dist/esm/testing/mocks/time.js +230 -0
  293. package/dist/esm/testing/mocks/time.js.map +6 -0
  294. package/dist/esm/testing/node.d.ts +16 -0
  295. package/dist/esm/testing/node.d.ts.map +1 -0
  296. package/dist/esm/testing/node.js +78 -0
  297. package/dist/esm/testing/node.js.map +6 -0
  298. package/dist/esm/testing/options.d.ts +19 -0
  299. package/dist/esm/testing/options.d.ts.map +1 -0
  300. package/dist/esm/testing/options.js +42 -0
  301. package/dist/esm/testing/options.js.map +6 -0
  302. package/dist/esm/testing/reporter.d.ts +50 -0
  303. package/dist/esm/testing/reporter.d.ts.map +1 -0
  304. package/dist/esm/testing/reporter.js +107 -0
  305. package/dist/esm/testing/reporter.js.map +6 -0
  306. package/dist/esm/testing/runner.d.ts +22 -0
  307. package/dist/esm/testing/runner.d.ts.map +1 -0
  308. package/dist/esm/testing/runner.js +86 -0
  309. package/dist/esm/testing/runner.js.map +6 -0
  310. package/dist/esm/testing/web.d.ts +8 -0
  311. package/dist/esm/testing/web.d.ts.map +1 -0
  312. package/dist/esm/testing/web.js +135 -0
  313. package/dist/esm/testing/web.js.map +6 -0
  314. package/dist/esm/util/bootstrap.mjs +105 -0
  315. package/dist/esm/util/docker.d.ts +27 -0
  316. package/dist/esm/util/docker.d.ts.map +1 -0
  317. package/dist/esm/util/docker.js +133 -0
  318. package/dist/esm/util/docker.js.map +6 -0
  319. package/dist/esm/util/errors.d.ts +8 -0
  320. package/dist/esm/util/errors.d.ts.map +1 -0
  321. package/dist/esm/util/errors.js +35 -0
  322. package/dist/esm/util/errors.js.map +6 -0
  323. package/dist/esm/util/index.d.ts +8 -0
  324. package/dist/esm/util/index.d.ts.map +1 -0
  325. package/dist/esm/util/index.js +8 -0
  326. package/dist/esm/util/index.js.map +6 -0
  327. package/dist/esm/util/node-shims.d.ts +7 -0
  328. package/dist/esm/util/node-shims.d.ts.map +1 -0
  329. package/dist/esm/util/node-shims.js +11 -0
  330. package/dist/esm/util/node-shims.js.map +6 -0
  331. package/dist/esm/util/package.d.ts +61 -0
  332. package/dist/esm/util/package.d.ts.map +1 -0
  333. package/dist/esm/util/package.js +304 -0
  334. package/dist/esm/util/package.js.map +6 -0
  335. package/dist/esm/util/progress.d.ts +31 -0
  336. package/dist/esm/util/progress.d.ts.map +1 -0
  337. package/dist/esm/util/progress.js +202 -0
  338. package/dist/esm/util/progress.js.map +6 -0
  339. package/dist/esm/util/tools-path.cjs +13 -0
  340. package/dist/esm/util/tools-path.d.cts +7 -0
  341. package/dist/esm/util/trace-unhandled.d.ts +9 -0
  342. package/dist/esm/util/trace-unhandled.d.ts.map +1 -0
  343. package/dist/esm/util/trace-unhandled.js +18 -0
  344. package/dist/esm/util/trace-unhandled.js.map +6 -0
  345. package/dist/esm/util/wtf.d.ts +10 -0
  346. package/dist/esm/util/wtf.d.ts.map +1 -0
  347. package/dist/esm/util/wtf.js +23 -0
  348. package/dist/esm/util/wtf.js.map +6 -0
  349. package/dist/esm/versioning/cli.d.ts +7 -0
  350. package/dist/esm/versioning/cli.d.ts.map +1 -0
  351. package/dist/esm/versioning/cli.js +32 -0
  352. package/dist/esm/versioning/cli.js.map +6 -0
  353. package/dist/esm/versioning/versioner.d.ts +18 -0
  354. package/dist/esm/versioning/versioner.d.ts.map +1 -0
  355. package/dist/esm/versioning/versioner.js +115 -0
  356. package/dist/esm/versioning/versioner.js.map +6 -0
  357. package/package.json +82 -0
  358. package/src/building/builder.ts +216 -0
  359. package/src/building/cli.ts +89 -0
  360. package/src/building/error.ts +29 -0
  361. package/src/building/graph.ts +251 -0
  362. package/src/building/project.ts +313 -0
  363. package/src/building/tsconfig.ts +69 -0
  364. package/src/building/typescript/context.ts +85 -0
  365. package/src/building/typescript/incremental-compiler.ts +126 -0
  366. package/src/building/typescript/language-service.ts +132 -0
  367. package/src/building/typescript/solution-builder.ts +67 -0
  368. package/src/building/typescript.ts +15 -0
  369. package/src/index.ts +15 -0
  370. package/src/running/cli.ts +95 -0
  371. package/src/running/execute.ts +63 -0
  372. package/src/testing/chip/pics-file.ts +71 -0
  373. package/src/testing/chip/pics.properties +53 -0
  374. package/src/testing/chip.ts +420 -0
  375. package/src/testing/cli.ts +122 -0
  376. package/src/testing/failure-detail.ts +126 -0
  377. package/src/testing/files.ts +35 -0
  378. package/src/testing/global-declarations.ts +50 -0
  379. package/src/testing/global-definitions.ts +35 -0
  380. package/src/testing/index.html +16 -0
  381. package/src/testing/mocha.ts +162 -0
  382. package/src/testing/mocharc.cjs +68 -0
  383. package/src/testing/mocharc.d.cts +7 -0
  384. package/src/testing/mocks/crypto.ts +70 -0
  385. package/src/testing/mocks/environment.ts +7 -0
  386. package/src/testing/mocks/index.ts +10 -0
  387. package/src/testing/mocks/logging.ts +99 -0
  388. package/src/testing/mocks/time.ts +294 -0
  389. package/src/testing/node.ts +114 -0
  390. package/src/testing/options.ts +58 -0
  391. package/src/testing/reporter.ts +144 -0
  392. package/src/testing/runner.ts +98 -0
  393. package/src/testing/web.ts +174 -0
  394. package/src/tsconfig.json +14 -0
  395. package/src/util/bootstrap.mjs +105 -0
  396. package/src/util/docker.ts +176 -0
  397. package/src/util/errors.ts +33 -0
  398. package/src/util/index.ts +8 -0
  399. package/src/util/node-shims.ts +13 -0
  400. package/src/util/package.ts +369 -0
  401. package/src/util/progress.ts +252 -0
  402. package/src/util/tools-path.cjs +13 -0
  403. package/src/util/tools-path.d.cts +7 -0
  404. package/src/util/trace-unhandled.ts +17 -0
  405. package/src/util/wtf.ts +25 -0
  406. package/src/versioning/cli.ts +43 -0
  407. package/src/versioning/versioner.ts +139 -0
  408. package/test/testing/mocks/MockTimeTest.ts +113 -0
  409. package/test/tsconfig.json +15 -0
  410. package/tsc/tsconfig.app.json +7 -0
  411. package/tsc/tsconfig.base.json +41 -0
  412. package/tsc/tsconfig.lib.json +12 -0
  413. package/tsc/tsconfig.test.json +7 -0
  414. package/tsconfig.json +5 -0
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import yargs from "yargs";
8
+ import { hideBin } from "yargs/helpers";
9
+ import { Builder, Target } from "./builder.js";
10
+ import { Graph } from "./graph.js";
11
+ import { Project } from "./project.js";
12
+ import { syncAllTsconfigs } from "./tsconfig.js";
13
+
14
+ enum Mode {
15
+ BuildProject,
16
+ BuildProjectWithDependencies,
17
+ BuildWorkspace,
18
+ DisplayGraph,
19
+ SyncTsconfigs,
20
+ }
21
+
22
+ export async function main(argv = process.argv) {
23
+ const targets = Array<Target>();
24
+ let mode = Mode.BuildProject;
25
+
26
+ const args = await yargs(hideBin(argv))
27
+ .usage("Builds packages adhering to matter.js standards.")
28
+ .option("prefix", { alias: "p", default: ".", type: "string", describe: "specify build directory" })
29
+ .option("clean", { alias: "c", default: false, type: "boolean", describe: "clean before build" })
30
+ .option("workspaces", { alias: "w", default: false, type: "boolean", describe: "build all workspace packages" })
31
+ .option("dependencies", { alias: "d", default: false, type: "boolean", describe: "build dependencies" })
32
+ .command("*", "build types and both JS files", () => {})
33
+ .command("clean", "remove build and dist directories", () => targets.push(Target.clean))
34
+ .command("types", "build type definitions", () => targets.push(Target.types))
35
+ .command("esm", "build JS (ES6 modules)", () => targets.push(Target.esm))
36
+ .command("cjs", "build JS (CommonJS modules)", () => targets.push(Target.cjs))
37
+ .command("graph", "display the workspace graph", () => (mode = Mode.DisplayGraph))
38
+ .command("tsconfigs", "sync all tsconfigs with package.json", () => (mode = Mode.SyncTsconfigs))
39
+ .wrap(Math.min(process.stdout.columns, 80))
40
+ .strict().argv;
41
+
42
+ if (mode === Mode.BuildProject) {
43
+ if (args.workspaces) {
44
+ mode = Mode.BuildWorkspace;
45
+ } else if (args.dependencies) {
46
+ mode = Mode.BuildProjectWithDependencies;
47
+ }
48
+ }
49
+
50
+ function builder(graph?: Graph) {
51
+ return new Builder({ ...args, targets: [...targets], graph });
52
+ }
53
+
54
+ switch (mode as Mode) {
55
+ case Mode.BuildProject:
56
+ const project = new Project(args.prefix);
57
+ await builder().build(project);
58
+ break;
59
+
60
+ case Mode.BuildProjectWithDependencies:
61
+ {
62
+ const graph = await Graph.forProject(args.prefix);
63
+ if (graph === undefined) {
64
+ throw new Error(`Cannot build with dependencies because ${args.prefix} is not in a workspace`);
65
+ }
66
+ await graph.build(builder(graph));
67
+ }
68
+ break;
69
+
70
+ case Mode.BuildWorkspace:
71
+ {
72
+ const graph = await Graph.load();
73
+ await syncAllTsconfigs(graph);
74
+ await graph.build(builder());
75
+ }
76
+ break;
77
+
78
+ case Mode.DisplayGraph:
79
+ (await Graph.load()).display();
80
+ break;
81
+
82
+ case Mode.SyncTsconfigs:
83
+ {
84
+ const graph = await Graph.load();
85
+ await syncAllTsconfigs(graph);
86
+ }
87
+ break;
88
+ }
89
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ export class InternalBuildError extends Error {
8
+ constructor(message: string) {
9
+ super(message);
10
+ }
11
+ }
12
+
13
+ export class BuildError extends Error {
14
+ constructor(readonly diagnostics: string) {
15
+ super();
16
+ }
17
+
18
+ override get stack() {
19
+ return this.diagnostics;
20
+ }
21
+
22
+ override toString() {
23
+ return this.diagnostics;
24
+ }
25
+
26
+ inspect() {
27
+ return this.toString();
28
+ }
29
+ }
@@ -0,0 +1,251 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import mapWorkspaces from "@npmcli/map-workspaces";
8
+ import colors from "ansi-colors";
9
+ import { JsonNotFoundError, Package } from "../util/package.js";
10
+ import { Progress } from "../util/progress.js";
11
+ import { Builder } from "./builder.js";
12
+ import { InternalBuildError } from "./error.js";
13
+ import { BUILD_INFO_LOCATION, BuildInformation, Project } from "./project.js";
14
+
15
+ /**
16
+ * Graph of dependencies for workspace packages.
17
+ *
18
+ * We use this information to determine which packages are "dirty" and need rebuild. In the future we can also use for
19
+ * parallel build, only tricky part there is showing status.
20
+ */
21
+ export class Graph {
22
+ protected constructor(readonly nodes: Graph.Node[]) {}
23
+
24
+ get(name: string) {
25
+ const node = this.nodes.find(node => node.pkg.name === name);
26
+ if (node === undefined) {
27
+ throw new Error(`Cannot locate package "${name}"`);
28
+ }
29
+ return node;
30
+ }
31
+
32
+ static async load(pkg = Package.workspace) {
33
+ const nodeMap = await this.#loadNodes(pkg.workspace);
34
+ return await this.#createGraph(Object.values(nodeMap));
35
+ }
36
+
37
+ static async forProject(path: string): Promise<Graph | undefined> {
38
+ let workspace;
39
+ try {
40
+ workspace = Package.workspaceFor(path);
41
+ } catch (e) {
42
+ if (e instanceof JsonNotFoundError) {
43
+ // Project is not in a workspace
44
+ return;
45
+ }
46
+ throw e;
47
+ }
48
+
49
+ const nodeMap = await this.#loadNodes(workspace);
50
+
51
+ const rootPkg = new Package({ path: path });
52
+ const rootNode = nodeMap[rootPkg.json.name];
53
+ if (!rootNode) {
54
+ // Project resides under a workspace but is not part of the workspace
55
+ return;
56
+ }
57
+
58
+ const nodes = new Set<Graph.Node>();
59
+ function addNode(node: Graph.Node) {
60
+ if (nodes.has(node)) {
61
+ return;
62
+ }
63
+ nodes.add(node);
64
+ for (const dependency of node.dependencies) {
65
+ addNode(dependency);
66
+ }
67
+ }
68
+
69
+ addNode(rootNode);
70
+
71
+ return await this.#createGraph([...nodes]);
72
+ }
73
+
74
+ // TODO - parallelization will be trivial except need to update Progress
75
+ // to support display of multiple simultaneous tasks
76
+ async build(builder: Builder, showSkipped = true) {
77
+ const toBuild = new Set(this.nodes);
78
+
79
+ // We configure each build before building so that any generated files are in place before we initiate the build
80
+ for (const node of this.nodes) {
81
+ await builder.configure(node.project);
82
+ }
83
+
84
+ while (toBuild.size) {
85
+ let node;
86
+
87
+ nodes: for (node of toBuild) {
88
+ for (const dep of node.dependencies) {
89
+ if (dep.isDirty) {
90
+ continue nodes;
91
+ }
92
+ }
93
+ break;
94
+ }
95
+
96
+ if (!node) {
97
+ throw new Error("Internal logic error: No unbuilt project has fully built dependencies");
98
+ }
99
+
100
+ if (node.isDirty || builder.unconditional) {
101
+ await builder.build(node.project);
102
+ node.info.timestamp = new Date().toISOString();
103
+ } else if (showSkipped) {
104
+ new Progress().skip("Up to date", node.pkg);
105
+ }
106
+
107
+ toBuild.delete(node);
108
+ }
109
+ }
110
+
111
+ display() {
112
+ for (const node of this.nodes) {
113
+ const progress = node.pkg.start("Node");
114
+ progress.info("path", node.pkg.path);
115
+ progress.info("modified", formatTime(node.modifyTime));
116
+ progress.info("built", formatTime(node.info.timestamp ?? 0));
117
+ progress.info("dirty", node.isDirty ? colors.dim.red("yes") : colors.dim.green("no"));
118
+ progress.info("dependencies", node.dependencies.map(formatDep).join(", "));
119
+ progress.shutdown();
120
+ }
121
+ }
122
+
123
+ static async #createGraph(nodes: Graph.Node[]) {
124
+ const graph = new Graph(nodes);
125
+
126
+ await Promise.all(
127
+ graph.nodes.map(async node => {
128
+ if (node.pkg.hasFile(BUILD_INFO_LOCATION)) {
129
+ node.info = await node.pkg.readJson(BUILD_INFO_LOCATION);
130
+ }
131
+
132
+ node.modifyTime = await node.pkg.lastModified("package.json", "src", "test");
133
+
134
+ return node;
135
+ }),
136
+ );
137
+
138
+ const stack = Array<Graph.Node>();
139
+ function findCircular(node: Graph.Node) {
140
+ if (stack.indexOf(node) !== -1) {
141
+ stack.push(node);
142
+ throw new InternalBuildError(`Circular dependency: ${stack.map(formatDep).join(" ▸ ")}`);
143
+ }
144
+ stack.push(node);
145
+ for (const dep of node.dependencies) {
146
+ findCircular(dep);
147
+ }
148
+ stack.pop();
149
+ }
150
+ for (const node of graph.nodes) {
151
+ findCircular(node);
152
+ }
153
+
154
+ return graph;
155
+ }
156
+
157
+ static async #loadNodes(workspace: Package) {
158
+ const workspaces = await mapWorkspaces({ pkg: workspace.json, cwd: workspace.path });
159
+
160
+ const nodeMap = {} as Record<string, Graph.Node>;
161
+ const allDeps = {} as Record<string, string[]>;
162
+ for (const path of workspaces.values()) {
163
+ const pkg = new Package({ path: path });
164
+ allDeps[pkg.json.name] = pkg.dependencies;
165
+ nodeMap[pkg.json.name] = {
166
+ pkg,
167
+ project: new Project(pkg),
168
+ dependencies: [],
169
+ info: {},
170
+ modifyTime: 0,
171
+
172
+ get buildTime() {
173
+ return this.info.timestamp ? new Date(this.info.timestamp).getTime() : 0;
174
+ },
175
+
176
+ get isDirty() {
177
+ return (
178
+ this.modifyTime > this.buildTime ||
179
+ !!this.dependencies.find(
180
+ dep =>
181
+ dep.isDirty ||
182
+ (dep.buildTime > this.buildTime &&
183
+ (dep.info.apiSha === undefined ||
184
+ dep.info.apiSha !== this.info.dependencyApiShas?.[dep.pkg.name])),
185
+ )
186
+ );
187
+ },
188
+
189
+ // This version of dirty should only be used after building all dependencies. If this project is
190
+ // unmodified and the SHA of the type definitions of the target project is also unmodified then we do
191
+ // not need to build
192
+ get prebuildDirty() {
193
+ if (this.modifyTime > this.buildTime) {
194
+ return true;
195
+ }
196
+ const depShas = this.info.dependencyApiShas;
197
+ if (typeof depShas !== "object") {
198
+ return this.isDirty;
199
+ }
200
+ for (const dep of this.dependencies) {
201
+ const depSha = depShas[dep.pkg.name];
202
+ if (depSha === undefined || depSha !== dep.info.apiSha) {
203
+ return true;
204
+ }
205
+ }
206
+ return false;
207
+ },
208
+ };
209
+ }
210
+
211
+ for (const name in allDeps) {
212
+ for (const dep of allDeps[name]) {
213
+ const depNode = nodeMap[dep];
214
+
215
+ // Note -- allow nodes to reference themselves, seems to be necessary on tools for use of tsc
216
+ if (depNode && depNode !== nodeMap[name]) {
217
+ nodeMap[name].dependencies.push(depNode);
218
+ }
219
+ }
220
+ }
221
+
222
+ return nodeMap;
223
+ }
224
+ }
225
+
226
+ export namespace Graph {
227
+ export interface Node {
228
+ pkg: Package;
229
+ project: Project;
230
+ dependencies: Node[];
231
+ buildTime: number;
232
+ info: BuildInformation;
233
+ modifyTime: number;
234
+ isDirty: boolean;
235
+ prebuildDirty: boolean;
236
+ }
237
+ }
238
+
239
+ function formatTime(time: number | string) {
240
+ if (!time) {
241
+ return colors.dim.red("never");
242
+ }
243
+ if (typeof time === "string") {
244
+ time = new Date(time).getTime();
245
+ }
246
+ return new Date(time - new Date().getTimezoneOffset()).toISOString().split(".")[0].replace("T", " ");
247
+ }
248
+
249
+ function formatDep(node: Graph.Node) {
250
+ return node.pkg.name.replace(/^@(?:project-chip|matter\.js)\//, "");
251
+ }
@@ -0,0 +1,313 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Hash } from "crypto";
8
+ import { build as esbuild, Format } from "esbuild";
9
+ import { cp, mkdir, readFile, rm, stat, symlink, writeFile } from "fs/promises";
10
+ import { glob } from "glob";
11
+ import { platform } from "os";
12
+ import { dirname, join, relative } from "path";
13
+ import { ignoreError } from "../util/errors.js";
14
+ import { CONFIG_PATH, Package } from "../util/package.js";
15
+ import { Progress } from "../util/progress.js";
16
+
17
+ export const BUILD_INFO_LOCATION = "build/info.json";
18
+
19
+ export interface BuildInformation {
20
+ /**
21
+ * Time of last build. Compared to source files to determine whether build is dirty.
22
+ */
23
+ timestamp?: string;
24
+
25
+ /**
26
+ * API signature. Used by dependents to determine whether they need to rebuild after we do.
27
+ */
28
+ apiSha?: string;
29
+
30
+ /**
31
+ * API signature of each dependency. Compared to apiSha of each dependency during dirty detection.
32
+ */
33
+ dependencyApiShas?: Record<string, string>;
34
+ }
35
+
36
+ export class Project {
37
+ pkg: Package;
38
+ #config?: Project.Config;
39
+ #configured?: boolean;
40
+
41
+ constructor(source: Package | string = ".") {
42
+ if (typeof source === "string") {
43
+ this.pkg = new Package({ path: source });
44
+ } else {
45
+ this.pkg = source;
46
+ }
47
+
48
+ if (!this.pkg.hasSrc) {
49
+ throw new Error(`Found package ${this.pkg.json.name} but no src directory is present`);
50
+ }
51
+ }
52
+
53
+ async buildSource(format: Format) {
54
+ await this.#build(format, "src", `dist/${format}`);
55
+ await this.#configureFormat("dist", format, true);
56
+ }
57
+
58
+ async buildTests(format: Format) {
59
+ if (this.pkg.hasDirectory("test")) {
60
+ await this.#build(format, "test", `build/${format}/test`);
61
+ }
62
+
63
+ const src = `dist/${format}`;
64
+ const dest = `build/${format}/src`;
65
+
66
+ try {
67
+ const destPath = this.pkg.resolve(dest);
68
+ await mkdir(dirname(destPath), { recursive: true });
69
+ await ignoreError("EEXIST", async () => await symlink(this.pkg.resolve(src), destPath));
70
+ } catch (e) {
71
+ if ((e as any).code === "EPERM" && platform() === "win32") {
72
+ // If developer mode is not enabled, we can't create a symlink
73
+ // on Windows. Copy instead
74
+ await cp(this.pkg.resolve(src), this.pkg.resolve(dest), {
75
+ recursive: true,
76
+ force: true,
77
+ });
78
+ } else {
79
+ throw e;
80
+ }
81
+ }
82
+ await this.#configureFormat("build", format, false);
83
+ }
84
+
85
+ async clean() {
86
+ for (const dir of ["build", "dist"]) {
87
+ await rm(this.pkg.resolve(dir), { recursive: true, force: true });
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Installs declaration files into specified directory. Also computes SHA-1 hash for all files that we use to
93
+ * detect "public API changes".
94
+ *
95
+ * Note we use cp to traverse filesystem, detect changes, locate source maps and compute API SHA. A little
96
+ * convoluted but works. When you correct for a node 20/windows bug.
97
+ */
98
+ async installDeclarationFormats(formats: Iterable<string>, apiSha?: Hash) {
99
+ const srcMaps = Array<string>();
100
+ let firstPass = true;
101
+
102
+ const src = this.pkg.resolve("build/types/src");
103
+
104
+ for (const format of formats) {
105
+ await cp(src, this.pkg.resolve(`dist/${format}`), {
106
+ recursive: true,
107
+ force: true,
108
+
109
+ filter: async (source, destination) => {
110
+ const sourceStat = await stat(source);
111
+ if (!sourceStat.isFile()) {
112
+ return true;
113
+ }
114
+
115
+ // Ignore files that are unchanged
116
+ const destinationMtime = (await ignoreError("ENOENT", () => stat(destination)))?.mtimeMs;
117
+ if (destinationMtime !== undefined) {
118
+ const sourceMtime = sourceStat.mtimeMs;
119
+ if (destinationMtime >= sourceMtime) {
120
+ return false;
121
+ }
122
+ }
123
+
124
+ // We process source maps below
125
+ if (source.endsWith(".d.ts.map")) {
126
+ if (firstPass) {
127
+ if (source.startsWith("\\\\?\\")) {
128
+ // Node 20 prefixes the path with above on Windows and relative() can't handle it;
129
+ // just strip off
130
+ source = source.slice(4);
131
+ }
132
+ srcMaps.push(source);
133
+ }
134
+ return false;
135
+ }
136
+
137
+ // Update hash if provided
138
+ if (apiSha) {
139
+ apiSha.update(await readFile(source));
140
+ }
141
+
142
+ return true;
143
+ },
144
+ });
145
+
146
+ // Only need to collect source maps and update hash on first pass
147
+ firstPass = false;
148
+ }
149
+
150
+ // If you specify --sourceRoot, tsc just sticks whatever the string is directly into the file. Not very useful
151
+ // unless you have no hierarchy or use absolute paths...
152
+ //
153
+ // We distribute types for src one level higher than we generate them (dist/esm vs build/types/src) so the paths
154
+ // end up incorrect.
155
+ //
156
+ // So... Rewrite the paths in all source maps under src/. Do this directly on buffer for marginal performance
157
+ // win.
158
+ for (const filename of srcMaps) {
159
+ // Load map as binary
160
+ let map = await readFile(filename);
161
+
162
+ // Find key text
163
+ let pos = map.indexOf('"sources":["../');
164
+ if (pos === -1) {
165
+ throw new Error(
166
+ `Could not find sources position in declaration map ${filename}, format may have changed`,
167
+ );
168
+ }
169
+
170
+ // move to ../
171
+ pos += 12;
172
+
173
+ // Shift everything left by three
174
+ map = map.copyWithin(pos, pos + 3).subarray(0, map.length - 3);
175
+
176
+ // Write to new locations
177
+ const pathRelativeToDest = relative(src, filename);
178
+ for (const format of formats) {
179
+ await writeFile(join(join(this.pkg.resolve(`dist/${format}`), pathRelativeToDest)), map);
180
+ }
181
+ }
182
+ }
183
+
184
+ get hasDeclarations() {
185
+ return this.pkg.hasDirectory("build/types");
186
+ }
187
+
188
+ async installDeclarations(apiSha?: Hash) {
189
+ await mkdir(this.pkg.resolve("dist"), { recursive: true });
190
+ const formats = new Set<string>();
191
+ if (this.pkg.supportsEsm) {
192
+ formats.add("esm");
193
+ }
194
+ if (this.pkg.supportsCjs) {
195
+ formats.add("cjs");
196
+ }
197
+ await this.installDeclarationFormats(formats, apiSha);
198
+ }
199
+
200
+ async recordBuildInfo(info: BuildInformation) {
201
+ await mkdir(this.pkg.resolve("build"), { recursive: true });
202
+ info.timestamp = new Date().toISOString();
203
+ await writeFile(this.pkg.resolve(BUILD_INFO_LOCATION), JSON.stringify(info, undefined, 4));
204
+ }
205
+
206
+ async configure(progress: Progress) {
207
+ if (this.#configured) {
208
+ return this.#config;
209
+ }
210
+
211
+ if (!this.pkg.hasConfig) {
212
+ return {};
213
+ }
214
+
215
+ const configPath = this.pkg.resolve(CONFIG_PATH);
216
+
217
+ const outfile = configPath.replace(/\\/g, "/").replace("/src/", "/build/").replace(/\.ts$/, ".js");
218
+ await esbuild({
219
+ entryPoints: [configPath],
220
+ outfile,
221
+ sourcemap: true,
222
+ });
223
+
224
+ this.#config = (await import(`file://${outfile}`)) as Project.Config | undefined;
225
+ this.#configured = true;
226
+
227
+ if (this.#config?.startup) {
228
+ await this.#config?.startup({
229
+ project: this,
230
+ progress,
231
+ });
232
+ }
233
+
234
+ return this.#config;
235
+ }
236
+
237
+ async #build(format: Format, indir: string, outdir: string) {
238
+ const entryPoints = await this.#targetsOf(indir, outdir, "ts", "js");
239
+
240
+ const configPath = this.pkg.resolve(CONFIG_PATH);
241
+ for (const entry of entryPoints) {
242
+ if (entry.in === configPath) {
243
+ continue;
244
+ }
245
+ entry.out = entry.out.replace(/\.[jt]s$/, "");
246
+ }
247
+
248
+ await esbuild({
249
+ entryPoints,
250
+ outdir: this.pkg.path,
251
+ format,
252
+ sourcemap: true,
253
+ sourcesContent: false,
254
+ absWorkingDir: dirname(this.pkg.resolve(indir)),
255
+
256
+ // This is necessary to downlevel "using"
257
+ target: "es2022",
258
+
259
+ logOverride: {
260
+ "direct-eval": "silent",
261
+ },
262
+ });
263
+
264
+ for (const entry of await this.#targetsOf(indir, outdir, "cjs", "mjs", "d.cts", "d.mts")) {
265
+ await cp(entry.in, entry.out);
266
+ }
267
+ }
268
+
269
+ async #configureFormat(dir: string, format: Format, isDist: boolean) {
270
+ // Build import map
271
+ let { imports } = this.pkg.json;
272
+ if (isDist && typeof imports === "object") {
273
+ imports = { ...imports };
274
+ for (const key in imports) {
275
+ const value = imports[key];
276
+ if (typeof value === "string") {
277
+ imports[key] = value.replace(/^\.\/src\//, "./");
278
+ }
279
+ }
280
+ }
281
+
282
+ // Write package.json
283
+ const path = this.pkg.resolve(`${dir}/${format}/package.json`);
284
+ const json: Record<string, unknown> = {
285
+ type: format === "cjs" ? "commonjs" : "module",
286
+ imports,
287
+ };
288
+ await writeFile(path, JSON.stringify(json, undefined, 4));
289
+ }
290
+
291
+ async #targetsOf(indir: string, outdir: string, ...extensions: string[]) {
292
+ indir = this.pkg.resolve(indir).replace(/\\/g, "/");
293
+ outdir = this.pkg.resolve(outdir).replace(/\\/g, "/");
294
+
295
+ return (await glob(extensions.map(ext => `${indir}/**/*.${ext}`))).map(file => ({
296
+ in: file,
297
+ out: `${outdir}/${file.slice(indir.length + 1)}`,
298
+ }));
299
+ }
300
+ }
301
+
302
+ export namespace Project {
303
+ export interface Context {
304
+ project: Project;
305
+ progress: Progress;
306
+ }
307
+
308
+ export interface Config {
309
+ startup?: (context: Context) => Promise<void>;
310
+ before?: (context: Context) => Promise<void>;
311
+ after?: (context: Context) => Promise<void>;
312
+ }
313
+ }