opkg 0.5.0 → 0.6.1

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 (397) hide show
  1. package/README.md +82 -21
  2. package/dist/commands/add.js +11 -276
  3. package/dist/commands/add.js.map +1 -1
  4. package/dist/commands/duplicate.js +5 -2
  5. package/dist/commands/duplicate.js.map +1 -1
  6. package/dist/commands/init.js +76 -145
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/install.js +30 -671
  9. package/dist/commands/install.js.map +1 -1
  10. package/dist/commands/list.js +9 -3
  11. package/dist/commands/list.js.map +1 -1
  12. package/dist/commands/login.js +58 -0
  13. package/dist/commands/login.js.map +1 -0
  14. package/dist/commands/logout.js +28 -0
  15. package/dist/commands/logout.js.map +1 -0
  16. package/dist/commands/pack.js +10 -137
  17. package/dist/commands/pack.js.map +1 -1
  18. package/dist/commands/pull.js +5 -299
  19. package/dist/commands/pull.js.map +1 -1
  20. package/dist/commands/push.js +5 -239
  21. package/dist/commands/push.js.map +1 -1
  22. package/dist/commands/save.js +29 -168
  23. package/dist/commands/save.js.map +1 -1
  24. package/dist/commands/show.js +18 -5
  25. package/dist/commands/show.js.map +1 -1
  26. package/dist/commands/status.js +21 -8
  27. package/dist/commands/status.js.map +1 -1
  28. package/dist/commands/tui.js +61 -0
  29. package/dist/commands/tui.js.map +1 -0
  30. package/dist/commands/uninstall.js +5 -5
  31. package/dist/commands/uninstall.js.map +1 -1
  32. package/dist/constants/index.js +19 -45
  33. package/dist/constants/index.js.map +1 -1
  34. package/dist/constants/workspace.js +9 -0
  35. package/dist/constants/workspace.js.map +1 -0
  36. package/dist/core/add/add-conflict-handler.js +68 -0
  37. package/dist/core/add/add-conflict-handler.js.map +1 -0
  38. package/dist/core/add/add-pipeline.js +137 -0
  39. package/dist/core/add/add-pipeline.js.map +1 -0
  40. package/dist/core/add/package-index-updater.js +66 -36
  41. package/dist/core/add/package-index-updater.js.map +1 -1
  42. package/dist/core/add/platform-path-transformer.js +47 -0
  43. package/dist/core/add/platform-path-transformer.js.map +1 -0
  44. package/dist/core/add/source-collector.js +57 -0
  45. package/dist/core/add/source-collector.js.map +1 -0
  46. package/dist/core/api-keys.js +6 -2
  47. package/dist/core/api-keys.js.map +1 -1
  48. package/dist/core/auth.js +25 -40
  49. package/dist/core/auth.js.map +1 -1
  50. package/dist/core/config.js +11 -3
  51. package/dist/core/config.js.map +1 -1
  52. package/dist/core/dependency-resolver.js +24 -11
  53. package/dist/core/dependency-resolver.js.map +1 -1
  54. package/dist/core/device-auth.js +81 -0
  55. package/dist/core/device-auth.js.map +1 -0
  56. package/dist/core/directory.js +15 -9
  57. package/dist/core/directory.js.map +1 -1
  58. package/dist/core/discovery/file-discovery.js +55 -54
  59. package/dist/core/discovery/file-discovery.js.map +1 -1
  60. package/dist/core/discovery/platform-files-discovery.js +32 -17
  61. package/dist/core/discovery/platform-files-discovery.js.map +1 -1
  62. package/dist/core/install/bulk-install-pipeline.js +200 -0
  63. package/dist/core/install/bulk-install-pipeline.js.map +1 -0
  64. package/dist/core/install/canonical-plan.js +129 -0
  65. package/dist/core/install/canonical-plan.js.map +1 -0
  66. package/dist/core/install/download-keys.js +2 -2
  67. package/dist/core/install/download-keys.js.map +1 -1
  68. package/dist/core/install/dry-run.js +2 -2
  69. package/dist/core/install/dry-run.js.map +1 -1
  70. package/dist/core/install/index.js +3 -0
  71. package/dist/core/install/index.js.map +1 -0
  72. package/dist/core/install/install-errors.js +41 -0
  73. package/dist/core/install/install-errors.js.map +1 -0
  74. package/dist/core/install/install-flow.js +8 -9
  75. package/dist/core/install/install-flow.js.map +1 -1
  76. package/dist/core/install/install-pipeline.js +296 -0
  77. package/dist/core/install/install-pipeline.js.map +1 -0
  78. package/dist/core/install/install-reporting.js +99 -0
  79. package/dist/core/install/install-reporting.js.map +1 -0
  80. package/dist/core/install/platform-resolution.js +6 -6
  81. package/dist/core/install/platform-resolution.js.map +1 -1
  82. package/dist/core/install/remote-flow.js +84 -7
  83. package/dist/core/install/remote-flow.js.map +1 -1
  84. package/dist/core/install/version-selection.js +25 -8
  85. package/dist/core/install/version-selection.js.map +1 -1
  86. package/dist/core/openpackage.js +22 -14
  87. package/dist/core/openpackage.js.map +1 -1
  88. package/dist/core/package-context.js +246 -0
  89. package/dist/core/package-context.js.map +1 -0
  90. package/dist/core/package.js +73 -9
  91. package/dist/core/package.js.map +1 -1
  92. package/dist/core/platforms.js +126 -217
  93. package/dist/core/platforms.js.map +1 -1
  94. package/dist/core/profiles.js +60 -3
  95. package/dist/core/profiles.js.map +1 -1
  96. package/dist/core/pull/pull-errors.js +62 -0
  97. package/dist/core/pull/pull-errors.js.map +1 -0
  98. package/dist/core/pull/pull-options.js +2 -0
  99. package/dist/core/pull/pull-options.js.map +1 -0
  100. package/dist/core/pull/pull-output.js +50 -0
  101. package/dist/core/pull/pull-output.js.map +1 -0
  102. package/dist/core/pull/pull-pipeline.js +141 -0
  103. package/dist/core/pull/pull-pipeline.js.map +1 -0
  104. package/dist/core/pull/pull-strategies.js +103 -0
  105. package/dist/core/pull/pull-strategies.js.map +1 -0
  106. package/dist/core/pull/pull-types.js +2 -0
  107. package/dist/core/pull/pull-types.js.map +1 -0
  108. package/dist/core/push/push-context.js +95 -0
  109. package/dist/core/push/push-context.js.map +1 -0
  110. package/dist/core/push/push-errors.js +133 -0
  111. package/dist/core/push/push-errors.js.map +1 -0
  112. package/dist/core/push/push-output.js +44 -0
  113. package/dist/core/push/push-output.js.map +1 -0
  114. package/dist/core/push/push-pipeline.js +74 -0
  115. package/dist/core/push/push-pipeline.js.map +1 -0
  116. package/dist/core/push/push-single-file.js +56 -0
  117. package/dist/core/push/push-single-file.js.map +1 -0
  118. package/dist/core/push/push-types.js +2 -0
  119. package/dist/core/push/push-types.js.map +1 -0
  120. package/dist/core/push/push-upload.js +68 -0
  121. package/dist/core/push/push-upload.js.map +1 -0
  122. package/dist/core/registry/registry-rename.js +2 -1
  123. package/dist/core/registry/registry-rename.js.map +1 -1
  124. package/dist/core/registry.js +14 -5
  125. package/dist/core/registry.js.map +1 -1
  126. package/dist/core/remote-pull.js +165 -36
  127. package/dist/core/remote-pull.js.map +1 -1
  128. package/dist/core/save/constants.js +4 -0
  129. package/dist/core/save/constants.js.map +1 -1
  130. package/dist/core/save/name-resolution.js +31 -0
  131. package/dist/core/save/name-resolution.js.map +1 -0
  132. package/dist/core/save/package-detection.js +147 -0
  133. package/dist/core/save/package-detection.js.map +1 -0
  134. package/dist/core/save/package-saver.js +82 -43
  135. package/dist/core/save/package-saver.js.map +1 -1
  136. package/dist/core/save/package-yml-generator.js +51 -71
  137. package/dist/core/save/package-yml-generator.js.map +1 -1
  138. package/dist/core/save/root-save-candidates.js.map +1 -1
  139. package/dist/core/save/save-candidate-loader.js +89 -0
  140. package/dist/core/save/save-candidate-loader.js.map +1 -0
  141. package/dist/core/save/save-conflict-resolution.js +72 -410
  142. package/dist/core/save/save-conflict-resolution.js.map +1 -1
  143. package/dist/core/save/save-conflict-resolver.js +277 -0
  144. package/dist/core/save/save-conflict-resolver.js.map +1 -0
  145. package/dist/core/save/save-pipeline.js +162 -0
  146. package/dist/core/save/save-pipeline.js.map +1 -0
  147. package/dist/core/save/save-single-file.js +124 -0
  148. package/dist/core/save/save-single-file.js.map +1 -0
  149. package/dist/core/save/save-types.js +2 -0
  150. package/dist/core/save/save-types.js.map +1 -0
  151. package/dist/core/save/save-yml-resolution.js +77 -39
  152. package/dist/core/save/save-yml-resolution.js.map +1 -1
  153. package/dist/core/save/workspace-rename.js +6 -6
  154. package/dist/core/save/workspace-rename.js.map +1 -1
  155. package/dist/core/scoping/package-scoping.js +14 -2
  156. package/dist/core/scoping/package-scoping.js.map +1 -1
  157. package/dist/core/status/status-file-discovery.js +12 -30
  158. package/dist/core/status/status-file-discovery.js.map +1 -1
  159. package/dist/core/sync/platform-sync.js +7 -4
  160. package/dist/core/sync/platform-sync.js.map +1 -1
  161. package/dist/core/sync/root-files-sync.js +59 -1
  162. package/dist/core/sync/root-files-sync.js.map +1 -1
  163. package/dist/core/token-store.js +73 -0
  164. package/dist/core/token-store.js.map +1 -0
  165. package/dist/core/uninstall/uninstall-file-discovery.js +1 -2
  166. package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
  167. package/dist/index.js +4 -0
  168. package/dist/index.js.map +1 -1
  169. package/dist/tui/app.js +95 -0
  170. package/dist/tui/app.js.map +1 -0
  171. package/dist/tui/components/package-list.js +73 -0
  172. package/dist/tui/components/package-list.js.map +1 -0
  173. package/dist/tui/controller.js +365 -0
  174. package/dist/tui/controller.js.map +1 -0
  175. package/dist/tui/index.js +12 -0
  176. package/dist/tui/index.js.map +1 -0
  177. package/dist/tui/services/file-index.js +64 -0
  178. package/dist/tui/services/file-index.js.map +1 -0
  179. package/dist/tui/services/packages.js +18 -0
  180. package/dist/tui/services/packages.js.map +1 -0
  181. package/dist/tui/services/save.js +21 -0
  182. package/dist/tui/services/save.js.map +1 -0
  183. package/dist/tui/state/app-state.js +15 -0
  184. package/dist/tui/state/app-state.js.map +1 -0
  185. package/dist/tui/state.js +17 -0
  186. package/dist/tui/state.js.map +1 -0
  187. package/dist/tui/types.js +2 -0
  188. package/dist/tui/types.js.map +1 -0
  189. package/dist/tui/views/add-file-modal.js +129 -0
  190. package/dist/tui/views/add-file-modal.js.map +1 -0
  191. package/dist/tui/views/file-preview.js +44 -0
  192. package/dist/tui/views/file-preview.js.map +1 -0
  193. package/dist/tui/views/list-packages.js +73 -0
  194. package/dist/tui/views/list-packages.js.map +1 -0
  195. package/dist/tui/views/main-menu.js +29 -0
  196. package/dist/tui/views/main-menu.js.map +1 -0
  197. package/dist/tui/views/manage-view.js +81 -0
  198. package/dist/tui/views/manage-view.js.map +1 -0
  199. package/dist/tui/views/package-hub.js +120 -0
  200. package/dist/tui/views/package-hub.js.map +1 -0
  201. package/dist/tui/views/placeholder.js +24 -0
  202. package/dist/tui/views/placeholder.js.map +1 -0
  203. package/dist/types/index.js.map +1 -1
  204. package/dist/utils/bun-bootstrap.js +72 -0
  205. package/dist/utils/bun-bootstrap.js.map +1 -0
  206. package/dist/utils/file-processing.js +5 -58
  207. package/dist/utils/file-processing.js.map +1 -1
  208. package/dist/utils/formatters.js +3 -1
  209. package/dist/utils/formatters.js.map +1 -1
  210. package/dist/utils/http-client.js +27 -5
  211. package/dist/utils/http-client.js.map +1 -1
  212. package/dist/utils/index-based-installer.js +40 -35
  213. package/dist/utils/index-based-installer.js.map +1 -1
  214. package/dist/utils/install-file-discovery.js +18 -24
  215. package/dist/utils/install-file-discovery.js.map +1 -1
  216. package/dist/utils/install-orchestrator.js +21 -21
  217. package/dist/utils/install-orchestrator.js.map +1 -1
  218. package/dist/utils/jsonc.js +44 -0
  219. package/dist/utils/jsonc.js.map +1 -0
  220. package/dist/utils/manifest-paths.js +27 -0
  221. package/dist/utils/manifest-paths.js.map +1 -0
  222. package/dist/utils/package-copy.js +199 -0
  223. package/dist/utils/package-copy.js.map +1 -0
  224. package/dist/utils/package-filters.js +125 -0
  225. package/dist/utils/package-filters.js.map +1 -0
  226. package/dist/utils/package-index-yml.js +15 -10
  227. package/dist/utils/package-index-yml.js.map +1 -1
  228. package/dist/utils/package-installation.js +4 -113
  229. package/dist/utils/package-installation.js.map +1 -1
  230. package/dist/utils/package-local-files.js +2 -35
  231. package/dist/utils/package-local-files.js.map +1 -1
  232. package/dist/utils/package-management.js +191 -75
  233. package/dist/utils/package-management.js.map +1 -1
  234. package/dist/utils/package-merge.js +48 -0
  235. package/dist/utils/package-merge.js.map +1 -0
  236. package/dist/utils/package-name.js +29 -0
  237. package/dist/utils/package-name.js.map +1 -1
  238. package/dist/utils/package-versioning.js +16 -4
  239. package/dist/utils/package-versioning.js.map +1 -1
  240. package/dist/utils/package-yml.js +41 -12
  241. package/dist/utils/package-yml.js.map +1 -1
  242. package/dist/utils/path-normalization.js +8 -53
  243. package/dist/utils/path-normalization.js.map +1 -1
  244. package/dist/utils/paths.js +17 -9
  245. package/dist/utils/paths.js.map +1 -1
  246. package/dist/utils/platform-file.js +16 -59
  247. package/dist/utils/platform-file.js.map +1 -1
  248. package/dist/utils/platform-mapper.js +29 -41
  249. package/dist/utils/platform-mapper.js.map +1 -1
  250. package/dist/utils/platform-specific-paths.js.map +1 -1
  251. package/dist/utils/platform-utils.js +28 -139
  252. package/dist/utils/platform-utils.js.map +1 -1
  253. package/dist/utils/platform-yaml-merge.js +13 -6
  254. package/dist/utils/platform-yaml-merge.js.map +1 -1
  255. package/dist/utils/prompts.js +0 -31
  256. package/dist/utils/prompts.js.map +1 -1
  257. package/dist/utils/registry-entry-filter.js +38 -24
  258. package/dist/utils/registry-entry-filter.js.map +1 -1
  259. package/dist/utils/registry-paths.js +48 -0
  260. package/dist/utils/registry-paths.js.map +1 -0
  261. package/dist/utils/root-file-installer.js +19 -0
  262. package/dist/utils/root-file-installer.js.map +1 -1
  263. package/dist/utils/root-file-registry.js.map +1 -1
  264. package/dist/utils/tarball.js +6 -2
  265. package/dist/utils/tarball.js.map +1 -1
  266. package/dist/utils/version-ranges.js +11 -8
  267. package/dist/utils/version-ranges.js.map +1 -1
  268. package/package.json +3 -2
  269. package/platforms.jsonc +178 -0
  270. package/specs/auth/auth-device-flow.md +70 -0
  271. package/specs/install/install-behavior.md +30 -0
  272. package/specs/install/package-yml-canonical.md +21 -1
  273. package/specs/install/version-resolution.md +9 -7
  274. package/specs/login/login-device-flow.md +70 -0
  275. package/specs/package/README.md +60 -0
  276. package/specs/package/nested-packages-and-parent-packages.md +79 -0
  277. package/specs/package/package-index-yml.md +171 -0
  278. package/specs/package/package-root-layout.md +78 -0
  279. package/specs/package/registry-payload-and-copy.md +77 -0
  280. package/specs/package/universal-content.md +144 -0
  281. package/specs/platforms.md +193 -0
  282. package/specs/push/push-behavior.md +38 -10
  283. package/specs/push/push-errors-and-hints.md +19 -6
  284. package/specs/push/push-remote-upload.md +3 -0
  285. package/specs/push/push-scoping.md +14 -22
  286. package/specs/push/push-version-selection.md +18 -16
  287. package/specs/save/README.md +40 -0
  288. package/specs/save/save-conflict-resolution.md +146 -0
  289. package/specs/save/save-file-discovery.md +101 -0
  290. package/specs/save/save-frontmatter-overrides.md +81 -0
  291. package/specs/save/save-modes-inputs.md +55 -0
  292. package/specs/save/save-naming-scoping.md +93 -0
  293. package/specs/save/save-package-detection.md +60 -0
  294. package/specs/save/save-registry-sync.md +126 -0
  295. package/specs/save-pack.md +1 -0
  296. package/dist/commands/release.js +0 -33
  297. package/dist/commands/release.js.map +0 -1
  298. package/dist/commands/tag.js +0 -311
  299. package/dist/commands/tag.js.map +0 -1
  300. package/dist/commands/update.js +0 -30
  301. package/dist/commands/update.js.map +0 -1
  302. package/dist/core/add/formula-index-updater.js +0 -290
  303. package/dist/core/add/formula-index-updater.js.map +0 -1
  304. package/dist/core/discovery/ai-files-discovery.js +0 -2
  305. package/dist/core/discovery/ai-files-discovery.js.map +0 -1
  306. package/dist/core/discovery/formula-files-discovery.js +0 -14
  307. package/dist/core/discovery/formula-files-discovery.js.map +0 -1
  308. package/dist/core/discovery/index-files-discovery.js +0 -91
  309. package/dist/core/discovery/index-files-discovery.js.map +0 -1
  310. package/dist/core/discovery/md-files-discovery.js +0 -82
  311. package/dist/core/discovery/md-files-discovery.js.map +0 -1
  312. package/dist/core/discovery/package-files-discovery.js +0 -14
  313. package/dist/core/discovery/package-files-discovery.js.map +0 -1
  314. package/dist/core/discovery/platform-discovery.js +0 -84
  315. package/dist/core/discovery/platform-discovery.js.map +0 -1
  316. package/dist/core/discovery/root-files-discovery.js +0 -2
  317. package/dist/core/discovery/root-files-discovery.js.map +0 -1
  318. package/dist/core/formula.js +0 -170
  319. package/dist/core/formula.js.map +0 -1
  320. package/dist/core/git-registry.js +0 -46
  321. package/dist/core/git-registry.js.map +0 -1
  322. package/dist/core/groundzero.js +0 -277
  323. package/dist/core/groundzero.js.map +0 -1
  324. package/dist/core/install/scenario.js +0 -11
  325. package/dist/core/install/scenario.js.map +0 -1
  326. package/dist/core/package-sync.js +0 -219
  327. package/dist/core/package-sync.js.map +0 -1
  328. package/dist/core/save/formula-file-generator.js +0 -167
  329. package/dist/core/save/formula-file-generator.js.map +0 -1
  330. package/dist/core/save/formula-saver.js +0 -52
  331. package/dist/core/save/formula-saver.js.map +0 -1
  332. package/dist/core/save/formula-yml-generator.js +0 -89
  333. package/dist/core/save/formula-yml-generator.js.map +0 -1
  334. package/dist/core/save/formula-yml-versioning.js +0 -108
  335. package/dist/core/save/formula-yml-versioning.js.map +0 -1
  336. package/dist/core/save/generic-file-sync.js +0 -38
  337. package/dist/core/save/generic-file-sync.js.map +0 -1
  338. package/dist/core/save/md-files-sync.js +0 -33
  339. package/dist/core/save/md-files-sync.js.map +0 -1
  340. package/dist/core/save/package-yml-versioning.js +0 -108
  341. package/dist/core/save/package-yml-versioning.js.map +0 -1
  342. package/dist/core/save/platform-sync.js +0 -95
  343. package/dist/core/save/platform-sync.js.map +0 -1
  344. package/dist/core/save/root-files-sync.js +0 -140
  345. package/dist/core/save/root-files-sync.js.map +0 -1
  346. package/dist/core/save/save-candidate-types.js +0 -2
  347. package/dist/core/save/save-candidate-types.js.map +0 -1
  348. package/dist/core/save/save-conflict-types.js +0 -2
  349. package/dist/core/save/save-conflict-types.js.map +0 -1
  350. package/dist/core/save/save-file-discovery.js +0 -5
  351. package/dist/core/save/save-file-discovery.js.map +0 -1
  352. package/dist/core/status-file-discovery.js +0 -175
  353. package/dist/core/status-file-discovery.js.map +0 -1
  354. package/dist/utils/discovery/file-processing.js +0 -156
  355. package/dist/utils/discovery/file-processing.js.map +0 -1
  356. package/dist/utils/discovery/formula-discovery.js +0 -211
  357. package/dist/utils/discovery/formula-discovery.js.map +0 -1
  358. package/dist/utils/discovery/platform-discovery.js +0 -2
  359. package/dist/utils/discovery/platform-discovery.js.map +0 -1
  360. package/dist/utils/formula-discovery.js +0 -102
  361. package/dist/utils/formula-discovery.js.map +0 -1
  362. package/dist/utils/formula-index-yml.js +0 -122
  363. package/dist/utils/formula-index-yml.js.map +0 -1
  364. package/dist/utils/formula-installation.js +0 -110
  365. package/dist/utils/formula-installation.js.map +0 -1
  366. package/dist/utils/formula-local-files.js +0 -38
  367. package/dist/utils/formula-local-files.js.map +0 -1
  368. package/dist/utils/formula-management.js +0 -191
  369. package/dist/utils/formula-management.js.map +0 -1
  370. package/dist/utils/formula-name.js +0 -97
  371. package/dist/utils/formula-name.js.map +0 -1
  372. package/dist/utils/formula-versioning.js +0 -109
  373. package/dist/utils/formula-versioning.js.map +0 -1
  374. package/dist/utils/formula-yml.js +0 -82
  375. package/dist/utils/formula-yml.js.map +0 -1
  376. package/dist/utils/git.js +0 -54
  377. package/dist/utils/git.js.map +0 -1
  378. package/dist/utils/id-based-discovery.js +0 -126
  379. package/dist/utils/id-based-discovery.js.map +0 -1
  380. package/dist/utils/id-based-installer.js +0 -249
  381. package/dist/utils/id-based-installer.js.map +0 -1
  382. package/dist/utils/index-yml-based-installer.js +0 -375
  383. package/dist/utils/index-yml-based-installer.js.map +0 -1
  384. package/dist/utils/index-yml.js +0 -124
  385. package/dist/utils/index-yml.js.map +0 -1
  386. package/dist/utils/md-frontmatter.js +0 -3
  387. package/dist/utils/md-frontmatter.js.map +0 -1
  388. package/dist/utils/package-link-yml.js +0 -92
  389. package/dist/utils/package-link-yml.js.map +0 -1
  390. package/dist/utils/platform-discovery.js +0 -2
  391. package/dist/utils/platform-discovery.js.map +0 -1
  392. package/dist/utils/platform-frontmatter-split.js +0 -15
  393. package/dist/utils/platform-frontmatter-split.js.map +0 -1
  394. package/dist/utils/timestamp-encoder.js +0 -13
  395. package/dist/utils/timestamp-encoder.js.map +0 -1
  396. package/dist/utils/wip-versioning.js +0 -24
  397. package/dist/utils/wip-versioning.js.map +0 -1
@@ -1,375 +0,0 @@
1
- import { join, relative, dirname } from 'path';
2
- import { listDirectories, listFiles, exists, ensureDir, remove } from './fs.js';
3
- import { logger } from './logger.js';
4
- import { getFormulaVersionPath } from '../core/directory.js';
5
- import { readIndexYml } from '../core/discovery/index-files-discovery.js';
6
- import { writeIfChanged } from '../core/install/file-updater.js';
7
- import { getPlatformDefinition, getDetectedPlatforms } from '../core/platforms.js';
8
- import { FILE_PATTERNS, UNIVERSAL_SUBDIRS, PLATFORM_DIRS } from '../constants/index.js';
9
- import { readFile as fsReadFile, writeFile as fsWriteFile } from 'fs/promises';
10
- import * as fs from 'fs/promises';
11
- import * as readline from 'readline';
12
- import { areFormulaNamesEquivalent } from './formula-name.js';
13
- async function writeIfChangedBinary(absFile, content) {
14
- await ensureDir(dirname(absFile));
15
- const fileExists = await exists(absFile);
16
- if (!fileExists) {
17
- await fsWriteFile(absFile, content);
18
- return 'created';
19
- }
20
- let existing = null;
21
- try {
22
- existing = await fsReadFile(absFile);
23
- }
24
- catch {
25
- existing = null;
26
- }
27
- if (!existing || !content.equals(existing)) {
28
- await fsWriteFile(absFile, content);
29
- return 'updated';
30
- }
31
- return 'unchanged';
32
- }
33
- function splitDirRel(dirRel) {
34
- const parts = dirRel.split('/');
35
- const first = parts[0];
36
- const rest = parts.slice(1).join('/');
37
- const isAi = first === PLATFORM_DIRS.AI;
38
- const universalSubdir = isAi ? null : (first === '.' ? '' : first);
39
- return { first, rest, isAi, universalSubdir };
40
- }
41
- function computeTargetFileName(relPath, writeExt) {
42
- const lower = relPath.toLowerCase();
43
- if (writeExt && lower.endsWith(FILE_PATTERNS.MD_FILES)) {
44
- const withoutExt = relPath.replace(/\.[^.]+$/, '');
45
- return withoutExt + writeExt;
46
- }
47
- return relPath;
48
- }
49
- function isTextLike(pathLower) {
50
- return pathLower.endsWith(FILE_PATTERNS.INDEX_YML) || pathLower.endsWith(FILE_PATTERNS.MD_FILES);
51
- }
52
- function recordResult(result, relPath, outcome) {
53
- result.files.push(relPath);
54
- if (outcome === 'created') {
55
- result.installed++;
56
- result.installedFiles.push(relPath);
57
- }
58
- else if (outcome === 'updated') {
59
- result.updated++;
60
- result.updatedFiles.push(relPath);
61
- }
62
- }
63
- async function writeFilesToTarget(cwd, baseDir, targetRelDir, files, writeExt, result) {
64
- for (const file of files) {
65
- try {
66
- const targetFileName = computeTargetFileName(file.relativePath, writeExt);
67
- const absDir = join(baseDir, targetRelDir);
68
- const absFile = join(absDir, targetFileName);
69
- await ensureDir(dirname(absFile));
70
- const isText = isTextLike(targetFileName.toLowerCase());
71
- const outcome = isText
72
- ? await writeIfChanged(absFile, file.content.toString('utf8'))
73
- : await writeIfChangedBinary(absFile, file.content);
74
- const relPath = relative(cwd, absFile);
75
- recordResult(result, relPath, outcome);
76
- }
77
- catch (error) {
78
- logger.warn(`Failed to install file ${file.relativePath}: ${error}`);
79
- result.skipped++;
80
- }
81
- }
82
- }
83
- function createPrefixTracker() {
84
- const map = new Map();
85
- const get = (k) => {
86
- let s = map.get(k);
87
- if (!s) {
88
- s = new Set();
89
- map.set(k, s);
90
- }
91
- return s;
92
- };
93
- return {
94
- isCovered(key, dirRel) {
95
- const set = map.get(key);
96
- if (!set)
97
- return false;
98
- for (const prefix of set) {
99
- if (dirRel === prefix || dirRel.startsWith(prefix + '/'))
100
- return true;
101
- }
102
- return false;
103
- },
104
- mark(key, dirRel) {
105
- get(key).add(dirRel);
106
- }
107
- };
108
- }
109
- async function shouldProceedWithOverwrite(targetBaseDir, expectedId, options) {
110
- const targetExists = await exists(targetBaseDir);
111
- if (!targetExists)
112
- return true;
113
- const targetId = await getIndexIdFromCwdDir(targetBaseDir);
114
- // Same ID → safe overwrite
115
- if (expectedId && targetId === expectedId)
116
- return true;
117
- // Forced
118
- if (options.force)
119
- return true;
120
- // Non-interactive defaults to skip (retain current behavior)
121
- const relPromptBase = relative(process.cwd(), targetBaseDir) || targetBaseDir;
122
- if (!targetId && !expectedId) {
123
- return await promptUserForOverwrite(`Directory ${relPromptBase} exists without index.yml. Overwrite`);
124
- }
125
- return await promptUserForOverwrite(`Directory ${relPromptBase} exists with no or different index.yml id. Overwrite`);
126
- }
127
- /**
128
- * Recursively find directories in registry that contain an index.yml with matching formula.name
129
- * Returns paths relative to the formula version root (e.g., "rules/subdir", "commands/tools")
130
- */
131
- export async function discoverRegistryIndexYmlDirs(formulaName, version) {
132
- const root = getFormulaVersionPath(formulaName, version);
133
- async function recurse(dir, rel, acc) {
134
- const files = await listFiles(dir);
135
- if (files.includes(FILE_PATTERNS.INDEX_YML)) {
136
- try {
137
- const marker = await readIndexYml(join(dir, FILE_PATTERNS.INDEX_YML));
138
- if (marker && marker.formula?.name && areFormulaNamesEquivalent(marker.formula.name, formulaName)) {
139
- acc.push(rel === '' ? '.' : rel);
140
- }
141
- }
142
- catch (err) {
143
- logger.warn(`Failed to read index.yml at ${join(dir, FILE_PATTERNS.INDEX_YML)}: ${err}`);
144
- }
145
- }
146
- const subdirs = await listDirectories(dir);
147
- for (const sub of subdirs) {
148
- const subdir = join(dir, sub);
149
- const subrel = rel === '' ? sub : join(rel, sub);
150
- await recurse(subdir, subrel, acc);
151
- }
152
- }
153
- const matches = [];
154
- await recurse(root, '', matches);
155
- return matches;
156
- }
157
- /**
158
- * Read an index.yml directory from registry recursively, returning file entries.
159
- * Skips the index.yml itself from returned list.
160
- */
161
- export async function readRegistryDirectoryRecursive(formulaName, version, dirRelToRoot) {
162
- const base = getFormulaVersionPath(formulaName, version);
163
- const absBaseDir = join(base, dirRelToRoot);
164
- async function walk(absDir, relToIndexDir, acc) {
165
- const files = await listFiles(absDir);
166
- for (const f of files) {
167
- const absFile = join(absDir, f);
168
- const relFile = relToIndexDir === '' ? f : join(relToIndexDir, f);
169
- const content = await fsReadFile(absFile);
170
- acc.push({ fullPath: absFile, relativePath: relFile, content });
171
- }
172
- const subdirs = await listDirectories(absDir);
173
- for (const sub of subdirs) {
174
- const nextAbs = join(absDir, sub);
175
- const nextRel = relToIndexDir === '' ? sub : join(relToIndexDir, sub);
176
- await walk(nextAbs, nextRel, acc);
177
- }
178
- }
179
- const results = [];
180
- await walk(absBaseDir, '', results);
181
- return results;
182
- }
183
- export async function readRegistryIndexId(formulaName, version, dirRelToRoot) {
184
- const base = getFormulaVersionPath(formulaName, version);
185
- const indexPath = join(base, dirRelToRoot, FILE_PATTERNS.INDEX_YML);
186
- try {
187
- const marker = await readIndexYml(indexPath);
188
- const id = marker?.formula?.id;
189
- return id ?? null;
190
- }
191
- catch (err) {
192
- logger.warn(`Failed to read registry index.yml at ${indexPath}: ${err}`);
193
- return null;
194
- }
195
- }
196
- async function getIndexIdFromCwdDir(dirAbsPath) {
197
- const indexPath = join(dirAbsPath, FILE_PATTERNS.INDEX_YML);
198
- if (!(await exists(indexPath)))
199
- return null;
200
- try {
201
- const marker = await readIndexYml(indexPath);
202
- const id = marker?.formula?.id;
203
- return id ?? null;
204
- }
205
- catch (err) {
206
- logger.warn(`Failed to parse index.yml at ${indexPath}: ${err}`);
207
- return null;
208
- }
209
- }
210
- async function buildCwdIndexYmlIdMap(cwd, platforms) {
211
- const map = new Map();
212
- async function recurseDirs(baseDir, platform, universalSubdir) {
213
- // If index.yml exists here, record it
214
- const files = await listFiles(baseDir).catch(() => []);
215
- if (files.includes(FILE_PATTERNS.INDEX_YML)) {
216
- const id = await getIndexIdFromCwdDir(baseDir);
217
- if (id) {
218
- const entry = { id, platform, universalSubdir, dirAbsPath: baseDir };
219
- if (!map.has(id))
220
- map.set(id, []);
221
- map.get(id).push(entry);
222
- }
223
- }
224
- // Recurse subdirectories
225
- const subdirs = await listDirectories(baseDir).catch(() => []);
226
- for (const sub of subdirs) {
227
- await recurseDirs(join(baseDir, sub), platform, universalSubdir);
228
- }
229
- }
230
- for (const platform of platforms) {
231
- const def = getPlatformDefinition(platform);
232
- for (const universalSubdir of Object.values(UNIVERSAL_SUBDIRS)) {
233
- const subdirDef = def.subdirs[universalSubdir];
234
- if (!subdirDef)
235
- continue;
236
- const root = join(cwd, def.rootDir, subdirDef.path);
237
- if (await exists(root)) {
238
- await recurseDirs(root, platform, universalSubdir);
239
- }
240
- }
241
- }
242
- return map;
243
- }
244
- async function buildCwdAiIndexYmlIdMap(cwd) {
245
- const map = new Map();
246
- async function recurse(baseDir) {
247
- const files = await listFiles(baseDir).catch(() => []);
248
- if (files.includes(FILE_PATTERNS.INDEX_YML)) {
249
- const id = await getIndexIdFromCwdDir(baseDir);
250
- if (id) {
251
- if (!map.has(id))
252
- map.set(id, []);
253
- map.get(id).push(baseDir);
254
- }
255
- }
256
- const subdirs = await listDirectories(baseDir).catch(() => []);
257
- for (const sub of subdirs) {
258
- await recurse(join(baseDir, sub));
259
- }
260
- }
261
- const aiRoot = join(cwd, PLATFORM_DIRS.AI);
262
- if (await exists(aiRoot)) {
263
- await recurse(aiRoot);
264
- }
265
- return map;
266
- }
267
- async function clearDirectory(dirAbsPath) {
268
- try {
269
- const entries = await fs.readdir(dirAbsPath, { withFileTypes: true });
270
- await Promise.all(entries.map(async (entry) => {
271
- const full = join(dirAbsPath, entry.name);
272
- await remove(full);
273
- }));
274
- }
275
- catch (err) {
276
- // If directory doesn't exist, nothing to clear
277
- return;
278
- }
279
- }
280
- async function promptUserForOverwrite(promptText) {
281
- // If not an interactive TTY, default to skip
282
- if (!process.stdin.isTTY || !process.stdout.isTTY) {
283
- logger.warn(`${promptText} [non-interactive: skipping]`);
284
- return false;
285
- }
286
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
287
- return new Promise((resolve) => {
288
- rl.question(`${promptText} (y/N) `, (answer) => {
289
- rl.close();
290
- const normalized = (answer || '').trim().toLowerCase();
291
- resolve(normalized === 'y' || normalized === 'yes');
292
- });
293
- });
294
- }
295
- /**
296
- * Install pre-discovered index.yml directories (no discovery step here)
297
- */
298
- export async function installIndexYmlDirectories(cwd, directories, platforms, options) {
299
- const allResults = {
300
- installed: 0,
301
- updated: 0,
302
- skipped: 0,
303
- files: [],
304
- installedFiles: [],
305
- updatedFiles: []
306
- };
307
- const detected = await getDetectedPlatforms(cwd);
308
- const mergedPlatforms = Array.from(new Set([...(platforms || []), ...detected]));
309
- const cwdIdMap = await buildCwdIndexYmlIdMap(cwd, mergedPlatforms);
310
- const cwdAiIdMap = await buildCwdAiIndexYmlIdMap(cwd);
311
- const aiTracker = createPrefixTracker();
312
- const platformTracker = createPrefixTracker();
313
- for (const entry of directories) {
314
- const { isAi, universalSubdir, rest } = splitDirRel(entry.dirRelToRoot);
315
- const registryId = entry.registryId;
316
- if (isAi) {
317
- if (aiTracker.isCovered('AI', entry.dirRelToRoot))
318
- continue;
319
- const aiRoot = join(cwd, PLATFORM_DIRS.AI);
320
- let targetAbs = null;
321
- if (registryId) {
322
- const matches = cwdAiIdMap.get(registryId) || [];
323
- if (matches.length > 0) {
324
- targetAbs = matches[0]; // id-based
325
- }
326
- }
327
- if (!targetAbs)
328
- targetAbs = join(aiRoot, rest);
329
- const proceed = await shouldProceedWithOverwrite(targetAbs, registryId, options);
330
- if (!proceed)
331
- continue;
332
- if (!options.dryRun && await exists(targetAbs)) {
333
- await clearDirectory(targetAbs);
334
- }
335
- const targetRel = relative(aiRoot, targetAbs);
336
- await writeFilesToTarget(cwd, aiRoot, targetRel, entry.files, undefined, allResults);
337
- aiTracker.mark('AI', entry.dirRelToRoot);
338
- continue;
339
- }
340
- // Non-AI: universal subdir
341
- if (!universalSubdir || !Object.values(UNIVERSAL_SUBDIRS).includes(universalSubdir)) {
342
- logger.debug(`Skipping index.yml directory not under a universal subdir: ${entry.dirRelToRoot}`);
343
- continue;
344
- }
345
- for (const platform of mergedPlatforms) {
346
- if (platformTracker.isCovered(platform, entry.dirRelToRoot))
347
- continue;
348
- const def = getPlatformDefinition(platform);
349
- const subdirDef = def.subdirs[universalSubdir];
350
- if (!subdirDef)
351
- continue;
352
- const baseDir = join(cwd, def.rootDir, subdirDef.path);
353
- let targetAbs = null;
354
- if (registryId) {
355
- const matches = (cwdIdMap.get(registryId) || []).filter(e => e.platform === platform && e.universalSubdir === universalSubdir);
356
- if (matches.length > 0) {
357
- targetAbs = matches[0].dirAbsPath; // id-based
358
- }
359
- }
360
- if (!targetAbs)
361
- targetAbs = join(baseDir, rest);
362
- const proceed = await shouldProceedWithOverwrite(targetAbs, registryId, options);
363
- if (!proceed)
364
- continue;
365
- if (!options.dryRun && await exists(targetAbs)) {
366
- await clearDirectory(targetAbs);
367
- }
368
- const targetRel = relative(baseDir, targetAbs);
369
- await writeFilesToTarget(cwd, baseDir, targetRel, entry.files, subdirDef.writeExt, allResults);
370
- platformTracker.mark(platform, entry.dirRelToRoot);
371
- }
372
- }
373
- return allResults;
374
- }
375
- //# sourceMappingURL=index-yml-based-installer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-yml-based-installer.js","sourceRoot":"","sources":["../../src/utils/index-yml-based-installer.ts"],"names":[],"mappings":"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"}
@@ -1,124 +0,0 @@
1
- import { generateEntityId, isValidEntityId } from './entity-id.js';
2
- import { generateYamlKeyValue } from './yaml-frontmatter.js';
3
- export const GROUNDZERO_FORMULA_COMMENT = '# GroundZero formula';
4
- function detectNewline(text) {
5
- return text.includes('\r\n') ? '\r\n' : '\n';
6
- }
7
- /**
8
- * Update index.yml content to ensure GroundZero comment, formula name, and a valid formula.id.
9
- * Preserves all other lines and ordering.
10
- */
11
- export function updateIndexYml(content, opts = {}) {
12
- const nl = detectNewline(content);
13
- const lines = content.split(nl);
14
- // Find the first line that exactly contains 'formula:' (ignoring surrounding whitespace)
15
- let formulaIndex = -1;
16
- let formulaIndent = '';
17
- for (let i = 0; i < lines.length; i++) {
18
- const line = lines[i];
19
- const trimmed = line.trim();
20
- if (trimmed === 'formula:') {
21
- formulaIndex = i;
22
- formulaIndent = line.slice(0, line.indexOf('f'));
23
- break;
24
- }
25
- }
26
- if (formulaIndex === -1) {
27
- // No formula block; nothing to enforce for id without creating new structure
28
- return { updated: false, content };
29
- }
30
- const childIndent = formulaIndent + ' ';
31
- // Ensure comment directly above formula
32
- let updated = false;
33
- if (!(formulaIndex > 0 && lines[formulaIndex - 1].trim() === GROUNDZERO_FORMULA_COMMENT)) {
34
- lines.splice(formulaIndex, 0, GROUNDZERO_FORMULA_COMMENT);
35
- formulaIndex++;
36
- updated = true;
37
- }
38
- // Identify block bounds: contiguous childIndent lines after 'formula:'
39
- let blockStart = formulaIndex + 1;
40
- let blockEnd = blockStart;
41
- while (blockEnd < lines.length && lines[blockEnd].startsWith(childIndent)) {
42
- blockEnd++;
43
- }
44
- // Handle name update if provided
45
- if (opts.name !== undefined) {
46
- // Search for name line within the block
47
- let nameFoundAt = -1;
48
- for (let i = blockStart; i < blockEnd; i++) {
49
- const trimmed = lines[i].trim();
50
- if (trimmed.startsWith('name:')) {
51
- nameFoundAt = i;
52
- break;
53
- }
54
- }
55
- if (nameFoundAt !== -1) {
56
- const newLine = generateYamlKeyValue('name', opts.name, childIndent);
57
- if (lines[nameFoundAt] !== newLine) {
58
- lines[nameFoundAt] = newLine;
59
- updated = true;
60
- }
61
- }
62
- else {
63
- // Insert name line at the beginning of the block
64
- lines.splice(blockStart, 0, generateYamlKeyValue('name', opts.name, childIndent));
65
- blockEnd++; // Adjust block end since we added a line
66
- updated = true;
67
- }
68
- }
69
- // Search for id line within the block
70
- let idFoundAt = -1;
71
- let existingId = null;
72
- for (let i = blockStart; i < blockEnd; i++) {
73
- const trimmed = lines[i].trim();
74
- if (trimmed.startsWith('id:')) {
75
- idFoundAt = i;
76
- const after = trimmed.slice('id:'.length).trim();
77
- existingId = after.length ? after : null;
78
- break;
79
- }
80
- }
81
- const needReset = opts.resetId === true;
82
- const needEnsure = opts.ensureId === true;
83
- if (needReset || needEnsure) {
84
- let effectiveId = null;
85
- if (needReset) {
86
- effectiveId = generateEntityId();
87
- }
88
- else {
89
- effectiveId = existingId && isValidEntityId(existingId) ? existingId : generateEntityId();
90
- }
91
- if (idFoundAt !== -1) {
92
- const newLine = generateYamlKeyValue('id', effectiveId, childIndent);
93
- if (lines[idFoundAt] !== newLine) {
94
- lines[idFoundAt] = newLine;
95
- updated = true;
96
- }
97
- }
98
- else {
99
- lines.splice(blockEnd, 0, generateYamlKeyValue('id', effectiveId, childIndent));
100
- updated = true;
101
- }
102
- }
103
- if (!updated)
104
- return { updated: false, content };
105
- return { updated: true, content: lines.join(nl) };
106
- }
107
- /**
108
- * Generate complete index.yml content with GroundZero comment and formula block
109
- */
110
- export function buildIndexYmlContent(marker) {
111
- const lines = [GROUNDZERO_FORMULA_COMMENT];
112
- if (marker.formula?.name) {
113
- lines.push('formula:');
114
- lines.push(generateYamlKeyValue('name', marker.formula.name, ' '));
115
- if (marker.formula.id) {
116
- lines.push(generateYamlKeyValue('id', marker.formula.id, ' '));
117
- }
118
- if (marker.formula.platformSpecific) {
119
- lines.push(' platformSpecific: true');
120
- }
121
- }
122
- return lines.join('\n');
123
- }
124
- //# sourceMappingURL=index-yml.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-yml.js","sourceRoot":"","sources":["../../src/utils/index-yml.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- // Legacy frontmatter utilities have been removed
3
- //# sourceMappingURL=md-frontmatter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"md-frontmatter.js","sourceRoot":"","sources":["../../src/utils/md-frontmatter.ts"],"names":[],"mappings":";AAAA,iDAAiD"}
@@ -1,92 +0,0 @@
1
- import { join } from 'path';
2
- import yaml from 'js-yaml';
3
- import { ensureDir, exists, readTextFile, writeTextFile, remove, listDirectories } from './fs.js';
4
- import { getPackagePath, getPackageVersionPath } from '../core/directory.js';
5
- import { logger } from './logger.js';
6
- import { extractWorkspaceHashFromVersion } from './version-generator.js';
7
- export const PACKAGE_LINK_FILENAME = 'package.link.yml';
8
- export function getPackageLinkPath(packageName, version) {
9
- return join(getPackageVersionPath(packageName, version), PACKAGE_LINK_FILENAME);
10
- }
11
- export async function writePackageLink(packageName, version, metadata) {
12
- const versionPath = getPackageVersionPath(packageName, version);
13
- await ensureDir(versionPath);
14
- const linkPath = getPackageLinkPath(packageName, version);
15
- const serialized = yaml.dump({
16
- sourcePath: metadata.sourcePath
17
- }, {
18
- lineWidth: 120,
19
- sortKeys: true
20
- });
21
- await writeTextFile(linkPath, serialized);
22
- logger.debug(`Updated package link metadata`, { packageName, version, linkPath });
23
- }
24
- export async function readPackageLink(packageName, version) {
25
- const linkPath = getPackageLinkPath(packageName, version);
26
- if (!(await exists(linkPath))) {
27
- return null;
28
- }
29
- try {
30
- const content = await readTextFile(linkPath);
31
- const parsed = yaml.load(content);
32
- const metadata = sanitizeLinkMetadata(parsed, version);
33
- return metadata;
34
- }
35
- catch (error) {
36
- logger.warn(`Failed to read package link for ${packageName}@${version}: ${error}`);
37
- return null;
38
- }
39
- }
40
- export async function listPackageLinks(packageName) {
41
- const packagePath = getPackagePath(packageName);
42
- if (!(await exists(packagePath))) {
43
- return [];
44
- }
45
- const versions = await listDirectories(packagePath).catch(() => []);
46
- const entries = [];
47
- for (const version of versions) {
48
- const metadata = await readPackageLink(packageName, version);
49
- if (!metadata) {
50
- continue;
51
- }
52
- const linkPath = getPackageLinkPath(packageName, version);
53
- entries.push({ version, path: linkPath, metadata });
54
- }
55
- return entries.sort((a, b) => a.version.localeCompare(b.version));
56
- }
57
- export async function deletePackageLink(packageName, version) {
58
- const versionPath = getPackageVersionPath(packageName, version);
59
- try {
60
- await remove(versionPath);
61
- }
62
- catch (error) {
63
- logger.warn(`Failed to delete package link directory ${versionPath}: ${error}`);
64
- }
65
- }
66
- export async function deleteWorkspaceLinks(packageName, workspaceHash, options = {}) {
67
- const normalizedHash = workspaceHash.toLowerCase();
68
- const links = await listPackageLinks(packageName);
69
- for (const entry of links) {
70
- if (options.keepVersion && entry.version === options.keepVersion) {
71
- continue;
72
- }
73
- const entryWorkspaceHash = extractWorkspaceHashFromVersion(entry.version);
74
- if (!entryWorkspaceHash || entryWorkspaceHash.toLowerCase() !== normalizedHash) {
75
- continue;
76
- }
77
- await deletePackageLink(packageName, entry.version);
78
- }
79
- }
80
- function sanitizeLinkMetadata(raw, fallbackVersion) {
81
- if (!raw || typeof raw !== 'object') {
82
- return null;
83
- }
84
- const sourcePath = typeof raw.sourcePath === 'string' ? raw.sourcePath : '';
85
- if (!sourcePath) {
86
- return null;
87
- }
88
- return {
89
- sourcePath
90
- };
91
- }
92
- //# sourceMappingURL=package-link-yml.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-link-yml.js","sourceRoot":"","sources":["../../src/utils/package-link-yml.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=platform-discovery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform-discovery.js","sourceRoot":"","sources":["../../src/utils/platform-discovery.ts"],"names":[],"mappings":""}