piral-cli 1.0.0-pre.2217 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +30 -7
  3. package/lib/api.js +23 -23
  4. package/lib/api.js.map +1 -1
  5. package/lib/apps/add-piral-instance-pilet.d.ts +26 -0
  6. package/lib/apps/add-piral-instance-pilet.js +53 -0
  7. package/lib/apps/add-piral-instance-pilet.js.map +1 -0
  8. package/lib/apps/build-pilet.d.ts +33 -2
  9. package/lib/apps/build-pilet.js +159 -32
  10. package/lib/apps/build-pilet.js.map +1 -1
  11. package/lib/apps/build-piral.d.ts +18 -1
  12. package/lib/apps/build-piral.js +68 -52
  13. package/lib/apps/build-piral.js.map +1 -1
  14. package/lib/apps/debug-pilet.d.ts +38 -2
  15. package/lib/apps/debug-pilet.js +150 -108
  16. package/lib/apps/debug-pilet.js.map +1 -1
  17. package/lib/apps/debug-piral.d.ts +23 -0
  18. package/lib/apps/debug-piral.js +63 -52
  19. package/lib/apps/debug-piral.js.map +1 -1
  20. package/lib/apps/declaration-piral.js +5 -3
  21. package/lib/apps/declaration-piral.js.map +1 -1
  22. package/lib/apps/index.d.ts +3 -0
  23. package/lib/apps/index.js +8 -1
  24. package/lib/apps/index.js.map +1 -1
  25. package/lib/apps/new-pilet.d.ts +7 -3
  26. package/lib/apps/new-pilet.js +47 -52
  27. package/lib/apps/new-pilet.js.map +1 -1
  28. package/lib/apps/new-piral.d.ts +7 -3
  29. package/lib/apps/new-piral.js +33 -23
  30. package/lib/apps/new-piral.js.map +1 -1
  31. package/lib/apps/pack-pilet.d.ts +9 -0
  32. package/lib/apps/pack-pilet.js +6 -13
  33. package/lib/apps/pack-pilet.js.map +1 -1
  34. package/lib/apps/publish-pilet.d.ts +23 -3
  35. package/lib/apps/publish-pilet.js +112 -62
  36. package/lib/apps/publish-pilet.js.map +1 -1
  37. package/lib/apps/publish-piral.d.ts +6 -2
  38. package/lib/apps/publish-piral.js +30 -26
  39. package/lib/apps/publish-piral.js.map +1 -1
  40. package/lib/apps/remove-piral-instance-pilet.d.ts +22 -0
  41. package/lib/apps/remove-piral-instance-pilet.js +52 -0
  42. package/lib/apps/remove-piral-instance-pilet.js.map +1 -0
  43. package/lib/apps/run-emulator-piral.d.ts +34 -0
  44. package/lib/apps/run-emulator-piral.js +91 -0
  45. package/lib/apps/run-emulator-piral.js.map +1 -0
  46. package/lib/apps/upgrade-pilet.d.ts +6 -2
  47. package/lib/apps/upgrade-pilet.js +41 -43
  48. package/lib/apps/upgrade-pilet.js.map +1 -1
  49. package/lib/apps/upgrade-piral.d.ts +2 -2
  50. package/lib/apps/upgrade-piral.js +21 -20
  51. package/lib/apps/upgrade-piral.js.map +1 -1
  52. package/lib/apps/validate-pilet.js +30 -36
  53. package/lib/apps/validate-pilet.js.map +1 -1
  54. package/lib/apps/validate-piral.js +13 -10
  55. package/lib/apps/validate-piral.js.map +1 -1
  56. package/lib/build/bundler-calls.d.ts +3 -0
  57. package/lib/build/bundler-calls.js +117 -0
  58. package/lib/build/bundler-calls.js.map +1 -0
  59. package/lib/build/run-build-pilet.d.ts +1 -0
  60. package/lib/build/run-build-pilet.js +65 -0
  61. package/lib/build/run-build-pilet.js.map +1 -0
  62. package/lib/build/run-build-piral.d.ts +1 -0
  63. package/lib/build/run-build-piral.js +67 -0
  64. package/lib/build/run-build-piral.js.map +1 -0
  65. package/lib/build/run-debug-mono-piral.d.ts +1 -0
  66. package/lib/build/run-debug-mono-piral.js +70 -0
  67. package/lib/build/run-debug-mono-piral.js.map +1 -0
  68. package/lib/build/run-debug-pilet.d.ts +1 -0
  69. package/lib/build/run-debug-pilet.js +89 -0
  70. package/lib/build/run-debug-pilet.js.map +1 -0
  71. package/lib/build/run-debug-piral.d.ts +1 -0
  72. package/lib/build/run-debug-piral.js +85 -0
  73. package/lib/build/run-debug-piral.js.map +1 -0
  74. package/lib/bundler.js +75 -26
  75. package/lib/bundler.js.map +1 -1
  76. package/lib/cli.js +7 -4
  77. package/lib/cli.js.map +1 -1
  78. package/lib/commands.js +266 -46
  79. package/lib/commands.js.map +1 -1
  80. package/lib/common/archive.d.ts +4 -0
  81. package/lib/common/archive.js +31 -10
  82. package/lib/common/archive.js.map +1 -1
  83. package/lib/common/browser.d.ts +2 -1
  84. package/lib/common/browser.js +17 -8
  85. package/lib/common/browser.js.map +1 -1
  86. package/lib/common/clients/index.d.ts +21 -0
  87. package/lib/common/clients/index.js +48 -0
  88. package/lib/common/clients/index.js.map +1 -0
  89. package/lib/common/clients/lerna.d.ts +7 -1
  90. package/lib/common/clients/lerna.js +93 -7
  91. package/lib/common/clients/lerna.js.map +1 -1
  92. package/lib/common/clients/npm.d.ts +6 -1
  93. package/lib/common/clients/npm.js +66 -18
  94. package/lib/common/clients/npm.js.map +1 -1
  95. package/lib/common/clients/pnp.d.ts +7 -0
  96. package/lib/common/clients/pnp.js +104 -0
  97. package/lib/common/clients/pnp.js.map +1 -0
  98. package/lib/common/clients/pnpm.d.ts +5 -0
  99. package/lib/common/clients/pnpm.js +55 -6
  100. package/lib/common/clients/pnpm.js.map +1 -1
  101. package/lib/common/clients/rush.d.ts +7 -0
  102. package/lib/common/clients/rush.js +127 -0
  103. package/lib/common/clients/rush.js.map +1 -0
  104. package/lib/common/clients/yarn.d.ts +5 -0
  105. package/lib/common/clients/yarn.js +57 -6
  106. package/lib/common/clients/yarn.js.map +1 -1
  107. package/lib/common/compatibility.js +14 -9
  108. package/lib/common/compatibility.js.map +1 -1
  109. package/lib/common/config.d.ts +52 -1
  110. package/lib/common/config.js +10 -30
  111. package/lib/common/config.js.map +1 -1
  112. package/lib/common/constants.d.ts +10 -2
  113. package/lib/common/constants.js +22 -4
  114. package/lib/common/constants.js.map +1 -1
  115. package/lib/common/declaration.d.ts +2 -1
  116. package/lib/common/declaration.js +113 -56
  117. package/lib/common/declaration.js.map +1 -1
  118. package/lib/common/emoji.d.ts +8 -0
  119. package/lib/common/emoji.js +10 -1
  120. package/lib/common/emoji.js.map +1 -1
  121. package/lib/common/emulator.d.ts +2 -2
  122. package/lib/common/emulator.js +45 -32
  123. package/lib/common/emulator.js.map +1 -1
  124. package/lib/common/enums.d.ts +0 -4
  125. package/lib/common/enums.js +1 -6
  126. package/lib/common/enums.js.map +1 -1
  127. package/lib/common/envs.js +16 -5
  128. package/lib/common/envs.js.map +1 -1
  129. package/lib/common/hash.d.ts +1 -0
  130. package/lib/common/hash.js +8 -3
  131. package/lib/common/hash.js.map +1 -1
  132. package/lib/common/http.d.ts +5 -2
  133. package/lib/common/http.js +65 -23
  134. package/lib/common/http.js.map +1 -1
  135. package/lib/common/importmap.d.ts +2 -0
  136. package/lib/common/importmap.js +202 -0
  137. package/lib/common/importmap.js.map +1 -0
  138. package/lib/common/index.d.ts +10 -0
  139. package/lib/common/index.js +15 -1
  140. package/lib/common/index.js.map +1 -1
  141. package/lib/common/info.d.ts +5 -0
  142. package/lib/common/info.js +9 -2
  143. package/lib/common/info.js.map +1 -1
  144. package/lib/common/injectors.d.ts +36 -8
  145. package/lib/common/injectors.js +46 -19
  146. package/lib/common/injectors.js.map +1 -1
  147. package/lib/common/inspect.d.ts +5 -3
  148. package/lib/common/inspect.js +15 -15
  149. package/lib/common/inspect.js.map +1 -1
  150. package/lib/common/interactive.d.ts +9 -0
  151. package/lib/common/interactive.js +60 -1
  152. package/lib/common/interactive.js.map +1 -1
  153. package/lib/common/io.d.ts +9 -3
  154. package/lib/common/io.js +219 -116
  155. package/lib/common/io.js.map +1 -1
  156. package/lib/common/language.d.ts +9 -6
  157. package/lib/common/language.js +68 -12
  158. package/lib/common/language.js.map +1 -1
  159. package/lib/common/log.d.ts +5 -3
  160. package/lib/common/log.js +34 -48
  161. package/lib/common/log.js.map +1 -1
  162. package/lib/common/npm.d.ts +17 -16
  163. package/lib/common/npm.js +262 -158
  164. package/lib/common/npm.js.map +1 -1
  165. package/lib/common/pack.js +47 -26
  166. package/lib/common/pack.js.map +1 -1
  167. package/lib/common/package.d.ts +43 -20
  168. package/lib/common/package.js +377 -213
  169. package/lib/common/package.js.map +1 -1
  170. package/lib/common/parallel.d.ts +1 -0
  171. package/lib/common/parallel.js +29 -0
  172. package/lib/common/parallel.js.map +1 -0
  173. package/lib/common/patcher.js +20 -20
  174. package/lib/common/patcher.js.map +1 -1
  175. package/lib/common/platform.d.ts +13 -0
  176. package/lib/common/platform.js +29 -0
  177. package/lib/common/platform.js.map +1 -0
  178. package/lib/common/port.d.ts +1 -0
  179. package/lib/common/port.js +14 -4
  180. package/lib/common/port.js.map +1 -1
  181. package/lib/common/rules.js +4 -4
  182. package/lib/common/rules.js.map +1 -1
  183. package/lib/common/scaffold.d.ts +18 -4
  184. package/lib/common/scaffold.js +59 -36
  185. package/lib/common/scaffold.js.map +1 -1
  186. package/lib/common/scripts.js +8 -8
  187. package/lib/common/scripts.js.map +1 -1
  188. package/lib/common/shell.d.ts +2 -0
  189. package/lib/common/shell.js +33 -0
  190. package/lib/common/shell.js.map +1 -0
  191. package/lib/common/spec.d.ts +29 -0
  192. package/lib/common/spec.js +69 -0
  193. package/lib/common/spec.js.map +1 -0
  194. package/lib/common/template.d.ts +1 -2
  195. package/lib/common/template.js +23 -22
  196. package/lib/common/template.js.map +1 -1
  197. package/lib/common/url.d.ts +1 -0
  198. package/lib/common/url.js +17 -0
  199. package/lib/common/url.js.map +1 -0
  200. package/lib/common/utils.d.ts +1 -0
  201. package/lib/common/utils.js +8 -0
  202. package/lib/common/utils.js.map +1 -0
  203. package/lib/common/version.d.ts +2 -0
  204. package/lib/common/version.js +130 -0
  205. package/lib/common/version.js.map +1 -0
  206. package/lib/common/watcher.d.ts +13 -0
  207. package/lib/common/watcher.js +78 -0
  208. package/lib/common/watcher.js.map +1 -0
  209. package/lib/external/index.js +59413 -57862
  210. package/lib/helpers.d.ts +6 -6
  211. package/lib/helpers.js +10 -25
  212. package/lib/helpers.js.map +1 -1
  213. package/lib/index.js +5 -1
  214. package/lib/index.js.map +1 -1
  215. package/lib/inject.js +2 -2
  216. package/lib/inject.js.map +1 -1
  217. package/lib/injectors/pilet-injector.d.ts +75 -0
  218. package/lib/injectors/pilet-injector.js +246 -0
  219. package/lib/injectors/pilet-injector.js.map +1 -0
  220. package/lib/injectors/{piral.d.ts → piral-injector.d.ts} +10 -2
  221. package/lib/injectors/piral-injector.js +97 -0
  222. package/lib/injectors/piral-injector.js.map +1 -0
  223. package/lib/messages.d.ts +567 -47
  224. package/lib/messages.js +638 -51
  225. package/lib/messages.js.map +1 -1
  226. package/lib/pb-cli.js +1 -1
  227. package/lib/pb-cli.js.map +1 -1
  228. package/lib/pilet-cli.js +1 -1
  229. package/lib/pilet-cli.js.map +1 -1
  230. package/lib/piral-cli.js +1 -1
  231. package/lib/piral-cli.js.map +1 -1
  232. package/lib/platforms/node.d.ts +8 -0
  233. package/lib/platforms/node.js +30 -0
  234. package/lib/platforms/node.js.map +1 -0
  235. package/lib/platforms/web.d.ts +8 -0
  236. package/lib/platforms/web.js +120 -0
  237. package/lib/platforms/web.js.map +1 -0
  238. package/lib/plugin.js +36 -11
  239. package/lib/plugin.js.map +1 -1
  240. package/lib/questionnaire.d.ts +1 -1
  241. package/lib/questionnaire.js +9 -4
  242. package/lib/questionnaire.js.map +1 -1
  243. package/lib/release.d.ts +1 -1
  244. package/lib/release.js +38 -6
  245. package/lib/release.js.map +1 -1
  246. package/lib/resolvers.js +13 -13
  247. package/lib/resolvers.js.map +1 -1
  248. package/lib/rules/index.js +8 -8
  249. package/lib/rules/index.js.map +1 -1
  250. package/lib/rules/pilet-has-externals-as-peers.d.ts +1 -1
  251. package/lib/rules/pilet-has-externals-as-peers.js +9 -7
  252. package/lib/rules/pilet-has-externals-as-peers.js.map +1 -1
  253. package/lib/rules/pilet-has-no-self-reference.d.ts +1 -1
  254. package/lib/rules/pilet-has-no-self-reference.js +2 -2
  255. package/lib/rules/pilet-has-no-self-reference.js.map +1 -1
  256. package/lib/rules/pilet-has-no-third-party-dependency.d.ts +1 -1
  257. package/lib/rules/pilet-stays-small.d.ts +1 -1
  258. package/lib/rules/pilet-stays-small.js +4 -4
  259. package/lib/rules/pilet-stays-small.js.map +1 -1
  260. package/lib/rules/pilet-uses-latest-piral.d.ts +1 -1
  261. package/lib/rules/pilet-uses-latest-piral.js +18 -9
  262. package/lib/rules/pilet-uses-latest-piral.js.map +1 -1
  263. package/lib/rules/piral-depends-on-piral.d.ts +1 -1
  264. package/lib/rules/piral-entry-ends-with-html.d.ts +1 -1
  265. package/lib/rules/piral-entry-ends-with-html.js +1 -1
  266. package/lib/rules/piral-entry-ends-with-html.js.map +1 -1
  267. package/lib/rules/piral-has-valid-devDependencies.d.ts +1 -1
  268. package/lib/rules/piral-has-valid-externals.d.ts +1 -1
  269. package/lib/rules/piral-has-valid-externals.js +10 -24
  270. package/lib/rules/piral-has-valid-externals.js.map +1 -1
  271. package/lib/rules/piral-has-valid-files.d.ts +1 -1
  272. package/lib/rules/piral-has-valid-files.js +5 -5
  273. package/lib/rules/piral-has-valid-files.js.map +1 -1
  274. package/lib/rules/piral-has-valid-scripts.d.ts +1 -1
  275. package/lib/runner.js +1 -1
  276. package/lib/runner.js.map +1 -1
  277. package/lib/select.js +6 -6
  278. package/lib/select.js.map +1 -1
  279. package/lib/types/common.d.ts +88 -8
  280. package/lib/types/common.js.map +1 -1
  281. package/lib/types/index.js +5 -1
  282. package/lib/types/index.js.map +1 -1
  283. package/lib/types/internal.d.ts +12 -13
  284. package/lib/types/public.d.ts +89 -23
  285. package/package.json +19 -16
  286. package/src/apps/add-piral-instance-pilet.ts +98 -0
  287. package/src/apps/build-pilet.ts +286 -38
  288. package/src/apps/build-piral.test.ts +20 -7
  289. package/src/apps/build-piral.ts +90 -39
  290. package/src/apps/debug-pilet.ts +229 -123
  291. package/src/apps/debug-piral.ts +121 -68
  292. package/src/apps/declaration-piral.ts +4 -2
  293. package/src/apps/index.ts +3 -0
  294. package/src/apps/new-pilet.test.ts +28 -11
  295. package/src/apps/new-pilet.ts +60 -48
  296. package/src/apps/new-piral.test.ts +25 -13
  297. package/src/apps/new-piral.ts +43 -19
  298. package/src/apps/pack-pilet.test.ts +2 -2
  299. package/src/apps/pack-pilet.ts +12 -10
  300. package/src/apps/publish-pilet.ts +148 -43
  301. package/src/apps/publish-piral.ts +38 -11
  302. package/src/apps/remove-piral-instance-pilet.ts +92 -0
  303. package/src/apps/run-emulator-piral.ts +154 -0
  304. package/src/apps/upgrade-pilet.ts +37 -31
  305. package/src/apps/upgrade-piral.ts +9 -7
  306. package/src/apps/validate-pilet.ts +30 -22
  307. package/src/apps/validate-piral.ts +5 -2
  308. package/src/build/bundler-calls.ts +133 -0
  309. package/src/build/run-build-pilet.ts +91 -0
  310. package/src/build/run-build-piral.ts +93 -0
  311. package/src/build/run-debug-mono-piral.ts +86 -0
  312. package/src/build/run-debug-pilet.ts +116 -0
  313. package/src/build/run-debug-piral.ts +105 -0
  314. package/src/bundler.test.ts +86 -68
  315. package/src/bundler.ts +74 -19
  316. package/src/cli.ts +6 -2
  317. package/src/commands.ts +273 -44
  318. package/src/common/archive.test.ts +51 -45
  319. package/src/common/archive.ts +28 -1
  320. package/src/common/browser.test.ts +20 -10
  321. package/src/common/browser.ts +13 -6
  322. package/src/common/clients/index.ts +41 -0
  323. package/src/common/clients/lerna.ts +85 -1
  324. package/src/common/clients/npm.ts +56 -14
  325. package/src/common/clients/pnp.ts +84 -0
  326. package/src/common/clients/pnpm.ts +45 -1
  327. package/src/common/clients/rush.ts +118 -0
  328. package/src/common/clients/yarn.ts +49 -3
  329. package/src/common/compatibility.ts +8 -1
  330. package/src/common/config.ts +57 -22
  331. package/src/common/constants.ts +21 -3
  332. package/src/common/declaration.ts +124 -50
  333. package/src/common/emoji.ts +9 -0
  334. package/src/common/emulator.ts +43 -23
  335. package/src/common/enums.ts +0 -5
  336. package/src/common/envs.ts +15 -3
  337. package/src/common/hash.ts +5 -0
  338. package/src/common/http.test.ts +76 -64
  339. package/src/common/http.ts +88 -24
  340. package/src/common/importmap.ts +242 -0
  341. package/src/common/index.ts +10 -0
  342. package/src/common/info.ts +9 -1
  343. package/src/common/injectors.ts +49 -22
  344. package/src/common/inspect.ts +13 -14
  345. package/src/common/interactive.test.ts +6 -0
  346. package/src/common/interactive.ts +69 -1
  347. package/src/common/io.ts +199 -82
  348. package/src/common/language.ts +87 -10
  349. package/src/common/log.ts +32 -46
  350. package/src/common/npm.test.ts +187 -166
  351. package/src/common/npm.ts +263 -119
  352. package/src/common/pack.test.ts +11 -13
  353. package/src/common/pack.ts +60 -21
  354. package/src/common/package.test.ts +59 -49
  355. package/src/common/package.ts +406 -167
  356. package/src/common/parallel.test.ts +28 -0
  357. package/src/common/parallel.ts +21 -0
  358. package/src/common/platform.ts +31 -0
  359. package/src/common/port.test.ts +4 -1
  360. package/src/common/port.ts +10 -0
  361. package/src/common/rules.test.ts +3 -3
  362. package/src/common/scaffold.ts +69 -41
  363. package/src/common/scripts.ts +5 -4
  364. package/src/common/shell.ts +34 -0
  365. package/src/common/spec.ts +69 -0
  366. package/src/common/template.ts +20 -18
  367. package/src/common/url.test.ts +28 -0
  368. package/src/common/url.ts +15 -0
  369. package/src/common/utils.ts +3 -0
  370. package/src/common/version.test.ts +233 -0
  371. package/src/common/version.ts +142 -0
  372. package/src/common/watcher.ts +89 -0
  373. package/src/external/index.test.ts +2 -2
  374. package/src/external/index.ts +7 -3
  375. package/src/external/resolve.ts +29 -0
  376. package/src/helpers.test.ts +2 -22
  377. package/src/helpers.ts +21 -30
  378. package/src/injectors/{pilet.test.ts → pilet-injector.test.ts} +13 -4
  379. package/src/injectors/pilet-injector.ts +346 -0
  380. package/src/injectors/{piral.test.ts → piral-injector.test.ts} +14 -5
  381. package/src/injectors/piral-injector.ts +130 -0
  382. package/src/messages.ts +649 -63
  383. package/src/platforms/node.ts +16 -0
  384. package/src/platforms/web.ts +148 -0
  385. package/src/plugin.ts +34 -5
  386. package/src/questionnaire.ts +17 -3
  387. package/src/release.ts +47 -5
  388. package/src/rules/index.ts +1 -1
  389. package/src/rules/pilet-has-externals-as-peers.test.ts +3 -2
  390. package/src/rules/pilet-has-externals-as-peers.ts +9 -7
  391. package/src/rules/pilet-has-no-self-reference.ts +1 -1
  392. package/src/rules/pilet-stays-small.ts +1 -1
  393. package/src/rules/pilet-uses-latest-piral.ts +22 -12
  394. package/src/rules/piral-has-valid-externals.ts +10 -29
  395. package/src/types/common.ts +99 -9
  396. package/src/types/internal.ts +14 -14
  397. package/src/types/public.ts +93 -27
  398. package/lib/external/child.js +0 -144
  399. package/lib/external/classes.trie +0 -0
  400. package/lib/external/xdg-open +0 -1066
  401. package/lib/injectors/pilet.d.ts +0 -47
  402. package/lib/injectors/pilet.js +0 -187
  403. package/lib/injectors/pilet.js.map +0 -1
  404. package/lib/injectors/piral.js +0 -62
  405. package/lib/injectors/piral.js.map +0 -1
  406. package/src/injectors/pilet.ts +0 -219
  407. package/src/injectors/piral.ts +0 -76
  408. package/templates/piral-index.js.ejs +0 -16
@@ -0,0 +1,92 @@
1
+ import { dirname, resolve } from 'path';
2
+ import { LogLevels, NpmClientType } from '../types';
3
+ import {
4
+ setLogLevel,
5
+ progress,
6
+ log,
7
+ matchAnyPilet,
8
+ findFile,
9
+ readJson,
10
+ writeJson,
11
+ logDone,
12
+ findPiletRoot,
13
+ determineNpmClient,
14
+ uninstallNpmPackage,
15
+ piletJson,
16
+ } from '../common';
17
+
18
+ export interface RemovePiralInstancePiletOptions {
19
+ /**
20
+ * Sets the log level to use (1-5).
21
+ */
22
+ logLevel?: LogLevels;
23
+
24
+ /**
25
+ * The name of the Piral instance to remove.
26
+ */
27
+ app?: string;
28
+
29
+ /**
30
+ * Sets the source directory for adding the Piral instance.
31
+ */
32
+ source?: string;
33
+
34
+ /**
35
+ * The npm client to be used when scaffolding.
36
+ * @example 'yarn'
37
+ */
38
+ npmClient?: NpmClientType;
39
+ }
40
+
41
+ export const removePiralInstancePiletDefaults: RemovePiralInstancePiletOptions = {
42
+ logLevel: LogLevels.info,
43
+ app: undefined,
44
+ source: '.',
45
+ npmClient: undefined,
46
+ };
47
+
48
+ export async function removePiralInstancePilet(baseDir = process.cwd(), options: RemovePiralInstancePiletOptions = {}) {
49
+ const {
50
+ npmClient: defaultNpmClient = removePiralInstancePiletDefaults.npmClient,
51
+ logLevel = removePiralInstancePiletDefaults.logLevel,
52
+ source = removePiralInstancePiletDefaults.source,
53
+ app = removePiralInstancePiletDefaults.app,
54
+ } = options;
55
+ const fullBase = resolve(process.cwd(), baseDir);
56
+ setLogLevel(logLevel);
57
+ progress('Reading configuration ...');
58
+
59
+ const npmClient = await determineNpmClient(fullBase, defaultNpmClient);
60
+ const allEntries = await matchAnyPilet(fullBase, [source]);
61
+
62
+ const tasks = allEntries.map(async (entryModule) => {
63
+ const targetDir = dirname(entryModule);
64
+ const piletJsonPath = await findFile(targetDir, piletJson);
65
+
66
+ if (piletJsonPath) {
67
+ const piletJsonDir = dirname(piletJsonPath);
68
+ const oldContent = await readJson(piletJsonDir, piletJson);
69
+ const root = await findPiletRoot(piletJsonDir);
70
+
71
+ if ('piralInstances' in oldContent && app in oldContent.piralInstances) {
72
+ const newContent = {
73
+ ...oldContent,
74
+ piralInstances: {
75
+ ...oldContent.piralInstances,
76
+ [app]: undefined,
77
+ },
78
+ };
79
+
80
+ await writeJson(piletJsonDir, piletJson, newContent, true);
81
+ }
82
+
83
+ await uninstallNpmPackage(npmClient, app, root);
84
+ } else {
85
+ log('piletJsonNotAvailable_0180', targetDir);
86
+ }
87
+ });
88
+
89
+ await Promise.all(tasks);
90
+
91
+ logDone(`Removed the Piral instance!`);
92
+ }
@@ -0,0 +1,154 @@
1
+ import { tmpdir } from 'os';
2
+ import { mkdtemp } from 'fs';
3
+ import { dirname, join, resolve } from 'path';
4
+ import { readKrasConfig, krasrc, buildKrasWithCli } from 'kras';
5
+ import { LogLevels, NpmClientType } from '../types';
6
+ import {
7
+ config,
8
+ openBrowser,
9
+ notifyServerOnline,
10
+ setLogLevel,
11
+ progress,
12
+ log,
13
+ createInitialKrasConfig,
14
+ getAvailablePort,
15
+ installPiralInstance,
16
+ createFileIfNotExists,
17
+ ForceOverwrite,
18
+ findPiralInstance,
19
+ determineNpmClient,
20
+ } from '../common';
21
+
22
+ export interface RunEmulatorPiralOptions {
23
+ /**
24
+ * Sets the log level to use (1-5).
25
+ */
26
+ logLevel?: LogLevels;
27
+
28
+ /**
29
+ * The name of the app shell emulator to use.
30
+ */
31
+ app?: string;
32
+
33
+ /**
34
+ * Sets if the (system default) browser should be auto-opened.
35
+ */
36
+ open?: boolean;
37
+
38
+ /**
39
+ * Sets the port to use for the debug server.
40
+ */
41
+ port?: number;
42
+
43
+ /**
44
+ * The URL of a pilet feed(s) used to include locally missing pilets.
45
+ */
46
+ feed?: string | Array<string>;
47
+
48
+ /**
49
+ * The npm client to be used when scaffolding.
50
+ * @example 'yarn'
51
+ */
52
+ npmClient?: NpmClientType;
53
+
54
+ /**
55
+ * The package registry to use for resolving the specified Piral app.
56
+ */
57
+ registry?: string;
58
+ }
59
+
60
+ export const runEmulatorPiralDefaults: RunEmulatorPiralOptions = {
61
+ logLevel: LogLevels.info,
62
+ open: config.openBrowser,
63
+ port: config.port,
64
+ registry: config.registry,
65
+ npmClient: undefined,
66
+ };
67
+
68
+ function createTempDir() {
69
+ const root = join(tmpdir(), 'piral-cli-');
70
+
71
+ return new Promise<string>((resolve, reject) =>
72
+ mkdtemp(root, (err, dir) => {
73
+ if (err) {
74
+ reject(err);
75
+ } else {
76
+ resolve(dir);
77
+ }
78
+ }),
79
+ );
80
+ }
81
+
82
+ export async function runEmulatorPiral(baseDir = process.cwd(), options: RunEmulatorPiralOptions = {}) {
83
+ const {
84
+ open = runEmulatorPiralDefaults.open,
85
+ port: originalPort = runEmulatorPiralDefaults.port,
86
+ logLevel = runEmulatorPiralDefaults.logLevel,
87
+ npmClient: defaultNpmClient = runEmulatorPiralDefaults.npmClient,
88
+ registry = runEmulatorPiralDefaults.registry,
89
+ app,
90
+ feed,
91
+ } = options;
92
+ const publicUrl = '/';
93
+ const api = config.piletApi;
94
+ const fullBase = resolve(process.cwd(), baseDir);
95
+ const baseMocks = resolve(fullBase, 'mocks');
96
+ setLogLevel(logLevel);
97
+
98
+ progress('Reading configuration ...');
99
+
100
+ process.stderr?.setMaxListeners(16);
101
+ process.stdout?.setMaxListeners(16);
102
+ process.stdin?.setMaxListeners(16);
103
+
104
+ const appRoot = await createTempDir();
105
+
106
+ if (registry !== runEmulatorPiralDefaults.registry) {
107
+ progress(`Setting up npm registry (%s) ...`, registry);
108
+
109
+ await createFileIfNotExists(
110
+ appRoot,
111
+ '.npmrc',
112
+ `registry=${registry}
113
+ always-auth=true`,
114
+ ForceOverwrite.yes,
115
+ );
116
+ }
117
+
118
+ const npmClient = await determineNpmClient(appRoot, defaultNpmClient);
119
+ const [packageName] = await installPiralInstance(app, fullBase, appRoot, npmClient);
120
+ const piral = await findPiralInstance(packageName, appRoot, originalPort);
121
+ const port = await getAvailablePort(piral.port);
122
+
123
+ const krasBaseConfig = resolve(fullBase, krasrc);
124
+ const krasRootConfig = resolve(appRoot, krasrc);
125
+ const initial = createInitialKrasConfig(baseMocks, [], { [api]: '' }, feed);
126
+ const required = {
127
+ injectors: {
128
+ piral: {
129
+ active: false,
130
+ },
131
+ pilet: {
132
+ active: true,
133
+ pilets: [],
134
+ app: dirname(piral.app),
135
+ publicUrl,
136
+ handle: [publicUrl, api],
137
+ api,
138
+ },
139
+ },
140
+ };
141
+ const configs = [krasBaseConfig, krasRootConfig];
142
+ const krasConfig = readKrasConfig({ port, initial, required }, ...configs);
143
+
144
+ log('generalVerbose_0004', `Using kras with configuration: ${JSON.stringify(krasConfig, undefined, 2)}`);
145
+
146
+ const krasServer = buildKrasWithCli(krasConfig);
147
+ krasServer.setMaxListeners(16);
148
+ krasServer.removeAllListeners('open');
149
+ krasServer.on('open', notifyServerOnline(publicUrl, krasConfig.api));
150
+
151
+ await krasServer.start();
152
+ openBrowser(open, port, publicUrl, !!krasConfig.ssl);
153
+ await new Promise((resolve) => krasServer.on('close', resolve));
154
+ }
@@ -1,8 +1,7 @@
1
1
  import { resolve } from 'path';
2
2
  import { LogLevels, NpmClientType } from '../types';
3
3
  import {
4
- readJson,
5
- installPackage,
4
+ installNpmPackage,
6
5
  checkExistingDirectory,
7
6
  patchPiletPackage,
8
7
  copyPiralFiles,
@@ -10,7 +9,7 @@ import {
10
9
  readPiralPackage,
11
10
  getPiletsInfo,
12
11
  runScript,
13
- installDependencies,
12
+ installNpmDependencies,
14
13
  getCurrentPackageDetails,
15
14
  checkAppShellPackage,
16
15
  setLogLevel,
@@ -22,9 +21,9 @@ import {
22
21
  ForceOverwrite,
23
22
  copyScaffoldingFiles,
24
23
  getPiralPath,
25
- detectMonorepo,
26
- bootstrapMonorepo,
27
24
  isMonorepoPackageRef,
25
+ getPiletScaffoldData,
26
+ retrievePiletData,
28
27
  } from '../common';
29
28
 
30
29
  export interface UpgradePiletOptions {
@@ -58,11 +57,16 @@ export interface UpgradePiletOptions {
58
57
  install?: boolean;
59
58
 
60
59
  /**
61
- * Defines the used NPM client. By default, "npm" is used
60
+ * Defines the used npm client. By default, "npm" is used
62
61
  * if no other client is autodetected. The autodetection
63
- * works against Lerna, PNPM, and Yarn.
62
+ * works against Lerna, pnpm, and Yarn.
64
63
  */
65
64
  npmClient?: NpmClientType;
65
+
66
+ /**
67
+ * Places additional variables that should used when scaffolding.
68
+ */
69
+ variables?: Record<string, string>;
66
70
  }
67
71
 
68
72
  export const upgradePiletDefaults: UpgradePiletOptions = {
@@ -72,6 +76,7 @@ export const upgradePiletDefaults: UpgradePiletOptions = {
72
76
  logLevel: LogLevels.info,
73
77
  install: true,
74
78
  npmClient: undefined,
79
+ variables: {},
75
80
  };
76
81
 
77
82
  export async function upgradePilet(baseDir = process.cwd(), options: UpgradePiletOptions = {}) {
@@ -81,21 +86,29 @@ export async function upgradePilet(baseDir = process.cwd(), options: UpgradePile
81
86
  forceOverwrite = upgradePiletDefaults.forceOverwrite,
82
87
  logLevel = upgradePiletDefaults.logLevel,
83
88
  install = upgradePiletDefaults.install,
89
+ variables = upgradePiletDefaults.variables,
90
+ npmClient: defaultNpmClient = upgradePiletDefaults.npmClient,
84
91
  } = options;
92
+ const fullBase = resolve(process.cwd(), baseDir);
93
+ const root = resolve(fullBase, target);
85
94
  setLogLevel(logLevel);
86
- const root = resolve(baseDir, target);
87
95
  const valid = await checkExistingDirectory(root);
88
96
 
89
97
  if (!valid) {
90
98
  fail('invalidPiletTarget_0040');
91
99
  }
92
100
 
93
- const npmClient = await determineNpmClient(root, options.npmClient);
94
- const pckg = await readJson(root, 'package.json');
95
- const { devDependencies = {}, dependencies = {}, piral } = pckg;
101
+ const npmClient = await determineNpmClient(root, defaultNpmClient);
102
+ const { apps, piletPackage } = await retrievePiletData(root);
103
+ const { devDependencies = {}, dependencies = {}, source } = piletPackage;
104
+
105
+ if (apps.length === 0) {
106
+ fail('appInstancesNotGiven_0012');
107
+ }
96
108
 
97
- if (piral && typeof piral === 'object') {
98
- const sourceName = piral.name;
109
+ for (const { appPackage } of apps) {
110
+ const sourceName = appPackage.name;
111
+ const language = /\.jsx?$/.test(source) ? 'js' : 'ts';
99
112
 
100
113
  if (!sourceName || typeof sourceName !== 'string') {
101
114
  fail('invalidPiletPackage_0042');
@@ -107,9 +120,9 @@ export async function upgradePilet(baseDir = process.cwd(), options: UpgradePile
107
120
  fail('invalidPiralReference_0043');
108
121
  }
109
122
 
110
- const monorepoRef = await isMonorepoPackageRef(sourceName, baseDir);
123
+ const monorepoRef = await isMonorepoPackageRef(sourceName, fullBase);
111
124
  const [packageRef, packageVersion] = await getCurrentPackageDetails(
112
- baseDir,
125
+ fullBase,
113
126
  sourceName,
114
127
  currentVersion,
115
128
  version,
@@ -119,8 +132,8 @@ export async function upgradePilet(baseDir = process.cwd(), options: UpgradePile
119
132
 
120
133
  if (!monorepoRef) {
121
134
  // only install the latest if the shell does come from remote
122
- progress(`Updating NPM package to %s ...`, packageRef);
123
- await installPackage(npmClient, packageRef, root, '--no-save');
135
+ progress(`Updating npm package to %s ...`, packageRef);
136
+ await installNpmPackage(npmClient, packageRef, root, '--no-save');
124
137
  }
125
138
 
126
139
  const piralInfo = await readPiralPackage(root, sourceName);
@@ -136,29 +149,24 @@ export async function upgradePilet(baseDir = process.cwd(), options: UpgradePile
136
149
  }
137
150
 
138
151
  progress(`Taking care of templating ...`);
152
+ const data = getPiletScaffoldData(language, root, sourceName, variables);
139
153
 
140
154
  if (isEmulator) {
141
155
  // in the emulator case we get the files from the contained tarball
142
- await copyPiralFiles(root, sourceName, piralInfo, forceOverwrite, originalFiles);
156
+ await copyPiralFiles(root, sourceName, piralInfo, forceOverwrite, data, originalFiles);
143
157
  } else {
144
158
  // otherwise, we perform the same action as in the emulator creation
145
159
  // just with a different target; not a created directory, but the root
146
160
  const packageRoot = getPiralPath(root, sourceName);
147
161
  const notOnceFiles = files.filter((m) => typeof m === 'string' || !m.once);
148
- await copyScaffoldingFiles(packageRoot, root, notOnceFiles, piralInfo);
162
+ await copyScaffoldingFiles(packageRoot, root, notOnceFiles, piralInfo, data);
149
163
  }
150
164
 
151
- await patchPiletPackage(root, sourceName, packageVersion, piralInfo);
165
+ await patchPiletPackage(root, sourceName, packageVersion, piralInfo, isEmulator);
152
166
 
153
167
  if (install) {
154
168
  progress(`Updating dependencies ...`);
155
- const monorepoKind = await detectMonorepo(root);
156
-
157
- if (monorepoKind === 'lerna') {
158
- await bootstrapMonorepo(root);
159
- } else {
160
- await installDependencies(npmClient, root);
161
- }
169
+ await installNpmDependencies(npmClient, root);
162
170
  }
163
171
 
164
172
  if (postUpgrade) {
@@ -166,9 +174,7 @@ export async function upgradePilet(baseDir = process.cwd(), options: UpgradePile
166
174
  log('generalDebug_0003', `Run: ${postUpgrade}`);
167
175
  await runScript(postUpgrade, root);
168
176
  }
169
-
170
- logDone('Pilet upgraded successfully!');
171
- } else {
172
- fail('invalidPiletPackage_0041');
173
177
  }
178
+
179
+ logDone('Pilet upgraded successfully!');
174
180
  }
@@ -3,7 +3,7 @@ import { LogLevels, NpmClientType } from '../types';
3
3
  import {
4
4
  readJson,
5
5
  checkExistingDirectory,
6
- installDependencies,
6
+ installNpmDependencies,
7
7
  setLogLevel,
8
8
  progress,
9
9
  fail,
@@ -42,9 +42,9 @@ export interface UpgradePiralOptions {
42
42
  install?: boolean;
43
43
 
44
44
  /**
45
- * Defines the used NPM client. By default, "npm" is used
45
+ * Defines the used npm client. By default, "npm" is used
46
46
  * if no other client is autodetected. The autodetection
47
- * works against Lerna, PNPM, and Yarn.
47
+ * works against Lerna, pnpm, and Yarn.
48
48
  */
49
49
  npmClient?: NpmClientType;
50
50
  }
@@ -80,9 +80,11 @@ export async function upgradePiral(baseDir = process.cwd(), options: UpgradePira
80
80
  target = upgradePiralDefaults.target,
81
81
  logLevel = upgradePiralDefaults.logLevel,
82
82
  install = upgradePiralDefaults.install,
83
+ npmClient: defaultNpmClient = upgradePiralDefaults.npmClient,
83
84
  } = options;
85
+ const fullBase = resolve(process.cwd(), baseDir);
86
+ const root = resolve(fullBase, target);
84
87
  setLogLevel(logLevel);
85
- const root = resolve(baseDir, target);
86
88
  const valid = await checkExistingDirectory(root);
87
89
  const exists = await checkExists(join(root, 'package.json'));
88
90
 
@@ -90,7 +92,7 @@ export async function upgradePiral(baseDir = process.cwd(), options: UpgradePira
90
92
  fail('packageJsonNotFound_0020');
91
93
  }
92
94
 
93
- const npmClient = await determineNpmClient(root, options.npmClient);
95
+ const npmClient = await determineNpmClient(root, defaultNpmClient);
94
96
 
95
97
  progress(`Checking provided version ...`);
96
98
  const realVersion = await findSpecificVersion('piral-cli', version);
@@ -111,8 +113,8 @@ export async function upgradePiral(baseDir = process.cwd(), options: UpgradePira
111
113
  await updateExistingJson(root, 'package.json', pckg);
112
114
 
113
115
  if (install) {
114
- progress(`Updating the NPM packages to %s ...`, version);
115
- await installDependencies(npmClient, root);
116
+ progress(`Updating the npm packages to %s ...`, version);
117
+ await installNpmDependencies(npmClient, root);
116
118
  }
117
119
 
118
120
  logDone('Piral instance upgraded successfully!');
@@ -1,4 +1,4 @@
1
- import { join, dirname } from 'path';
1
+ import { join, dirname, resolve } from 'path';
2
2
  import { ruleSummary, runRules, retrievePiletData, getPiletsInfo, setLogLevel, progress, log } from '../common';
3
3
  import { getPiletRules } from '../rules';
4
4
  import { PiletRuleContext, LogLevels } from '../types';
@@ -32,11 +32,12 @@ export async function validatePilet(baseDir = process.cwd(), options: ValidatPil
32
32
  logLevel = validatePiletDefaults.logLevel,
33
33
  app = validatePiletDefaults.app,
34
34
  } = options;
35
+ const fullBase = resolve(process.cwd(), baseDir);
35
36
  setLogLevel(logLevel);
36
37
  progress('Reading configuration ...');
37
38
 
38
39
  const rules = await getPiletRules();
39
- const entryFile = join(baseDir, entry);
40
+ const entryFile = join(fullBase, entry);
40
41
  const target = dirname(entryFile);
41
42
  const {
42
43
  dependencies,
@@ -44,31 +45,38 @@ export async function validatePilet(baseDir = process.cwd(), options: ValidatPil
44
45
  devDependencies,
45
46
  peerModules,
46
47
  root,
48
+ importmap,
49
+ apps,
50
+ piletPackage,
47
51
  ignored: _0,
48
- emulator: _1,
49
- ...data
50
52
  } = await retrievePiletData(target, app);
51
- const { validators } = getPiletsInfo(data.appPackage);
53
+
52
54
  const errors: Array<string> = [];
53
55
  const warnings: Array<string> = [];
54
- const context: PiletRuleContext = {
55
- error(message) {
56
- errors.push(log('generalError_0002', message));
57
- },
58
- warning(message) {
59
- warnings.push(log('generalWarning_0001', message));
60
- },
61
- logLevel,
62
- entry: entryFile,
63
- dependencies,
64
- devDependencies,
65
- peerDependencies,
66
- peerModules,
67
- root,
68
- data,
69
- };
70
56
 
71
- await runRules(rules, context, validators);
57
+ for (const { appPackage } of apps) {
58
+ const { validators } = getPiletsInfo(appPackage);
59
+ const context: PiletRuleContext = {
60
+ error(message) {
61
+ errors.push(log('generalError_0002', message));
62
+ },
63
+ warning(message) {
64
+ warnings.push(log('generalWarning_0001', message));
65
+ },
66
+ logLevel,
67
+ entry: entryFile,
68
+ dependencies,
69
+ devDependencies,
70
+ peerDependencies,
71
+ importmap,
72
+ peerModules,
73
+ root,
74
+ apps,
75
+ piletPackage,
76
+ };
77
+
78
+ await runRules(rules, context, validators);
79
+ }
72
80
 
73
81
  ruleSummary(errors, warnings);
74
82
  }
@@ -1,3 +1,4 @@
1
+ import { resolve } from 'path';
1
2
  import { retrievePiralRoot, retrievePiletsInfo, ruleSummary, runRules, config } from '../common';
2
3
  import { setLogLevel, progress, log, checkCliCompatibility } from '../common';
3
4
  import { getPiralRules } from '../rules';
@@ -22,12 +23,13 @@ export const validatePiralDefaults: ValidatPiralOptions = {
22
23
 
23
24
  export async function validatePiral(baseDir = process.cwd(), options: ValidatPiralOptions = {}) {
24
25
  const { entry = validatePiralDefaults.entry, logLevel = validatePiralDefaults.logLevel } = options;
26
+ const fullBase = resolve(process.cwd(), baseDir);
25
27
  setLogLevel(logLevel);
26
28
  progress('Reading configuration ...');
27
29
 
28
30
  const rules = await getPiralRules();
29
- const entryFiles = await retrievePiralRoot(baseDir, entry);
30
- const { root, dependencies, ignored: _, ...info } = await retrievePiletsInfo(entryFiles);
31
+ const entryFiles = await retrievePiralRoot(fullBase, entry);
32
+ const { root, dependencies, ignored: _, externals, ...info } = await retrievePiletsInfo(entryFiles);
31
33
  const errors: Array<string> = [];
32
34
  const warnings: Array<string> = [];
33
35
 
@@ -41,6 +43,7 @@ export async function validatePiral(baseDir = process.cwd(), options: ValidatPir
41
43
  warnings.push(log('generalWarning_0001', message));
42
44
  },
43
45
  logLevel,
46
+ externals,
44
47
  entry: entryFiles,
45
48
  dependencies: dependencies.std,
46
49
  devDependencies: dependencies.dev,
@@ -0,0 +1,133 @@
1
+ import { resolve } from 'path';
2
+ import { fork, ChildProcess } from 'child_process';
3
+ import type { Bundler, BundleDetails, BaseBundleParameters } from '../types';
4
+
5
+ function getPath(name: string) {
6
+ return resolve(__dirname, '..', '..', 'lib', 'build', `run-${name}.js`);
7
+ }
8
+
9
+ type BundleListener = (args: any) => void;
10
+
11
+ function createBundler(cwd: string, ps: ChildProcess, args: any) {
12
+ let promise = Promise.resolve();
13
+ let started = false;
14
+ const listeners: Array<BundleListener> = [];
15
+ const bundle: BundleDetails = {
16
+ dir: cwd,
17
+ hash: '',
18
+ name: '',
19
+ };
20
+ const setPending = () => {
21
+ promise = new Promise((done) => {
22
+ const f = () => {
23
+ done();
24
+ bundler.off(f);
25
+ };
26
+ bundler.on(f);
27
+ });
28
+ };
29
+ const bundler = {
30
+ bundle,
31
+ start() {
32
+ if (!started) {
33
+ started = true;
34
+ ps.send({
35
+ type: 'bundle',
36
+ ...args,
37
+ });
38
+ }
39
+ },
40
+ on(cb: BundleListener) {
41
+ listeners.push(cb);
42
+ },
43
+ off(cb: BundleListener) {
44
+ listeners.splice(listeners.indexOf(cb), 1);
45
+ },
46
+ emit(args: any) {
47
+ [...listeners].forEach((cb) => cb(args));
48
+ },
49
+ ready() {
50
+ return promise;
51
+ },
52
+ setPending,
53
+ };
54
+ setPending();
55
+ return bundler;
56
+ }
57
+
58
+ export function callDynamic<T extends BaseBundleParameters>(name: string, path: string, args: T) {
59
+ const cwd = args.root;
60
+ return new Promise<Bundler>((resolve, reject) => {
61
+ const ps = fork(getPath(name), [], { cwd, stdio: 'pipe', env: process.env });
62
+ const bundler = createBundler(cwd, ps, args);
63
+ const setup = {
64
+ type: 'init',
65
+ path,
66
+ };
67
+ const start = () => {
68
+ ps.send({
69
+ type: 'start',
70
+ ...args,
71
+ });
72
+ };
73
+
74
+ ps.stderr && process.stderr && ps.stderr.pipe(process.stderr, { end: false });
75
+ ps.stdout && process.stdout && ps.stdout.pipe(process.stdout, { end: false });
76
+ ps.stdin && process.stdin && ps.stdin.pipe(process.stdin, { end: false });
77
+
78
+ ps.on('message', (msg: any) => {
79
+ switch (msg.type) {
80
+ case 'pending':
81
+ bundler.setPending();
82
+ break;
83
+ case 'update':
84
+ bundler.bundle.hash = msg.outHash;
85
+ bundler.bundle.name = msg.outName;
86
+ bundler.emit(msg.args);
87
+ break;
88
+ case 'done':
89
+ bundler.bundle.dir = msg.outDir;
90
+ return resolve(bundler);
91
+ case 'fail':
92
+ return reject(msg.error);
93
+ }
94
+ });
95
+
96
+ ps.send(setup, start);
97
+ });
98
+ }
99
+
100
+ export function callStatic<T extends BaseBundleParameters>(name: string, path: string, args: T) {
101
+ const cwd = args.root;
102
+ return new Promise<Bundler>((resolve, reject) => {
103
+ const ps = fork(getPath(name), [], { cwd, stdio: 'pipe', env: process.env });
104
+ const bundler = createBundler(cwd, ps, args);
105
+ const setup = {
106
+ type: 'init',
107
+ path,
108
+ };
109
+ const start = () => {
110
+ ps.send({
111
+ type: 'start',
112
+ ...args,
113
+ });
114
+ };
115
+
116
+ ps.stderr && process.stderr && ps.stderr.pipe(process.stderr, { end: false });
117
+ ps.stdout && process.stdout && ps.stdout.pipe(process.stdout, { end: false });
118
+ ps.stdin && process.stdin && ps.stdin.pipe(process.stdin, { end: false });
119
+
120
+ ps.on('message', (msg: any) => {
121
+ switch (msg.type) {
122
+ case 'done':
123
+ bundler.bundle.dir = msg.outDir;
124
+ bundler.bundle.name = msg.outFile;
125
+ return resolve(bundler);
126
+ case 'fail':
127
+ return reject(msg.error);
128
+ }
129
+ });
130
+
131
+ ps.send(setup, start);
132
+ });
133
+ }