opkg 0.9.2 → 0.9.4
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.
- package/.claude/agents/code-reviewer.md +171 -0
- package/.claude/commands/commit-push-pr.md +20 -0
- package/.claude/commands/{specs/read.md → read-specs.md} +1 -1
- package/.claude/commands/{specs/update.md → update-specs.md} +4 -0
- package/.claude/skills/code-review-excellence/SKILL.md +538 -0
- package/README.md +2 -2
- package/package.json +3 -1
- package/packages/cli/dist/add-IJAPFHIX.js +624 -0
- package/packages/cli/dist/add-IJAPFHIX.js.map +7 -0
- package/packages/cli/dist/add-LLUNFLJI.js +624 -0
- package/packages/cli/dist/add-LLUNFLJI.js.map +7 -0
- package/packages/cli/dist/add-U44SL3OR.js +624 -0
- package/packages/cli/dist/add-U44SL3OR.js.map +7 -0
- package/packages/cli/dist/chunk-23VBP5L6.js +371 -0
- package/packages/cli/dist/chunk-23VBP5L6.js.map +7 -0
- package/packages/cli/dist/chunk-2SVHLF5C.js +1419 -0
- package/packages/cli/dist/chunk-2SVHLF5C.js.map +7 -0
- package/packages/cli/dist/chunk-37256POU.js +99 -0
- package/packages/cli/dist/chunk-37256POU.js.map +7 -0
- package/packages/cli/dist/chunk-3PZRVA6O.js +196 -0
- package/packages/cli/dist/chunk-3PZRVA6O.js.map +7 -0
- package/packages/cli/dist/chunk-427DCURL.js +155 -0
- package/packages/cli/dist/chunk-427DCURL.js.map +7 -0
- package/packages/cli/dist/chunk-4B5HJLP2.js +48 -0
- package/packages/cli/dist/chunk-4B5HJLP2.js.map +7 -0
- package/packages/cli/dist/chunk-4OWT3YEG.js +413 -0
- package/packages/cli/dist/chunk-4OWT3YEG.js.map +7 -0
- package/packages/cli/dist/chunk-4RIBTBXI.js +568 -0
- package/packages/cli/dist/chunk-4RIBTBXI.js.map +7 -0
- package/packages/cli/dist/chunk-4X2EJHJN.js +63 -0
- package/packages/cli/dist/chunk-4X2EJHJN.js.map +7 -0
- package/packages/cli/dist/chunk-6CYW66HD.js +1136 -0
- package/packages/cli/dist/chunk-6CYW66HD.js.map +7 -0
- package/packages/cli/dist/chunk-6DITYAFA.js +172 -0
- package/packages/cli/dist/chunk-6DITYAFA.js.map +7 -0
- package/packages/cli/dist/chunk-7KEAKEVZ.js +568 -0
- package/packages/cli/dist/chunk-7KEAKEVZ.js.map +7 -0
- package/packages/cli/dist/chunk-ABFUD25D.js +61 -0
- package/packages/cli/dist/chunk-ABFUD25D.js.map +7 -0
- package/packages/cli/dist/chunk-AR7GJCG6.js +274 -0
- package/packages/cli/dist/chunk-AR7GJCG6.js.map +7 -0
- package/packages/cli/dist/chunk-AYTGQCXH.js +86 -0
- package/packages/cli/dist/chunk-AYTGQCXH.js.map +7 -0
- package/packages/cli/dist/chunk-BROJ6OUT.js +631 -0
- package/packages/cli/dist/chunk-BROJ6OUT.js.map +7 -0
- package/packages/cli/dist/chunk-BVVSU7QD.js +23 -0
- package/packages/cli/dist/chunk-BVVSU7QD.js.map +7 -0
- package/packages/cli/dist/chunk-C6FY55UP.js +108 -0
- package/packages/cli/dist/chunk-C6FY55UP.js.map +7 -0
- package/packages/cli/dist/chunk-CVA64SXK.js +1136 -0
- package/packages/cli/dist/chunk-CVA64SXK.js.map +7 -0
- package/packages/cli/dist/chunk-D3O7LY2Q.js +1151 -0
- package/packages/cli/dist/chunk-D3O7LY2Q.js.map +7 -0
- package/packages/cli/dist/chunk-D6LEPODL.js +413 -0
- package/packages/cli/dist/chunk-D6LEPODL.js.map +7 -0
- package/packages/cli/dist/chunk-DEC24S7E.js +186 -0
- package/packages/cli/dist/chunk-DEC24S7E.js.map +7 -0
- package/packages/cli/dist/chunk-FMVVJH5M.js +371 -0
- package/packages/cli/dist/chunk-FMVVJH5M.js.map +7 -0
- package/packages/cli/dist/chunk-GDVFS3YP.js +130 -0
- package/packages/cli/dist/chunk-GDVFS3YP.js.map +7 -0
- package/packages/cli/dist/chunk-GEP2G5HF.js +31 -0
- package/packages/cli/dist/chunk-GEP2G5HF.js.map +7 -0
- package/packages/cli/dist/chunk-GSWHZBT2.js +62 -0
- package/packages/cli/dist/chunk-GSWHZBT2.js.map +7 -0
- package/packages/cli/dist/chunk-HTYHJA3B.js +61 -0
- package/packages/cli/dist/chunk-HTYHJA3B.js.map +7 -0
- package/packages/cli/dist/chunk-HYKYECAE.js +222 -0
- package/packages/cli/dist/chunk-HYKYECAE.js.map +7 -0
- package/packages/cli/dist/chunk-I7FEAHB4.js +100 -0
- package/packages/cli/dist/chunk-I7FEAHB4.js.map +7 -0
- package/packages/cli/dist/chunk-IHVZ5AUJ.js +107 -0
- package/packages/cli/dist/chunk-IHVZ5AUJ.js.map +7 -0
- package/packages/cli/dist/chunk-KI7FDU3H.js +99 -0
- package/packages/cli/dist/chunk-KI7FDU3H.js.map +7 -0
- package/packages/cli/dist/chunk-L5GRJQBS.js +32 -0
- package/packages/cli/dist/chunk-L5GRJQBS.js.map +7 -0
- package/packages/cli/dist/chunk-LHEAUDJL.js +302 -0
- package/packages/cli/dist/chunk-LHEAUDJL.js.map +7 -0
- package/packages/cli/dist/chunk-MIURCESJ.js +48 -0
- package/packages/cli/dist/chunk-MIURCESJ.js.map +7 -0
- package/packages/cli/dist/chunk-N43IXOND.js +732 -0
- package/packages/cli/dist/chunk-N43IXOND.js.map +7 -0
- package/packages/cli/dist/chunk-OUZRMGPV.js +274 -0
- package/packages/cli/dist/chunk-OUZRMGPV.js.map +7 -0
- package/packages/cli/dist/chunk-PSQXKAL4.js +371 -0
- package/packages/cli/dist/chunk-PSQXKAL4.js.map +7 -0
- package/packages/cli/dist/chunk-PUDRKDVZ.js +1419 -0
- package/packages/cli/dist/chunk-PUDRKDVZ.js.map +7 -0
- package/packages/cli/dist/chunk-RAKMX654.js +631 -0
- package/packages/cli/dist/chunk-RAKMX654.js.map +7 -0
- package/packages/cli/dist/chunk-RSFLK2TP.js +195 -0
- package/packages/cli/dist/chunk-RSFLK2TP.js.map +7 -0
- package/packages/cli/dist/chunk-S26PR2BS.js +99 -0
- package/packages/cli/dist/chunk-S26PR2BS.js.map +7 -0
- package/packages/cli/dist/chunk-U7FW7SXX.js +568 -0
- package/packages/cli/dist/chunk-U7FW7SXX.js.map +7 -0
- package/packages/cli/dist/chunk-VKM6K5TN.js +413 -0
- package/packages/cli/dist/chunk-VKM6K5TN.js.map +7 -0
- package/packages/cli/dist/chunk-VKNJG4JN.js +253 -0
- package/packages/cli/dist/chunk-VKNJG4JN.js.map +7 -0
- package/packages/cli/dist/chunk-VQ2KY6CK.js +113 -0
- package/packages/cli/dist/chunk-VQ2KY6CK.js.map +7 -0
- package/packages/cli/dist/chunk-VQDTXLOX.js +1312 -0
- package/packages/cli/dist/chunk-VQDTXLOX.js.map +7 -0
- package/packages/cli/dist/chunk-VXNS3X5O.js +60 -0
- package/packages/cli/dist/chunk-VXNS3X5O.js.map +7 -0
- package/packages/cli/dist/chunk-WF7H2YDU.js +376 -0
- package/packages/cli/dist/chunk-WF7H2YDU.js.map +7 -0
- package/packages/cli/dist/chunk-WNRXZLWW.js +266 -0
- package/packages/cli/dist/chunk-WNRXZLWW.js.map +7 -0
- package/packages/cli/dist/chunk-WT4VVCXM.js +1121 -0
- package/packages/cli/dist/chunk-WT4VVCXM.js.map +7 -0
- package/packages/cli/dist/configure-3AZUMDJZ.js +107 -0
- package/packages/cli/dist/configure-3AZUMDJZ.js.map +7 -0
- package/packages/cli/dist/configure-D722JQOD.js +107 -0
- package/packages/cli/dist/configure-D722JQOD.js.map +7 -0
- package/packages/cli/dist/configure-IU5H7XD6.js +107 -0
- package/packages/cli/dist/configure-IU5H7XD6.js.map +7 -0
- package/packages/cli/dist/file-format-detector-PXCIAKTK.js +22 -0
- package/packages/cli/dist/file-format-detector-PXCIAKTK.js.map +7 -0
- package/packages/cli/dist/index.js +17 -17
- package/packages/cli/dist/install-EZNWMLJR.js +7581 -0
- package/packages/cli/dist/install-EZNWMLJR.js.map +7 -0
- package/packages/cli/dist/install-F5ANFUBX.js +7577 -0
- package/packages/cli/dist/install-F5ANFUBX.js.map +7 -0
- package/packages/cli/dist/install-JSXEPPC2.js +7104 -0
- package/packages/cli/dist/install-JSXEPPC2.js.map +7 -0
- package/packages/cli/dist/install-QHEBX7JH.js +7101 -0
- package/packages/cli/dist/install-QHEBX7JH.js.map +7 -0
- package/packages/cli/dist/list-DMOUATYI.js +327 -0
- package/packages/cli/dist/list-DMOUATYI.js.map +7 -0
- package/packages/cli/dist/list-UESSCB7Y.js +327 -0
- package/packages/cli/dist/list-UESSCB7Y.js.map +7 -0
- package/packages/cli/dist/list-XR7RSJFS.js +327 -0
- package/packages/cli/dist/list-XR7RSJFS.js.map +7 -0
- package/packages/cli/dist/login-EYZ2SOYZ.js +150 -0
- package/packages/cli/dist/login-EYZ2SOYZ.js.map +7 -0
- package/packages/cli/dist/login-JWCSTAEU.js +150 -0
- package/packages/cli/dist/login-JWCSTAEU.js.map +7 -0
- package/packages/cli/dist/login-NRKHXZKM.js +150 -0
- package/packages/cli/dist/login-NRKHXZKM.js.map +7 -0
- package/packages/cli/dist/logout-HDMYRXIE.js +40 -0
- package/packages/cli/dist/logout-HDMYRXIE.js.map +7 -0
- package/packages/cli/dist/logout-SYHXCVCQ.js +40 -0
- package/packages/cli/dist/logout-SYHXCVCQ.js.map +7 -0
- package/packages/cli/dist/logout-X3XUUOH5.js +40 -0
- package/packages/cli/dist/logout-X3XUUOH5.js.map +7 -0
- package/packages/cli/dist/new-3LTFKDTQ.js +277 -0
- package/packages/cli/dist/new-3LTFKDTQ.js.map +7 -0
- package/packages/cli/dist/new-F46OSD72.js +277 -0
- package/packages/cli/dist/new-F46OSD72.js.map +7 -0
- package/packages/cli/dist/new-OPCCLNL2.js +277 -0
- package/packages/cli/dist/new-OPCCLNL2.js.map +7 -0
- package/packages/cli/dist/package-marker-detector-T5O5YD2E.js +80 -0
- package/packages/cli/dist/package-marker-detector-T5O5YD2E.js.map +7 -0
- package/packages/cli/dist/package-yml-QWZIJDYU.js +16 -0
- package/packages/cli/dist/package-yml-QWZIJDYU.js.map +7 -0
- package/packages/cli/dist/plugin-naming-YP2I4NPA.js +29 -0
- package/packages/cli/dist/plugin-naming-YP2I4NPA.js.map +7 -0
- package/packages/cli/dist/publish-4H43PCSG.js +619 -0
- package/packages/cli/dist/publish-4H43PCSG.js.map +7 -0
- package/packages/cli/dist/publish-RULKLNUX.js +619 -0
- package/packages/cli/dist/publish-RULKLNUX.js.map +7 -0
- package/packages/cli/dist/publish-URWY2P3E.js +619 -0
- package/packages/cli/dist/publish-URWY2P3E.js.map +7 -0
- package/packages/cli/dist/remove-BD52BHR2.js +542 -0
- package/packages/cli/dist/remove-BD52BHR2.js.map +7 -0
- package/packages/cli/dist/remove-G5NRC7LD.js +542 -0
- package/packages/cli/dist/remove-G5NRC7LD.js.map +7 -0
- package/packages/cli/dist/remove-TC3FQUYQ.js +542 -0
- package/packages/cli/dist/remove-TC3FQUYQ.js.map +7 -0
- package/packages/cli/dist/resource-discoverer-4X4RY43E.js +17 -0
- package/packages/cli/dist/resource-discoverer-4X4RY43E.js.map +7 -0
- package/packages/cli/dist/save-24TESYKI.js +1728 -0
- package/packages/cli/dist/save-24TESYKI.js.map +7 -0
- package/packages/cli/dist/save-N3QWF2WN.js +1728 -0
- package/packages/cli/dist/save-N3QWF2WN.js.map +7 -0
- package/packages/cli/dist/save-P2U67DTV.js +1728 -0
- package/packages/cli/dist/save-P2U67DTV.js.map +7 -0
- package/packages/cli/dist/search-ABROK3UO.js +157 -0
- package/packages/cli/dist/search-ABROK3UO.js.map +7 -0
- package/packages/cli/dist/search-WVFXFNAV.js +157 -0
- package/packages/cli/dist/search-WVFXFNAV.js.map +7 -0
- package/packages/cli/dist/search-YQN2Q2SO.js +157 -0
- package/packages/cli/dist/search-YQN2Q2SO.js.map +7 -0
- package/packages/cli/dist/set-DCWF73F6.js +251 -0
- package/packages/cli/dist/set-DCWF73F6.js.map +7 -0
- package/packages/cli/dist/set-GJEG2F6Y.js +251 -0
- package/packages/cli/dist/set-GJEG2F6Y.js.map +7 -0
- package/packages/cli/dist/set-NGM2FIKF.js +251 -0
- package/packages/cli/dist/set-NGM2FIKF.js.map +7 -0
- package/packages/cli/dist/uninstall-3CJQMTYH.js +539 -0
- package/packages/cli/dist/uninstall-3CJQMTYH.js.map +7 -0
- package/packages/cli/dist/uninstall-Q3CP4UN5.js +539 -0
- package/packages/cli/dist/uninstall-Q3CP4UN5.js.map +7 -0
- package/packages/cli/dist/uninstall-QU5OMEEC.js +539 -0
- package/packages/cli/dist/uninstall-QU5OMEEC.js.map +7 -0
- package/packages/cli/dist/unpublish-GHJQYC4S.js +245 -0
- package/packages/cli/dist/unpublish-GHJQYC4S.js.map +7 -0
- package/packages/cli/dist/unpublish-L2CYMK4B.js +245 -0
- package/packages/cli/dist/unpublish-L2CYMK4B.js.map +7 -0
- package/packages/cli/dist/unpublish-VBTNTMS5.js +245 -0
- package/packages/cli/dist/unpublish-VBTNTMS5.js.map +7 -0
- package/packages/cli/dist/view-MXRBMXOG.js +488 -0
- package/packages/cli/dist/view-MXRBMXOG.js.map +7 -0
- package/packages/cli/dist/view-NMND7SAW.js +488 -0
- package/packages/cli/dist/view-NMND7SAW.js.map +7 -0
- package/packages/cli/dist/view-RPQRDSYB.js +488 -0
- package/packages/cli/dist/view-RPQRDSYB.js.map +7 -0
- package/packages/cli/package.json +2 -0
- package/packages/core/dist/constants/index.d.ts +9 -0
- package/packages/core/dist/constants/index.d.ts.map +1 -1
- package/packages/core/dist/constants/index.js +12 -0
- package/packages/core/dist/constants/index.js.map +1 -1
- package/packages/core/dist/core/dependency-resolver/index.d.ts +2 -10
- package/packages/core/dist/core/dependency-resolver/index.d.ts.map +1 -1
- package/packages/core/dist/core/dependency-resolver/index.js +3 -14
- package/packages/core/dist/core/dependency-resolver/index.js.map +1 -1
- package/packages/core/dist/core/install/base-detector.d.ts +2 -1
- package/packages/core/dist/core/install/base-detector.d.ts.map +1 -1
- package/packages/core/dist/core/install/base-detector.js +54 -1
- package/packages/core/dist/core/install/base-detector.js.map +1 -1
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.d.ts +7 -5
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.d.ts.map +1 -1
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.js +25 -9
- package/packages/core/dist/core/install/conflicts/file-conflict-resolver.js.map +1 -1
- package/packages/core/dist/core/install/flow-index-installer.d.ts +2 -1
- package/packages/core/dist/core/install/flow-index-installer.d.ts.map +1 -1
- package/packages/core/dist/core/install/flow-index-installer.js +19 -4
- package/packages/core/dist/core/install/flow-index-installer.js.map +1 -1
- package/packages/core/dist/core/install/input-classifier-base.js +3 -3
- package/packages/core/dist/core/install/input-classifier-base.js.map +1 -1
- package/packages/core/dist/core/install/install-reporting.d.ts.map +1 -1
- package/packages/core/dist/core/install/install-reporting.js +7 -9
- package/packages/core/dist/core/install/install-reporting.js.map +1 -1
- package/packages/core/dist/core/install/list-handler.d.ts.map +1 -1
- package/packages/core/dist/core/install/list-handler.js +3 -0
- package/packages/core/dist/core/install/list-handler.js.map +1 -1
- package/packages/core/dist/core/install/marketplace-handler.d.ts.map +1 -1
- package/packages/core/dist/core/install/marketplace-handler.js.map +1 -1
- package/packages/core/dist/core/install/operations/conflict-handler.d.ts +2 -1
- package/packages/core/dist/core/install/operations/conflict-handler.d.ts.map +1 -1
- package/packages/core/dist/core/install/operations/conflict-handler.js +2 -2
- package/packages/core/dist/core/install/operations/conflict-handler.js.map +1 -1
- package/packages/core/dist/core/install/operations/installation-executor.d.ts +3 -0
- package/packages/core/dist/core/install/operations/installation-executor.d.ts.map +1 -1
- package/packages/core/dist/core/install/operations/installation-executor.js +39 -22
- package/packages/core/dist/core/install/operations/installation-executor.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/orchestrator.d.ts +7 -3
- package/packages/core/dist/core/install/orchestrator/orchestrator.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/orchestrator.js +193 -93
- package/packages/core/dist/core/install/orchestrator/orchestrator.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.d.ts +1 -0
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.js +11 -24
- package/packages/core/dist/core/install/orchestrator/strategies/git-strategy.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.d.ts +2 -0
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.js +14 -14
- package/packages/core/dist/core/install/orchestrator/strategies/path-strategy.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.d.ts +7 -0
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.js +28 -0
- package/packages/core/dist/core/install/orchestrator/strategies/registry-strategy.js.map +1 -1
- package/packages/core/dist/core/install/orchestrator/types.d.ts +2 -0
- package/packages/core/dist/core/install/orchestrator/types.d.ts.map +1 -1
- package/packages/core/dist/core/install/path-package-loader.d.ts.map +1 -1
- package/packages/core/dist/core/install/path-package-loader.js +20 -1
- package/packages/core/dist/core/install/path-package-loader.js.map +1 -1
- package/packages/core/dist/core/install/platform-resolution.d.ts +3 -0
- package/packages/core/dist/core/install/platform-resolution.d.ts.map +1 -1
- package/packages/core/dist/core/install/platform-resolution.js +5 -2
- package/packages/core/dist/core/install/platform-resolution.js.map +1 -1
- package/packages/core/dist/core/install/preprocessing/context-population.d.ts +18 -0
- package/packages/core/dist/core/install/preprocessing/context-population.d.ts.map +1 -0
- package/packages/core/dist/core/install/preprocessing/context-population.js +36 -0
- package/packages/core/dist/core/install/preprocessing/context-population.js.map +1 -0
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.d.ts +23 -0
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.d.ts.map +1 -1
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.js +44 -0
- package/packages/core/dist/core/install/preprocessing/convenience-preprocessor.js.map +1 -1
- package/packages/core/dist/core/install/sources/git-source.d.ts.map +1 -1
- package/packages/core/dist/core/install/sources/git-source.js +67 -4
- package/packages/core/dist/core/install/sources/git-source.js.map +1 -1
- package/packages/core/dist/core/install/sources/path-source.d.ts.map +1 -1
- package/packages/core/dist/core/install/sources/path-source.js +8 -0
- package/packages/core/dist/core/install/sources/path-source.js.map +1 -1
- package/packages/core/dist/core/install/strategies/flow-based-strategy.d.ts.map +1 -1
- package/packages/core/dist/core/install/strategies/flow-based-strategy.js +12 -5
- package/packages/core/dist/core/install/strategies/flow-based-strategy.js.map +1 -1
- package/packages/core/dist/core/install/strategies/types.d.ts +11 -1
- package/packages/core/dist/core/install/strategies/types.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/context-builders.d.ts +5 -0
- package/packages/core/dist/core/install/unified/context-builders.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/context-builders.js +12 -0
- package/packages/core/dist/core/install/unified/context-builders.js.map +1 -1
- package/packages/core/dist/core/install/unified/context-helpers.d.ts +0 -4
- package/packages/core/dist/core/install/unified/context-helpers.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/context-helpers.js +0 -24
- package/packages/core/dist/core/install/unified/context-helpers.js.map +1 -1
- package/packages/core/dist/core/install/unified/index.d.ts +1 -1
- package/packages/core/dist/core/install/unified/index.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/index.js +1 -1
- package/packages/core/dist/core/install/unified/index.js.map +1 -1
- package/packages/core/dist/core/install/unified/multi-context-pipeline.d.ts +6 -0
- package/packages/core/dist/core/install/unified/multi-context-pipeline.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/multi-context-pipeline.js +11 -4
- package/packages/core/dist/core/install/unified/multi-context-pipeline.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/conflicts.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/phases/conflicts.js +1 -1
- package/packages/core/dist/core/install/unified/phases/conflicts.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/execute.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/phases/execute.js +5 -5
- package/packages/core/dist/core/install/unified/phases/execute.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/load-package.js +3 -3
- package/packages/core/dist/core/install/unified/phases/load-package.js.map +1 -1
- package/packages/core/dist/core/install/unified/phases/report.js +1 -1
- package/packages/core/dist/core/install/unified/phases/report.js.map +1 -1
- package/packages/core/dist/core/install/unified/pipeline.d.ts.map +1 -1
- package/packages/core/dist/core/install/unified/pipeline.js +7 -10
- package/packages/core/dist/core/install/unified/pipeline.js.map +1 -1
- package/packages/core/dist/core/install/wave-resolver/content-root-cache.d.ts +24 -0
- package/packages/core/dist/core/install/wave-resolver/content-root-cache.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/content-root-cache.js +71 -0
- package/packages/core/dist/core/install/wave-resolver/content-root-cache.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/context-builder.d.ts +39 -0
- package/packages/core/dist/core/install/wave-resolver/context-builder.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/context-builder.js +148 -0
- package/packages/core/dist/core/install/wave-resolver/context-builder.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/fetcher.d.ts +49 -0
- package/packages/core/dist/core/install/wave-resolver/fetcher.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/fetcher.js +221 -0
- package/packages/core/dist/core/install/wave-resolver/fetcher.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index-updater.d.ts +23 -0
- package/packages/core/dist/core/install/wave-resolver/index-updater.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index-updater.js +87 -0
- package/packages/core/dist/core/install/wave-resolver/index-updater.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index-write-collector.d.ts +101 -0
- package/packages/core/dist/core/install/wave-resolver/index-write-collector.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index-write-collector.js +194 -0
- package/packages/core/dist/core/install/wave-resolver/index-write-collector.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index.d.ts +17 -0
- package/packages/core/dist/core/install/wave-resolver/index.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/index.js +16 -0
- package/packages/core/dist/core/install/wave-resolver/index.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/manifest-reader.d.ts +34 -0
- package/packages/core/dist/core/install/wave-resolver/manifest-reader.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/manifest-reader.js +112 -0
- package/packages/core/dist/core/install/wave-resolver/manifest-reader.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/types.d.ts +210 -0
- package/packages/core/dist/core/install/wave-resolver/types.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/types.js +6 -0
- package/packages/core/dist/core/install/wave-resolver/types.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/version-solver.d.ts +65 -0
- package/packages/core/dist/core/install/wave-resolver/version-solver.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/version-solver.js +166 -0
- package/packages/core/dist/core/install/wave-resolver/version-solver.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/wave-engine.d.ts +16 -0
- package/packages/core/dist/core/install/wave-resolver/wave-engine.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/wave-engine.js +337 -0
- package/packages/core/dist/core/install/wave-resolver/wave-engine.js.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/wave-installer.d.ts +50 -0
- package/packages/core/dist/core/install/wave-resolver/wave-installer.d.ts.map +1 -0
- package/packages/core/dist/core/install/wave-resolver/wave-installer.js +246 -0
- package/packages/core/dist/core/install/wave-resolver/wave-installer.js.map +1 -0
- package/packages/core/dist/core/ports/buffered-output.d.ts +36 -0
- package/packages/core/dist/core/ports/buffered-output.d.ts.map +1 -0
- package/packages/core/dist/core/ports/buffered-output.js +89 -0
- package/packages/core/dist/core/ports/buffered-output.js.map +1 -0
- package/packages/core/dist/core/ports/resolve.d.ts +0 -13
- package/packages/core/dist/core/ports/resolve.d.ts.map +1 -1
- package/packages/core/dist/core/ports/resolve.js +0 -28
- package/packages/core/dist/core/ports/resolve.js.map +1 -1
- package/packages/core/dist/core/remove/removal-confirmation.d.ts +4 -1
- package/packages/core/dist/core/remove/removal-confirmation.d.ts.map +1 -1
- package/packages/core/dist/core/remove/removal-confirmation.js +5 -4
- package/packages/core/dist/core/remove/removal-confirmation.js.map +1 -1
- package/packages/core/dist/core/remove/remove-from-source-pipeline.d.ts.map +1 -1
- package/packages/core/dist/core/remove/remove-from-source-pipeline.js +1 -10
- package/packages/core/dist/core/remove/remove-from-source-pipeline.js.map +1 -1
- package/packages/core/dist/core/uninstall/uninstall-executor.js +1 -1
- package/packages/core/dist/core/uninstall/uninstall-executor.js.map +1 -1
- package/packages/core/dist/core/uninstall/uninstall-reporter.d.ts +2 -2
- package/packages/core/dist/core/uninstall/uninstall-reporter.d.ts.map +1 -1
- package/packages/core/dist/core/uninstall/uninstall-reporter.js +4 -4
- package/packages/core/dist/core/uninstall/uninstall-reporter.js.map +1 -1
- package/packages/core/dist/index.d.ts +1 -1
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/types/execution-context.d.ts +40 -10
- package/packages/core/dist/types/execution-context.d.ts.map +1 -1
- package/packages/core/dist/utils/concurrency-pool.d.ts +34 -0
- package/packages/core/dist/utils/concurrency-pool.d.ts.map +1 -0
- package/packages/core/dist/utils/concurrency-pool.js +58 -0
- package/packages/core/dist/utils/concurrency-pool.js.map +1 -0
- package/packages/core/dist/utils/plugin-naming.d.ts +11 -3
- package/packages/core/dist/utils/plugin-naming.d.ts.map +1 -1
- package/packages/core/dist/utils/plugin-naming.js +27 -7
- package/packages/core/dist/utils/plugin-naming.js.map +1 -1
- package/plans/wave-resolver.md +254 -0
- package/.claude/agents/essentials/code-simplifier.md +0 -52
- package/.claude/commands/essentials/cleanup.md +0 -1
- package/.claude/commands/essentials/review.md +0 -8
- package/.claude/commands/git/commit.md +0 -5
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
detectEntityType,
|
|
4
|
+
dim,
|
|
5
|
+
extractMetadataFromManifest,
|
|
6
|
+
groupFilesIntoResources,
|
|
7
|
+
printMetadataSection,
|
|
8
|
+
sectionHeader
|
|
9
|
+
} from "./chunk-7KEAKEVZ.js";
|
|
10
|
+
import {
|
|
11
|
+
flattenResourceGroups,
|
|
12
|
+
renderFlatResourceList
|
|
13
|
+
} from "./chunk-ABFUD25D.js";
|
|
14
|
+
import {
|
|
15
|
+
classifyInput,
|
|
16
|
+
fetchRemotePackageMetadata,
|
|
17
|
+
loadPackageFromGit,
|
|
18
|
+
parseDownloadIdentifier
|
|
19
|
+
} from "./chunk-2SVHLF5C.js";
|
|
20
|
+
import "./chunk-ATYT3SA6.js";
|
|
21
|
+
import "./chunk-UR6VJWA3.js";
|
|
22
|
+
import "./chunk-S6OARUVQ.js";
|
|
23
|
+
import "./chunk-GJWX5XPU.js";
|
|
24
|
+
import "./chunk-4TCVCEPB.js";
|
|
25
|
+
import {
|
|
26
|
+
resolvePackageByName
|
|
27
|
+
} from "./chunk-E2DVTD75.js";
|
|
28
|
+
import "./chunk-A6ISKBNM.js";
|
|
29
|
+
import "./chunk-YXLKLL3V.js";
|
|
30
|
+
import "./chunk-E2HYZWNV.js";
|
|
31
|
+
import "./chunk-2PMMVTRN.js";
|
|
32
|
+
import "./chunk-6CYW66HD.js";
|
|
33
|
+
import "./chunk-TFQ4JBVO.js";
|
|
34
|
+
import "./chunk-SHKYQQJJ.js";
|
|
35
|
+
import {
|
|
36
|
+
readWorkspaceIndex
|
|
37
|
+
} from "./chunk-GP5FJYSS.js";
|
|
38
|
+
import {
|
|
39
|
+
getLocalOpenPackageDir,
|
|
40
|
+
getLocalPackageYmlPath
|
|
41
|
+
} from "./chunk-BCYZDID6.js";
|
|
42
|
+
import "./chunk-V5OW4YEB.js";
|
|
43
|
+
import "./chunk-6YZNE3MU.js";
|
|
44
|
+
import "./chunk-PXL2RUMX.js";
|
|
45
|
+
import {
|
|
46
|
+
generateGitHubPackageName
|
|
47
|
+
} from "./chunk-Q2N6OZJC.js";
|
|
48
|
+
import {
|
|
49
|
+
parseWorkspaceScope
|
|
50
|
+
} from "./chunk-5HSDD3SL.js";
|
|
51
|
+
import {
|
|
52
|
+
resolveDeclaredPath
|
|
53
|
+
} from "./chunk-FRYA3JAQ.js";
|
|
54
|
+
import {
|
|
55
|
+
formatPathForDisplay
|
|
56
|
+
} from "./chunk-MIURCESJ.js";
|
|
57
|
+
import {
|
|
58
|
+
createCliExecutionContext,
|
|
59
|
+
resolveOutput
|
|
60
|
+
} from "./chunk-RAKMX654.js";
|
|
61
|
+
import {
|
|
62
|
+
getPackageVersionPath
|
|
63
|
+
} from "./chunk-XEPVYZO3.js";
|
|
64
|
+
import {
|
|
65
|
+
parsePackageYml
|
|
66
|
+
} from "./chunk-QTQYI4L5.js";
|
|
67
|
+
import {
|
|
68
|
+
arePackageNamesEquivalent
|
|
69
|
+
} from "./chunk-VN22A7NW.js";
|
|
70
|
+
import "./chunk-UDAWJRKD.js";
|
|
71
|
+
import "./chunk-KGBDKY5V.js";
|
|
72
|
+
import "./chunk-GKEHDSL4.js";
|
|
73
|
+
import "./chunk-YMKK4XPN.js";
|
|
74
|
+
import {
|
|
75
|
+
FILE_PATTERNS
|
|
76
|
+
} from "./chunk-J4IFFBLP.js";
|
|
77
|
+
import {
|
|
78
|
+
exists
|
|
79
|
+
} from "./chunk-S47F4OG4.js";
|
|
80
|
+
import {
|
|
81
|
+
ValidationError
|
|
82
|
+
} from "./chunk-ID4SVDQZ.js";
|
|
83
|
+
import {
|
|
84
|
+
logger
|
|
85
|
+
} from "./chunk-5EFWGD33.js";
|
|
86
|
+
|
|
87
|
+
// src/commands/view.ts
|
|
88
|
+
import { basename } from "path";
|
|
89
|
+
|
|
90
|
+
// ../core/src/core/view/view-pipeline.ts
|
|
91
|
+
import { join as join2 } from "path";
|
|
92
|
+
|
|
93
|
+
// ../core/src/core/list/remote-list-resolver.ts
|
|
94
|
+
import { relative, join } from "path";
|
|
95
|
+
async function resolveRemoteList(classification, execContext, options = {}) {
|
|
96
|
+
switch (classification.type) {
|
|
97
|
+
case "registry":
|
|
98
|
+
return resolveRegistryList(classification, options);
|
|
99
|
+
case "git":
|
|
100
|
+
return resolveGitList(classification, execContext);
|
|
101
|
+
default:
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function resolveRegistryList(classification, options) {
|
|
106
|
+
let { packageName, version } = classification;
|
|
107
|
+
if (!packageName) return null;
|
|
108
|
+
let metadataResult = await fetchRemotePackageMetadata(packageName, version, {
|
|
109
|
+
recursive: !0,
|
|
110
|
+
profile: options.profile,
|
|
111
|
+
apiKey: options.apiKey
|
|
112
|
+
});
|
|
113
|
+
if (!metadataResult.success)
|
|
114
|
+
return null;
|
|
115
|
+
let response = metadataResult.response, resolvedVersion = response.version?.version || version || "latest", versionLabel = version ? `@${version}` : "", sourceLabel = `${packageName}${versionLabel}`, dependencies = [], downloads = response.downloads || [];
|
|
116
|
+
for (let download of downloads)
|
|
117
|
+
if (download.name)
|
|
118
|
+
try {
|
|
119
|
+
let parsed = parseDownloadIdentifier(download.name);
|
|
120
|
+
parsed.packageName !== packageName && dependencies.push({ name: parsed.packageName, version: parsed.version });
|
|
121
|
+
} catch {
|
|
122
|
+
logger.debug(`Failed to parse download identifier: ${download.name}`);
|
|
123
|
+
}
|
|
124
|
+
let totalFiles = downloads.length, fileList = [], resourceGroups, metadata;
|
|
125
|
+
try {
|
|
126
|
+
let packagePath = getPackageVersionPath(packageName, resolvedVersion);
|
|
127
|
+
if (await exists(packagePath)) {
|
|
128
|
+
let files = await collectFiles(packagePath, packagePath);
|
|
129
|
+
for (let file of files)
|
|
130
|
+
fileList.push({
|
|
131
|
+
source: file,
|
|
132
|
+
target: file,
|
|
133
|
+
exists: !0
|
|
134
|
+
});
|
|
135
|
+
fileList.length > 0 && (resourceGroups = groupFilesIntoResources(fileList));
|
|
136
|
+
let { join: join3 } = await import("path"), manifestPath = join3(packagePath, "openpackage.yml");
|
|
137
|
+
if (await exists(manifestPath))
|
|
138
|
+
try {
|
|
139
|
+
let manifest = await parsePackageYml(manifestPath);
|
|
140
|
+
metadata = extractMetadataFromManifest(manifest);
|
|
141
|
+
} catch (e) {
|
|
142
|
+
logger.debug(`Failed to parse cached manifest: ${e}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
} catch (error) {
|
|
146
|
+
logger.debug(`Failed to read cached package structure for ${packageName}@${resolvedVersion}: ${error}`);
|
|
147
|
+
}
|
|
148
|
+
if (!metadata || metadata.length === 0) {
|
|
149
|
+
let apiPkg = response.package, fallback = {
|
|
150
|
+
name: packageName,
|
|
151
|
+
version: resolvedVersion,
|
|
152
|
+
description: apiPkg?.description,
|
|
153
|
+
keywords: apiPkg?.keywords
|
|
154
|
+
};
|
|
155
|
+
apiPkg?.isPrivate && (fallback.private = !0), metadata = extractMetadataFromManifest(fallback);
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
sourceType: "registry",
|
|
159
|
+
sourceLabel,
|
|
160
|
+
package: {
|
|
161
|
+
name: packageName,
|
|
162
|
+
version: resolvedVersion,
|
|
163
|
+
path: sourceLabel,
|
|
164
|
+
state: "synced",
|
|
165
|
+
totalFiles,
|
|
166
|
+
existingFiles: totalFiles,
|
|
167
|
+
fileList: fileList.length > 0 ? fileList : void 0,
|
|
168
|
+
resourceGroups,
|
|
169
|
+
dependencies: dependencies.map((d) => d.name)
|
|
170
|
+
},
|
|
171
|
+
dependencies,
|
|
172
|
+
metadata
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
async function resolveGitList(classification, execContext) {
|
|
176
|
+
let { gitUrl, gitRef, resourcePath } = classification;
|
|
177
|
+
if (!gitUrl) return null;
|
|
178
|
+
let contentRoot = (await loadPackageFromGit({
|
|
179
|
+
url: gitUrl,
|
|
180
|
+
ref: gitRef,
|
|
181
|
+
path: resourcePath
|
|
182
|
+
})).sourcePath, refLabel = gitRef ? `#${gitRef}` : "", pathLabel = resourcePath ? `/${resourcePath}` : "", sourceLabel = `${gitUrl}${refLabel}${pathLabel}`, name = generateGitHubPackageName({ gitUrl, path: resourcePath }), version, dependencies = [], fileList = [], metadata, manifestPath = join(contentRoot, "openpackage.yml");
|
|
183
|
+
if (await exists(manifestPath))
|
|
184
|
+
try {
|
|
185
|
+
let manifest = await parsePackageYml(manifestPath);
|
|
186
|
+
name = manifest.name || name, version = manifest.version, metadata = extractMetadataFromManifest(manifest), dependencies = [
|
|
187
|
+
...manifest.dependencies || [],
|
|
188
|
+
...manifest["dev-dependencies"] || []
|
|
189
|
+
].map((dep) => ({
|
|
190
|
+
name: dep.name,
|
|
191
|
+
version: dep.version || ""
|
|
192
|
+
}));
|
|
193
|
+
} catch (error) {
|
|
194
|
+
logger.debug(`Failed to parse manifest at ${manifestPath}: ${error}`);
|
|
195
|
+
}
|
|
196
|
+
let files = await collectFiles(contentRoot, contentRoot);
|
|
197
|
+
for (let file of files)
|
|
198
|
+
fileList.push({
|
|
199
|
+
source: file,
|
|
200
|
+
target: file,
|
|
201
|
+
exists: !0
|
|
202
|
+
});
|
|
203
|
+
let resourceGroups = fileList.length > 0 ? groupFilesIntoResources(fileList) : void 0, finalMetadata = metadata ?? extractMetadataFromManifest({ name, version });
|
|
204
|
+
return {
|
|
205
|
+
sourceType: "git",
|
|
206
|
+
sourceLabel,
|
|
207
|
+
package: {
|
|
208
|
+
name,
|
|
209
|
+
version,
|
|
210
|
+
path: sourceLabel,
|
|
211
|
+
state: "synced",
|
|
212
|
+
totalFiles: fileList.length,
|
|
213
|
+
existingFiles: fileList.length,
|
|
214
|
+
fileList,
|
|
215
|
+
resourceGroups,
|
|
216
|
+
dependencies: dependencies.map((d) => d.name)
|
|
217
|
+
},
|
|
218
|
+
dependencies,
|
|
219
|
+
metadata: finalMetadata
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
var NON_RESOURCE_FILES = /* @__PURE__ */ new Set([
|
|
223
|
+
FILE_PATTERNS.OPENPACKAGE_YML,
|
|
224
|
+
FILE_PATTERNS.OPENPACKAGE_INDEX_YML
|
|
225
|
+
]);
|
|
226
|
+
async function collectFiles(dir, root) {
|
|
227
|
+
let { readdir } = await import("fs/promises"), results = [];
|
|
228
|
+
try {
|
|
229
|
+
let entries = await readdir(dir, { withFileTypes: !0 });
|
|
230
|
+
for (let entry of entries) {
|
|
231
|
+
if (entry.name.startsWith(".")) continue;
|
|
232
|
+
let fullPath = join(dir, entry.name);
|
|
233
|
+
if (entry.isFile()) {
|
|
234
|
+
if (NON_RESOURCE_FILES.has(entry.name)) continue;
|
|
235
|
+
results.push(relative(root, fullPath));
|
|
236
|
+
} else if (entry.isDirectory()) {
|
|
237
|
+
let nested = await collectFiles(fullPath, root);
|
|
238
|
+
results.push(...nested);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
} catch {
|
|
242
|
+
}
|
|
243
|
+
return results.sort();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// ../core/src/core/view/view-pipeline.ts
|
|
247
|
+
async function buildLocalPackageResult(packageName, packageDir, version) {
|
|
248
|
+
let name = packageName, resolvedVersion = version, dependencies, metadata = [], manifestPath = join2(packageDir, "openpackage.yml");
|
|
249
|
+
if (await exists(manifestPath))
|
|
250
|
+
try {
|
|
251
|
+
let manifest = await parsePackageYml(manifestPath);
|
|
252
|
+
name = manifest.name || packageName, resolvedVersion = manifest.version || resolvedVersion, metadata = extractMetadataFromManifest(manifest), dependencies = [
|
|
253
|
+
...manifest.dependencies || [],
|
|
254
|
+
...manifest["dev-dependencies"] || []
|
|
255
|
+
].map((dep) => dep.name);
|
|
256
|
+
} catch (error) {
|
|
257
|
+
logger.debug(`Failed to parse manifest at ${manifestPath}: ${error}`);
|
|
258
|
+
}
|
|
259
|
+
metadata.length === 0 && (metadata = extractMetadataFromManifest({ name, version: resolvedVersion }));
|
|
260
|
+
let fileList = (await collectFiles(packageDir, packageDir)).map((f) => ({
|
|
261
|
+
source: f,
|
|
262
|
+
target: join2(packageDir, f),
|
|
263
|
+
exists: !0
|
|
264
|
+
})), resourceGroups = fileList.length > 0 ? groupFilesIntoResources(fileList) : void 0, headerType = await detectEntityType(packageDir);
|
|
265
|
+
return {
|
|
266
|
+
report: {
|
|
267
|
+
name,
|
|
268
|
+
version: resolvedVersion,
|
|
269
|
+
path: packageDir,
|
|
270
|
+
state: "synced",
|
|
271
|
+
totalFiles: fileList.length,
|
|
272
|
+
existingFiles: fileList.length,
|
|
273
|
+
fileList,
|
|
274
|
+
resourceGroups,
|
|
275
|
+
dependencies
|
|
276
|
+
},
|
|
277
|
+
headerInfo: {
|
|
278
|
+
name,
|
|
279
|
+
version: resolvedVersion !== "0.0.0" ? resolvedVersion : void 0,
|
|
280
|
+
path: formatPathForDisplay(packageDir),
|
|
281
|
+
type: headerType
|
|
282
|
+
},
|
|
283
|
+
metadata
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
async function resolveFromWorkspaceIndex(packageName, targetDir) {
|
|
287
|
+
let { index } = await readWorkspaceIndex(targetDir), packages = index.packages || {}, entryKey;
|
|
288
|
+
if (packages[packageName])
|
|
289
|
+
entryKey = packageName;
|
|
290
|
+
else
|
|
291
|
+
for (let key of Object.keys(packages))
|
|
292
|
+
if (arePackageNamesEquivalent(key, packageName)) {
|
|
293
|
+
entryKey = key;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
if (!entryKey) return null;
|
|
297
|
+
let entry = packages[entryKey], packageDir = resolveDeclaredPath(entry.path, targetDir).absolute;
|
|
298
|
+
return await exists(packageDir) ? buildLocalPackageResult(packageName, packageDir, entry.version) : (logger.debug(`Workspace index points to '${packageDir}' but it does not exist`), null);
|
|
299
|
+
}
|
|
300
|
+
async function resolveLocalPackage(packageName, cwd, options) {
|
|
301
|
+
let resolution = await resolvePackageByName({
|
|
302
|
+
cwd,
|
|
303
|
+
packageName,
|
|
304
|
+
checkCwd: !1,
|
|
305
|
+
searchWorkspace: options.showProject,
|
|
306
|
+
searchGlobal: options.showGlobal,
|
|
307
|
+
searchRegistry: options.searchRegistry
|
|
308
|
+
});
|
|
309
|
+
return !resolution.found || !resolution.path ? null : buildLocalPackageResult(packageName, resolution.path, resolution.version);
|
|
310
|
+
}
|
|
311
|
+
async function resolveWorkspaceRootPackage(packageName, cwd) {
|
|
312
|
+
let manifestPath = getLocalPackageYmlPath(cwd);
|
|
313
|
+
if (!await exists(manifestPath))
|
|
314
|
+
return null;
|
|
315
|
+
let manifest;
|
|
316
|
+
try {
|
|
317
|
+
manifest = await parsePackageYml(manifestPath);
|
|
318
|
+
} catch {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
let workspaceName = manifest.name;
|
|
322
|
+
if (!workspaceName || !arePackageNamesEquivalent(workspaceName, packageName))
|
|
323
|
+
return null;
|
|
324
|
+
let openpackageDir = getLocalOpenPackageDir(cwd);
|
|
325
|
+
return buildLocalPackageResult(workspaceName, openpackageDir, manifest.version);
|
|
326
|
+
}
|
|
327
|
+
async function resolveRemoteForPackage(packageName, execContext, options) {
|
|
328
|
+
try {
|
|
329
|
+
let classification = await classifyInput(packageName, {}, execContext);
|
|
330
|
+
return classification.type === "bulk" || classification.type === "path" ? null : await resolveRemoteList(classification, execContext, {
|
|
331
|
+
profile: options.profile,
|
|
332
|
+
apiKey: options.apiKey
|
|
333
|
+
});
|
|
334
|
+
} catch (error) {
|
|
335
|
+
return logger.debug(`Remote resolution failed for '${packageName}': ${error}`), null;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
async function resolvePackageView(packageName, options, createContext) {
|
|
339
|
+
let showBothScopes = options.scope === void 0, showGlobal = options.scope === "global" || showBothScopes, showProject = options.scope === "project" || showBothScopes;
|
|
340
|
+
if (options.remote) {
|
|
341
|
+
let execContext = await createContext({
|
|
342
|
+
global: options.scope === "global",
|
|
343
|
+
cwd: options.cwd
|
|
344
|
+
}), remoteResult2 = await resolveRemoteForPackage(packageName, execContext, options);
|
|
345
|
+
return remoteResult2 ? { kind: "remote", remoteResult: remoteResult2 } : { kind: "not-found" };
|
|
346
|
+
}
|
|
347
|
+
if (showProject) {
|
|
348
|
+
let cwd = options.cwd || process.cwd(), projectContext = await createContext({ global: !1, cwd: options.cwd }), projectResult = await resolveFromWorkspaceIndex(packageName, projectContext.targetDir);
|
|
349
|
+
if (projectResult)
|
|
350
|
+
return { kind: "local-package", localResult: projectResult };
|
|
351
|
+
}
|
|
352
|
+
if (showGlobal) {
|
|
353
|
+
let globalContext = await createContext({ global: !0, cwd: options.cwd }), globalResult = await resolveFromWorkspaceIndex(packageName, globalContext.targetDir);
|
|
354
|
+
if (globalResult)
|
|
355
|
+
return { kind: "local-package", localResult: globalResult };
|
|
356
|
+
}
|
|
357
|
+
if (showProject) {
|
|
358
|
+
let cwd = options.cwd || process.cwd(), workspaceRootResult = await resolveWorkspaceRootPackage(packageName, cwd);
|
|
359
|
+
if (workspaceRootResult)
|
|
360
|
+
return { kind: "local-package", localResult: workspaceRootResult };
|
|
361
|
+
}
|
|
362
|
+
let searchRegistry = showBothScopes, localResult = await resolveLocalPackage(
|
|
363
|
+
packageName,
|
|
364
|
+
options.cwd || process.cwd(),
|
|
365
|
+
{ showProject, showGlobal, searchRegistry }
|
|
366
|
+
);
|
|
367
|
+
if (localResult)
|
|
368
|
+
return { kind: "local-package", localResult };
|
|
369
|
+
let fallbackContext = await createContext({
|
|
370
|
+
global: options.scope === "global",
|
|
371
|
+
cwd: options.cwd
|
|
372
|
+
}), remoteResult = await resolveRemoteForPackage(packageName, fallbackContext, options);
|
|
373
|
+
return remoteResult ? { kind: "remote", remoteResult } : { kind: "not-found" };
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// ../core/src/core/view/view-printers.ts
|
|
377
|
+
function createViewFileConfig(pathBase) {
|
|
378
|
+
return {
|
|
379
|
+
formatPath: (file) => pathBase ? formatPathForDisplay(file.target, pathBase) : file.target,
|
|
380
|
+
isMissing: (file) => !file.exists,
|
|
381
|
+
sortFiles: (a, b) => {
|
|
382
|
+
let pathA = pathBase ? formatPathForDisplay(a.target, pathBase) : a.target, pathB = pathBase ? formatPathForDisplay(b.target, pathBase) : b.target;
|
|
383
|
+
return pathA.localeCompare(pathB);
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
function printHeader(headerInfo, sourceLabel, out) {
|
|
388
|
+
let o = out ?? resolveOutput(), version = headerInfo.version ? `@${headerInfo.version}` : "", typeTag = dim(`[${headerInfo.type}]`), pathOrSource = sourceLabel ? dim(`(${sourceLabel})`) + " " + dim("[remote]") : dim(`(${headerInfo.path})`) + " " + typeTag;
|
|
389
|
+
o.info(`${headerInfo.name}${version} ${pathOrSource}`);
|
|
390
|
+
}
|
|
391
|
+
function printResourcesSection(report, showFiles, pathBase, out) {
|
|
392
|
+
let o = out ?? resolveOutput();
|
|
393
|
+
if (report.resourceGroups && report.resourceGroups.length > 0) {
|
|
394
|
+
let flatResources = flattenResourceGroups(report.resourceGroups);
|
|
395
|
+
o.info(sectionHeader("Resources", flatResources.length));
|
|
396
|
+
let config = createViewFileConfig(pathBase);
|
|
397
|
+
renderFlatResourceList(flatResources, "", showFiles, config, !1, o);
|
|
398
|
+
} else if (report.fileList && report.fileList.length > 0) {
|
|
399
|
+
o.info(sectionHeader("Resources", report.fileList.length));
|
|
400
|
+
let sortedFiles = [...report.fileList].sort((a, b) => a.target.localeCompare(b.target));
|
|
401
|
+
for (let i = 0; i < sortedFiles.length; i++) {
|
|
402
|
+
let file = sortedFiles[i], connector = i === sortedFiles.length - 1 ? "\u2514\u2500\u2500 " : "\u251C\u2500\u2500 ", label = file.exists ? dim(file.target) : `${dim(file.target)} \x1B[31m[MISSING]\x1B[0m`;
|
|
403
|
+
o.info(`${connector}${label}`);
|
|
404
|
+
}
|
|
405
|
+
} else
|
|
406
|
+
o.info(sectionHeader("Resources", 0)), o.info(dim("\u2514\u2500\u2500 (no resources)"));
|
|
407
|
+
}
|
|
408
|
+
function printDependenciesSection(dependencies, out) {
|
|
409
|
+
let o = out ?? resolveOutput();
|
|
410
|
+
dependencies.length !== 0 && (o.info(sectionHeader("Dependencies", dependencies.length)), dependencies.forEach((dep, index) => {
|
|
411
|
+
let connector = index === dependencies.length - 1 ? "\u2514\u2500\u2500 " : "\u251C\u2500\u2500 ";
|
|
412
|
+
if (typeof dep == "string")
|
|
413
|
+
o.info(`${connector}${dep}`);
|
|
414
|
+
else {
|
|
415
|
+
let versionSuffix = dep.version ? `@${dep.version}` : "";
|
|
416
|
+
o.info(`${connector}${dep.name}${versionSuffix}`);
|
|
417
|
+
}
|
|
418
|
+
}));
|
|
419
|
+
}
|
|
420
|
+
function printLocalPackageView(result, showFiles, output) {
|
|
421
|
+
let out = output ?? resolveOutput(), { report, headerInfo, metadata } = result;
|
|
422
|
+
printHeader(headerInfo, void 0, out), printMetadataSection(metadata, out), printResourcesSection(report, showFiles, report.path, out), report.dependencies !== void 0 && report.dependencies.length > 0 && printDependenciesSection(report.dependencies, out);
|
|
423
|
+
}
|
|
424
|
+
function printRemotePackageView(result, showFiles, output) {
|
|
425
|
+
let out = output ?? resolveOutput(), pkg = result.package, headerInfo = {
|
|
426
|
+
name: pkg.name,
|
|
427
|
+
version: pkg.version && pkg.version !== "0.0.0" ? pkg.version : void 0,
|
|
428
|
+
path: result.sourceLabel,
|
|
429
|
+
type: "package"
|
|
430
|
+
};
|
|
431
|
+
printHeader(headerInfo, result.sourceLabel, out);
|
|
432
|
+
let metadata = result.metadata ?? [];
|
|
433
|
+
printMetadataSection(metadata, out), printResourcesSection(pkg, showFiles, void 0, out), printDependenciesSection(result.dependencies, out);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// src/commands/view.ts
|
|
437
|
+
async function viewCommand(packageName, options, command) {
|
|
438
|
+
let programOpts = command.parent?.opts() || {};
|
|
439
|
+
if (options.scope && options.remote)
|
|
440
|
+
throw new ValidationError("Cannot use --scope with --remote; choose one.");
|
|
441
|
+
let viewScope;
|
|
442
|
+
if (options.scope)
|
|
443
|
+
try {
|
|
444
|
+
viewScope = parseWorkspaceScope(options.scope);
|
|
445
|
+
} catch (error) {
|
|
446
|
+
throw error instanceof ValidationError ? error : new ValidationError(error instanceof Error ? error.message : String(error));
|
|
447
|
+
}
|
|
448
|
+
let pipelineOptions = {
|
|
449
|
+
scope: viewScope,
|
|
450
|
+
files: options.files,
|
|
451
|
+
remote: options.remote,
|
|
452
|
+
profile: options.profile,
|
|
453
|
+
apiKey: options.apiKey,
|
|
454
|
+
cwd: programOpts.cwd
|
|
455
|
+
}, result = await resolvePackageView(
|
|
456
|
+
packageName,
|
|
457
|
+
pipelineOptions,
|
|
458
|
+
(opts) => createCliExecutionContext({ global: opts.global, cwd: opts.cwd })
|
|
459
|
+
);
|
|
460
|
+
switch (result.kind) {
|
|
461
|
+
case "local-package":
|
|
462
|
+
return printLocalPackageView(result.localResult, !!options.files), { success: !0 };
|
|
463
|
+
case "remote":
|
|
464
|
+
return printRemotePackageView(result.remoteResult, !!options.files), { success: !0 };
|
|
465
|
+
case "not-found":
|
|
466
|
+
throw options.remote ? new ValidationError(`Package '${packageName}' not found remotely`) : new ValidationError(`Package '${packageName}' not found locally or remotely`);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
async function setupViewCommand(args) {
|
|
470
|
+
let [packageName, options, command] = args, resolvedName = packageName;
|
|
471
|
+
if (!resolvedName) {
|
|
472
|
+
let cwd = command.parent?.opts()?.cwd || process.cwd(), manifestPath = getLocalPackageYmlPath(cwd);
|
|
473
|
+
if (await exists(manifestPath))
|
|
474
|
+
try {
|
|
475
|
+
resolvedName = (await parsePackageYml(manifestPath)).name || basename(cwd);
|
|
476
|
+
} catch {
|
|
477
|
+
}
|
|
478
|
+
if (!resolvedName)
|
|
479
|
+
throw new ValidationError(
|
|
480
|
+
"Package name is required. Run this from a workspace with .openpackage/openpackage.yml or provide a package name."
|
|
481
|
+
);
|
|
482
|
+
}
|
|
483
|
+
await viewCommand(resolvedName, options, command);
|
|
484
|
+
}
|
|
485
|
+
export {
|
|
486
|
+
setupViewCommand
|
|
487
|
+
};
|
|
488
|
+
//# sourceMappingURL=view-NMND7SAW.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/commands/view.ts", "../../core/src/core/view/view-pipeline.ts", "../../core/src/core/list/remote-list-resolver.ts", "../../core/src/core/view/view-printers.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * View Command (CLI layer)\n *\n * Thin shell over core/view/ pipeline.\n * Handles CLI arg parsing and delegates rendering to view-printers.\n */\n\nimport { basename } from 'path';\nimport type { Command } from 'commander';\n\nimport { CommandResult } from '@opkg/core/types/index.js';\nimport { ValidationError } from '@opkg/core/utils/errors.js';\nimport { parseWorkspaceScope } from '@opkg/core/core/scope-resolution.js';\nimport { getLocalPackageYmlPath } from '@opkg/core/utils/paths.js';\nimport { exists } from '@opkg/core/utils/fs.js';\nimport { parsePackageYml } from '@opkg/core/utils/package-yml.js';\nimport { createCliExecutionContext } from '../cli/context.js';\nimport {\n resolvePackageView,\n type ViewPipelineOptions,\n} from '@opkg/core/core/view/view-pipeline.js';\nimport {\n printLocalPackageView,\n printRemotePackageView,\n} from '@opkg/core/core/view/view-printers.js';\n\n// ---------------------------------------------------------------------------\n// Main command\n// ---------------------------------------------------------------------------\n\nasync function viewCommand(\n packageName: string,\n options: { scope?: string; files?: boolean; remote?: boolean; profile?: string; apiKey?: string },\n command: Command\n): Promise<CommandResult> {\n const programOpts = command.parent?.opts() || {};\n\n if (options.scope && options.remote) {\n throw new ValidationError('Cannot use --scope with --remote; choose one.');\n }\n\n let viewScope: 'project' | 'global' | undefined;\n if (options.scope) {\n try {\n viewScope = parseWorkspaceScope(options.scope);\n } catch (error) {\n throw error instanceof ValidationError ? error : new ValidationError(error instanceof Error ? error.message : String(error));\n }\n }\n\n const pipelineOptions: ViewPipelineOptions = {\n scope: viewScope,\n files: options.files,\n remote: options.remote,\n profile: options.profile,\n apiKey: options.apiKey,\n cwd: programOpts.cwd,\n };\n\n const result = await resolvePackageView(\n packageName,\n pipelineOptions,\n (opts) => createCliExecutionContext({ global: opts.global, cwd: opts.cwd })\n );\n\n switch (result.kind) {\n case 'local-package':\n printLocalPackageView(result.localResult, !!options.files);\n return { success: true };\n\n case 'remote':\n printRemotePackageView(result.remoteResult, !!options.files);\n return { success: true };\n\n case 'not-found':\n if (options.remote) {\n throw new ValidationError(`Package '${packageName}' not found remotely`);\n }\n throw new ValidationError(`Package '${packageName}' not found locally or remotely`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Command setup\n// ---------------------------------------------------------------------------\n\nexport async function setupViewCommand(args: any[]): Promise<void> {\n const [packageName, options, command] = args as [string | undefined, any, Command];\n\n let resolvedName = packageName;\n\n // If no package name provided, try to detect from workspace manifest\n if (!resolvedName) {\n const cwd = command.parent?.opts()?.cwd || process.cwd();\n const manifestPath = getLocalPackageYmlPath(cwd);\n\n if (await exists(manifestPath)) {\n try {\n const config = await parsePackageYml(manifestPath);\n resolvedName = config.name || basename(cwd);\n } catch {\n // Manifest exists but is unreadable/invalid \u2014 fall through to error\n }\n }\n\n if (!resolvedName) {\n throw new ValidationError(\n 'Package name is required. Run this from a workspace with .openpackage/openpackage.yml or provide a package name.'\n );\n }\n }\n\n await viewCommand(resolvedName, options, command);\n}\n", "/**\n * View Pipeline\n *\n * Core logic for resolving and viewing package details.\n * Resolves package contents (metadata, resources, dependencies) \u2014 not workspace\n * install state. Display is handled by the CLI command layer.\n */\n\nimport { join } from 'path';\nimport { resolvePackageByName, type PackageSourceType } from '../package-name-resolution.js';\nimport { parsePackageYml } from '../../utils/package-yml.js';\nimport { exists } from '../../utils/fs.js';\nimport { detectEntityType } from '../../utils/entity-detector.js';\nimport { formatPathForDisplay } from '../../utils/formatters.js';\nimport { logger } from '../../utils/logger.js';\nimport { collectFiles } from '../list/remote-list-resolver.js';\nimport { groupFilesIntoResources, type ListFileMapping, type ListPackageReport } from '../list/list-pipeline.js';\nimport { extractMetadataFromManifest, type ViewMetadataEntry } from '../list/list-printers.js';\nimport { resolveDeclaredPath } from '../../utils/path-resolution.js';\nimport { classifyInput } from '../install/preprocessing/index.js';\nimport { resolveRemoteList, type RemoteListResult } from '../list/remote-list-resolver.js';\nimport type { ExecutionContext } from '../../types/execution-context.js';\nimport { getLocalOpenPackageDir, getLocalPackageYmlPath } from '../../utils/paths.js';\nimport { arePackageNamesEquivalent } from '../../utils/package-name.js';\nimport { readWorkspaceIndex } from '../../utils/workspace-index-yml.js';\nimport type { HeaderInfo } from '../list/scope-data-collector.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface LocalPackageResult {\n report: ListPackageReport;\n headerInfo: HeaderInfo;\n metadata: ViewMetadataEntry[];\n}\n\nexport interface ViewResult {\n kind: 'local-package' | 'remote' | 'not-found';\n}\n\nexport interface LocalPackageViewResult extends ViewResult {\n kind: 'local-package';\n localResult: LocalPackageResult;\n}\n\nexport interface RemoteViewResult extends ViewResult {\n kind: 'remote';\n remoteResult: RemoteListResult;\n}\n\nexport interface NotFoundViewResult extends ViewResult {\n kind: 'not-found';\n}\n\nexport type ResolvedViewResult =\n | LocalPackageViewResult\n | RemoteViewResult\n | NotFoundViewResult;\n\nexport interface ViewPipelineOptions {\n scope?: 'project' | 'global';\n files?: boolean;\n remote?: boolean;\n profile?: string;\n apiKey?: string;\n cwd?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Build a LocalPackageResult from a resolved package directory.\n * Shared by Tier 1 (workspace index) and Tier 2 (resolvePackageByName).\n */\nasync function buildLocalPackageResult(\n packageName: string,\n packageDir: string,\n version?: string,\n): Promise<LocalPackageResult> {\n let name = packageName;\n let resolvedVersion = version;\n let dependencies: string[] | undefined;\n let metadata: ViewMetadataEntry[] = [];\n\n const manifestPath = join(packageDir, 'openpackage.yml');\n if (await exists(manifestPath)) {\n try {\n const manifest = await parsePackageYml(manifestPath);\n name = manifest.name || packageName;\n resolvedVersion = manifest.version || resolvedVersion;\n metadata = extractMetadataFromManifest(manifest);\n const allDeps = [\n ...(manifest.dependencies || []),\n ...(manifest['dev-dependencies'] || [])\n ];\n dependencies = allDeps.map(dep => dep.name);\n } catch (error) {\n logger.debug(`Failed to parse manifest at ${manifestPath}: ${error}`);\n }\n }\n if (metadata.length === 0) metadata = extractMetadataFromManifest({ name, version: resolvedVersion });\n\n const files = await collectFiles(packageDir, packageDir);\n const fileList: ListFileMapping[] = files.map(f => ({\n source: f,\n target: join(packageDir, f),\n exists: true\n }));\n const resourceGroups = fileList.length > 0 ? groupFilesIntoResources(fileList) : undefined;\n\n const headerType = await detectEntityType(packageDir);\n\n return {\n report: {\n name,\n version: resolvedVersion,\n path: packageDir,\n state: 'synced',\n totalFiles: fileList.length,\n existingFiles: fileList.length,\n fileList,\n resourceGroups,\n dependencies\n },\n headerInfo: {\n name,\n version: resolvedVersion !== '0.0.0' ? resolvedVersion : undefined,\n path: formatPathForDisplay(packageDir),\n type: headerType\n },\n metadata\n };\n}\n\n// ---------------------------------------------------------------------------\n// Pipeline: resolve from workspace index (tier 1)\n// ---------------------------------------------------------------------------\n\n/**\n * Look up the package in the workspace index to locate its source directory,\n * then scan its contents. This answers \"what does this package contain?\"\n * rather than \"what is installed from it?\".\n */\nasync function resolveFromWorkspaceIndex(\n packageName: string,\n targetDir: string,\n): Promise<LocalPackageResult | null> {\n const { index } = await readWorkspaceIndex(targetDir);\n const packages = index.packages || {};\n\n // Find the package in the workspace index (exact or equivalent name match)\n let entryKey: string | undefined;\n if (packages[packageName]) {\n entryKey = packageName;\n } else {\n for (const key of Object.keys(packages)) {\n if (arePackageNamesEquivalent(key, packageName)) {\n entryKey = key;\n break;\n }\n }\n }\n\n if (!entryKey) return null;\n\n const entry = packages[entryKey];\n const resolved = resolveDeclaredPath(entry.path, targetDir);\n const packageDir = resolved.absolute;\n\n if (!(await exists(packageDir))) {\n logger.debug(`Workspace index points to '${packageDir}' but it does not exist`);\n return null;\n }\n\n return buildLocalPackageResult(packageName, packageDir, entry.version);\n}\n\n// ---------------------------------------------------------------------------\n// Pipeline: resolve local package (tier 2)\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve a package by name from local sources (workspace, global, registry).\n * Returns a LocalPackageResult with all data needed for display, or null if not found.\n */\nexport async function resolveLocalPackage(\n packageName: string,\n cwd: string,\n options: { showProject: boolean; showGlobal: boolean; searchRegistry: boolean }\n): Promise<LocalPackageResult | null> {\n const resolution = await resolvePackageByName({\n cwd,\n packageName,\n checkCwd: false,\n searchWorkspace: options.showProject,\n searchGlobal: options.showGlobal,\n searchRegistry: options.searchRegistry\n });\n\n if (!resolution.found || !resolution.path) {\n return null;\n }\n\n return buildLocalPackageResult(packageName, resolution.path, resolution.version);\n}\n\n// ---------------------------------------------------------------------------\n// Pipeline: resolve workspace root package\n// ---------------------------------------------------------------------------\n\n/**\n * Check if the requested package name matches the workspace root package\n * (.openpackage/openpackage.yml) and resolve it directly if so.\n *\n * This handles the case where `opkg view` is run from a workspace directory\n * and the auto-detected (or explicitly provided) name is the workspace itself,\n * not an installed dependency.\n */\nasync function resolveWorkspaceRootPackage(\n packageName: string,\n cwd: string\n): Promise<LocalPackageResult | null> {\n const manifestPath = getLocalPackageYmlPath(cwd);\n\n if (!(await exists(manifestPath))) {\n return null;\n }\n\n let manifest;\n try {\n manifest = await parsePackageYml(manifestPath);\n } catch {\n return null;\n }\n\n const workspaceName = manifest.name;\n if (!workspaceName || !arePackageNamesEquivalent(workspaceName, packageName)) {\n return null;\n }\n\n const openpackageDir = getLocalOpenPackageDir(cwd);\n return buildLocalPackageResult(workspaceName, openpackageDir, manifest.version);\n}\n\n// ---------------------------------------------------------------------------\n// Pipeline: resolve remote package (tier 3)\n// ---------------------------------------------------------------------------\n\n/**\n * Attempt remote resolution for a package name.\n */\nexport async function resolveRemoteForPackage(\n packageName: string,\n execContext: ExecutionContext,\n options: { profile?: string; apiKey?: string }\n): Promise<RemoteListResult | null> {\n try {\n const classification = await classifyInput(packageName, {}, execContext);\n if (classification.type === 'bulk' || classification.type === 'path') {\n return null;\n }\n return await resolveRemoteList(classification, execContext, {\n profile: options.profile,\n apiKey: options.apiKey\n });\n } catch (error) {\n logger.debug(`Remote resolution failed for '${packageName}': ${error}`);\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Pipeline: full multi-tier resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve a package through the multi-tier fallback chain:\n * Tier 1: Workspace index lookup \u2192 scan package source directory\n * Tier 1.5: Workspace root package\n * Tier 2: Local packages directory (via resolvePackageByName)\n * Tier 3: Remote registry/git\n *\n * All tiers resolve the package's own contents (metadata, resources, deps),\n * not the workspace install state.\n */\nexport async function resolvePackageView(\n packageName: string,\n options: ViewPipelineOptions,\n createContext: (opts: { global: boolean; cwd?: string }) => Promise<ExecutionContext>\n): Promise<ResolvedViewResult> {\n const showBothScopes = options.scope === undefined;\n const showGlobal = options.scope === 'global' || showBothScopes;\n const showProject = options.scope === 'project' || showBothScopes;\n\n // --- Remote-only mode ---\n if (options.remote) {\n const execContext = await createContext({\n global: options.scope === 'global',\n cwd: options.cwd\n });\n const remoteResult = await resolveRemoteForPackage(packageName, execContext, options);\n if (remoteResult) {\n return { kind: 'remote', remoteResult };\n }\n return { kind: 'not-found' };\n }\n\n // --- Tier 1: Workspace index lookup ---\n // Look up the package in the workspace index to find its source path,\n // then scan its contents directly (not the workspace install state).\n if (showProject) {\n const cwd = options.cwd || process.cwd();\n const projectContext = await createContext({ global: false, cwd: options.cwd });\n const projectResult = await resolveFromWorkspaceIndex(packageName, projectContext.targetDir);\n if (projectResult) {\n return { kind: 'local-package', localResult: projectResult };\n }\n }\n\n if (showGlobal) {\n const globalContext = await createContext({ global: true, cwd: options.cwd });\n const globalResult = await resolveFromWorkspaceIndex(packageName, globalContext.targetDir);\n if (globalResult) {\n return { kind: 'local-package', localResult: globalResult };\n }\n }\n\n // --- Tier 1.5: Workspace root package ---\n // If the package name matches the workspace root (.openpackage/openpackage.yml),\n // resolve it directly. This handles `opkg view` from a workspace where the\n // auto-detected name is the workspace itself, not an installed dependency.\n if (showProject) {\n const cwd = options.cwd || process.cwd();\n const workspaceRootResult = await resolveWorkspaceRootPackage(packageName, cwd);\n if (workspaceRootResult) {\n return { kind: 'local-package', localResult: workspaceRootResult };\n }\n }\n\n // --- Tier 2: Local packages directory ---\n const searchRegistry = showBothScopes;\n const localResult = await resolveLocalPackage(\n packageName,\n options.cwd || process.cwd(),\n { showProject, showGlobal, searchRegistry }\n );\n\n if (localResult) {\n return { kind: 'local-package', localResult };\n }\n\n // --- Tier 3: Remote registry/git ---\n const fallbackContext = await createContext({\n global: options.scope === 'global',\n cwd: options.cwd\n });\n const remoteResult = await resolveRemoteForPackage(packageName, fallbackContext, options);\n if (remoteResult) {\n return { kind: 'remote', remoteResult };\n }\n\n return { kind: 'not-found' };\n}\n", "import { relative, join } from 'path';\n\nimport { FILE_PATTERNS } from '../../constants/index.js';\nimport type { ExecutionContext } from '../../types/index.js';\nimport type { InputClassification, RegistryClassification, GitClassification } from '../install/orchestrator/types.js';\nimport { fetchRemotePackageMetadata } from '../remote-pull.js';\nimport { parseDownloadIdentifier } from '../remote-pull.js';\nimport { loadPackageFromGit } from '../install/git-package-loader.js';\nimport { parsePackageYml } from '../../utils/package-yml.js';\nimport { exists } from '../../utils/fs.js';\nimport { logger } from '../../utils/logger.js';\nimport { generateGitHubPackageName } from '../../utils/plugin-naming.js';\nimport { getPackageVersionPath } from '../directory.js';\nimport type { ListPackageReport, ListFileMapping, ListResourceGroup } from './list-pipeline.js';\nimport { groupFilesIntoResources } from './list-pipeline.js';\nimport type { ViewMetadataEntry } from './view-metadata.js';\nimport { extractMetadataFromManifest } from './view-metadata.js';\n\nexport interface RemoteListResult {\n sourceType: 'registry' | 'git';\n sourceLabel: string;\n package: ListPackageReport;\n dependencies: RemoteListDependency[];\n metadata?: ViewMetadataEntry[];\n}\n\nexport interface RemoteListDependency {\n name: string;\n version: string;\n}\n\nexport interface RemoteListOptions {\n profile?: string;\n apiKey?: string;\n}\n\nexport async function resolveRemoteList(\n classification: InputClassification,\n execContext: ExecutionContext,\n options: RemoteListOptions = {}\n): Promise<RemoteListResult | null> {\n switch (classification.type) {\n case 'registry':\n return resolveRegistryList(classification, options);\n case 'git':\n return resolveGitList(classification, execContext);\n default:\n return null;\n }\n}\n\nasync function resolveRegistryList(\n classification: RegistryClassification,\n options: RemoteListOptions\n): Promise<RemoteListResult | null> {\n const { packageName, version } = classification;\n if (!packageName) return null;\n\n const metadataResult = await fetchRemotePackageMetadata(packageName, version, {\n recursive: true,\n profile: options.profile,\n apiKey: options.apiKey\n });\n\n if (!metadataResult.success) {\n return null;\n }\n\n const response = metadataResult.response;\n const resolvedVersion = response.version?.version || version || 'latest';\n const versionLabel = version ? `@${version}` : '';\n const sourceLabel = `${packageName}${versionLabel}`;\n\n const dependencies: RemoteListDependency[] = [];\n const downloads = response.downloads || [];\n\n for (const download of downloads) {\n if (!download.name) continue;\n try {\n const parsed = parseDownloadIdentifier(download.name);\n if (parsed.packageName !== packageName) {\n dependencies.push({ name: parsed.packageName, version: parsed.version });\n }\n } catch {\n logger.debug(`Failed to parse download identifier: ${download.name}`);\n }\n }\n\n const totalFiles = downloads.length;\n \n // Try to read file structure and manifest from local cache\n const fileList: ListFileMapping[] = [];\n let resourceGroups: ListResourceGroup[] | undefined;\n let metadata: ViewMetadataEntry[] | undefined;\n \n try {\n const packagePath = getPackageVersionPath(packageName, resolvedVersion);\n if (await exists(packagePath)) {\n const files = await collectFiles(packagePath, packagePath);\n for (const file of files) {\n fileList.push({\n source: file,\n target: file,\n exists: true\n });\n }\n \n // Generate resource groups from file list\n if (fileList.length > 0) {\n resourceGroups = groupFilesIntoResources(fileList);\n }\n \n // Read manifest for metadata\n const { join } = await import('path');\n const manifestPath = join(packagePath, 'openpackage.yml');\n if (await exists(manifestPath)) {\n try {\n const manifest = await parsePackageYml(manifestPath);\n metadata = extractMetadataFromManifest(manifest);\n } catch (e) {\n logger.debug(`Failed to parse cached manifest: ${e}`);\n }\n }\n }\n } catch (error) {\n logger.debug(`Failed to read cached package structure for ${packageName}@${resolvedVersion}: ${error}`);\n }\n \n // Fallback: use API response metadata when no manifest available\n if (!metadata || metadata.length === 0) {\n const apiPkg = response.package;\n const fallback: Partial<Parameters<typeof extractMetadataFromManifest>[0]> = {\n name: packageName,\n version: resolvedVersion,\n description: apiPkg?.description,\n keywords: apiPkg?.keywords\n };\n if (apiPkg?.isPrivate) fallback.private = true;\n metadata = extractMetadataFromManifest(fallback);\n }\n\n return {\n sourceType: 'registry',\n sourceLabel,\n package: {\n name: packageName,\n version: resolvedVersion,\n path: sourceLabel,\n state: 'synced',\n totalFiles,\n existingFiles: totalFiles,\n fileList: fileList.length > 0 ? fileList : undefined,\n resourceGroups,\n dependencies: dependencies.map(d => d.name)\n },\n dependencies,\n metadata\n };\n}\n\nasync function resolveGitList(\n classification: GitClassification,\n execContext: ExecutionContext\n): Promise<RemoteListResult | null> {\n const { gitUrl, gitRef, resourcePath } = classification;\n if (!gitUrl) return null;\n\n const result = await loadPackageFromGit({\n url: gitUrl,\n ref: gitRef,\n path: resourcePath\n });\n\n const contentRoot = result.sourcePath;\n const refLabel = gitRef ? `#${gitRef}` : '';\n const pathLabel = resourcePath ? `/${resourcePath}` : '';\n const sourceLabel = `${gitUrl}${refLabel}${pathLabel}`;\n\n let name = generateGitHubPackageName({ gitUrl, path: resourcePath });\n let version: string | undefined;\n let dependencies: RemoteListDependency[] = [];\n const fileList: ListFileMapping[] = [];\n\n let metadata: ViewMetadataEntry[] | undefined;\n const manifestPath = join(contentRoot, 'openpackage.yml');\n if (await exists(manifestPath)) {\n try {\n const manifest = await parsePackageYml(manifestPath);\n name = manifest.name || name;\n version = manifest.version;\n metadata = extractMetadataFromManifest(manifest);\n\n const allDeps = [\n ...(manifest.dependencies || []),\n ...(manifest['dev-dependencies'] || [])\n ];\n dependencies = allDeps.map(dep => ({\n name: dep.name,\n version: dep.version || ''\n }));\n } catch (error) {\n logger.debug(`Failed to parse manifest at ${manifestPath}: ${error}`);\n }\n }\n\n const files = await collectFiles(contentRoot, contentRoot);\n for (const file of files) {\n fileList.push({\n source: file,\n target: file,\n exists: true\n });\n }\n \n // Generate resource groups from file list\n const resourceGroups = fileList.length > 0 ? groupFilesIntoResources(fileList) : undefined;\n const finalMetadata = metadata ?? extractMetadataFromManifest({ name, version });\n\n return {\n sourceType: 'git',\n sourceLabel,\n package: {\n name,\n version,\n path: sourceLabel,\n state: 'synced',\n totalFiles: fileList.length,\n existingFiles: fileList.length,\n fileList,\n resourceGroups,\n dependencies: dependencies.map(d => d.name)\n },\n dependencies,\n metadata: finalMetadata\n };\n}\n\n/** Manifest and index files excluded from resource listing */\nconst NON_RESOURCE_FILES = new Set<string>([\n FILE_PATTERNS.OPENPACKAGE_YML,\n FILE_PATTERNS.OPENPACKAGE_INDEX_YML\n]);\n\nexport async function collectFiles(dir: string, root: string): Promise<string[]> {\n const { readdir } = await import('fs/promises');\n const results: string[] = [];\n\n try {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name.startsWith('.')) continue;\n const fullPath = join(dir, entry.name);\n if (entry.isFile()) {\n if (NON_RESOURCE_FILES.has(entry.name)) continue;\n results.push(relative(root, fullPath));\n } else if (entry.isDirectory()) {\n const nested = await collectFiles(fullPath, root);\n results.push(...nested);\n }\n }\n } catch {\n // ignore unreadable directories\n }\n\n return results.sort();\n}\n", "/**\n * View Printers\n *\n * Rendering functions for the `opkg view` command output.\n * Shows package contents (metadata, resources, dependencies) \u2014 not workspace\n * install state. Uses shared low-level tree primitives from list-tree-renderer.\n */\n\nimport type { ListPackageReport, ListFileMapping, ListResourceGroup } from '../list/list-pipeline.js';\nimport type { RemoteListResult, RemoteListDependency } from '../list/remote-list-resolver.js';\nimport { flattenResourceGroups, renderFlatResourceList, type TreeRenderConfig } from '../list/list-tree-renderer.js';\nimport { formatPathForDisplay } from '../../utils/formatters.js';\nimport {\n dim,\n sectionHeader,\n printMetadataSection,\n} from '../list/list-printers.js';\nimport type { ViewMetadataEntry } from '../list/view-metadata.js';\nimport type { HeaderInfo } from '../list/scope-data-collector.js';\nimport type { LocalPackageResult } from './view-pipeline.js';\nimport type { OutputPort } from '../ports/output.js';\nimport { resolveOutput } from '../ports/resolve.js';\n\n// ---------------------------------------------------------------------------\n// Shared render config for ListFileMapping (no scope/status annotations)\n// ---------------------------------------------------------------------------\n\nfunction createViewFileConfig(pathBase?: string): TreeRenderConfig<ListFileMapping> {\n return {\n formatPath: (file) =>\n pathBase ? formatPathForDisplay(file.target, pathBase) : file.target,\n isMissing: (file) => !file.exists,\n sortFiles: (a, b) => {\n const pathA = pathBase ? formatPathForDisplay(a.target, pathBase) : a.target;\n const pathB = pathBase ? formatPathForDisplay(b.target, pathBase) : b.target;\n return pathA.localeCompare(pathB);\n }\n };\n}\n\n// ---------------------------------------------------------------------------\n// Header\n// ---------------------------------------------------------------------------\n\nfunction printHeader(\n headerInfo: HeaderInfo,\n sourceLabel?: string,\n out?: OutputPort\n): void {\n const o = out ?? resolveOutput();\n const version = headerInfo.version ? `@${headerInfo.version}` : '';\n const typeTag = dim(`[${headerInfo.type}]`);\n const pathOrSource = sourceLabel\n ? dim(`(${sourceLabel})`) + ' ' + dim('[remote]')\n : dim(`(${headerInfo.path})`) + ' ' + typeTag;\n o.info(`${headerInfo.name}${version} ${pathOrSource}`);\n}\n\n// ---------------------------------------------------------------------------\n// Resources section\n// ---------------------------------------------------------------------------\n\nfunction printResourcesSection(\n report: ListPackageReport,\n showFiles: boolean,\n pathBase?: string,\n out?: OutputPort,\n): void {\n const o = out ?? resolveOutput();\n\n if (report.resourceGroups && report.resourceGroups.length > 0) {\n const flatResources = flattenResourceGroups(report.resourceGroups);\n o.info(sectionHeader('Resources', flatResources.length));\n const config = createViewFileConfig(pathBase);\n renderFlatResourceList(flatResources, '', showFiles, config, false, o);\n } else if (report.fileList && report.fileList.length > 0) {\n o.info(sectionHeader('Resources', report.fileList.length));\n const sortedFiles = [...report.fileList].sort((a, b) => a.target.localeCompare(b.target));\n for (let i = 0; i < sortedFiles.length; i++) {\n const file = sortedFiles[i];\n const isLast = i === sortedFiles.length - 1;\n const connector = isLast ? '\u2514\u2500\u2500 ' : '\u251C\u2500\u2500 ';\n const label = file.exists ? dim(file.target) : `${dim(file.target)} \\x1b[31m[MISSING]\\x1b[0m`;\n o.info(`${connector}${label}`);\n }\n } else {\n o.info(sectionHeader('Resources', 0));\n o.info(dim('\u2514\u2500\u2500 (no resources)'));\n }\n}\n\n// ---------------------------------------------------------------------------\n// Dependencies section\n// ---------------------------------------------------------------------------\n\nfunction printDependenciesSection(\n dependencies: string[] | RemoteListDependency[],\n out?: OutputPort,\n): void {\n const o = out ?? resolveOutput();\n if (dependencies.length === 0) return;\n\n o.info(sectionHeader('Dependencies', dependencies.length));\n dependencies.forEach((dep, index) => {\n const isLast = index === dependencies.length - 1;\n const connector = isLast ? '\u2514\u2500\u2500 ' : '\u251C\u2500\u2500 ';\n if (typeof dep === 'string') {\n o.info(`${connector}${dep}`);\n } else {\n const versionSuffix = dep.version ? `@${dep.version}` : '';\n o.info(`${connector}${dep.name}${versionSuffix}`);\n }\n });\n}\n\n// ---------------------------------------------------------------------------\n// Public: unified view printer for local packages\n// ---------------------------------------------------------------------------\n\n/**\n * Print package detail view for a locally resolved package.\n * Shows: header, [Metadata], [Resources], [Dependencies].\n */\nexport function printLocalPackageView(\n result: LocalPackageResult,\n showFiles: boolean,\n output?: OutputPort\n): void {\n const out = output ?? resolveOutput();\n const { report, headerInfo, metadata } = result;\n\n printHeader(headerInfo, undefined, out);\n printMetadataSection(metadata, out);\n printResourcesSection(report, showFiles, report.path, out);\n\n if (report.dependencies !== undefined && report.dependencies.length > 0) {\n printDependenciesSection(report.dependencies, out);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Public: unified view printer for remote packages\n// ---------------------------------------------------------------------------\n\n/**\n * Print package detail view for a remotely resolved package.\n * Shows: header, [Metadata], [Resources], [Dependencies].\n */\nexport function printRemotePackageView(\n result: RemoteListResult,\n showFiles: boolean,\n output?: OutputPort\n): void {\n const out = output ?? resolveOutput();\n const pkg = result.package;\n\n const headerInfo: HeaderInfo = {\n name: pkg.name,\n version: pkg.version && pkg.version !== '0.0.0' ? pkg.version : undefined,\n path: result.sourceLabel,\n type: 'package',\n };\n\n printHeader(headerInfo, result.sourceLabel, out);\n\n const metadata = result.metadata ?? [];\n printMetadataSection(metadata, out);\n printResourcesSection(pkg, showFiles, undefined, out);\n printDependenciesSection(result.dependencies, out);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["join", "join", "join", "remoteResult"]
|
|
7
|
+
}
|