Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Changelog

## [0.1.0] - 2024-12-01

### Added
- Initial release
123 changes: 97 additions & 26 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import PackageDescription
let package = Package(
name: "swift-cli",
platforms: [
.macOS(.v12)
.macOS(.v13)
],
products: [
// Individual packages - use only what you need
Expand All @@ -25,61 +25,76 @@ let package = Package(
.executable(name: "swift-cli-example", targets: ["SwiftCLIExample"])
],
dependencies: [
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.4.0"),
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.4.3"),
.package(url: "https://github.com/apple/swift-atomics.git", from: "1.2.0")
],
targets: [
// MARK: - Foundation Layer

/// Pure ANSI escape code generation - zero dependencies
.target(name: "ANSI"),
.target(
name: "ANSI",
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),

// MARK: - Core Layer

/// Low-level terminal operations: I/O, raw mode, capabilities
.target(
name: "TerminalCore",
dependencies: [
"ANSI",
.product(name: "Atomics", package: "swift-atomics")
],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),

// MARK: - Feature Packages

/// Colors, text styles, chainable styling API
.target(
name: "TerminalStyle",
dependencies: ["ANSI", "TerminalCore"]
dependencies: ["ANSI", "TerminalCore"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),

/// Keyboard input, mouse events, line editing
.target(
name: "TerminalInput",
dependencies: ["ANSI", "TerminalCore", "TerminalStyle"]
dependencies: ["ANSI", "TerminalCore", "TerminalStyle"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),

/// Boxes, tables, grids, panels, tree views
.target(
name: "TerminalLayout",
dependencies: ["ANSI", "TerminalCore", "TerminalStyle"]
dependencies: ["ANSI", "TerminalCore", "TerminalStyle"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),

/// Progress bars, spinners, prompts, selection menus
.target(
name: "TerminalComponents",
dependencies: ["ANSI", "TerminalCore", "TerminalStyle", "TerminalInput"]
dependencies: ["ANSI", "TerminalCore", "TerminalStyle", "TerminalInput"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),

/// Terminal images: iTerm2, Kitty, Sixel protocols
.target(
name: "TerminalGraphics",
dependencies: ["ANSI", "TerminalCore"]
dependencies: ["ANSI", "TerminalCore"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),

// MARK: - High-Level Framework

/// Full TUI framework with SwiftUI-like API
.target(
name: "TerminalUI",
dependencies: [
Expand All @@ -90,12 +105,14 @@ let package = Package(
"TerminalLayout",
"TerminalComponents",
"TerminalGraphics"
],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),

// MARK: - Umbrella

/// Everything in one import
.target(
name: "CLI",
dependencies: [
Expand All @@ -107,25 +124,79 @@ let package = Package(
"TerminalComponents",
"TerminalGraphics",
"TerminalUI"
],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),

// MARK: - Example

.executableTarget(
name: "SwiftCLIExample",
dependencies: ["CLI"]
dependencies: ["CLI"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),

// MARK: - Tests

.testTarget(name: "ANSITests", dependencies: ["ANSI"]),
.testTarget(name: "TerminalCoreTests", dependencies: ["TerminalCore"]),
.testTarget(name: "TerminalStyleTests", dependencies: ["TerminalStyle"]),
.testTarget(name: "TerminalInputTests", dependencies: ["TerminalInput"]),
.testTarget(name: "TerminalLayoutTests", dependencies: ["TerminalLayout"]),
.testTarget(name: "TerminalComponentsTests", dependencies: ["TerminalComponents"]),
.testTarget(name: "TerminalGraphicsTests", dependencies: ["TerminalGraphics"]),
.testTarget(name: "TerminalUITests", dependencies: ["TerminalUI"])
.testTarget(
name: "ANSITests",
dependencies: ["ANSI"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),
.testTarget(
name: "TerminalCoreTests",
dependencies: ["TerminalCore"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),
.testTarget(
name: "TerminalStyleTests",
dependencies: ["TerminalStyle"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),
.testTarget(
name: "TerminalInputTests",
dependencies: ["TerminalInput"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),
.testTarget(
name: "TerminalLayoutTests",
dependencies: ["TerminalLayout"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),
.testTarget(
name: "TerminalComponentsTests",
dependencies: ["TerminalComponents"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),
.testTarget(
name: "TerminalGraphicsTests",
dependencies: ["TerminalGraphics"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
),
.testTarget(
name: "TerminalUITests",
dependencies: ["TerminalUI"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency")
]
)
]
)
Loading