@uapkg/cli 1.3.0 → 1.3.2

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 (412) hide show
  1. package/dist/app/CompositionRoot.d.ts +36 -33
  2. package/dist/app/CompositionRoot.d.ts.map +1 -1
  3. package/dist/app/CompositionRoot.js +91 -109
  4. package/dist/app/CompositionRoot.js.map +1 -1
  5. package/dist/app/UAPKGApplication.d.ts +6 -3
  6. package/dist/app/UAPKGApplication.d.ts.map +1 -1
  7. package/dist/app/UAPKGApplication.js +155 -169
  8. package/dist/app/UAPKGApplication.js.map +1 -1
  9. package/dist/build/BuildMetadata.d.ts +9 -6
  10. package/dist/build/BuildMetadata.d.ts.map +1 -1
  11. package/dist/build/BuildMetadata.js +2 -2
  12. package/dist/cli/UAPKGCommandLine.d.ts +259 -257
  13. package/dist/cli/UAPKGCommandLine.d.ts.map +1 -1
  14. package/dist/cli/UAPKGCommandLine.js +248 -239
  15. package/dist/cli/UAPKGCommandLine.js.map +1 -1
  16. package/dist/cli/parseCommandLine.d.ts +5 -1
  17. package/dist/cli/parseCommandLine.d.ts.map +1 -1
  18. package/dist/cli/parseCommandLine.js +8 -3
  19. package/dist/cli/parseCommandLine.js.map +1 -1
  20. package/dist/cli/parsing/UAPKGCommandLineParser.d.ts +9 -6
  21. package/dist/cli/parsing/UAPKGCommandLineParser.d.ts.map +1 -1
  22. package/dist/cli/parsing/UAPKGCommandLineParser.js +23 -31
  23. package/dist/cli/parsing/UAPKGCommandLineParser.js.map +1 -1
  24. package/dist/cli/parsing/UAPKGParserRegistry.d.ts +12 -9
  25. package/dist/cli/parsing/UAPKGParserRegistry.d.ts.map +1 -1
  26. package/dist/cli/parsing/UAPKGParserRegistry.js +53 -50
  27. package/dist/cli/parsing/UAPKGParserRegistry.js.map +1 -1
  28. package/dist/cli/parsing/contracts/UAPKGCommandModule.d.ts +9 -6
  29. package/dist/cli/parsing/contracts/UAPKGCommandModule.d.ts.map +1 -1
  30. package/dist/cli/parsing/contracts/UAPKGCommandModule.js +1 -2
  31. package/dist/cli/parsing/modules/AddCommandModule.d.ts +8 -5
  32. package/dist/cli/parsing/modules/AddCommandModule.d.ts.map +1 -1
  33. package/dist/cli/parsing/modules/AddCommandModule.js +49 -36
  34. package/dist/cli/parsing/modules/AddCommandModule.js.map +1 -1
  35. package/dist/cli/parsing/modules/ConfigCommandModule.d.ts +8 -5
  36. package/dist/cli/parsing/modules/ConfigCommandModule.d.ts.map +1 -1
  37. package/dist/cli/parsing/modules/ConfigCommandModule.js +87 -83
  38. package/dist/cli/parsing/modules/ConfigCommandModule.js.map +1 -1
  39. package/dist/cli/parsing/modules/InitCommandModule.d.ts +8 -5
  40. package/dist/cli/parsing/modules/InitCommandModule.d.ts.map +1 -1
  41. package/dist/cli/parsing/modules/InitCommandModule.js +25 -22
  42. package/dist/cli/parsing/modules/InitCommandModule.js.map +1 -1
  43. package/dist/cli/parsing/modules/InstallCommandModule.d.ts +8 -5
  44. package/dist/cli/parsing/modules/InstallCommandModule.d.ts.map +1 -1
  45. package/dist/cli/parsing/modules/InstallCommandModule.js +36 -28
  46. package/dist/cli/parsing/modules/InstallCommandModule.js.map +1 -1
  47. package/dist/cli/parsing/modules/LifecycleCommandModule.d.ts +8 -5
  48. package/dist/cli/parsing/modules/LifecycleCommandModule.d.ts.map +1 -1
  49. package/dist/cli/parsing/modules/LifecycleCommandModule.js +78 -50
  50. package/dist/cli/parsing/modules/LifecycleCommandModule.js.map +1 -1
  51. package/dist/cli/parsing/modules/ListCommandModule.d.ts +8 -5
  52. package/dist/cli/parsing/modules/ListCommandModule.d.ts.map +1 -1
  53. package/dist/cli/parsing/modules/ListCommandModule.js +26 -15
  54. package/dist/cli/parsing/modules/ListCommandModule.js.map +1 -1
  55. package/dist/cli/parsing/modules/LoginCommandModule.d.ts +8 -5
  56. package/dist/cli/parsing/modules/LoginCommandModule.d.ts.map +1 -1
  57. package/dist/cli/parsing/modules/LoginCommandModule.js +34 -33
  58. package/dist/cli/parsing/modules/LoginCommandModule.js.map +1 -1
  59. package/dist/cli/parsing/modules/LogoutCommandModule.d.ts +8 -5
  60. package/dist/cli/parsing/modules/LogoutCommandModule.d.ts.map +1 -1
  61. package/dist/cli/parsing/modules/LogoutCommandModule.js +30 -28
  62. package/dist/cli/parsing/modules/LogoutCommandModule.js.map +1 -1
  63. package/dist/cli/parsing/modules/OutdatedCommandModule.d.ts +8 -5
  64. package/dist/cli/parsing/modules/OutdatedCommandModule.d.ts.map +1 -1
  65. package/dist/cli/parsing/modules/OutdatedCommandModule.js +21 -16
  66. package/dist/cli/parsing/modules/OutdatedCommandModule.js.map +1 -1
  67. package/dist/cli/parsing/modules/PackCommandModule.d.ts +8 -5
  68. package/dist/cli/parsing/modules/PackCommandModule.d.ts.map +1 -1
  69. package/dist/cli/parsing/modules/PackCommandModule.js +30 -28
  70. package/dist/cli/parsing/modules/PackCommandModule.js.map +1 -1
  71. package/dist/cli/parsing/modules/ProjectGetNameCommandModule.d.ts +8 -5
  72. package/dist/cli/parsing/modules/ProjectGetNameCommandModule.d.ts.map +1 -1
  73. package/dist/cli/parsing/modules/ProjectGetNameCommandModule.js +14 -11
  74. package/dist/cli/parsing/modules/ProjectGetNameCommandModule.js.map +1 -1
  75. package/dist/cli/parsing/modules/PublishCommandModule.d.ts +8 -5
  76. package/dist/cli/parsing/modules/PublishCommandModule.d.ts.map +1 -1
  77. package/dist/cli/parsing/modules/PublishCommandModule.js +63 -47
  78. package/dist/cli/parsing/modules/PublishCommandModule.js.map +1 -1
  79. package/dist/cli/parsing/modules/RegistryCommandModule.d.ts +8 -5
  80. package/dist/cli/parsing/modules/RegistryCommandModule.d.ts.map +1 -1
  81. package/dist/cli/parsing/modules/RegistryCommandModule.js +117 -120
  82. package/dist/cli/parsing/modules/RegistryCommandModule.js.map +1 -1
  83. package/dist/cli/parsing/modules/RemoveCommandModule.d.ts +8 -5
  84. package/dist/cli/parsing/modules/RemoveCommandModule.d.ts.map +1 -1
  85. package/dist/cli/parsing/modules/RemoveCommandModule.js +25 -14
  86. package/dist/cli/parsing/modules/RemoveCommandModule.js.map +1 -1
  87. package/dist/cli/parsing/modules/RequestsCommandModule.d.ts +8 -5
  88. package/dist/cli/parsing/modules/RequestsCommandModule.d.ts.map +1 -1
  89. package/dist/cli/parsing/modules/RequestsCommandModule.js +56 -60
  90. package/dist/cli/parsing/modules/RequestsCommandModule.js.map +1 -1
  91. package/dist/cli/parsing/modules/UpdateCommandModule.d.ts +8 -5
  92. package/dist/cli/parsing/modules/UpdateCommandModule.d.ts.map +1 -1
  93. package/dist/cli/parsing/modules/UpdateCommandModule.js +38 -25
  94. package/dist/cli/parsing/modules/UpdateCommandModule.js.map +1 -1
  95. package/dist/cli/parsing/modules/WhoamiCommandModule.d.ts +8 -5
  96. package/dist/cli/parsing/modules/WhoamiCommandModule.d.ts.map +1 -1
  97. package/dist/cli/parsing/modules/WhoamiCommandModule.js +30 -28
  98. package/dist/cli/parsing/modules/WhoamiCommandModule.js.map +1 -1
  99. package/dist/cli/parsing/modules/WhyCommandModule.d.ts +8 -5
  100. package/dist/cli/parsing/modules/WhyCommandModule.d.ts.map +1 -1
  101. package/dist/cli/parsing/modules/WhyCommandModule.js +25 -14
  102. package/dist/cli/parsing/modules/WhyCommandModule.js.map +1 -1
  103. package/dist/cli/parsing/modules/sharedOptions.d.ts +8 -5
  104. package/dist/cli/parsing/modules/sharedOptions.d.ts.map +1 -1
  105. package/dist/cli/parsing/modules/sharedOptions.js +18 -23
  106. package/dist/cli/parsing/modules/sharedOptions.js.map +1 -1
  107. package/dist/cli/runUAPKGCLI.d.ts +4 -1
  108. package/dist/cli/runUAPKGCLI.d.ts.map +1 -1
  109. package/dist/cli/runUAPKGCLI.js +10 -5
  110. package/dist/cli/runUAPKGCLI.js.map +1 -1
  111. package/dist/cli-bootstrap.d.ts +1 -2
  112. package/dist/cli-bootstrap.js +15 -12
  113. package/dist/cli-bootstrap.js.map +1 -1
  114. package/dist/commands/AddCommand.d.ts +19 -16
  115. package/dist/commands/AddCommand.d.ts.map +1 -1
  116. package/dist/commands/AddCommand.js +49 -53
  117. package/dist/commands/AddCommand.js.map +1 -1
  118. package/dist/commands/Command.d.ts +5 -2
  119. package/dist/commands/Command.d.ts.map +1 -1
  120. package/dist/commands/Command.js +1 -2
  121. package/dist/commands/ConfigCommand.d.ts +28 -25
  122. package/dist/commands/ConfigCommand.d.ts.map +1 -1
  123. package/dist/commands/ConfigCommand.js +165 -186
  124. package/dist/commands/ConfigCommand.js.map +1 -1
  125. package/dist/commands/InitCommand.d.ts +19 -16
  126. package/dist/commands/InitCommand.d.ts.map +1 -1
  127. package/dist/commands/InitCommand.js +65 -60
  128. package/dist/commands/InitCommand.js.map +1 -1
  129. package/dist/commands/InstallCommand.d.ts +16 -13
  130. package/dist/commands/InstallCommand.d.ts.map +1 -1
  131. package/dist/commands/InstallCommand.js +118 -110
  132. package/dist/commands/InstallCommand.js.map +1 -1
  133. package/dist/commands/ListCommand.d.ts +13 -10
  134. package/dist/commands/ListCommand.d.ts.map +1 -1
  135. package/dist/commands/ListCommand.js +76 -81
  136. package/dist/commands/ListCommand.js.map +1 -1
  137. package/dist/commands/LoginCommand.d.ts +17 -14
  138. package/dist/commands/LoginCommand.d.ts.map +1 -1
  139. package/dist/commands/LoginCommand.js +66 -72
  140. package/dist/commands/LoginCommand.js.map +1 -1
  141. package/dist/commands/LogoutCommand.d.ts +15 -12
  142. package/dist/commands/LogoutCommand.d.ts.map +1 -1
  143. package/dist/commands/LogoutCommand.js +36 -37
  144. package/dist/commands/LogoutCommand.js.map +1 -1
  145. package/dist/commands/OutdatedCommand.d.ts +12 -9
  146. package/dist/commands/OutdatedCommand.d.ts.map +1 -1
  147. package/dist/commands/OutdatedCommand.js +41 -40
  148. package/dist/commands/OutdatedCommand.js.map +1 -1
  149. package/dist/commands/PackCommand.d.ts +13 -10
  150. package/dist/commands/PackCommand.d.ts.map +1 -1
  151. package/dist/commands/PackCommand.js +26 -21
  152. package/dist/commands/PackCommand.js.map +1 -1
  153. package/dist/commands/PackageLifecycleCommand.d.ts +23 -19
  154. package/dist/commands/PackageLifecycleCommand.d.ts.map +1 -1
  155. package/dist/commands/PackageLifecycleCommand.js +144 -138
  156. package/dist/commands/PackageLifecycleCommand.js.map +1 -1
  157. package/dist/commands/PostinstallCandidateBuilder.d.ts +11 -8
  158. package/dist/commands/PostinstallCandidateBuilder.d.ts.map +1 -1
  159. package/dist/commands/PostinstallCandidateBuilder.js +42 -42
  160. package/dist/commands/PostinstallCandidateBuilder.js.map +1 -1
  161. package/dist/commands/ProjectGetNameCommand.d.ts +10 -7
  162. package/dist/commands/ProjectGetNameCommand.d.ts.map +1 -1
  163. package/dist/commands/ProjectGetNameCommand.js +25 -25
  164. package/dist/commands/ProjectGetNameCommand.js.map +1 -1
  165. package/dist/commands/PublishCommand.d.ts +29 -23
  166. package/dist/commands/PublishCommand.d.ts.map +1 -1
  167. package/dist/commands/PublishCommand.js +243 -254
  168. package/dist/commands/PublishCommand.js.map +1 -1
  169. package/dist/commands/RegistryCommand.d.ts +38 -35
  170. package/dist/commands/RegistryCommand.d.ts.map +1 -1
  171. package/dist/commands/RegistryCommand.js +195 -223
  172. package/dist/commands/RegistryCommand.js.map +1 -1
  173. package/dist/commands/RemoveCommand.d.ts +14 -11
  174. package/dist/commands/RemoveCommand.d.ts.map +1 -1
  175. package/dist/commands/RemoveCommand.js +47 -54
  176. package/dist/commands/RemoveCommand.js.map +1 -1
  177. package/dist/commands/RequestsCommand.d.ts +21 -18
  178. package/dist/commands/RequestsCommand.d.ts.map +1 -1
  179. package/dist/commands/RequestsCommand.js +82 -95
  180. package/dist/commands/RequestsCommand.js.map +1 -1
  181. package/dist/commands/UpdateCommand.d.ts +29 -26
  182. package/dist/commands/UpdateCommand.d.ts.map +1 -1
  183. package/dist/commands/UpdateCommand.js +111 -111
  184. package/dist/commands/UpdateCommand.js.map +1 -1
  185. package/dist/commands/WhoamiCommand.d.ts +30 -27
  186. package/dist/commands/WhoamiCommand.d.ts.map +1 -1
  187. package/dist/commands/WhoamiCommand.js +63 -72
  188. package/dist/commands/WhoamiCommand.js.map +1 -1
  189. package/dist/commands/WhyCommand.d.ts +13 -10
  190. package/dist/commands/WhyCommand.d.ts.map +1 -1
  191. package/dist/commands/WhyCommand.js +45 -44
  192. package/dist/commands/WhyCommand.js.map +1 -1
  193. package/dist/commands/add/DependencyAddResolver.d.ts +14 -11
  194. package/dist/commands/add/DependencyAddResolver.d.ts.map +1 -1
  195. package/dist/commands/add/DependencyAddResolver.js +36 -36
  196. package/dist/commands/add/DependencyAddResolver.js.map +1 -1
  197. package/dist/control-plane/AccountManager.d.ts +96 -94
  198. package/dist/control-plane/AccountManager.d.ts.map +1 -1
  199. package/dist/control-plane/AccountManager.js +775 -967
  200. package/dist/control-plane/AccountManager.js.map +1 -1
  201. package/dist/control-plane/ArtifactObserver.d.ts +19 -16
  202. package/dist/control-plane/ArtifactObserver.d.ts.map +1 -1
  203. package/dist/control-plane/ArtifactObserver.js +73 -59
  204. package/dist/control-plane/ArtifactObserver.js.map +1 -1
  205. package/dist/control-plane/AuthMetadataStore.d.ts +16 -13
  206. package/dist/control-plane/AuthMetadataStore.d.ts.map +1 -1
  207. package/dist/control-plane/AuthMetadataStore.js +111 -113
  208. package/dist/control-plane/AuthMetadataStore.js.map +1 -1
  209. package/dist/control-plane/AuthStoragePaths.d.ts +7 -4
  210. package/dist/control-plane/AuthStoragePaths.d.ts.map +1 -1
  211. package/dist/control-plane/AuthStoragePaths.js +19 -14
  212. package/dist/control-plane/AuthStoragePaths.js.map +1 -1
  213. package/dist/control-plane/AuthenticationSelector.d.ts +21 -18
  214. package/dist/control-plane/AuthenticationSelector.d.ts.map +1 -1
  215. package/dist/control-plane/AuthenticationSelector.js +69 -63
  216. package/dist/control-plane/AuthenticationSelector.js.map +1 -1
  217. package/dist/control-plane/ControlPlaneClient.d.ts +37 -28
  218. package/dist/control-plane/ControlPlaneClient.d.ts.map +1 -1
  219. package/dist/control-plane/ControlPlaneClient.js +265 -254
  220. package/dist/control-plane/ControlPlaneClient.js.map +1 -1
  221. package/dist/control-plane/ControlPlaneEndpoints.d.ts +9 -6
  222. package/dist/control-plane/ControlPlaneEndpoints.d.ts.map +1 -1
  223. package/dist/control-plane/ControlPlaneEndpoints.js +17 -12
  224. package/dist/control-plane/ControlPlaneEndpoints.js.map +1 -1
  225. package/dist/control-plane/ControlPlaneTypes.d.ts +176 -152
  226. package/dist/control-plane/ControlPlaneTypes.d.ts.map +1 -1
  227. package/dist/control-plane/ControlPlaneTypes.js +88 -81
  228. package/dist/control-plane/ControlPlaneTypes.js.map +1 -1
  229. package/dist/control-plane/CredentialStore.d.ts +20 -18
  230. package/dist/control-plane/CredentialStore.d.ts.map +1 -1
  231. package/dist/control-plane/CredentialStore.js +66 -83
  232. package/dist/control-plane/CredentialStore.js.map +1 -1
  233. package/dist/control-plane/DPoPKeyStore.d.ts +12 -9
  234. package/dist/control-plane/DPoPKeyStore.d.ts.map +1 -1
  235. package/dist/control-plane/DPoPKeyStore.js +57 -53
  236. package/dist/control-plane/DPoPKeyStore.js.map +1 -1
  237. package/dist/control-plane/GitHubActionsOidcCredentialProvider.d.ts +37 -4
  238. package/dist/control-plane/GitHubActionsOidcCredentialProvider.d.ts.map +1 -1
  239. package/dist/control-plane/GitHubActionsOidcCredentialProvider.js +197 -63
  240. package/dist/control-plane/GitHubActionsOidcCredentialProvider.js.map +1 -1
  241. package/dist/control-plane/PublishIdempotencyStore.d.ts +25 -9
  242. package/dist/control-plane/PublishIdempotencyStore.d.ts.map +1 -1
  243. package/dist/control-plane/PublishIdempotencyStore.js +97 -68
  244. package/dist/control-plane/PublishIdempotencyStore.js.map +1 -1
  245. package/dist/control-plane/PublishRequestErrorMapper.d.ts +155 -0
  246. package/dist/control-plane/PublishRequestErrorMapper.d.ts.map +1 -0
  247. package/dist/control-plane/PublishRequestErrorMapper.js +597 -0
  248. package/dist/control-plane/PublishRequestErrorMapper.js.map +1 -0
  249. package/dist/control-plane/RegistryGrantLock.d.ts +29 -26
  250. package/dist/control-plane/RegistryGrantLock.d.ts.map +1 -1
  251. package/dist/control-plane/RegistryGrantLock.js +149 -185
  252. package/dist/control-plane/RegistryGrantLock.js.map +1 -1
  253. package/dist/control-plane/RegistryTrustResolver.d.ts +13 -10
  254. package/dist/control-plane/RegistryTrustResolver.d.ts.map +1 -1
  255. package/dist/control-plane/RegistryTrustResolver.js +97 -132
  256. package/dist/control-plane/RegistryTrustResolver.js.map +1 -1
  257. package/dist/index.d.ts +62 -39
  258. package/dist/index.js +60 -53
  259. package/dist/postinstall/api/PostinstallDsl.d.ts +24 -21
  260. package/dist/postinstall/api/PostinstallDsl.d.ts.map +1 -1
  261. package/dist/postinstall/api/PostinstallDsl.js +32 -35
  262. package/dist/postinstall/api/PostinstallDsl.js.map +1 -1
  263. package/dist/postinstall/api/definePostinstall.d.ts +5 -2
  264. package/dist/postinstall/api/definePostinstall.d.ts.map +1 -1
  265. package/dist/postinstall/api/definePostinstall.js +20 -16
  266. package/dist/postinstall/api/definePostinstall.js.map +1 -1
  267. package/dist/postinstall/index.d.ts +25 -26
  268. package/dist/postinstall/index.js +25 -37
  269. package/dist/postinstall/loader/EntryResolver.d.ts +11 -9
  270. package/dist/postinstall/loader/EntryResolver.d.ts.map +1 -1
  271. package/dist/postinstall/loader/EntryResolver.js +36 -32
  272. package/dist/postinstall/loader/EntryResolver.js.map +1 -1
  273. package/dist/postinstall/loader/EsbuildTranspiler.d.ts +6 -3
  274. package/dist/postinstall/loader/EsbuildTranspiler.d.ts.map +1 -1
  275. package/dist/postinstall/loader/EsbuildTranspiler.js +52 -56
  276. package/dist/postinstall/loader/EsbuildTranspiler.js.map +1 -1
  277. package/dist/postinstall/loader/ExportValidator.d.ts +8 -5
  278. package/dist/postinstall/loader/ExportValidator.d.ts.map +1 -1
  279. package/dist/postinstall/loader/ExportValidator.js +36 -32
  280. package/dist/postinstall/loader/ExportValidator.js.map +1 -1
  281. package/dist/postinstall/loader/ModuleImporter.d.ts +17 -14
  282. package/dist/postinstall/loader/ModuleImporter.d.ts.map +1 -1
  283. package/dist/postinstall/loader/ModuleImporter.js +50 -58
  284. package/dist/postinstall/loader/ModuleImporter.js.map +1 -1
  285. package/dist/postinstall/loader/PostinstallLoader.d.ts +22 -19
  286. package/dist/postinstall/loader/PostinstallLoader.d.ts.map +1 -1
  287. package/dist/postinstall/loader/PostinstallLoader.js +62 -58
  288. package/dist/postinstall/loader/PostinstallLoader.js.map +1 -1
  289. package/dist/postinstall/markers/MarkerBlockEditor.d.ts +19 -16
  290. package/dist/postinstall/markers/MarkerBlockEditor.d.ts.map +1 -1
  291. package/dist/postinstall/markers/MarkerBlockEditor.js +48 -44
  292. package/dist/postinstall/markers/MarkerBlockEditor.js.map +1 -1
  293. package/dist/postinstall/markers/MarkerBlockService.d.ts +10 -7
  294. package/dist/postinstall/markers/MarkerBlockService.d.ts.map +1 -1
  295. package/dist/postinstall/markers/MarkerBlockService.js +44 -44
  296. package/dist/postinstall/markers/MarkerBlockService.js.map +1 -1
  297. package/dist/postinstall/markers/MarkerIntegrityValidator.d.ts +12 -9
  298. package/dist/postinstall/markers/MarkerIntegrityValidator.d.ts.map +1 -1
  299. package/dist/postinstall/markers/MarkerIntegrityValidator.js +47 -52
  300. package/dist/postinstall/markers/MarkerIntegrityValidator.js.map +1 -1
  301. package/dist/postinstall/policy/PostinstallPolicyGate.d.ts +25 -23
  302. package/dist/postinstall/policy/PostinstallPolicyGate.d.ts.map +1 -1
  303. package/dist/postinstall/policy/PostinstallPolicyGate.js +63 -52
  304. package/dist/postinstall/policy/PostinstallPolicyGate.js.map +1 -1
  305. package/dist/postinstall/runner/PostinstallOrchestrator.d.ts +48 -45
  306. package/dist/postinstall/runner/PostinstallOrchestrator.d.ts.map +1 -1
  307. package/dist/postinstall/runner/PostinstallOrchestrator.js +172 -170
  308. package/dist/postinstall/runner/PostinstallOrchestrator.js.map +1 -1
  309. package/dist/postinstall/unreal/BuildCsInjector.d.ts +16 -13
  310. package/dist/postinstall/unreal/BuildCsInjector.d.ts.map +1 -1
  311. package/dist/postinstall/unreal/BuildCsInjector.js +58 -53
  312. package/dist/postinstall/unreal/BuildCsInjector.js.map +1 -1
  313. package/dist/postinstall/unreal/CSharpInjectionEngine.d.ts +13 -10
  314. package/dist/postinstall/unreal/CSharpInjectionEngine.d.ts.map +1 -1
  315. package/dist/postinstall/unreal/CSharpInjectionEngine.js +56 -59
  316. package/dist/postinstall/unreal/CSharpInjectionEngine.js.map +1 -1
  317. package/dist/postinstall/unreal/CSharpStructureAnalyzer.d.ts +11 -8
  318. package/dist/postinstall/unreal/CSharpStructureAnalyzer.d.ts.map +1 -1
  319. package/dist/postinstall/unreal/CSharpStructureAnalyzer.js +123 -127
  320. package/dist/postinstall/unreal/CSharpStructureAnalyzer.js.map +1 -1
  321. package/dist/postinstall/unreal/CSharpStructures.d.ts +18 -15
  322. package/dist/postinstall/unreal/CSharpStructures.d.ts.map +1 -1
  323. package/dist/postinstall/unreal/CSharpStructures.js +1 -2
  324. package/dist/postinstall/unreal/CSharpWrapperFactory.d.ts +7 -4
  325. package/dist/postinstall/unreal/CSharpWrapperFactory.d.ts.map +1 -1
  326. package/dist/postinstall/unreal/CSharpWrapperFactory.js +54 -58
  327. package/dist/postinstall/unreal/CSharpWrapperFactory.js.map +1 -1
  328. package/dist/postinstall/unreal/PluginHash.d.ts +5 -2
  329. package/dist/postinstall/unreal/PluginHash.d.ts.map +1 -1
  330. package/dist/postinstall/unreal/PluginHash.js +13 -8
  331. package/dist/postinstall/unreal/PluginHash.js.map +1 -1
  332. package/dist/postinstall/unreal/PrettyParseError.d.ts +8 -5
  333. package/dist/postinstall/unreal/PrettyParseError.d.ts.map +1 -1
  334. package/dist/postinstall/unreal/PrettyParseError.js +37 -37
  335. package/dist/postinstall/unreal/PrettyParseError.js.map +1 -1
  336. package/dist/postinstall/unreal/ProjectFileLocator.d.ts +12 -9
  337. package/dist/postinstall/unreal/ProjectFileLocator.d.ts.map +1 -1
  338. package/dist/postinstall/unreal/ProjectFileLocator.js +49 -51
  339. package/dist/postinstall/unreal/ProjectFileLocator.js.map +1 -1
  340. package/dist/postinstall/unreal/TargetCsInjector.d.ts +16 -13
  341. package/dist/postinstall/unreal/TargetCsInjector.d.ts.map +1 -1
  342. package/dist/postinstall/unreal/TargetCsInjector.js +58 -53
  343. package/dist/postinstall/unreal/TargetCsInjector.js.map +1 -1
  344. package/dist/postinstall/unreal/UProjectInjector.d.ts +6 -3
  345. package/dist/postinstall/unreal/UProjectInjector.d.ts.map +1 -1
  346. package/dist/postinstall/unreal/UProjectInjector.js +56 -52
  347. package/dist/postinstall/unreal/UProjectInjector.js.map +1 -1
  348. package/dist/postinstall/unreal/UProjectMetadataReader.d.ts +5 -2
  349. package/dist/postinstall/unreal/UProjectMetadataReader.d.ts.map +1 -1
  350. package/dist/postinstall/unreal/UProjectMetadataReader.js +22 -18
  351. package/dist/postinstall/unreal/UProjectMetadataReader.js.map +1 -1
  352. package/dist/postinstall/unreal/UnrealSourceCatalog.d.ts +17 -14
  353. package/dist/postinstall/unreal/UnrealSourceCatalog.d.ts.map +1 -1
  354. package/dist/postinstall/unreal/UnrealSourceCatalog.js +50 -50
  355. package/dist/postinstall/unreal/UnrealSourceCatalog.js.map +1 -1
  356. package/dist/prompts/InkPromptService.d.ts +10 -7
  357. package/dist/prompts/InkPromptService.d.ts.map +1 -1
  358. package/dist/prompts/InkPromptService.js +100 -71
  359. package/dist/prompts/InkPromptService.js.map +1 -1
  360. package/dist/prompts/ProjectContextDetector.d.ts +10 -7
  361. package/dist/prompts/ProjectContextDetector.d.ts.map +1 -1
  362. package/dist/prompts/ProjectContextDetector.js +32 -26
  363. package/dist/prompts/ProjectContextDetector.js.map +1 -1
  364. package/dist/prompts/PromptService.d.ts +11 -8
  365. package/dist/prompts/PromptService.d.ts.map +1 -1
  366. package/dist/prompts/PromptService.js +1 -8
  367. package/dist/reporting/DiagnosticDeduplicator.d.ts +8 -5
  368. package/dist/reporting/DiagnosticDeduplicator.d.ts.map +1 -1
  369. package/dist/reporting/DiagnosticDeduplicator.js +36 -35
  370. package/dist/reporting/DiagnosticDeduplicator.js.map +1 -1
  371. package/dist/reporting/DiagnosticRenderer.d.ts +11 -8
  372. package/dist/reporting/DiagnosticRenderer.d.ts.map +1 -1
  373. package/dist/reporting/DiagnosticRenderer.js +1 -2
  374. package/dist/reporting/DiagnosticReporter.d.ts +12 -9
  375. package/dist/reporting/DiagnosticReporter.d.ts.map +1 -1
  376. package/dist/reporting/DiagnosticReporter.js +40 -39
  377. package/dist/reporting/DiagnosticReporter.js.map +1 -1
  378. package/dist/reporting/InkDiagnosticRenderer.d.ts +12 -9
  379. package/dist/reporting/InkDiagnosticRenderer.d.ts.map +1 -1
  380. package/dist/reporting/InkDiagnosticRenderer.js +50 -42
  381. package/dist/reporting/InkDiagnosticRenderer.js.map +1 -1
  382. package/dist/reporting/InstallProgressReporter.d.ts +23 -20
  383. package/dist/reporting/InstallProgressReporter.d.ts.map +1 -1
  384. package/dist/reporting/InstallProgressReporter.js +48 -47
  385. package/dist/reporting/InstallProgressReporter.js.map +1 -1
  386. package/dist/reporting/JsonReporter.d.ts +16 -13
  387. package/dist/reporting/JsonReporter.d.ts.map +1 -1
  388. package/dist/reporting/JsonReporter.js +34 -20
  389. package/dist/reporting/JsonReporter.js.map +1 -1
  390. package/dist/reporting/RegistryRequestTerminalFormatter.d.ts +36 -0
  391. package/dist/reporting/RegistryRequestTerminalFormatter.d.ts.map +1 -0
  392. package/dist/reporting/RegistryRequestTerminalFormatter.js +90 -0
  393. package/dist/reporting/RegistryRequestTerminalFormatter.js.map +1 -0
  394. package/dist/reporting/TextDiagnosticRenderer.d.ts +11 -8
  395. package/dist/reporting/TextDiagnosticRenderer.d.ts.map +1 -1
  396. package/dist/reporting/TextDiagnosticRenderer.js +36 -28
  397. package/dist/reporting/TextDiagnosticRenderer.js.map +1 -1
  398. package/dist/reporting/TextSink.d.ts +14 -11
  399. package/dist/reporting/TextSink.d.ts.map +1 -1
  400. package/dist/reporting/TextSink.js +24 -20
  401. package/dist/reporting/TextSink.js.map +1 -1
  402. package/package.json +31 -32
  403. package/dist/cli/parsing/contracts/UAPKGCommandModule.js.map +0 -1
  404. package/dist/cli-bootstrap.d.ts.map +0 -1
  405. package/dist/commands/Command.js.map +0 -1
  406. package/dist/index.d.ts.map +0 -1
  407. package/dist/index.js.map +0 -1
  408. package/dist/postinstall/index.d.ts.map +0 -1
  409. package/dist/postinstall/index.js.map +0 -1
  410. package/dist/postinstall/unreal/CSharpStructures.js.map +0 -1
  411. package/dist/prompts/PromptService.js.map +0 -1
  412. package/dist/reporting/DiagnosticRenderer.js.map +0 -1
@@ -1,270 +1,259 @@
1
- import { execFile } from 'node:child_process';
2
- import { randomUUID } from 'node:crypto';
3
- import { existsSync } from 'node:fs';
4
- import { readFile } from 'node:fs/promises';
5
- import { isAbsolute, join } from 'node:path';
6
- import { promisify } from 'node:util';
7
- import { readPackageClaimsFromArchive } from '@uapkg/package-claims';
8
- import { getRegistryRepoPath } from '@uapkg/registry-core';
9
- import { describeControlPlaneError } from '../control-plane/AccountManager.js';
10
- import { ArtifactObserver } from '../control-plane/ArtifactObserver.js';
11
- import { AuthenticationSelector } from '../control-plane/AuthenticationSelector.js';
12
- import { ControlPlaneClient } from '../control-plane/ControlPlaneClient.js';
13
- import { ControlPlaneError, } from '../control-plane/ControlPlaneTypes.js';
14
- import { PublishIdempotencyStore } from '../control-plane/PublishIdempotencyStore.js';
15
- import { InkPromptService } from '../prompts/InkPromptService.js';
1
+ import { ControlPlaneError } from "../control-plane/ControlPlaneTypes.js";
2
+ import { ControlPlaneClient } from "../control-plane/ControlPlaneClient.js";
3
+ import { describeControlPlaneError } from "../control-plane/AccountManager.js";
4
+ import { AuthenticationSelector } from "../control-plane/AuthenticationSelector.js";
5
+ import { PublishIdempotencyStore, createGitHubActionsPublishIdempotencyKey } from "../control-plane/PublishIdempotencyStore.js";
6
+ import { InkPromptService } from "../prompts/InkPromptService.js";
7
+ import { formatRegistryRequestTerminal, isRegistryRequestSuccessStatus, isRegistryRequestTerminalStatus } from "../reporting/RegistryRequestTerminalFormatter.js";
8
+ import { ArtifactObserver } from "../control-plane/ArtifactObserver.js";
9
+ import { publishRequestDiagnosticForError } from "../control-plane/PublishRequestErrorMapper.js";
10
+ import { isAbsolute, join } from "node:path";
11
+ import { execFile } from "node:child_process";
12
+ import { existsSync } from "node:fs";
13
+ import { randomUUID } from "node:crypto";
14
+ import { readFile } from "node:fs/promises";
15
+ import { readPackageClaimsFromArchive } from "@uapkg/package-claims";
16
+ import { promisify } from "node:util";
17
+ import { getRegistryRepoPath } from "@uapkg/registry-core";
18
+ import { RegistryMetaSchema } from "@uapkg/registry-schema";
19
+
20
+ //#region src/commands/PublishCommand.ts
16
21
  const execFileAsync = promisify(execFile);
17
- const TERMINAL_STATUSES = new Set([
18
- 'ready',
19
- 'ready_superseded',
20
- 'rejected',
21
- 'operationally_failed',
22
- ]);
23
- const SUCCESS_STATUSES = new Set(['ready', 'ready_superseded']);
24
- const PUBLISH_WATCH_TIMEOUT_MS = 30 * 60 * 1000;
22
+ const PUBLISH_WATCH_TIMEOUT_MS = 18e5;
25
23
  /**
26
- * Artifact-first publish (PS-REQ-002): the CLI observes the exact release
27
- * artifact (download or `--asset-path`), reads packaged claims from it, and
28
- * submits the route-derived publish operation. The packaged archive — never
29
- * the working tree — is what gets published.
30
- */
31
- export class PublishCommand {
32
- root;
33
- options;
34
- constructor(root, options) {
35
- this.root = root;
36
- this.options = options;
37
- }
38
- async execute() {
39
- try {
40
- const manifestResult = await this.root.packageManifest.readManifest();
41
- if (!manifestResult.ok) {
42
- throw new Error(manifestResult.diagnostics[0]?.message ?? 'Unable to read uapkg.json.');
43
- }
44
- const manifest = manifestResult.value;
45
- const registryAlias = this.options.registry ?? manifest.publish?.registry;
46
- const trust = await this.root.registryTrustResolver.resolve(registryAlias);
47
- const source = await this.resolveSource(manifest.version, manifest.publish);
48
- const observer = new ArtifactObserver();
49
- const artifact = this.options.assetPath
50
- ? await observer.observeLocalArchive(resolveAssetPath(this.root.cwd, this.options.assetPath))
51
- : await observer.downloadReleaseAsset(source.repository, source.releaseTag, source.assetName);
52
- try {
53
- const claimsResult = await readPackageClaimsFromArchive(artifact.archivePath);
54
- if (!claimsResult.ok) {
55
- throw new Error(claimsResult.diagnostics[0]?.message ?? 'Unable to read the packaged uapkg.json from the artifact.');
56
- }
57
- const claims = claimsResult.value;
58
- if (this.options.outputFormat === 'text' &&
59
- (claims.name !== manifest.name || claims.version !== manifest.version)) {
60
- process.stderr.write(`Publishing ${claims.name}@${claims.version} from the packaged artifact (local manifest says ${manifest.name}@${manifest.version}).\n`);
61
- }
62
- const registryType = await readTrustedRegistryType(trust.cacheShortId);
63
- if (registryType === 'public' && claims.private) {
64
- throw new Error(`"${claims.name}" is marked private in its packaged manifest; a public UAPKG registry does not accept private packages.`);
65
- }
66
- const scopedOwner = scopedOwnerName(claims.name);
67
- const configuredOwner = normalizeOwner(this.options.owner ?? manifest.publish?.owner);
68
- if (scopedOwner && configuredOwner && configuredOwner.toLowerCase() !== scopedOwner.toLowerCase()) {
69
- throw new Error(`Package "${claims.name}" belongs to the "${scopedOwner}" namespace; --owner cannot select "${configuredOwner}".`);
70
- }
71
- const owner = scopedOwner ?? configuredOwner;
72
- const selector = new AuthenticationSelector(this.root.accountManager, new InkPromptService());
73
- const requestedScopes = this.options.detach
74
- ? ['publishing.request.create']
75
- : ['publishing.request.create', 'publishing.request.read.self'];
76
- let authentication = await selector.select(this.options.auth, trust, requestedScopes, true);
77
- let requestOtp = authentication.otp;
78
- authentication = { kind: authentication.kind, credential: authentication.credential };
79
- const submission = {
80
- registryId: trust.registryId,
81
- ...(owner ? { ownerOrganizationName: owner } : {}),
82
- payload: {
83
- packageName: claims.name,
84
- packageVersion: claims.version,
85
- source,
86
- observedIntegrity: { sha256: artifact.sha256, sizeBytes: artifact.sizeBytes },
87
- claims,
88
- },
89
- };
90
- const idempotencyStore = new PublishIdempotencyStore();
91
- const submissionDigest = PublishIdempotencyStore.submissionDigest('publish', submission);
92
- const idempotencyKey = idempotencyStore.getOrCreate(submissionDigest, () => randomUUID());
93
- const client = new ControlPlaneClient(trust.apiBaseUrl);
94
- let created;
95
- try {
96
- created = await client.submitRegistryRequest(authentication.credential, 'publish', submission, {
97
- idempotencyKey,
98
- otp: requestOtp,
99
- });
100
- }
101
- finally {
102
- // The request-scoped proof must not remain reachable while the CLI
103
- // polls, refreshes credentials, or watches the durable request.
104
- requestOtp = undefined;
105
- }
106
- if (this.options.detach) {
107
- this.printCreated(created.requestId, created.status, trust.alias);
108
- return 0;
109
- }
110
- let request = await client.getRegistryRequest(authentication.credential, created.requestId);
111
- let previousStatus = '';
112
- const deadline = Date.now() + PUBLISH_WATCH_TIMEOUT_MS;
113
- while (!TERMINAL_STATUSES.has(request.status)) {
114
- if (Date.now() >= deadline) {
115
- throw new Error(`Timed out waiting for publishing request ${request.id}. Check it with \`uapkg requests status ${request.id}\`.`);
116
- }
117
- if (this.options.outputFormat === 'text' && request.status !== previousStatus) {
118
- process.stdout.write(`${request.id}: ${request.status}${request.currentStep ? ` (${request.currentStep})` : ''}\n`);
119
- previousStatus = request.status;
120
- }
121
- await delay(2_000);
122
- try {
123
- request = await client.getRegistryRequest(authentication.credential, created.requestId);
124
- }
125
- catch (error) {
126
- if (!(error instanceof ControlPlaneError) || error.status !== 401)
127
- throw error;
128
- if (authentication.kind === 'gat')
129
- throw error;
130
- if (authentication.kind === 'login') {
131
- this.root.accountManager.invalidateAccessCredentials(trust);
132
- }
133
- authentication = await selector.select(authentication.kind, trust, ['publishing.request.read.self'], false);
134
- request = await client.getRegistryRequest(authentication.credential, created.requestId);
135
- }
136
- }
137
- idempotencyStore.clear(submissionDigest);
138
- if (SUCCESS_STATUSES.has(request.status)) {
139
- let refreshWarning;
140
- try {
141
- await this.root.registryTrustResolver.forceRefresh(trust);
142
- }
143
- catch (error) {
144
- refreshWarning = error instanceof Error ? error.message : String(error);
145
- }
146
- this.printTerminal(request, trust.alias, refreshWarning);
147
- return 0;
148
- }
149
- this.printTerminal(request, trust.alias);
150
- return 1;
151
- }
152
- finally {
153
- await artifact.cleanup();
154
- }
155
- }
156
- catch (error) {
157
- process.stderr.write(`${describeControlPlaneError(error)}\n`);
158
- return 1;
159
- }
160
- }
161
- async resolveSource(packageVersion, manifestPublish) {
162
- const repository = normalizeGitHubRepository(this.options.repository ?? manifestPublish?.repository ?? (await this.gitOrigin()));
163
- const releaseTag = (this.options.tag ?? `v${packageVersion}`).trim();
164
- const assetName = (this.options.asset ?? manifestPublish?.asset ?? 'package.tgz').trim();
165
- if (!releaseTag)
166
- throw new Error('The GitHub Release tag cannot be empty.');
167
- if (!assetName || assetName.includes('/') || assetName.includes('\\')) {
168
- throw new Error('The GitHub Release asset must be a file name, not a path.');
169
- }
170
- return {
171
- type: 'github_release',
172
- repository,
173
- releaseTag,
174
- assetName,
175
- };
176
- }
177
- async gitOrigin() {
178
- const git = this.root.config.get('git') ?? 'git';
179
- try {
180
- const { stdout } = await execFileAsync(git, ['remote', 'get-url', 'origin'], {
181
- cwd: this.root.cwd,
182
- timeout: 10_000,
183
- });
184
- return stdout.trim();
185
- }
186
- catch (error) {
187
- throw new Error('Unable to derive the GitHub repository from remote "origin". Use --repository.', {
188
- cause: error,
189
- });
190
- }
191
- }
192
- printCreated(requestId, status, registryAlias) {
193
- if (this.options.outputFormat === 'json') {
194
- process.stdout.write(`${JSON.stringify({ ok: true, registry: registryAlias, requestId, status })}\n`);
195
- return;
196
- }
197
- process.stdout.write(`Publishing request ${requestId} submitted to "${registryAlias}" (${status}).\n`);
198
- }
199
- printTerminal(request, registryAlias, refreshWarning) {
200
- if (this.options.outputFormat === 'json') {
201
- process.stdout.write(`${JSON.stringify({
202
- ok: SUCCESS_STATUSES.has(request.status),
203
- registry: registryAlias,
204
- request,
205
- ...(refreshWarning ? { registryRefreshWarning: refreshWarning } : {}),
206
- })}\n`);
207
- return;
208
- }
209
- process.stdout.write(`Publishing request ${request.id}: ${request.status}.\n`);
210
- if (request.status === 'ready_superseded') {
211
- process.stdout.write('The publication was accepted; a newer change to the same package is already projected.\n');
212
- }
213
- if (refreshWarning) {
214
- process.stderr.write(`Package publication succeeded, but the local registry refresh failed: ${refreshWarning}\n`);
215
- }
216
- }
217
- }
24
+ * Artifact-first publish (PS-REQ-002): the CLI observes the exact release
25
+ * artifact (download or `--asset-path`), reads packaged claims from it, and
26
+ * submits the route-derived publish operation. The packaged archive — never
27
+ * the working tree — is what gets published.
28
+ */
29
+ var PublishCommand = class {
30
+ root;
31
+ options;
32
+ constructor(root, options) {
33
+ this.root = root;
34
+ this.options = options;
35
+ }
36
+ async execute() {
37
+ try {
38
+ const manifestResult = await this.root.packageManifest.readManifest();
39
+ if (!manifestResult.ok) throw new Error(manifestResult.diagnostics[0]?.message ?? "Unable to read uapkg.json.");
40
+ const manifest = manifestResult.value;
41
+ const registryAlias = this.options.registry ?? manifest.publish?.registry;
42
+ const trust = await this.root.registryTrustResolver.resolve(registryAlias);
43
+ const source = await this.resolveSource(manifest.version, manifest.publish);
44
+ const observer = new ArtifactObserver();
45
+ const artifact = this.options.assetPath ? await observer.observeLocalArchive(resolveAssetPath(this.root.cwd, this.options.assetPath)) : await observer.downloadReleaseAsset(source.repository, source.releaseTag, source.assetName);
46
+ try {
47
+ const claimsResult = await readPackageClaimsFromArchive(artifact.archivePath);
48
+ if (!claimsResult.ok) throw new Error(claimsResult.diagnostics[0]?.message ?? "Unable to read the packaged uapkg.json from the artifact.");
49
+ const claims = claimsResult.value;
50
+ if (this.options.outputFormat === "text" && (claims.name !== manifest.name || claims.version !== manifest.version)) process.stderr.write(`Publishing ${claims.name}@${claims.version} from the packaged artifact (local manifest says ${manifest.name}@${manifest.version}).\n`);
51
+ if (await readTrustedRegistryType(trust.cacheShortId) === "public" && claims.private) throw new Error(`"${claims.name}" is marked private in its packaged manifest; a public UAPKG registry does not accept private packages.`);
52
+ const scopedOwner = scopedOwnerName(claims.name);
53
+ const configuredOwner = normalizeOwner(this.options.owner ?? manifest.publish?.owner);
54
+ if (scopedOwner && configuredOwner && configuredOwner.toLowerCase() !== scopedOwner.toLowerCase()) throw new Error(`Package "${claims.name}" belongs to the "${scopedOwner}" namespace; --owner cannot select "${configuredOwner}".`);
55
+ const owner = scopedOwner ?? configuredOwner;
56
+ const selector = new AuthenticationSelector(this.root.accountManager, new InkPromptService());
57
+ const oidcTarget = {
58
+ registryId: trust.registryId,
59
+ packageName: claims.name
60
+ };
61
+ const requestedScopes = this.options.detach ? ["publishing.request.create"] : ["publishing.request.create", "publishing.request.read.self"];
62
+ let authentication = await selector.select(this.options.auth, trust, requestedScopes, true, oidcTarget);
63
+ let requestOtp = authentication.otp;
64
+ authentication = {
65
+ kind: authentication.kind,
66
+ credential: authentication.credential
67
+ };
68
+ const submission = {
69
+ registryId: trust.registryId,
70
+ ...owner ? { ownerOrganizationName: owner } : {},
71
+ payload: {
72
+ packageName: claims.name,
73
+ packageVersion: claims.version,
74
+ source,
75
+ observedIntegrity: {
76
+ sha256: artifact.sha256,
77
+ sizeBytes: artifact.sizeBytes
78
+ },
79
+ claims
80
+ }
81
+ };
82
+ const idempotencyStore = new PublishIdempotencyStore();
83
+ const submissionDigest = PublishIdempotencyStore.submissionDigest("publish", submission);
84
+ const usesActionsIdempotency = authentication.kind === "oidc";
85
+ const idempotencyKey = usesActionsIdempotency ? createGitHubActionsPublishIdempotencyKey({
86
+ registryId: trust.registryId,
87
+ packageName: claims.name,
88
+ packageVersion: claims.version,
89
+ artifactSha256: artifact.sha256
90
+ }) : idempotencyStore.getOrCreate(submissionDigest, () => randomUUID());
91
+ const client = new ControlPlaneClient(trust.apiBaseUrl);
92
+ let created;
93
+ try {
94
+ created = await client.submitRegistryRequest(authentication.credential, "publish", submission, {
95
+ idempotencyKey,
96
+ otp: requestOtp
97
+ });
98
+ } catch (error) {
99
+ if (this.options.outputFormat === "json") throw error;
100
+ this.root.diagnostics.reportOne(publishRequestDiagnosticForError(error, {
101
+ packageName: claims.name,
102
+ packageVersion: claims.version,
103
+ registryAlias: trust.alias,
104
+ registryName: trust.registryName,
105
+ registryIssuer: trust.issuer,
106
+ credentialKind: authentication.kind,
107
+ ...owner ? { requestedOwner: owner } : {},
108
+ repository: source.repository
109
+ }));
110
+ return 1;
111
+ } finally {
112
+ requestOtp = void 0;
113
+ }
114
+ if (this.options.detach) {
115
+ this.printCreated(created.requestId, created.status, trust.alias);
116
+ return 0;
117
+ }
118
+ const readRequest = async () => {
119
+ try {
120
+ return await client.getRegistryRequestDetail(authentication.credential, created.requestId);
121
+ } catch (error) {
122
+ if (!(error instanceof ControlPlaneError) || error.status !== 401) throw error;
123
+ if (authentication.kind === "gat") throw error;
124
+ if (authentication.kind === "login") this.root.accountManager.invalidateAccessCredentials(trust);
125
+ authentication = await selector.select(authentication.kind, trust, ["publishing.request.read.self"], false, oidcTarget);
126
+ return client.getRegistryRequestDetail(authentication.credential, created.requestId);
127
+ }
128
+ };
129
+ let detail = await readRequest();
130
+ let previousStatus = "";
131
+ const deadline = Date.now() + PUBLISH_WATCH_TIMEOUT_MS;
132
+ while (!isRegistryRequestTerminalStatus(detail.request.status)) {
133
+ if (Date.now() >= deadline) throw new Error(`Timed out waiting for publishing request ${detail.request.id}. Check it with \`uapkg requests status ${detail.request.id}\`.`);
134
+ if (this.options.outputFormat === "text" && detail.request.status !== previousStatus) {
135
+ process.stdout.write(`${detail.request.id}: ${detail.request.status}${detail.request.currentStep ? ` (${detail.request.currentStep})` : ""}\n`);
136
+ previousStatus = detail.request.status;
137
+ }
138
+ await delay(2e3);
139
+ detail = await readRequest();
140
+ }
141
+ if (!usesActionsIdempotency) idempotencyStore.clear(submissionDigest);
142
+ if (isRegistryRequestSuccessStatus(detail.request.status)) {
143
+ let refreshWarning;
144
+ try {
145
+ await this.root.registryTrustResolver.forceRefresh(trust);
146
+ } catch (error) {
147
+ refreshWarning = error instanceof Error ? error.message : String(error);
148
+ }
149
+ this.printTerminal(detail, trust.alias, refreshWarning);
150
+ return 0;
151
+ }
152
+ this.printTerminal(detail, trust.alias);
153
+ return 1;
154
+ } finally {
155
+ await artifact.cleanup();
156
+ }
157
+ } catch (error) {
158
+ process.stderr.write(`${describeControlPlaneError(error)}\n`);
159
+ return 1;
160
+ }
161
+ }
162
+ async resolveSource(packageVersion, manifestPublish) {
163
+ const repository = normalizeGitHubRepository(this.options.repository ?? manifestPublish?.repository ?? await this.gitOrigin());
164
+ const releaseTag = (this.options.tag ?? `v${packageVersion}`).trim();
165
+ const assetName = (this.options.asset ?? manifestPublish?.asset ?? "package.tgz").trim();
166
+ if (!releaseTag) throw new Error("The GitHub Release tag cannot be empty.");
167
+ if (!assetName || assetName.includes("/") || assetName.includes("\\")) throw new Error("The GitHub Release asset must be a file name, not a path.");
168
+ return {
169
+ type: "github_release",
170
+ repository,
171
+ releaseTag,
172
+ assetName
173
+ };
174
+ }
175
+ async gitOrigin() {
176
+ const git = this.root.config.get("git") ?? "git";
177
+ try {
178
+ const { stdout } = await execFileAsync(git, [
179
+ "remote",
180
+ "get-url",
181
+ "origin"
182
+ ], {
183
+ cwd: this.root.cwd,
184
+ timeout: 1e4
185
+ });
186
+ return stdout.trim();
187
+ } catch (error) {
188
+ throw new Error("Unable to derive the GitHub repository from remote \"origin\". Use --repository.", { cause: error });
189
+ }
190
+ }
191
+ printCreated(requestId, status, registryAlias) {
192
+ if (this.options.outputFormat === "json") {
193
+ process.stdout.write(`${JSON.stringify({
194
+ ok: true,
195
+ registry: registryAlias,
196
+ requestId,
197
+ status
198
+ })}\n`);
199
+ return;
200
+ }
201
+ process.stdout.write(`Publishing request ${requestId} submitted to "${registryAlias}" (${status}).\n`);
202
+ }
203
+ printTerminal(detail, registryAlias, refreshWarning) {
204
+ const output = formatRegistryRequestTerminal({
205
+ detail,
206
+ registryAlias,
207
+ outputFormat: this.options.outputFormat,
208
+ presentation: { kind: "publish" },
209
+ ...refreshWarning ? { registryRefreshWarning: refreshWarning } : {}
210
+ });
211
+ process.stdout.write(output.stdout);
212
+ if (output.stderr) process.stderr.write(output.stderr);
213
+ }
214
+ };
218
215
  /** Reads the installer-trusted registry type from the projected registry snapshot. */
219
216
  async function readTrustedRegistryType(cacheShortId) {
220
- const metaPath = join(getRegistryRepoPath(cacheShortId), '.uapkg', 'registry.meta.json');
221
- if (!existsSync(metaPath))
222
- return undefined;
223
- try {
224
- const raw = await readFile(metaPath, 'utf8');
225
- const parsed = JSON.parse(raw);
226
- const value = parsed.registry?.registryType;
227
- return value === 'public' || value === 'private' ? value : undefined;
228
- }
229
- catch {
230
- return undefined;
231
- }
217
+ const metaPath = join(getRegistryRepoPath(cacheShortId), ".uapkg", "registry.meta.json");
218
+ if (!existsSync(metaPath)) throw new Error("Trusted registry metadata is missing; registry policy cannot be determined.");
219
+ try {
220
+ const raw = await readFile(metaPath, "utf8");
221
+ const parsed = RegistryMetaSchema.safeParse(JSON.parse(raw));
222
+ if (!parsed.success) throw new Error("metadata does not match a supported registry schema");
223
+ return parsed.data.registry.registryType;
224
+ } catch (error) {
225
+ throw new Error("Trusted registry metadata is invalid or uses an unsupported schema version.", { cause: error });
226
+ }
232
227
  }
233
228
  function resolveAssetPath(cwd, assetPath) {
234
- return isAbsolute(assetPath) ? assetPath : join(cwd, assetPath);
229
+ return isAbsolute(assetPath) ? assetPath : join(cwd, assetPath);
235
230
  }
236
231
  function normalizeGitHubRepository(input) {
237
- let value = input.trim();
238
- const scp = value.match(/^git@github\.com:([^/]+)\/(.+)$/i);
239
- if (scp)
240
- value = `${scp[1]}/${scp[2]}`;
241
- if (value.includes('://')) {
242
- const url = new URL(value);
243
- if (url.hostname.toLowerCase() !== 'github.com') {
244
- throw new Error('Publishing sources must be hosted on github.com in UAPKG v1.');
245
- }
246
- value = url.pathname.replace(/^\/+/, '');
247
- }
248
- value = value.replace(/\.git$/i, '').replace(/\/+$/, '');
249
- if (!/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(value)) {
250
- throw new Error('Expected a GitHub repository in owner/repository form.');
251
- }
252
- return value.toLowerCase();
232
+ let value = input.trim();
233
+ const scp = value.match(/^git@github\.com:([^/]+)\/(.+)$/i);
234
+ if (scp) value = `${scp[1]}/${scp[2]}`;
235
+ if (value.includes("://")) {
236
+ const url = new URL(value);
237
+ if (url.hostname.toLowerCase() !== "github.com") throw new Error("Publishing sources must be hosted on github.com in UAPKG v1.");
238
+ value = url.pathname.replace(/^\/+/, "");
239
+ }
240
+ value = value.replace(/\.git$/i, "").replace(/\/+$/, "");
241
+ if (!/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(value)) throw new Error("Expected a GitHub repository in owner/repository form.");
242
+ return value.toLowerCase();
253
243
  }
254
244
  function scopedOwnerName(packageName) {
255
- const match = packageName.match(/^@([^/]+)\/[^/]+$/);
256
- return match?.[1]?.toLowerCase();
245
+ return packageName.match(/^@([^/]+)\/[^/]+$/)?.[1]?.toLowerCase();
257
246
  }
258
247
  function normalizeOwner(value) {
259
- if (value === undefined)
260
- return undefined;
261
- const owner = value.trim().toLowerCase();
262
- if (!/^[a-z0-9][a-z0-9-_]*$/.test(owner)) {
263
- throw new Error('The publish owner must be a valid UAPKG organization name.');
264
- }
265
- return owner;
248
+ if (value === void 0) return void 0;
249
+ const owner = value.trim().toLowerCase();
250
+ if (!/^[a-z0-9][a-z0-9-_]*$/.test(owner)) throw new Error("The publish owner must be a valid UAPKG organization name.");
251
+ return owner;
266
252
  }
267
253
  function delay(milliseconds) {
268
- return new Promise((resolve) => setTimeout(resolve, milliseconds));
254
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
269
255
  }
256
+
257
+ //#endregion
258
+ export { PublishCommand, readTrustedRegistryType };
270
259
  //# sourceMappingURL=PublishCommand.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PublishCommand.js","sourceRoot":"","sources":["../../src/commands/PublishCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAEL,iBAAiB,GAGlB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAGlE,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAwB;IACvD,OAAO;IACP,kBAAkB;IAClB,UAAU;IACV,sBAAsB;CACvB,CAAC,CAAC;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAwB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;AACvF,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAchD;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IAEN;IACA;IAFnB,YACmB,IAAqB,EACrB,OAA8B;QAD9B,SAAI,GAAJ,IAAI,CAAiB;QACrB,YAAO,GAAP,OAAO,CAAuB;IAC9C,CAAC;IAEG,KAAK,CAAC,OAAO;QAClB,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;YACtE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,4BAA4B,CAAC,CAAC;YAC1F,CAAC;YACD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC;YAEtC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC1E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YAE5E,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;gBACrC,CAAC,CAAC,MAAM,QAAQ,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC7F,CAAC,CAAC,MAAM,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAEhG,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,4BAA4B,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC9E,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CACb,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,2DAA2D,CACpG,CAAC;gBACJ,CAAC;gBACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;gBAClC,IACE,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,MAAM;oBACpC,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,EACtE,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAc,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,oDAAoD,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,MAAM,CACvI,CAAC;gBACJ,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACvE,IAAI,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBAChD,MAAM,IAAI,KAAK,CACb,IAAI,MAAM,CAAC,IAAI,yGAAyG,CACzH,CAAC;gBACJ,CAAC;gBAED,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACtF,IAAI,WAAW,IAAI,eAAe,IAAI,eAAe,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;oBAClG,MAAM,IAAI,KAAK,CACb,YAAY,MAAM,CAAC,IAAI,qBAAqB,WAAW,uCAAuC,eAAe,IAAI,CAClH,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,GAAG,WAAW,IAAI,eAAe,CAAC;gBAE7C,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAC;gBAC9F,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;oBACzC,CAAC,CAAE,CAAC,2BAA2B,CAAW;oBAC1C,CAAC,CAAE,CAAC,2BAA2B,EAAE,8BAA8B,CAAW,CAAC;gBAC7E,IAAI,cAAc,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;gBAC5F,IAAI,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC;gBACpC,cAAc,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC;gBAEtF,MAAM,UAAU,GAA8B;oBAC5C,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClD,OAAO,EAAE;wBACP,WAAW,EAAE,MAAM,CAAC,IAAI;wBACxB,cAAc,EAAE,MAAM,CAAC,OAAO;wBAC9B,MAAM;wBACN,iBAAiB,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;wBAC7E,MAAM;qBACP;iBACF,CAAC;gBAEF,MAAM,gBAAgB,GAAG,IAAI,uBAAuB,EAAE,CAAC;gBACvD,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACzF,MAAM,cAAc,GAAG,gBAAgB,CAAC,WAAW,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;gBAE1F,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACxD,IAAI,OAAyE,CAAC;gBAC9E,IAAI,CAAC;oBACH,OAAO,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE;wBAC7F,cAAc;wBACd,GAAG,EAAE,UAAU;qBAChB,CAAC,CAAC;gBACL,CAAC;wBAAS,CAAC;oBACT,mEAAmE;oBACnE,gEAAgE;oBAChE,UAAU,GAAG,SAAS,CAAC;gBACzB,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACxB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;oBAClE,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,IAAI,OAAO,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC5F,IAAI,cAAc,GAAG,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAwB,CAAC;gBACvD,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9C,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;wBAC3B,MAAM,IAAI,KAAK,CACb,4CAA4C,OAAO,CAAC,EAAE,2CAA2C,OAAO,CAAC,EAAE,KAAK,CACjH,CAAC;oBACJ,CAAC;oBACD,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;wBAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAC9F,CAAC;wBACF,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;oBAClC,CAAC;oBACD,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;oBACnB,IAAI,CAAC;wBACH,OAAO,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;oBAC1F,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,CAAC,KAAK,YAAY,iBAAiB,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;4BAAE,MAAM,KAAK,CAAC;wBAC/E,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK;4BAAE,MAAM,KAAK,CAAC;wBAC/C,IAAI,cAAc,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;4BACpC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;wBAC9D,CAAC;wBACD,cAAc,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,8BAA8B,CAAC,EAAE,KAAK,CAAC,CAAC;wBAC5G,OAAO,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;oBAC1F,CAAC;gBACH,CAAC;gBAED,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAEzC,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzC,IAAI,cAAkC,CAAC;oBACvC,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC5D,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,cAAc,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC1E,CAAC;oBACD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;oBACzD,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzC,OAAO,CAAC,CAAC;YACX,CAAC;oBAAS,CAAC;gBACT,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,cAAsB,EACtB,eAKa;QAEb,MAAM,UAAU,GAAG,yBAAyB,CAC1C,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CACnF,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,eAAe,EAAE,KAAK,IAAI,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;QACzF,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC5E,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO;YACL,IAAI,EAAE,gBAAyB;YAC/B,UAAU;YACV,UAAU;YACV,SAAS;SACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,MAAM,GAAG,GAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAmB,IAAI,KAAK,CAAC;QACpE,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;gBAC3E,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;gBAClB,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gFAAgF,EAAE;gBAChG,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,SAAiB,EAAE,MAA6B,EAAE,aAAqB;QAC1F,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACtG,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,SAAS,kBAAkB,aAAa,MAAM,MAAM,MAAM,CAAC,CAAC;IACzG,CAAC;IAEO,aAAa,CACnB,OAA4E,EAC5E,aAAqB,EACrB,cAAuB;QAEvB,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChB,EAAE,EAAE,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBACxC,QAAQ,EAAE,aAAa;gBACvB,OAAO;gBACP,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtE,CAAC,IAAI,CACP,CAAC;YACF,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;QAC/E,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0FAA0F,CAAC,CAAC;QACnH,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yEAAyE,cAAc,IAAI,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;CACF;AAED,sFAAsF;AACtF,KAAK,UAAU,uBAAuB,CAAC,YAAoB;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACzF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA8C,CAAC;QAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC;QAC5C,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,SAAiB;IACtD,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa;IAC9C,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5D,IAAI,GAAG;QAAE,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QACD,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,eAAe,CAAC,WAAmB;IAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACrD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK,CAAC,YAAoB;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACrE,CAAC"}
1
+ {"version":3,"file":"PublishCommand.js","names":[],"sources":["../../src/commands/PublishCommand.ts"],"sourcesContent":["import { execFile } from 'node:child_process';\nimport { randomUUID } from 'node:crypto';\nimport { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { isAbsolute, join } from 'node:path';\nimport { promisify } from 'node:util';\nimport { readPackageClaimsFromArchive } from '@uapkg/package-claims';\nimport { getRegistryRepoPath } from '@uapkg/registry-core';\nimport { RegistryMetaSchema, type RegistryType } from '@uapkg/registry-schema';\nimport type { CompositionRoot } from '../app/CompositionRoot.js';\nimport type { UAPKGOutputFormat } from '../cli/UAPKGCommandLine.js';\nimport { describeControlPlaneError } from '../control-plane/AccountManager.js';\nimport { ArtifactObserver } from '../control-plane/ArtifactObserver.js';\nimport { AuthenticationSelector } from '../control-plane/AuthenticationSelector.js';\nimport { ControlPlaneClient } from '../control-plane/ControlPlaneClient.js';\nimport {\n type ControlPlaneAuthMode,\n ControlPlaneError,\n type RegistryRequestDetail,\n type RegistryRequestStatus,\n type RegistryRequestSubmission,\n} from '../control-plane/ControlPlaneTypes.js';\nimport {\n createGitHubActionsPublishIdempotencyKey,\n PublishIdempotencyStore,\n} from '../control-plane/PublishIdempotencyStore.js';\nimport { publishRequestDiagnosticForError } from '../control-plane/PublishRequestErrorMapper.js';\nimport { InkPromptService } from '../prompts/InkPromptService.js';\nimport {\n formatRegistryRequestTerminal,\n isRegistryRequestSuccessStatus,\n isRegistryRequestTerminalStatus,\n} from '../reporting/RegistryRequestTerminalFormatter.js';\nimport type { Command } from './Command.js';\n\nconst execFileAsync = promisify(execFile);\nconst PUBLISH_WATCH_TIMEOUT_MS = 30 * 60 * 1000;\n\nexport interface PublishCommandOptions {\n readonly registry?: string;\n readonly owner?: string;\n readonly repository?: string;\n readonly tag?: string;\n readonly asset?: string;\n readonly assetPath?: string;\n readonly auth: ControlPlaneAuthMode;\n readonly detach: boolean;\n readonly outputFormat: UAPKGOutputFormat;\n}\n\n/**\n * Artifact-first publish (PS-REQ-002): the CLI observes the exact release\n * artifact (download or `--asset-path`), reads packaged claims from it, and\n * submits the route-derived publish operation. The packaged archive — never\n * the working tree — is what gets published.\n */\nexport class PublishCommand implements Command {\n public constructor(\n private readonly root: CompositionRoot,\n private readonly options: PublishCommandOptions,\n ) {}\n\n public async execute(): Promise<number> {\n try {\n const manifestResult = await this.root.packageManifest.readManifest();\n if (!manifestResult.ok) {\n throw new Error(manifestResult.diagnostics[0]?.message ?? 'Unable to read uapkg.json.');\n }\n const manifest = manifestResult.value;\n\n const registryAlias = this.options.registry ?? manifest.publish?.registry;\n const trust = await this.root.registryTrustResolver.resolve(registryAlias);\n const source = await this.resolveSource(manifest.version, manifest.publish);\n\n const observer = new ArtifactObserver();\n const artifact = this.options.assetPath\n ? await observer.observeLocalArchive(resolveAssetPath(this.root.cwd, this.options.assetPath))\n : await observer.downloadReleaseAsset(source.repository, source.releaseTag, source.assetName);\n\n try {\n const claimsResult = await readPackageClaimsFromArchive(artifact.archivePath);\n if (!claimsResult.ok) {\n throw new Error(\n claimsResult.diagnostics[0]?.message ?? 'Unable to read the packaged uapkg.json from the artifact.',\n );\n }\n const claims = claimsResult.value;\n if (\n this.options.outputFormat === 'text' &&\n (claims.name !== manifest.name || claims.version !== manifest.version)\n ) {\n process.stderr.write(\n `Publishing ${claims.name}@${claims.version} from the packaged artifact (local manifest says ${manifest.name}@${manifest.version}).\\n`,\n );\n }\n\n const registryType = await readTrustedRegistryType(trust.cacheShortId);\n if (registryType === 'public' && claims.private) {\n throw new Error(\n `\"${claims.name}\" is marked private in its packaged manifest; a public UAPKG registry does not accept private packages.`,\n );\n }\n\n const scopedOwner = scopedOwnerName(claims.name);\n const configuredOwner = normalizeOwner(this.options.owner ?? manifest.publish?.owner);\n if (scopedOwner && configuredOwner && configuredOwner.toLowerCase() !== scopedOwner.toLowerCase()) {\n throw new Error(\n `Package \"${claims.name}\" belongs to the \"${scopedOwner}\" namespace; --owner cannot select \"${configuredOwner}\".`,\n );\n }\n const owner = scopedOwner ?? configuredOwner;\n\n const selector = new AuthenticationSelector(this.root.accountManager, new InkPromptService());\n const oidcTarget = { registryId: trust.registryId, packageName: claims.name };\n const requestedScopes = this.options.detach\n ? (['publishing.request.create'] as const)\n : (['publishing.request.create', 'publishing.request.read.self'] as const);\n let authentication = await selector.select(this.options.auth, trust, requestedScopes, true, oidcTarget);\n let requestOtp = authentication.otp;\n authentication = { kind: authentication.kind, credential: authentication.credential };\n\n const submission: RegistryRequestSubmission = {\n registryId: trust.registryId,\n ...(owner ? { ownerOrganizationName: owner } : {}),\n payload: {\n packageName: claims.name,\n packageVersion: claims.version,\n source,\n observedIntegrity: { sha256: artifact.sha256, sizeBytes: artifact.sizeBytes },\n claims,\n },\n };\n\n const idempotencyStore = new PublishIdempotencyStore();\n const submissionDigest = PublishIdempotencyStore.submissionDigest('publish', submission);\n const usesActionsIdempotency = authentication.kind === 'oidc';\n const idempotencyKey = usesActionsIdempotency\n ? createGitHubActionsPublishIdempotencyKey({\n registryId: trust.registryId,\n packageName: claims.name,\n packageVersion: claims.version,\n artifactSha256: artifact.sha256,\n })\n : idempotencyStore.getOrCreate(submissionDigest, () => randomUUID());\n\n const client = new ControlPlaneClient(trust.apiBaseUrl);\n let created: Awaited<ReturnType<ControlPlaneClient['submitRegistryRequest']>>;\n try {\n created = await client.submitRegistryRequest(authentication.credential, 'publish', submission, {\n idempotencyKey,\n otp: requestOtp,\n });\n } catch (error) {\n if (this.options.outputFormat === 'json') throw error;\n this.root.diagnostics.reportOne(\n publishRequestDiagnosticForError(error, {\n packageName: claims.name,\n packageVersion: claims.version,\n registryAlias: trust.alias,\n registryName: trust.registryName,\n registryIssuer: trust.issuer,\n credentialKind: authentication.kind,\n ...(owner ? { requestedOwner: owner } : {}),\n repository: source.repository,\n }),\n );\n return 1;\n } finally {\n // The request-scoped proof must not remain reachable while the CLI\n // polls, refreshes credentials, or watches the durable request.\n requestOtp = undefined;\n }\n if (this.options.detach) {\n this.printCreated(created.requestId, created.status, trust.alias);\n return 0;\n }\n\n const readRequest = async () => {\n try {\n return await client.getRegistryRequestDetail(authentication.credential, created.requestId);\n } catch (error) {\n if (!(error instanceof ControlPlaneError) || error.status !== 401) throw error;\n if (authentication.kind === 'gat') throw error;\n if (authentication.kind === 'login') {\n this.root.accountManager.invalidateAccessCredentials(trust);\n }\n authentication = await selector.select(\n authentication.kind,\n trust,\n ['publishing.request.read.self'],\n false,\n oidcTarget,\n );\n return client.getRegistryRequestDetail(authentication.credential, created.requestId);\n }\n };\n\n let detail = await readRequest();\n let previousStatus = '';\n const deadline = Date.now() + PUBLISH_WATCH_TIMEOUT_MS;\n while (!isRegistryRequestTerminalStatus(detail.request.status)) {\n if (Date.now() >= deadline) {\n throw new Error(\n `Timed out waiting for publishing request ${detail.request.id}. Check it with \\`uapkg requests status ${detail.request.id}\\`.`,\n );\n }\n if (this.options.outputFormat === 'text' && detail.request.status !== previousStatus) {\n process.stdout.write(\n `${detail.request.id}: ${detail.request.status}${detail.request.currentStep ? ` (${detail.request.currentStep})` : ''}\\n`,\n );\n previousStatus = detail.request.status;\n }\n await delay(2_000);\n detail = await readRequest();\n }\n\n if (!usesActionsIdempotency) idempotencyStore.clear(submissionDigest);\n\n if (isRegistryRequestSuccessStatus(detail.request.status)) {\n let refreshWarning: string | undefined;\n try {\n await this.root.registryTrustResolver.forceRefresh(trust);\n } catch (error) {\n refreshWarning = error instanceof Error ? error.message : String(error);\n }\n this.printTerminal(detail, trust.alias, refreshWarning);\n return 0;\n }\n\n this.printTerminal(detail, trust.alias);\n return 1;\n } finally {\n await artifact.cleanup();\n }\n } catch (error) {\n process.stderr.write(`${describeControlPlaneError(error)}\\n`);\n return 1;\n }\n }\n\n private async resolveSource(\n packageVersion: string,\n manifestPublish:\n | {\n readonly repository?: string;\n readonly asset?: string;\n }\n | undefined,\n ) {\n const repository = normalizeGitHubRepository(\n this.options.repository ?? manifestPublish?.repository ?? (await this.gitOrigin()),\n );\n const releaseTag = (this.options.tag ?? `v${packageVersion}`).trim();\n const assetName = (this.options.asset ?? manifestPublish?.asset ?? 'package.tgz').trim();\n if (!releaseTag) throw new Error('The GitHub Release tag cannot be empty.');\n if (!assetName || assetName.includes('/') || assetName.includes('\\\\')) {\n throw new Error('The GitHub Release asset must be a file name, not a path.');\n }\n return {\n type: 'github_release' as const,\n repository,\n releaseTag,\n assetName,\n };\n }\n\n private async gitOrigin(): Promise<string> {\n const git = (this.root.config.get('git') as string | null) ?? 'git';\n try {\n const { stdout } = await execFileAsync(git, ['remote', 'get-url', 'origin'], {\n cwd: this.root.cwd,\n timeout: 10_000,\n });\n return stdout.trim();\n } catch (error) {\n throw new Error('Unable to derive the GitHub repository from remote \"origin\". Use --repository.', {\n cause: error,\n });\n }\n }\n\n private printCreated(requestId: string, status: RegistryRequestStatus, registryAlias: string): void {\n if (this.options.outputFormat === 'json') {\n process.stdout.write(`${JSON.stringify({ ok: true, registry: registryAlias, requestId, status })}\\n`);\n return;\n }\n process.stdout.write(`Publishing request ${requestId} submitted to \"${registryAlias}\" (${status}).\\n`);\n }\n\n private printTerminal(detail: RegistryRequestDetail, registryAlias: string, refreshWarning?: string): void {\n const output = formatRegistryRequestTerminal({\n detail,\n registryAlias,\n outputFormat: this.options.outputFormat,\n presentation: { kind: 'publish' },\n ...(refreshWarning ? { registryRefreshWarning: refreshWarning } : {}),\n });\n process.stdout.write(output.stdout);\n if (output.stderr) process.stderr.write(output.stderr);\n }\n}\n\n/** Reads the installer-trusted registry type from the projected registry snapshot. */\nexport async function readTrustedRegistryType(cacheShortId: string): Promise<RegistryType> {\n const metaPath = join(getRegistryRepoPath(cacheShortId), '.uapkg', 'registry.meta.json');\n if (!existsSync(metaPath)) {\n throw new Error('Trusted registry metadata is missing; registry policy cannot be determined.');\n }\n try {\n const raw = await readFile(metaPath, 'utf8');\n const parsed = RegistryMetaSchema.safeParse(JSON.parse(raw) as unknown);\n if (!parsed.success) {\n throw new Error('metadata does not match a supported registry schema');\n }\n return parsed.data.registry.registryType;\n } catch (error) {\n throw new Error('Trusted registry metadata is invalid or uses an unsupported schema version.', { cause: error });\n }\n}\n\nfunction resolveAssetPath(cwd: string, assetPath: string): string {\n return isAbsolute(assetPath) ? assetPath : join(cwd, assetPath);\n}\n\nfunction normalizeGitHubRepository(input: string): string {\n let value = input.trim();\n const scp = value.match(/^git@github\\.com:([^/]+)\\/(.+)$/i);\n if (scp) value = `${scp[1]}/${scp[2]}`;\n\n if (value.includes('://')) {\n const url = new URL(value);\n if (url.hostname.toLowerCase() !== 'github.com') {\n throw new Error('Publishing sources must be hosted on github.com in UAPKG v1.');\n }\n value = url.pathname.replace(/^\\/+/, '');\n }\n value = value.replace(/\\.git$/i, '').replace(/\\/+$/, '');\n if (!/^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+$/.test(value)) {\n throw new Error('Expected a GitHub repository in owner/repository form.');\n }\n return value.toLowerCase();\n}\n\nfunction scopedOwnerName(packageName: string): string | undefined {\n const match = packageName.match(/^@([^/]+)\\/[^/]+$/);\n return match?.[1]?.toLowerCase();\n}\n\nfunction normalizeOwner(value: string | undefined): string | undefined {\n if (value === undefined) return undefined;\n const owner = value.trim().toLowerCase();\n if (!/^[a-z0-9][a-z0-9-_]*$/.test(owner)) {\n throw new Error('The publish owner must be a valid UAPKG organization name.');\n }\n return owner;\n}\n\nfunction delay(milliseconds: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, milliseconds));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAmCA,MAAM,gBAAgB,UAAU,QAAQ;AACxC,MAAM,2BAA2B;;;;;;;AAoBjC,IAAa,iBAAb,MAA+C;CAE1B;CACA;CAFnB,AAAO,YACL,AAAiB,MACjB,AAAiB,SACjB;EAFiB;EACA;CAChB;CAEH,MAAa,UAA2B;EACtC,IAAI;GACF,MAAM,iBAAiB,MAAM,KAAK,KAAK,gBAAgB,aAAa;GACpE,IAAI,CAAC,eAAe,IAClB,MAAM,IAAI,MAAM,eAAe,YAAY,EAAE,EAAE,WAAW,4BAA4B;GAExF,MAAM,WAAW,eAAe;GAEhC,MAAM,gBAAgB,KAAK,QAAQ,YAAY,SAAS,SAAS;GACjE,MAAM,QAAQ,MAAM,KAAK,KAAK,sBAAsB,QAAQ,aAAa;GACzE,MAAM,SAAS,MAAM,KAAK,cAAc,SAAS,SAAS,SAAS,OAAO;GAE1E,MAAM,WAAW,IAAI,iBAAiB;GACtC,MAAM,WAAW,KAAK,QAAQ,YAC1B,MAAM,SAAS,oBAAoB,iBAAiB,KAAK,KAAK,KAAK,KAAK,QAAQ,SAAS,CAAC,IAC1F,MAAM,SAAS,qBAAqB,OAAO,YAAY,OAAO,YAAY,OAAO,SAAS;GAE9F,IAAI;IACF,MAAM,eAAe,MAAM,6BAA6B,SAAS,WAAW;IAC5E,IAAI,CAAC,aAAa,IAChB,MAAM,IAAI,MACR,aAAa,YAAY,EAAE,EAAE,WAAW,2DAC1C;IAEF,MAAM,SAAS,aAAa;IAC5B,IACE,KAAK,QAAQ,iBAAiB,WAC7B,OAAO,SAAS,SAAS,QAAQ,OAAO,YAAY,SAAS,UAE9D,QAAQ,OAAO,MACb,cAAc,OAAO,KAAK,GAAG,OAAO,QAAQ,mDAAmD,SAAS,KAAK,GAAG,SAAS,QAAQ,KACnI;IAIF,IAAI,MADuB,wBAAwB,MAAM,YAAY,MAChD,YAAY,OAAO,SACtC,MAAM,IAAI,MACR,IAAI,OAAO,KAAK,wGAClB;IAGF,MAAM,cAAc,gBAAgB,OAAO,IAAI;IAC/C,MAAM,kBAAkB,eAAe,KAAK,QAAQ,SAAS,SAAS,SAAS,KAAK;IACpF,IAAI,eAAe,mBAAmB,gBAAgB,YAAY,MAAM,YAAY,YAAY,GAC9F,MAAM,IAAI,MACR,YAAY,OAAO,KAAK,oBAAoB,YAAY,sCAAsC,gBAAgB,GAChH;IAEF,MAAM,QAAQ,eAAe;IAE7B,MAAM,WAAW,IAAI,uBAAuB,KAAK,KAAK,gBAAgB,IAAI,iBAAiB,CAAC;IAC5F,MAAM,aAAa;KAAE,YAAY,MAAM;KAAY,aAAa,OAAO;IAAK;IAC5E,MAAM,kBAAkB,KAAK,QAAQ,SAChC,CAAC,2BAA2B,IAC5B,CAAC,6BAA6B,8BAA8B;IACjE,IAAI,iBAAiB,MAAM,SAAS,OAAO,KAAK,QAAQ,MAAM,OAAO,iBAAiB,MAAM,UAAU;IACtG,IAAI,aAAa,eAAe;IAChC,iBAAiB;KAAE,MAAM,eAAe;KAAM,YAAY,eAAe;IAAW;IAEpF,MAAM,aAAwC;KAC5C,YAAY,MAAM;KAClB,GAAI,QAAQ,EAAE,uBAAuB,MAAM,IAAI,CAAC;KAChD,SAAS;MACP,aAAa,OAAO;MACpB,gBAAgB,OAAO;MACvB;MACA,mBAAmB;OAAE,QAAQ,SAAS;OAAQ,WAAW,SAAS;MAAU;MAC5E;KACF;IACF;IAEA,MAAM,mBAAmB,IAAI,wBAAwB;IACrD,MAAM,mBAAmB,wBAAwB,iBAAiB,WAAW,UAAU;IACvF,MAAM,yBAAyB,eAAe,SAAS;IACvD,MAAM,iBAAiB,yBACnB,yCAAyC;KACvC,YAAY,MAAM;KAClB,aAAa,OAAO;KACpB,gBAAgB,OAAO;KACvB,gBAAgB,SAAS;IAC3B,CAAC,IACD,iBAAiB,YAAY,wBAAwB,WAAW,CAAC;IAErE,MAAM,SAAS,IAAI,mBAAmB,MAAM,UAAU;IACtD,IAAI;IACJ,IAAI;KACF,UAAU,MAAM,OAAO,sBAAsB,eAAe,YAAY,WAAW,YAAY;MAC7F;MACA,KAAK;KACP,CAAC;IACH,SAAS,OAAO;KACd,IAAI,KAAK,QAAQ,iBAAiB,QAAQ,MAAM;KAChD,KAAK,KAAK,YAAY,UACpB,iCAAiC,OAAO;MACtC,aAAa,OAAO;MACpB,gBAAgB,OAAO;MACvB,eAAe,MAAM;MACrB,cAAc,MAAM;MACpB,gBAAgB,MAAM;MACtB,gBAAgB,eAAe;MAC/B,GAAI,QAAQ,EAAE,gBAAgB,MAAM,IAAI,CAAC;MACzC,YAAY,OAAO;KACrB,CAAC,CACH;KACA,OAAO;IACT,UAAU;KAGR,aAAa;IACf;IACA,IAAI,KAAK,QAAQ,QAAQ;KACvB,KAAK,aAAa,QAAQ,WAAW,QAAQ,QAAQ,MAAM,KAAK;KAChE,OAAO;IACT;IAEA,MAAM,cAAc,YAAY;KAC9B,IAAI;MACF,OAAO,MAAM,OAAO,yBAAyB,eAAe,YAAY,QAAQ,SAAS;KAC3F,SAAS,OAAO;MACd,IAAI,EAAE,iBAAiB,sBAAsB,MAAM,WAAW,KAAK,MAAM;MACzE,IAAI,eAAe,SAAS,OAAO,MAAM;MACzC,IAAI,eAAe,SAAS,SAC1B,KAAK,KAAK,eAAe,4BAA4B,KAAK;MAE5D,iBAAiB,MAAM,SAAS,OAC9B,eAAe,MACf,OACA,CAAC,8BAA8B,GAC/B,OACA,UACF;MACA,OAAO,OAAO,yBAAyB,eAAe,YAAY,QAAQ,SAAS;KACrF;IACF;IAEA,IAAI,SAAS,MAAM,YAAY;IAC/B,IAAI,iBAAiB;IACrB,MAAM,WAAW,KAAK,IAAI,IAAI;IAC9B,OAAO,CAAC,gCAAgC,OAAO,QAAQ,MAAM,GAAG;KAC9D,IAAI,KAAK,IAAI,KAAK,UAChB,MAAM,IAAI,MACR,4CAA4C,OAAO,QAAQ,GAAG,0CAA0C,OAAO,QAAQ,GAAG,IAC5H;KAEF,IAAI,KAAK,QAAQ,iBAAiB,UAAU,OAAO,QAAQ,WAAW,gBAAgB;MACpF,QAAQ,OAAO,MACb,GAAG,OAAO,QAAQ,GAAG,IAAI,OAAO,QAAQ,SAAS,OAAO,QAAQ,cAAc,KAAK,OAAO,QAAQ,YAAY,KAAK,GAAG,GACxH;MACA,iBAAiB,OAAO,QAAQ;KAClC;KACA,MAAM,MAAM,GAAK;KACjB,SAAS,MAAM,YAAY;IAC7B;IAEA,IAAI,CAAC,wBAAwB,iBAAiB,MAAM,gBAAgB;IAEpE,IAAI,+BAA+B,OAAO,QAAQ,MAAM,GAAG;KACzD,IAAI;KACJ,IAAI;MACF,MAAM,KAAK,KAAK,sBAAsB,aAAa,KAAK;KAC1D,SAAS,OAAO;MACd,iBAAiB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;KACxE;KACA,KAAK,cAAc,QAAQ,MAAM,OAAO,cAAc;KACtD,OAAO;IACT;IAEA,KAAK,cAAc,QAAQ,MAAM,KAAK;IACtC,OAAO;GACT,UAAU;IACR,MAAM,SAAS,QAAQ;GACzB;EACF,SAAS,OAAO;GACd,QAAQ,OAAO,MAAM,GAAG,0BAA0B,KAAK,EAAE,GAAG;GAC5D,OAAO;EACT;CACF;CAEA,MAAc,cACZ,gBACA,iBAMA;EACA,MAAM,aAAa,0BACjB,KAAK,QAAQ,cAAc,iBAAiB,cAAe,MAAM,KAAK,UAAU,CAClF;EACA,MAAM,cAAc,KAAK,QAAQ,OAAO,IAAI,iBAAgB,CAAE,KAAK;EACnE,MAAM,aAAa,KAAK,QAAQ,SAAS,iBAAiB,SAAS,cAAa,CAAE,KAAK;EACvF,IAAI,CAAC,YAAY,MAAM,IAAI,MAAM,yCAAyC;EAC1E,IAAI,CAAC,aAAa,UAAU,SAAS,GAAG,KAAK,UAAU,SAAS,IAAI,GAClE,MAAM,IAAI,MAAM,2DAA2D;EAE7E,OAAO;GACL,MAAM;GACN;GACA;GACA;EACF;CACF;CAEA,MAAc,YAA6B;EACzC,MAAM,MAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAuB;EAC9D,IAAI;GACF,MAAM,EAAE,WAAW,MAAM,cAAc,KAAK;IAAC;IAAU;IAAW;GAAQ,GAAG;IAC3E,KAAK,KAAK,KAAK;IACf,SAAS;GACX,CAAC;GACD,OAAO,OAAO,KAAK;EACrB,SAAS,OAAO;GACd,MAAM,IAAI,MAAM,oFAAkF,EAChG,OAAO,MACT,CAAC;EACH;CACF;CAEA,AAAQ,aAAa,WAAmB,QAA+B,eAA6B;EAClG,IAAI,KAAK,QAAQ,iBAAiB,QAAQ;GACxC,QAAQ,OAAO,MAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,UAAU;IAAe;IAAW;GAAO,CAAC,EAAE,GAAG;GACpG;EACF;EACA,QAAQ,OAAO,MAAM,sBAAsB,UAAU,iBAAiB,cAAc,KAAK,OAAO,KAAK;CACvG;CAEA,AAAQ,cAAc,QAA+B,eAAuB,gBAA+B;EACzG,MAAM,SAAS,8BAA8B;GAC3C;GACA;GACA,cAAc,KAAK,QAAQ;GAC3B,cAAc,EAAE,MAAM,UAAU;GAChC,GAAI,iBAAiB,EAAE,wBAAwB,eAAe,IAAI,CAAC;EACrE,CAAC;EACD,QAAQ,OAAO,MAAM,OAAO,MAAM;EAClC,IAAI,OAAO,QAAQ,QAAQ,OAAO,MAAM,OAAO,MAAM;CACvD;AACF;;AAGA,eAAsB,wBAAwB,cAA6C;CACzF,MAAM,WAAW,KAAK,oBAAoB,YAAY,GAAG,UAAU,oBAAoB;CACvF,IAAI,CAAC,WAAW,QAAQ,GACtB,MAAM,IAAI,MAAM,6EAA6E;CAE/F,IAAI;EACF,MAAM,MAAM,MAAM,SAAS,UAAU,MAAM;EAC3C,MAAM,SAAS,mBAAmB,UAAU,KAAK,MAAM,GAAG,CAAY;EACtE,IAAI,CAAC,OAAO,SACV,MAAM,IAAI,MAAM,qDAAqD;EAEvE,OAAO,OAAO,KAAK,SAAS;CAC9B,SAAS,OAAO;EACd,MAAM,IAAI,MAAM,+EAA+E,EAAE,OAAO,MAAM,CAAC;CACjH;AACF;AAEA,SAAS,iBAAiB,KAAa,WAA2B;CAChE,OAAO,WAAW,SAAS,IAAI,YAAY,KAAK,KAAK,SAAS;AAChE;AAEA,SAAS,0BAA0B,OAAuB;CACxD,IAAI,QAAQ,MAAM,KAAK;CACvB,MAAM,MAAM,MAAM,MAAM,kCAAkC;CAC1D,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,GAAG,IAAI;CAElC,IAAI,MAAM,SAAS,KAAK,GAAG;EACzB,MAAM,MAAM,IAAI,IAAI,KAAK;EACzB,IAAI,IAAI,SAAS,YAAY,MAAM,cACjC,MAAM,IAAI,MAAM,8DAA8D;EAEhF,QAAQ,IAAI,SAAS,QAAQ,QAAQ,EAAE;CACzC;CACA,QAAQ,MAAM,QAAQ,WAAW,EAAE,CAAC,CAAC,QAAQ,QAAQ,EAAE;CACvD,IAAI,CAAC,qCAAqC,KAAK,KAAK,GAClD,MAAM,IAAI,MAAM,wDAAwD;CAE1E,OAAO,MAAM,YAAY;AAC3B;AAEA,SAAS,gBAAgB,aAAyC;CAEhE,OADc,YAAY,MAAM,mBACrB,CAAC,GAAG,EAAE,EAAE,YAAY;AACjC;AAEA,SAAS,eAAe,OAA+C;CACrE,IAAI,UAAU,QAAW,OAAO;CAChC,MAAM,QAAQ,MAAM,KAAK,CAAC,CAAC,YAAY;CACvC,IAAI,CAAC,wBAAwB,KAAK,KAAK,GACrC,MAAM,IAAI,MAAM,4DAA4D;CAE9E,OAAO;AACT;AAEA,SAAS,MAAM,cAAqC;CAClD,OAAO,IAAI,SAAS,YAAY,WAAW,SAAS,YAAY,CAAC;AACnE"}