opkg 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -186
- package/assets/openpackage_ascii_dark.png +0 -0
- package/assets/openpackage_ascii_light.png +0 -0
- package/dist/commands/add.js +34 -10
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/apply.js +16 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/delete.js +1 -1
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/install.js +177 -8
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.js +2 -2
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +1 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/new.js +125 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/pack.js +7 -13
- package/dist/commands/pack.js.map +1 -1
- package/dist/commands/pull.js +1 -1
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.js +1 -1
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/remove.js +63 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/save.js +11 -17
- package/dist/commands/save.js.map +1 -1
- package/dist/commands/set.js +33 -0
- package/dist/commands/set.js.map +1 -0
- package/dist/commands/show.js +16 -94
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/status.js +26 -701
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/uninstall.js +14 -427
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/constants/index.js +72 -16
- package/dist/constants/index.js.map +1 -1
- package/dist/core/add/add-conflict-handler.js +1 -8
- package/dist/core/add/add-conflict-handler.js.map +1 -1
- package/dist/core/add/add-pipeline.js +12 -10
- package/dist/core/add/add-pipeline.js.map +1 -1
- package/dist/core/add/add-to-source-pipeline.js +123 -0
- package/dist/core/add/add-to-source-pipeline.js.map +1 -0
- package/dist/core/add/package-index-updater.js +77 -78
- package/dist/core/add/package-index-updater.js.map +1 -1
- package/dist/core/add/platform-path-transformer.js +6 -4
- package/dist/core/add/platform-path-transformer.js.map +1 -1
- package/dist/core/add/source-collector.js +2 -3
- package/dist/core/add/source-collector.js.map +1 -1
- package/dist/core/apply/apply-pipeline.js +110 -0
- package/dist/core/apply/apply-pipeline.js.map +1 -0
- package/dist/core/dependency-resolver.js +263 -21
- package/dist/core/dependency-resolver.js.map +1 -1
- package/dist/core/discovery/file-discovery.js +1 -2
- package/dist/core/discovery/file-discovery.js.map +1 -1
- package/dist/core/discovery/platform-files-discovery.js +33 -18
- package/dist/core/discovery/platform-files-discovery.js.map +1 -1
- package/dist/core/flows/flow-executor.js +974 -0
- package/dist/core/flows/flow-executor.js.map +1 -0
- package/dist/core/flows/flow-inverter.js +442 -0
- package/dist/core/flows/flow-inverter.js.map +1 -0
- package/dist/core/flows/flow-key-extractor.js +101 -0
- package/dist/core/flows/flow-key-extractor.js.map +1 -0
- package/dist/core/flows/flow-key-mapper.js +382 -0
- package/dist/core/flows/flow-key-mapper.js.map +1 -0
- package/dist/core/flows/flow-transforms.js +632 -0
- package/dist/core/flows/flow-transforms.js.map +1 -0
- package/dist/core/flows/map-pipeline/context.js +73 -0
- package/dist/core/flows/map-pipeline/context.js.map +1 -0
- package/dist/core/flows/map-pipeline/index.js +156 -0
- package/dist/core/flows/map-pipeline/index.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/copy.js +104 -0
- package/dist/core/flows/map-pipeline/operations/copy.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/pipe.js +70 -0
- package/dist/core/flows/map-pipeline/operations/pipe.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/rename.js +102 -0
- package/dist/core/flows/map-pipeline/operations/rename.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/set.js +50 -0
- package/dist/core/flows/map-pipeline/operations/set.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/switch.js +79 -0
- package/dist/core/flows/map-pipeline/operations/switch.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/transform.js +543 -0
- package/dist/core/flows/map-pipeline/operations/transform.js.map +1 -0
- package/dist/core/flows/map-pipeline/operations/unset.js +65 -0
- package/dist/core/flows/map-pipeline/operations/unset.js.map +1 -0
- package/dist/core/flows/map-pipeline/types.js +8 -0
- package/dist/core/flows/map-pipeline/types.js.map +1 -0
- package/dist/core/flows/map-pipeline/utils.js +278 -0
- package/dist/core/flows/map-pipeline/utils.js.map +1 -0
- package/dist/core/flows/platform-converter.js +328 -0
- package/dist/core/flows/platform-converter.js.map +1 -0
- package/dist/core/flows/source-resolver.js +192 -0
- package/dist/core/flows/source-resolver.js.map +1 -0
- package/dist/core/flows/toml-domain-transforms.js +23 -0
- package/dist/core/flows/toml-domain-transforms.js.map +1 -0
- package/dist/core/install/bulk-install-pipeline.js +68 -7
- package/dist/core/install/bulk-install-pipeline.js.map +1 -1
- package/dist/core/install/canonical-plan.js +3 -3
- package/dist/core/install/canonical-plan.js.map +1 -1
- package/dist/core/install/dry-run.js +3 -3
- package/dist/core/install/dry-run.js.map +1 -1
- package/dist/core/install/flow-based-installer.js +1158 -0
- package/dist/core/install/flow-based-installer.js.map +1 -0
- package/dist/core/install/flow-workspace-tracker.js +111 -0
- package/dist/core/install/flow-workspace-tracker.js.map +1 -0
- package/dist/core/install/format-detector.js +228 -0
- package/dist/core/install/format-detector.js.map +1 -0
- package/dist/core/install/git-package-loader.js +20 -0
- package/dist/core/install/git-package-loader.js.map +1 -0
- package/dist/core/install/install-errors.js +1 -1
- package/dist/core/install/install-errors.js.map +1 -1
- package/dist/core/install/install-flow.js +34 -14
- package/dist/core/install/install-flow.js.map +1 -1
- package/dist/core/install/install-pipeline.js +52 -17
- package/dist/core/install/install-pipeline.js.map +1 -1
- package/dist/core/install/install-reporting.js +26 -8
- package/dist/core/install/install-reporting.js.map +1 -1
- package/dist/core/install/local-source-resolution.js +103 -0
- package/dist/core/install/local-source-resolution.js.map +1 -0
- package/dist/core/install/marketplace-handler.js +221 -0
- package/dist/core/install/marketplace-handler.js.map +1 -0
- package/dist/core/install/path-install-pipeline.js +241 -0
- package/dist/core/install/path-install-pipeline.js.map +1 -0
- package/dist/core/install/path-package-loader.js +116 -0
- package/dist/core/install/path-package-loader.js.map +1 -0
- package/dist/core/install/plugin-detector.js +72 -0
- package/dist/core/install/plugin-detector.js.map +1 -0
- package/dist/core/install/plugin-to-universal-converter.js +218 -0
- package/dist/core/install/plugin-to-universal-converter.js.map +1 -0
- package/dist/core/install/plugin-transformer.js +191 -0
- package/dist/core/install/plugin-transformer.js.map +1 -0
- package/dist/core/install/version-selection.js +1 -1
- package/dist/core/install/version-selection.js.map +1 -1
- package/dist/core/openpackage.js +40 -22
- package/dist/core/openpackage.js.map +1 -1
- package/dist/core/pack/pack-output.js +62 -0
- package/dist/core/pack/pack-output.js.map +1 -0
- package/dist/core/pack/pack-pipeline.js +186 -0
- package/dist/core/pack/pack-pipeline.js.map +1 -0
- package/dist/core/package-context.js +45 -70
- package/dist/core/package-context.js.map +1 -1
- package/dist/core/package-creation.js +203 -0
- package/dist/core/package-creation.js.map +1 -0
- package/dist/core/package.js +20 -6
- package/dist/core/package.js.map +1 -1
- package/dist/core/platforms.js +665 -209
- package/dist/core/platforms.js.map +1 -1
- package/dist/core/push/push-context.js +1 -1
- package/dist/core/push/push-context.js.map +1 -1
- package/dist/core/push/push-upload.js +2 -2
- package/dist/core/push/push-upload.js.map +1 -1
- package/dist/core/registry.js +6 -6
- package/dist/core/registry.js.map +1 -1
- package/dist/core/remote-pull.js +2 -2
- package/dist/core/remote-pull.js.map +1 -1
- package/dist/core/remove/removal-collector.js +52 -0
- package/dist/core/remove/removal-collector.js.map +1 -0
- package/dist/core/remove/removal-confirmation.js +39 -0
- package/dist/core/remove/removal-confirmation.js.map +1 -0
- package/dist/core/remove/remove-from-source-pipeline.js +173 -0
- package/dist/core/remove/remove-from-source-pipeline.js.map +1 -0
- package/dist/core/save/constants.js +3 -3
- package/dist/core/save/constants.js.map +1 -1
- package/dist/core/save/flow-based-saver.js +270 -0
- package/dist/core/save/flow-based-saver.js.map +1 -0
- package/dist/core/save/name-resolution.js +1 -1
- package/dist/core/save/name-resolution.js.map +1 -1
- package/dist/core/save/package-yml-generator.js +4 -5
- package/dist/core/save/package-yml-generator.js.map +1 -1
- package/dist/core/save/save-candidate-builder.js +215 -0
- package/dist/core/save/save-candidate-builder.js.map +1 -0
- package/dist/core/save/save-candidate-loader.js +12 -11
- package/dist/core/save/save-candidate-loader.js.map +1 -1
- package/dist/core/save/save-conflict-analyzer.js +150 -0
- package/dist/core/save/save-conflict-analyzer.js.map +1 -0
- package/dist/core/save/save-conflict-resolution.js +28 -14
- package/dist/core/save/save-conflict-resolution.js.map +1 -1
- package/dist/core/save/save-conflict-resolver.js +31 -275
- package/dist/core/save/save-conflict-resolver.js.map +1 -1
- package/dist/core/save/save-group-builder.js +52 -0
- package/dist/core/save/save-group-builder.js.map +1 -0
- package/dist/core/save/save-interactive-resolver.js +190 -0
- package/dist/core/save/save-interactive-resolver.js.map +1 -0
- package/dist/core/save/save-pipeline.js +58 -34
- package/dist/core/save/save-pipeline.js.map +1 -1
- package/dist/core/save/save-platform-handler.js +53 -0
- package/dist/core/save/save-platform-handler.js.map +1 -0
- package/dist/core/save/save-resolution-executor.js +145 -0
- package/dist/core/save/save-resolution-executor.js.map +1 -0
- package/dist/core/save/save-result-reporter.js +167 -0
- package/dist/core/save/save-result-reporter.js.map +1 -0
- package/dist/core/save/save-to-source-pipeline.js +154 -0
- package/dist/core/save/save-to-source-pipeline.js.map +1 -0
- package/dist/core/save/save-versioning.js +4 -4
- package/dist/core/save/save-versioning.js.map +1 -1
- package/dist/core/save/save-write-coordinator.js +204 -0
- package/dist/core/save/save-write-coordinator.js.map +1 -0
- package/dist/core/save/save-yml-resolution.js +28 -216
- package/dist/core/save/save-yml-resolution.js.map +1 -1
- package/dist/core/save/workspace-rename.js +7 -8
- package/dist/core/save/workspace-rename.js.map +1 -1
- package/dist/core/set/set-output.js +72 -0
- package/dist/core/set/set-output.js.map +1 -0
- package/dist/core/set/set-pipeline.js +361 -0
- package/dist/core/set/set-pipeline.js.map +1 -0
- package/dist/core/set/set-types.js +5 -0
- package/dist/core/set/set-types.js.map +1 -0
- package/dist/core/show/package-resolver.js +257 -0
- package/dist/core/show/package-resolver.js.map +1 -0
- package/dist/core/show/scope-discovery.js +165 -0
- package/dist/core/show/scope-discovery.js.map +1 -0
- package/dist/core/show/show-output.js +168 -0
- package/dist/core/show/show-output.js.map +1 -0
- package/dist/core/show/show-pipeline.js +113 -0
- package/dist/core/show/show-pipeline.js.map +1 -0
- package/dist/core/show/show-types.js +5 -0
- package/dist/core/show/show-types.js.map +1 -0
- package/dist/core/source-resolution/dependency-graph.js +104 -0
- package/dist/core/source-resolution/dependency-graph.js.map +1 -0
- package/dist/core/source-resolution/resolve-mutable-source.js +109 -0
- package/dist/core/source-resolution/resolve-mutable-source.js.map +1 -0
- package/dist/core/source-resolution/resolve-package-source.js +29 -0
- package/dist/core/source-resolution/resolve-package-source.js.map +1 -0
- package/dist/core/source-resolution/resolve-registry-version.js +35 -0
- package/dist/core/source-resolution/resolve-registry-version.js.map +1 -0
- package/dist/core/source-resolution/types.js.map +1 -0
- package/dist/core/status/status-file-discovery.js +23 -12
- package/dist/core/status/status-file-discovery.js.map +1 -1
- package/dist/core/status/status-pipeline.js +134 -0
- package/dist/core/status/status-pipeline.js.map +1 -0
- package/dist/core/sync/platform-sync-summary.js +27 -0
- package/dist/core/sync/platform-sync-summary.js.map +1 -0
- package/dist/core/uninstall/flow-aware-uninstaller.js +189 -0
- package/dist/core/uninstall/flow-aware-uninstaller.js.map +1 -0
- package/dist/core/uninstall/uninstall-file-discovery.js +11 -6
- package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
- package/dist/core/uninstall/uninstall-pipeline.js +141 -0
- package/dist/core/uninstall/uninstall-pipeline.js.map +1 -0
- package/dist/core/universal-patterns.js +64 -0
- package/dist/core/universal-patterns.js.map +1 -0
- package/dist/index.js +99 -6
- package/dist/index.js.map +1 -1
- package/dist/types/flows.js +8 -0
- package/dist/types/flows.js.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/platform-flows.js +8 -0
- package/dist/types/platform-flows.js.map +1 -0
- package/dist/types/workspace-index.js +6 -0
- package/dist/types/workspace-index.js.map +1 -0
- package/dist/utils/custom-path-resolution.js +160 -0
- package/dist/utils/custom-path-resolution.js.map +1 -0
- package/dist/utils/dependency-coverage.js +1 -1
- package/dist/utils/dependency-coverage.js.map +1 -1
- package/dist/utils/file-processing.js +1 -1
- package/dist/utils/flow-index-installer.js +209 -0
- package/dist/utils/flow-index-installer.js.map +1 -0
- package/dist/utils/formatters.js +47 -1
- package/dist/utils/formatters.js.map +1 -1
- package/dist/utils/fs.js +17 -0
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/git-clone-registry.js +88 -0
- package/dist/utils/git-clone-registry.js.map +1 -0
- package/dist/utils/git-clone.js +69 -0
- package/dist/utils/git-clone.js.map +1 -0
- package/dist/utils/git-spec.js +96 -0
- package/dist/utils/git-spec.js.map +1 -0
- package/dist/utils/http-client.js +7 -0
- package/dist/utils/http-client.js.map +1 -1
- package/dist/utils/index-based-installer.js +356 -163
- package/dist/utils/index-based-installer.js.map +1 -1
- package/dist/utils/install-conflict-handler.js +2 -2
- package/dist/utils/install-conflict-handler.js.map +1 -1
- package/dist/utils/install-file-discovery.js +18 -13
- package/dist/utils/install-file-discovery.js.map +1 -1
- package/dist/utils/install-helpers.js +43 -20
- package/dist/utils/install-helpers.js.map +1 -1
- package/dist/utils/jsonc.js +23 -1
- package/dist/utils/jsonc.js.map +1 -1
- package/dist/utils/manifest-paths.js +1 -1
- package/dist/utils/manifest-paths.js.map +1 -1
- package/dist/utils/markdown-frontmatter.js +46 -0
- package/dist/utils/markdown-frontmatter.js.map +1 -1
- package/dist/utils/package-copy.js +5 -103
- package/dist/utils/package-copy.js.map +1 -1
- package/dist/utils/package-filters.js +9 -105
- package/dist/utils/package-filters.js.map +1 -1
- package/dist/utils/package-index-yml.js +27 -6
- package/dist/utils/package-index-yml.js.map +1 -1
- package/dist/utils/package-input.js +98 -0
- package/dist/utils/package-input.js.map +1 -0
- package/dist/utils/package-management.js +80 -28
- package/dist/utils/package-management.js.map +1 -1
- package/dist/utils/package-name-resolution.js +327 -0
- package/dist/utils/package-name-resolution.js.map +1 -0
- package/dist/utils/package-name.js +18 -16
- package/dist/utils/package-name.js.map +1 -1
- package/dist/utils/package-versioning.js +2 -33
- package/dist/utils/package-versioning.js.map +1 -1
- package/dist/utils/package-yml.js +19 -28
- package/dist/utils/package-yml.js.map +1 -1
- package/dist/utils/path-resolution.js +102 -0
- package/dist/utils/path-resolution.js.map +1 -0
- package/dist/utils/paths.js +6 -6
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/platform-file.js +36 -24
- package/dist/utils/platform-file.js.map +1 -1
- package/dist/utils/platform-mapper.js +222 -68
- package/dist/utils/platform-mapper.js.map +1 -1
- package/dist/utils/platform-root-files.js +44 -0
- package/dist/utils/platform-root-files.js.map +1 -0
- package/dist/utils/platform-utils.js +35 -54
- package/dist/utils/platform-utils.js.map +1 -1
- package/dist/utils/platform-yaml-merge.js +20 -140
- package/dist/utils/platform-yaml-merge.js.map +1 -1
- package/dist/utils/prompts.js +92 -7
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/registry-entry-filter.js +50 -27
- package/dist/utils/registry-entry-filter.js.map +1 -1
- package/dist/utils/registry-paths.js +5 -4
- package/dist/utils/registry-paths.js.map +1 -1
- package/dist/utils/scope-resolution.js +156 -0
- package/dist/utils/scope-resolution.js.map +1 -0
- package/dist/utils/source-mutability.js +15 -0
- package/dist/utils/source-mutability.js.map +1 -0
- package/dist/utils/tarball.js +29 -4
- package/dist/utils/tarball.js.map +1 -1
- package/dist/utils/version-ranges.js +1 -32
- package/dist/utils/version-ranges.js.map +1 -1
- package/dist/utils/workspace-index-helpers.js +28 -0
- package/dist/utils/workspace-index-helpers.js.map +1 -0
- package/dist/utils/workspace-index-ownership.js +100 -0
- package/dist/utils/workspace-index-ownership.js.map +1 -0
- package/dist/utils/workspace-index-yml.js +173 -0
- package/dist/utils/workspace-index-yml.js.map +1 -0
- package/examples/custom-subdirs-platform.jsonc +157 -0
- package/package.json +7 -2
- package/platforms.jsonc +531 -84
- package/schemas/map-pipeline-v1.json +256 -0
- package/schemas/platforms-v1.json +400 -0
- package/specs/README.md +88 -0
- package/specs/add/README.md +166 -0
- package/specs/agents-claude.md +570 -0
- package/specs/agents-opencode.md +622 -0
- package/specs/apply/README.md +21 -0
- package/specs/apply/apply-behavior.md +58 -0
- package/specs/apply/apply-command.md +51 -0
- package/specs/apply/conflicts.md +41 -0
- package/specs/apply/index-effects.md +81 -0
- package/specs/architecture.md +107 -0
- package/specs/auth/README.md +17 -0
- package/specs/auth/auth-http-contract.md +25 -0
- package/specs/auth/cli/credentials.md +39 -0
- package/specs/auth/cli/login.md +32 -0
- package/specs/auth/cli/logout.md +16 -0
- package/specs/claude-mcp.md +1065 -0
- package/specs/claude-plugins-marketplace.md +363 -0
- package/specs/claude-plugins.md +413 -0
- package/specs/cli-options.md +52 -0
- package/specs/codex-mcp.md +114 -0
- package/specs/commands-overview.md +175 -0
- package/specs/directory-layout.md +95 -0
- package/specs/install/README.md +12 -4
- package/specs/install/git-sources.md +230 -0
- package/specs/install/install-behavior.md +483 -73
- package/specs/install/package-yml-canonical.md +67 -35
- package/specs/install/version-resolution.md +69 -115
- package/specs/new/README.md +769 -0
- package/specs/new/SUMMARY.md +310 -0
- package/specs/new/scope-behavior.md +793 -0
- package/specs/pack/README.md +77 -0
- package/specs/pack/package-name-resolution.md +330 -0
- package/specs/package/README.md +18 -17
- package/specs/package/nested-packages-and-parent-packages.md +32 -31
- package/specs/package/package-index-yml.md +95 -101
- package/specs/package/package-root-layout.md +64 -46
- package/specs/package/registry-payload-and-copy.md +50 -44
- package/specs/package/universal-content.md +33 -56
- package/specs/package-sources.md +248 -0
- package/specs/platforms/README.md +52 -0
- package/specs/platforms/configuration.md +571 -0
- package/specs/platforms/detection.md +552 -0
- package/specs/platforms/directory-layout.md +599 -0
- package/specs/platforms/examples.md +1146 -0
- package/specs/platforms/flow-reference.md +1240 -0
- package/specs/platforms/flows.md +1488 -0
- package/specs/platforms/map-pipeline.md +801 -0
- package/specs/platforms/overview.md +349 -0
- package/specs/platforms/specification.md +700 -0
- package/specs/platforms/troubleshooting.md +697 -0
- package/specs/platforms/universal-converter.md +520 -0
- package/specs/push/README.md +1 -0
- package/specs/push/push-behavior.md +11 -3
- package/specs/push/push-remote-upload.md +1 -1
- package/specs/push/push-scoping.md +1 -1
- package/specs/push/push-version-selection.md +1 -1
- package/specs/registry.md +111 -0
- package/specs/remove/README.md +257 -0
- package/specs/save/README.md +21 -17
- package/specs/save/save-conflict-resolution.md +205 -83
- package/specs/save/save-file-discovery.md +6 -4
- package/specs/save/save-frontmatter-overrides.md +11 -15
- package/specs/save/save-modes-inputs.md +9 -39
- package/specs/save/save-naming-scoping.md +4 -4
- package/specs/save/save-package-detection.md +13 -13
- package/specs/save/save-registry-sync.md +16 -106
- package/specs/save/save-versioning.md +80 -0
- package/specs/scope-management.md +92 -0
- package/specs/set/README.md +520 -0
- package/specs/set/set-behavior.md +563 -0
- package/specs/show/README.md +483 -0
- package/specs/show/show-remote.md +494 -0
- package/specs/status/README.md +38 -0
- package/specs/uninstall/README.md +231 -0
- package/dist/commands/duplicate.js +0 -69
- package/dist/commands/duplicate.js.map +0 -1
- package/dist/commands/init.js +0 -117
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/prune.js +0 -357
- package/dist/commands/prune.js.map +0 -1
- package/dist/commands/tui.js +0 -61
- package/dist/commands/tui.js.map +0 -1
- package/dist/core/install/index.js +0 -3
- package/dist/core/install/index.js.map +0 -1
- package/dist/core/push/push-single-file.js +0 -56
- package/dist/core/push/push-single-file.js.map +0 -1
- package/dist/core/save/package-detection.js +0 -147
- package/dist/core/save/package-detection.js.map +0 -1
- package/dist/core/save/save-single-file.js +0 -124
- package/dist/core/save/save-single-file.js.map +0 -1
- package/dist/core/token-store.js +0 -73
- package/dist/core/token-store.js.map +0 -1
- package/dist/tui/app.js +0 -95
- package/dist/tui/app.js.map +0 -1
- package/dist/tui/components/package-list.js +0 -73
- package/dist/tui/components/package-list.js.map +0 -1
- package/dist/tui/controller.js +0 -365
- package/dist/tui/controller.js.map +0 -1
- package/dist/tui/index.js +0 -12
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/services/file-index.js +0 -64
- package/dist/tui/services/file-index.js.map +0 -1
- package/dist/tui/services/packages.js +0 -18
- package/dist/tui/services/packages.js.map +0 -1
- package/dist/tui/services/save.js +0 -21
- package/dist/tui/services/save.js.map +0 -1
- package/dist/tui/state/app-state.js +0 -15
- package/dist/tui/state/app-state.js.map +0 -1
- package/dist/tui/state.js +0 -17
- package/dist/tui/state.js.map +0 -1
- package/dist/tui/types.js.map +0 -1
- package/dist/tui/views/add-file-modal.js +0 -129
- package/dist/tui/views/add-file-modal.js.map +0 -1
- package/dist/tui/views/file-preview.js +0 -44
- package/dist/tui/views/file-preview.js.map +0 -1
- package/dist/tui/views/list-packages.js +0 -73
- package/dist/tui/views/list-packages.js.map +0 -1
- package/dist/tui/views/main-menu.js +0 -29
- package/dist/tui/views/main-menu.js.map +0 -1
- package/dist/tui/views/manage-view.js +0 -81
- package/dist/tui/views/manage-view.js.map +0 -1
- package/dist/tui/views/package-hub.js +0 -120
- package/dist/tui/views/package-hub.js.map +0 -1
- package/dist/tui/views/placeholder.js +0 -24
- package/dist/tui/views/placeholder.js.map +0 -1
- package/dist/utils/bun-bootstrap.js +0 -72
- package/dist/utils/bun-bootstrap.js.map +0 -1
- package/dist/utils/entity-id.js +0 -19
- package/dist/utils/entity-id.js.map +0 -1
- package/dist/utils/package-local-files.js +0 -5
- package/dist/utils/package-local-files.js.map +0 -1
- package/dist/utils/path-matching.js +0 -74
- package/dist/utils/path-matching.js.map +0 -1
- package/dist/utils/root-file-operations.js +0 -39
- package/dist/utils/root-file-operations.js.map +0 -1
- package/dist/utils/root-file-transformer.js +0 -27
- package/dist/utils/root-file-transformer.js.map +0 -1
- package/dist/utils/yaml-frontmatter.js +0 -25
- package/dist/utils/yaml-frontmatter.js.map +0 -1
- package/specs/auth/auth-device-flow.md +0 -70
- package/specs/login/login-device-flow.md +0 -70
- package/specs/platforms.md +0 -193
- package/specs/save-pack-versioning.md +0 -224
- package/specs/save-pack.md +0 -68
- /package/dist/{tui → core/source-resolution}/types.js +0 -0
|
@@ -3,12 +3,6 @@ import { ValidationError } from './errors.js';
|
|
|
3
3
|
* Regex pattern for scoped package names (@scope/name)
|
|
4
4
|
*/
|
|
5
5
|
export const SCOPED_PACKAGE_REGEX = /^@([^\/]+)\/(.+)$/;
|
|
6
|
-
/**
|
|
7
|
-
* Error messages for package name validation
|
|
8
|
-
*/
|
|
9
|
-
const ERROR_MESSAGES = {
|
|
10
|
-
INVALID_PACKAGE_NAME: 'Invalid package name: %s. Package names must be 1-214 characters, contain only letters, numbers, hyphens, underscores, and dots. Cannot start with a number, dot, or hyphen. Cannot have consecutive dots, underscores, or hyphens. Scoped names must be in format @<scope>/<name>. Package names are case-insensitive and will be normalized to lowercase.'
|
|
11
|
-
};
|
|
12
6
|
/**
|
|
13
7
|
* Validate package name according to naming rules
|
|
14
8
|
* @param name - The package name to validate
|
|
@@ -16,44 +10,52 @@ const ERROR_MESSAGES = {
|
|
|
16
10
|
*/
|
|
17
11
|
export function validatePackageName(name) {
|
|
18
12
|
// Check length
|
|
19
|
-
if (name.length === 0
|
|
20
|
-
throw new ValidationError(
|
|
13
|
+
if (name.length === 0) {
|
|
14
|
+
throw new ValidationError('Package name cannot be empty');
|
|
15
|
+
}
|
|
16
|
+
if (name.length > 214) {
|
|
17
|
+
throw new ValidationError(`Package name '${name}' is too long (max 214 characters)`);
|
|
21
18
|
}
|
|
22
19
|
// Check for leading/trailing spaces
|
|
23
20
|
if (name.trim() !== name) {
|
|
24
|
-
throw new ValidationError(
|
|
21
|
+
throw new ValidationError(`Package name '${name}' cannot have leading or trailing spaces`);
|
|
25
22
|
}
|
|
26
23
|
// Check if it's a scoped name (@scope/name format)
|
|
27
24
|
const scopedMatch = name.match(SCOPED_PACKAGE_REGEX);
|
|
28
25
|
if (scopedMatch) {
|
|
29
26
|
const [, scope, localName] = scopedMatch;
|
|
30
27
|
// Validate scope part
|
|
31
|
-
validatePackageNamePart(scope, name);
|
|
28
|
+
validatePackageNamePart(scope, name, 'scope');
|
|
32
29
|
// Validate local name part
|
|
33
|
-
validatePackageNamePart(localName, name);
|
|
30
|
+
validatePackageNamePart(localName, name, 'name');
|
|
34
31
|
return;
|
|
35
32
|
}
|
|
36
33
|
// Validate as regular name
|
|
37
|
-
validatePackageNamePart(name, name);
|
|
34
|
+
validatePackageNamePart(name, name, 'package');
|
|
38
35
|
}
|
|
39
36
|
/**
|
|
40
37
|
* Validate a package name part (scope or local name)
|
|
41
38
|
* @param part - The part to validate
|
|
42
39
|
* @param fullName - The full original name for error messages
|
|
40
|
+
* @param partType - The type of part being validated (for better error messages)
|
|
43
41
|
* @throws ValidationError if the part is invalid
|
|
44
42
|
*/
|
|
45
|
-
function validatePackageNamePart(part, fullName) {
|
|
43
|
+
function validatePackageNamePart(part, fullName, partType) {
|
|
44
|
+
// Check for uppercase letters first (most common issue)
|
|
45
|
+
if (/[A-Z]/.test(part)) {
|
|
46
|
+
throw new ValidationError(`Package name '${fullName}' must be lowercase`);
|
|
47
|
+
}
|
|
46
48
|
// Check first character
|
|
47
49
|
if (/^[0-9.\-]/.test(part)) {
|
|
48
|
-
throw new ValidationError(
|
|
50
|
+
throw new ValidationError(`Package ${partType} '${fullName}' cannot start with a number, dot, or hyphen`);
|
|
49
51
|
}
|
|
50
52
|
// Check for consecutive special characters
|
|
51
53
|
if (/(\.\.|__|--)/.test(part)) {
|
|
52
|
-
throw new ValidationError(
|
|
54
|
+
throw new ValidationError(`Package name '${fullName}' cannot have consecutive dots, underscores, or hyphens`);
|
|
53
55
|
}
|
|
54
56
|
// Check allowed characters only
|
|
55
57
|
if (!/^[a-z0-9._-]+$/.test(part)) {
|
|
56
|
-
throw new ValidationError(
|
|
58
|
+
throw new ValidationError(`Package name '${fullName}' contains invalid characters (use only: a-z, 0-9, ., _, -)`);
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-name.js","sourceRoot":"","sources":["../../src/utils/package-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AAExD
|
|
1
|
+
{"version":3,"file":"package-name.js","sourceRoot":"","sources":["../../src/utils/package-name.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,11 +42,11 @@ export function dumpYamlWithScopedQuoting(config, options = {}) {
|
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Transform package files for version change only (no name change)
|
|
45
|
-
* Updates
|
|
45
|
+
* Updates openpackage.yml version field
|
|
46
46
|
*/
|
|
47
47
|
export function transformPackageFilesForVersionChange(files, newVersion, packageName) {
|
|
48
48
|
return files.map((file) => {
|
|
49
|
-
if (file.path === FILE_PATTERNS.
|
|
49
|
+
if (file.path === FILE_PATTERNS.OPENPACKAGE_YML) {
|
|
50
50
|
try {
|
|
51
51
|
const parsed = yaml.load(file.content);
|
|
52
52
|
const updated = {
|
|
@@ -69,37 +69,6 @@ export function transformPackageFilesForVersionChange(files, newVersion, package
|
|
|
69
69
|
return file;
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
|
-
/**
|
|
73
|
-
* Transform package files metadata for name and version changes
|
|
74
|
-
* Updates package.yml only
|
|
75
|
-
*/
|
|
76
|
-
export function transformPackageFilesMetadata(files, sourceName, newName, newVersion) {
|
|
77
|
-
return files.map((file) => {
|
|
78
|
-
// Update package.yml
|
|
79
|
-
if (file.path === FILE_PATTERNS.PACKAGE_YML) {
|
|
80
|
-
try {
|
|
81
|
-
const parsed = yaml.load(file.content);
|
|
82
|
-
const updated = {
|
|
83
|
-
...parsed,
|
|
84
|
-
name: newName,
|
|
85
|
-
...(newVersion ? { version: newVersion } : { version: undefined })
|
|
86
|
-
};
|
|
87
|
-
const dumped = dumpYamlWithScopedQuoting(updated, { lineWidth: 120 });
|
|
88
|
-
return { ...file, content: dumped };
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
// Fallback: minimal rewrite if parsing fails
|
|
92
|
-
const fallback = {
|
|
93
|
-
name: newName,
|
|
94
|
-
...(newVersion ? { version: newVersion } : {})
|
|
95
|
-
};
|
|
96
|
-
const dumped = dumpYamlWithScopedQuoting(fallback, { lineWidth: 120 });
|
|
97
|
-
return { ...file, content: dumped };
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return file;
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
72
|
/**
|
|
104
73
|
* Check if a package version already exists
|
|
105
74
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-versioning.js","sourceRoot":"","sources":["../../src/utils/package-versioning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAkB,EAAE,UAA4B,EAAE;IAC1F,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAEjE,iCAAiC;IACjC,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBACnD,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACnC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBACrD,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;oBACzE,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;QACD,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qCAAqC,CACnD,KAAoB,EACpB,UAAkB,EAClB,WAAmB;IAEnB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"package-versioning.js","sourceRoot":"","sources":["../../src/utils/package-versioning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAkB,EAAE,UAA4B,EAAE;IAC1F,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAEjE,iCAAiC;IACjC,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBACnD,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACnC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBACrD,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;oBACzE,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;QACD,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qCAAqC,CACnD,KAAoB,EACpB,UAAkB,EAClB,WAAmB;IAEnB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,eAAe,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAe,CAAC;gBACrD,MAAM,OAAO,GAAe;oBAC1B,GAAG,MAAM;oBACT,OAAO,EAAE,UAAU;iBACpB,CAAC;gBACF,MAAM,MAAM,GAAG,yBAAyB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;gBACtE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,6CAA6C;gBAC7C,MAAM,QAAQ,GAAe;oBAC3B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,UAAU;iBACpB,CAAC;gBACF,MAAM,MAAM,GAAG,yBAAyB,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YACtC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB,EAAE,OAAgB;IAC9E,MAAM,UAAU,GAAG,qBAAqB,CAAC,WAAW,EAAE,OAAO,IAAI,WAAW,CAAC,CAAC;IAC9E,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,WAAW,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAuB;IACxD,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,OAAkB,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAkB;IACvD,MAAM,cAAc,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACtD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -1,41 +1,30 @@
|
|
|
1
1
|
import * as yaml from 'js-yaml';
|
|
2
2
|
import { readTextFile, writeTextFile } from './fs.js';
|
|
3
3
|
import { isScopedName } from '../core/scoping/package-scoping.js';
|
|
4
|
-
function normalizeStringArray(value) {
|
|
5
|
-
if (!Array.isArray(value)) {
|
|
6
|
-
return undefined;
|
|
7
|
-
}
|
|
8
|
-
const result = value
|
|
9
|
-
.filter((entry) => typeof entry === 'string')
|
|
10
|
-
.map(entry => entry.trim())
|
|
11
|
-
.filter(entry => entry.length > 0);
|
|
12
|
-
return result.length > 0 ? result : undefined;
|
|
13
|
-
}
|
|
14
4
|
/**
|
|
15
|
-
* Parse
|
|
5
|
+
* Parse openpackage.yml file with validation
|
|
16
6
|
*/
|
|
17
7
|
export async function parsePackageYml(packageYmlPath) {
|
|
18
8
|
try {
|
|
19
9
|
const content = await readTextFile(packageYmlPath);
|
|
20
10
|
const parsed = yaml.load(content);
|
|
21
11
|
const isPartial = parsed.partial === true;
|
|
12
|
+
const validateDependencies = (deps, section) => {
|
|
13
|
+
if (!deps)
|
|
14
|
+
return;
|
|
15
|
+
for (const dep of deps) {
|
|
16
|
+
const sources = [dep.version, dep.path, dep.git].filter(Boolean);
|
|
17
|
+
if (sources.length > 1) {
|
|
18
|
+
throw new Error(`openpackage.yml ${section}: dependency '${dep.name}' has multiple sources; specify at most one of version, path, or git`);
|
|
19
|
+
}
|
|
20
|
+
if (dep.ref && !dep.git) {
|
|
21
|
+
throw new Error(`openpackage.yml ${section}: dependency '${dep.name}' has ref but no git source`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
22
25
|
// Validate required fields
|
|
23
26
|
if (!parsed.name) {
|
|
24
|
-
throw new Error('
|
|
25
|
-
}
|
|
26
|
-
const includeFilters = normalizeStringArray(parsed.include);
|
|
27
|
-
const excludeFilters = normalizeStringArray(parsed.exclude);
|
|
28
|
-
if (includeFilters) {
|
|
29
|
-
parsed.include = includeFilters;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
delete parsed.include;
|
|
33
|
-
}
|
|
34
|
-
if (excludeFilters) {
|
|
35
|
-
parsed.exclude = excludeFilters;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
delete parsed.exclude;
|
|
27
|
+
throw new Error('openpackage.yml must contain a name field');
|
|
39
28
|
}
|
|
40
29
|
if (isPartial) {
|
|
41
30
|
parsed.partial = true;
|
|
@@ -43,14 +32,16 @@ export async function parsePackageYml(packageYmlPath) {
|
|
|
43
32
|
else {
|
|
44
33
|
delete parsed.partial;
|
|
45
34
|
}
|
|
35
|
+
validateDependencies(parsed.packages, 'packages');
|
|
36
|
+
validateDependencies(parsed['dev-packages'], 'dev-packages');
|
|
46
37
|
return parsed;
|
|
47
38
|
}
|
|
48
39
|
catch (error) {
|
|
49
|
-
throw new Error(`Failed to parse
|
|
40
|
+
throw new Error(`Failed to parse openpackage.yml: ${error}`);
|
|
50
41
|
}
|
|
51
42
|
}
|
|
52
43
|
/**
|
|
53
|
-
* Write
|
|
44
|
+
* Write openpackage.yml file with consistent formatting
|
|
54
45
|
*/
|
|
55
46
|
export function serializePackageYml(config) {
|
|
56
47
|
// First generate YAML with default block style
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-yml.js","sourceRoot":"","sources":["../../src/utils/package-yml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,
|
|
1
|
+
{"version":3,"file":"package-yml.js","sourceRoot":"","sources":["../../src/utils/package-yml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import os from 'os';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Expand leading tilde to the provided home directory.
|
|
5
|
+
* Leaves non-tilde inputs unchanged.
|
|
6
|
+
*/
|
|
7
|
+
export function expandTildePath(input, homeDir = os.homedir()) {
|
|
8
|
+
if (!input.startsWith('~')) {
|
|
9
|
+
return input;
|
|
10
|
+
}
|
|
11
|
+
if (input === '~') {
|
|
12
|
+
return homeDir;
|
|
13
|
+
}
|
|
14
|
+
if (input.startsWith('~/')) {
|
|
15
|
+
return path.join(homeDir, input.slice(2));
|
|
16
|
+
}
|
|
17
|
+
// For forms like ~user/project, fall back to returning as-is
|
|
18
|
+
// to avoid incorrect user resolution on platforms without getpwnam.
|
|
19
|
+
return input;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convert an absolute path under ~/.openpackage/ to tilde notation.
|
|
23
|
+
* If the path is not under ~/.openpackage/, returns it unchanged.
|
|
24
|
+
* This ensures registry and packages paths are written with ~ notation in index files.
|
|
25
|
+
* Preserves trailing slashes.
|
|
26
|
+
*/
|
|
27
|
+
export function toTildePath(absolutePath, homeDir = os.homedir()) {
|
|
28
|
+
if (!path.isAbsolute(absolutePath)) {
|
|
29
|
+
// Already relative or tilde notation, return as-is
|
|
30
|
+
return absolutePath;
|
|
31
|
+
}
|
|
32
|
+
// Preserve trailing slash
|
|
33
|
+
const hasTrailingSlash = absolutePath.endsWith(path.sep) || absolutePath.endsWith('/');
|
|
34
|
+
const pathWithoutTrailing = hasTrailingSlash
|
|
35
|
+
? absolutePath.slice(0, -1)
|
|
36
|
+
: absolutePath;
|
|
37
|
+
const normalizedAbsolute = path.normalize(pathWithoutTrailing);
|
|
38
|
+
const normalizedHome = path.normalize(homeDir);
|
|
39
|
+
const openPackageDir = path.join(normalizedHome, '.openpackage');
|
|
40
|
+
// Check if path is under ~/.openpackage/
|
|
41
|
+
if (normalizedAbsolute.startsWith(openPackageDir + path.sep) || normalizedAbsolute === openPackageDir) {
|
|
42
|
+
const relativePath = path.relative(openPackageDir, normalizedAbsolute);
|
|
43
|
+
if (relativePath === '') {
|
|
44
|
+
return '~/.openpackage/';
|
|
45
|
+
}
|
|
46
|
+
// Ensure forward slashes for cross-platform compatibility
|
|
47
|
+
const normalizedRelative = relativePath.split(path.sep).join('/');
|
|
48
|
+
const result = `~/.openpackage/${normalizedRelative}`;
|
|
49
|
+
return hasTrailingSlash ? result + '/' : result;
|
|
50
|
+
}
|
|
51
|
+
// Not under ~/.openpackage/, return as-is (with trailing slash preserved)
|
|
52
|
+
return absolutePath;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Format a path for writing to workspace index.
|
|
56
|
+
* Prefers workspace-relative paths (e.g., ./.openpackage/packages/name) when the source
|
|
57
|
+
* lives under the workspace root. Otherwise, converts absolute paths under ~/.openpackage/
|
|
58
|
+
* to tilde notation (e.g., ~/.openpackage/registry/...).
|
|
59
|
+
*
|
|
60
|
+
* @param rawPath - The absolute or relative path to format
|
|
61
|
+
* @param workspaceRoot - The workspace root directory
|
|
62
|
+
* @returns Formatted path for workspace index
|
|
63
|
+
*/
|
|
64
|
+
export function formatPathForWorkspaceIndex(rawPath, workspaceRoot) {
|
|
65
|
+
// If already relative or tilde notation, return as-is
|
|
66
|
+
if (!path.isAbsolute(rawPath)) {
|
|
67
|
+
return rawPath;
|
|
68
|
+
}
|
|
69
|
+
const hasTrailingSlash = rawPath.endsWith(path.sep) || rawPath.endsWith('/');
|
|
70
|
+
const pathWithoutTrailing = hasTrailingSlash ? rawPath.slice(0, -1) : rawPath;
|
|
71
|
+
const normalizedAbs = path.normalize(pathWithoutTrailing);
|
|
72
|
+
const normalizedRoot = path.normalize(workspaceRoot);
|
|
73
|
+
// Convert to workspace-relative path if under workspace
|
|
74
|
+
if (normalizedAbs === normalizedRoot ||
|
|
75
|
+
normalizedAbs.startsWith(normalizedRoot + path.sep)) {
|
|
76
|
+
const rel = path.relative(normalizedRoot, normalizedAbs);
|
|
77
|
+
const normalizedRel = rel.split(path.sep).join('/');
|
|
78
|
+
const result = normalizedRel ? `./${normalizedRel}` : './';
|
|
79
|
+
return hasTrailingSlash ? result + '/' : result;
|
|
80
|
+
}
|
|
81
|
+
// For paths outside workspace, convert ~/.openpackage/ to tilde notation
|
|
82
|
+
return toTildePath(rawPath);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Resolve a declared path (as written in YAML) to an absolute path,
|
|
86
|
+
* while preserving the original declaration for round-tripping.
|
|
87
|
+
*/
|
|
88
|
+
export function resolveDeclaredPath(declaredPath, referenceFileDir) {
|
|
89
|
+
const declared = declaredPath;
|
|
90
|
+
let expanded = declaredPath;
|
|
91
|
+
if (declaredPath.startsWith('~')) {
|
|
92
|
+
expanded = expandTildePath(declaredPath);
|
|
93
|
+
}
|
|
94
|
+
const absolute = path.isAbsolute(expanded)
|
|
95
|
+
? path.resolve(expanded)
|
|
96
|
+
: path.resolve(referenceFileDir, expanded);
|
|
97
|
+
return {
|
|
98
|
+
declared,
|
|
99
|
+
absolute
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=path-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-resolution.js","sourceRoot":"","sources":["../../src/utils/path-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,UAAkB,EAAE,CAAC,OAAO,EAAE;IAC3E,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,6DAA6D;IAC7D,oEAAoE;IACpE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,YAAoB,EAAE,UAAkB,EAAE,CAAC,OAAO,EAAE;IAC9E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,mDAAmD;QACnD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,0BAA0B;IAC1B,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvF,MAAM,mBAAmB,GAAG,gBAAgB;QAC1C,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC,YAAY,CAAC;IAEjB,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAEjE,yCAAyC;IACzC,IAAI,kBAAkB,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,kBAAkB,KAAK,cAAc,EAAE,CAAC;QACtG,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACvE,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;YACxB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,0DAA0D;QAC1D,MAAM,kBAAkB,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,kBAAkB,kBAAkB,EAAE,CAAC;QACtD,OAAO,gBAAgB,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAClD,CAAC;IAED,0EAA0E;IAC1E,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAe,EAAE,aAAqB;IAChF,sDAAsD;IACtD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7E,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAE9E,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAErD,wDAAwD;IACxD,IACE,aAAa,KAAK,cAAc;QAChC,aAAa,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,EACnD,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,OAAO,gBAAgB,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAClD,CAAC;IAED,yEAAyE;IACzE,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAAoB,EACpB,gBAAwB;IAExB,MAAM,QAAQ,GAAG,YAAY,CAAC;IAE9B,IAAI,QAAQ,GAAG,YAAY,CAAC;IAC5B,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACxC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAE7C,OAAO;QACL,QAAQ;QACR,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
package/dist/utils/paths.js
CHANGED
|
@@ -9,13 +9,13 @@ import { parsePackageYml } from './package-yml.js';
|
|
|
9
9
|
* across the OpenPackage CLI application.
|
|
10
10
|
*/
|
|
11
11
|
/**
|
|
12
|
-
* Get the path to the
|
|
12
|
+
* Get the path to the workspace manifest (openpackage.yml)
|
|
13
13
|
*/
|
|
14
14
|
export function getLocalPackageYmlPath(cwd) {
|
|
15
|
-
return join(cwd, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.
|
|
15
|
+
return join(cwd, DIR_PATTERNS.OPENPACKAGE, FILE_PATTERNS.OPENPACKAGE_YML);
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* Check if a package name matches the root package in .openpackage/
|
|
18
|
+
* Check if a package name matches the root package in .openpackage/openpackage.yml
|
|
19
19
|
*/
|
|
20
20
|
export async function isRootPackage(cwd, packageName) {
|
|
21
21
|
const rootPackageYmlPath = getLocalPackageYmlPath(cwd);
|
|
@@ -55,11 +55,11 @@ export function getLocalPackageDir(cwd, packageName) {
|
|
|
55
55
|
return join(cwd, DIR_PATTERNS.OPENPACKAGE, OPENPACKAGE_DIRS.PACKAGES, packageName);
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
58
|
-
* Get the
|
|
59
|
-
*
|
|
58
|
+
* Get the cached package root directory for a specific package.
|
|
59
|
+
* Cached copies mirror the package payload at their root.
|
|
60
60
|
*/
|
|
61
61
|
export function getLocalPackageContentDir(cwd, packageName) {
|
|
62
|
-
return
|
|
62
|
+
return getLocalPackageDir(cwd, packageName);
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
65
|
* Get the default workspace install root path
|
package/dist/utils/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;GAGG;AAEH;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;GAGG;AAEH;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,WAAmB;IAClE,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,kBAAkB,CAAC,CAAC;QACzD,OAAO,yBAAyB,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,WAAmB;IACjE,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC5D,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,WAAW,CAAC;QACzC,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACrF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAW,EAAE,WAAmB;IACxE,OAAO,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Shared utilities for handling platform-specific file paths and extensions
|
|
4
4
|
*/
|
|
5
5
|
import { basename } from 'path';
|
|
6
|
-
import { getPlatformDefinition, getAllPlatforms,
|
|
7
|
-
import {
|
|
6
|
+
import { getPlatformDefinition, getAllPlatforms, getAllUniversalSubdirs, isPlatformId } from '../core/platforms.js';
|
|
7
|
+
import { FILE_PATTERNS } from '../constants/index.js';
|
|
8
8
|
import { getFirstPathComponent, parsePathWithPrefix, normalizePathForProcessing } from './path-normalization.js';
|
|
9
9
|
/**
|
|
10
10
|
* Parse a registry or universal path to extract subdir and relative path info
|
|
@@ -14,13 +14,11 @@ import { getFirstPathComponent, parsePathWithPrefix, normalizePathForProcessing
|
|
|
14
14
|
* @returns Parsed information or null if not a universal subdir path
|
|
15
15
|
*/
|
|
16
16
|
export function parseUniversalPath(path, options = {}) {
|
|
17
|
-
// Check if path starts with universal subdirs
|
|
18
|
-
const universalSubdirs =
|
|
17
|
+
// Check if path starts with universal subdirs (dynamically discovered)
|
|
18
|
+
const universalSubdirs = getAllUniversalSubdirs(options.cwd);
|
|
19
19
|
const knownPlatforms = getAllPlatforms({ includeDisabled: true });
|
|
20
20
|
const normalized = normalizePathForProcessing(path);
|
|
21
|
-
const withoutPrefix = normalized.
|
|
22
|
-
? normalized.slice(DIR_PATTERNS.OPENPACKAGE.length + 1)
|
|
23
|
-
: normalized;
|
|
21
|
+
const withoutPrefix = normalized; // Strict v2: do not strip legacy .openpackage/ prefix
|
|
24
22
|
for (const subdir of universalSubdirs) {
|
|
25
23
|
const parsed = parsePathWithPrefix(withoutPrefix, subdir);
|
|
26
24
|
if (parsed) {
|
|
@@ -76,23 +74,37 @@ export function parseUniversalPath(path, options = {}) {
|
|
|
76
74
|
* @param platform - Target platform
|
|
77
75
|
* @returns Platform-specific filename like "auth.mdc"
|
|
78
76
|
*/
|
|
79
|
-
export function getPlatformSpecificFilename(universalPath, platform) {
|
|
77
|
+
export function getPlatformSpecificFilename(universalPath, platform, cwd) {
|
|
80
78
|
const universalSubdir = getFirstPathComponent(universalPath);
|
|
81
79
|
const registryFileName = basename(universalPath);
|
|
82
|
-
const platformDef = getPlatformDefinition(platform);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
80
|
+
const platformDef = getPlatformDefinition(platform, cwd);
|
|
81
|
+
// TODO: Use export flows to determine extension transformation
|
|
82
|
+
// For now, check export flows for extension mappings (package → workspace)
|
|
83
|
+
if (platformDef.export && platformDef.export.length > 0) {
|
|
84
|
+
for (const flow of platformDef.export) {
|
|
85
|
+
// Check if this flow matches the universal path
|
|
86
|
+
// For array patterns, use the first pattern
|
|
87
|
+
const fromPattern = Array.isArray(flow.from) ? flow.from[0] : flow.from;
|
|
88
|
+
if (fromPattern.includes(universalSubdir)) {
|
|
89
|
+
const toPattern = typeof flow.to === 'string' ? flow.to : Object.keys(flow.to)[0];
|
|
90
|
+
if (toPattern) {
|
|
91
|
+
// Extract extension from 'to' pattern
|
|
92
|
+
const toExtMatch = toPattern.match(/\.[^./]+$/);
|
|
93
|
+
const fromExtMatch = fromPattern.match(/\.[^./]+$/);
|
|
94
|
+
if (toExtMatch && fromExtMatch) {
|
|
95
|
+
// Extension transformation found
|
|
96
|
+
const fromExt = fromExtMatch[0];
|
|
97
|
+
const toExt = toExtMatch[0];
|
|
98
|
+
if (registryFileName.endsWith(fromExt)) {
|
|
99
|
+
return registryFileName.slice(0, -fromExt.length) + toExt;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
92
105
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
return baseName + workspaceExt;
|
|
106
|
+
// No transformation found, return original filename
|
|
107
|
+
return registryFileName;
|
|
96
108
|
}
|
|
97
109
|
/**
|
|
98
110
|
* Get platform-specific file path information (full paths with directories)
|
|
@@ -107,12 +119,12 @@ export async function getPlatformSpecificPath(cwd, universalSubdir, relPath, pla
|
|
|
107
119
|
// Import here to avoid circular dependencies
|
|
108
120
|
const { mapUniversalToPlatform } = await import('./platform-mapper.js');
|
|
109
121
|
// Get the mapping
|
|
110
|
-
const {
|
|
122
|
+
const { relDir, relFile } = mapUniversalToPlatform(platform, universalSubdir, relPath, cwd);
|
|
111
123
|
// Convert relative paths to absolute paths
|
|
112
124
|
const { join } = await import('path');
|
|
113
125
|
return {
|
|
114
|
-
absDir: join(cwd,
|
|
115
|
-
absFile: join(cwd,
|
|
126
|
+
absDir: join(cwd, relDir),
|
|
127
|
+
absFile: join(cwd, relFile)
|
|
116
128
|
};
|
|
117
129
|
}
|
|
118
130
|
//# sourceMappingURL=platform-file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-file.js","sourceRoot":"","sources":["../../src/utils/platform-file.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"platform-file.js","sourceRoot":"","sources":["../../src/utils/platform-file.ts"],"names":[],"mappings":"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"}
|