├── .codecov.yml
├── .gitignore
├── .jazzy.yaml
├── .swift-version
├── .swiftlint.yml
├── .travis.yml
├── CHANGELOG.md
├── Cartfile
├── Cartfile.resolved
├── LICENSE
├── Package.swift
├── README.md
├── RxTask.xcodeproj
├── RxTaskTests_Info.plist
├── RxTask_Info.plist
├── project.pbxproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── xcshareddata
│ └── xcschemes
│ ├── RxTask.xcscheme
│ └── xcschememanagement.plist
├── Sources
├── Observable+Task.swift
└── Task.swift
├── Tests
├── LinuxMain.swift
└── RxTaskTests
│ ├── Observable+TaskTests.swift
│ ├── ScriptFile.swift
│ └── TaskTests.swift
├── docs
├── Enums.html
├── Enums
│ ├── TaskError.html
│ └── TaskEvent.html
├── Extensions.html
├── Extensions
│ └── Observable.html
├── Protocols.html
├── Protocols
│ └── TaskEventType.html
├── Structs.html
├── Structs
│ └── Task.html
├── badge.svg
├── css
│ ├── highlight.css
│ └── jazzy.css
├── docsets
│ ├── .docset
│ │ └── Contents
│ │ │ ├── Info.plist
│ │ │ └── Resources
│ │ │ ├── Documents
│ │ │ ├── Enums.html
│ │ │ ├── Enums
│ │ │ │ ├── TaskError.html
│ │ │ │ └── TaskEvent.html
│ │ │ ├── Extensions.html
│ │ │ ├── Extensions
│ │ │ │ └── Observable.html
│ │ │ ├── Protocols.html
│ │ │ ├── Protocols
│ │ │ │ └── TaskEventType.html
│ │ │ ├── Structs.html
│ │ │ ├── Structs
│ │ │ │ └── Task.html
│ │ │ ├── css
│ │ │ │ ├── highlight.css
│ │ │ │ └── jazzy.css
│ │ │ ├── img
│ │ │ │ ├── carat.png
│ │ │ │ ├── dash.png
│ │ │ │ ├── gh.png
│ │ │ │ └── spinner.gif
│ │ │ ├── index.html
│ │ │ ├── js
│ │ │ │ ├── jazzy.js
│ │ │ │ ├── jazzy.search.js
│ │ │ │ ├── jquery.min.js
│ │ │ │ ├── lunr.min.js
│ │ │ │ └── typeahead.jquery.js
│ │ │ ├── search.json
│ │ │ └── undocumented.json
│ │ │ └── docSet.dsidx
│ ├── .tgz
│ ├── RxTask.docset
│ │ └── Contents
│ │ │ ├── Info.plist
│ │ │ └── Resources
│ │ │ ├── Documents
│ │ │ ├── Enums.html
│ │ │ ├── Enums
│ │ │ │ ├── TaskError.html
│ │ │ │ └── TaskEvent.html
│ │ │ ├── Extensions.html
│ │ │ ├── Extensions
│ │ │ │ └── Observable.html
│ │ │ ├── Protocols.html
│ │ │ ├── Protocols
│ │ │ │ └── TaskEventType.html
│ │ │ ├── Structs.html
│ │ │ ├── Structs
│ │ │ │ └── Task.html
│ │ │ ├── badge.svg
│ │ │ ├── css
│ │ │ │ ├── highlight.css
│ │ │ │ └── jazzy.css
│ │ │ ├── img
│ │ │ │ ├── carat.png
│ │ │ │ ├── dash.png
│ │ │ │ ├── gh.png
│ │ │ │ └── spinner.gif
│ │ │ ├── index.html
│ │ │ ├── js
│ │ │ │ ├── jazzy.js
│ │ │ │ ├── jazzy.search.js
│ │ │ │ ├── jquery.min.js
│ │ │ │ ├── lunr.min.js
│ │ │ │ └── typeahead.jquery.js
│ │ │ ├── search.json
│ │ │ └── undocumented.json
│ │ │ └── docSet.dsidx
│ └── RxTask.tgz
├── img
│ ├── carat.png
│ ├── dash.png
│ ├── gh.png
│ └── spinner.gif
├── index.html
├── js
│ ├── jazzy.js
│ ├── jazzy.search.js
│ ├── jquery.min.js
│ ├── lunr.min.js
│ └── typeahead.jquery.js
├── search.json
└── undocumented.json
└── scripts
├── upstall-carthage.sh
└── upstall-swiftlint.sh
/.codecov.yml:
--------------------------------------------------------------------------------
1 | ignore:
2 | - Tests/
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xccheckout
23 | *.xcscmblueprint
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 | *.ipa
28 | *.dSYM.zip
29 | *.dSYM
30 |
31 | ## Playgrounds
32 | timeline.xctimeline
33 | playground.xcworkspace
34 |
35 | # Swift Package Manager
36 | Packages/
37 | # Package.pins
38 | .build/
39 |
40 | # Carthage
41 | Carthage
42 | *.framework.zip
43 |
--------------------------------------------------------------------------------
/.jazzy.yaml:
--------------------------------------------------------------------------------
1 | author: RxSwiftCommunity
2 | module: RxTask
3 | github_url: https://github.com/RxSwiftCommunity/RxTask
4 | theme: fullwidth
5 |
--------------------------------------------------------------------------------
/.swift-version:
--------------------------------------------------------------------------------
1 | 3.0.2
2 |
--------------------------------------------------------------------------------
/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | excluded:
2 | - Carthage
3 | - Packages
4 |
5 | line_length: 150
6 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | env:
2 | global:
3 | - FRAMEWORK_NAME=RxTask
4 | - secure: "IVdTuXiwER2aiRZu9hRMfjhckrw08ddcxfHsTyPW5yOSHdCOU/g37qV27OoGCK0xWY4HayuDSqHjdIky0HCCKoARGHZKcjcZCUnEarxTk5e9GuZ7NRfyKbSCDMwl0onqjuuGyJu3fLIM8ArCFiJrtVreRqkf49wEPE1yoyeNjDAY5RNSyKUGRJtfTVtiyZQf5Z6raVyEKBFMDR8TYXy4xBDU5ieaJS9i9E/d3F/x4X0Gc9g5P5kw9o0Sj5vGXR3e06LpXXtzi28cJsXRxGcayAfo0gpLKFjo+2fseJZVhWohTH8q9bNOaqd6gu3luXdjJZwkUC0+r/zGF1H35i08CS5o0EI3HqSgZgTpcPE3KgfWbgb+1a7ntzDrsBtvZS3KrH8hHDYBv1HCxwDQdVJO+7HoMacZRBAEWQmw0GvyDhl5tmLWfYsXYvDMLN7ndn3xUtWSR3FMhYjKApupeNb9DyKCRpeDGTBP8bbEtLE8J/VQPhwwK78OzgMV+LwRWQ4fihKmbTiwyOMTDpXqriKgecitH/pmDVBXR5bSSk1YQHM5xqfz1An4wxYlM2BskvIrLX0nnnRjhgtSEfRdieasohPyJHAwb0GgmOYN5QZ4hoNICIGWYHVobEdoZWnsgvhGaOHDGE7P+gbYbSkUjP6KTbCAHH/T1jlH0R9D0+IcpwQ="
5 |
6 | cache:
7 | directories:
8 | - build
9 | - Packages
10 | - Carthage
11 |
12 | script: placeholder # workaround for https://github.com/travis-ci/travis-ci/issues/4681
13 | matrix:
14 | include:
15 | - script:
16 | - carthage bootstrap --platform mac
17 | - set -o pipefail && xcodebuild -scheme $FRAMEWORK_NAME -project $FRAMEWORK_NAME.xcodeproj clean build-for-testing test | xcpretty
18 | env: JOB=Xcode
19 | os: osx
20 | osx_image: xcode8.2
21 | language: objective-c
22 | before_install:
23 | - ./scripts/upstall-carthage.sh
24 | - ./scripts/upstall-swiftlint.sh
25 | after_success:
26 | - bash <(curl -s https://codecov.io/bash)
27 | before_deploy:
28 | - carthage build --no-skip-current
29 | - carthage archive $FRAMEWORK_NAME
30 | - script:
31 | - swift test
32 | env: JOB=SPM
33 | os: osx
34 | osx_image: xcode8.2
35 | language: objective-c
36 | # - script:
37 | # - swift test
38 | # env: JOB=Linux
39 | # sudo: required
40 | # dist: trusty
41 | # language: generic
42 | # install:
43 | # - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/9f442512a46d7a2af7b850d65a7e9bd31edfb09b/swiftenv-install.sh)"
44 |
45 | exclude:
46 | - script: placeholder # workaround for https://github.com/travis-ci/travis-ci/issues/4681
47 |
48 | deploy:
49 | provider: releases
50 | api_key:
51 | secure: JVMI8VRlw0naEi3KcQgU+hqLB0L0FdeqLBCHAetjDeqhKqAGkjiKc+JaHqbt24KK64Bny+WwMle/4o3BgYo38W7fim8vIq+15PdR426cY2TyTSFH7EzY/gRta5ljvkR8R8YN/pYRlZR829mDKdUB7nEIS6bNY9t9bVn3gfn6Qg1rB3GsNjOlkoVKidPGAMEwTG0sScfkgi9v0yLIvOuf76ZWhWP1knPpw/HEiUNg20okRmnXqy0hLH3u2TTT63x0XEDK6eJyJo/MbN+O0oA2AFk96ZxVutanwE6Vud0oTT1YOzaGhkkr7iQRDBmP4/dJDfJ37KjqSjL+t6W8/Zv+i3ydKhqqDXPEC6bryLGwbL+MDWXmqCEi1EhXGlf9B1Zg/ozpZfR0MVJhj+Cgq5QYkD+MrWlFM8F/QEnr/dywXh6Q6QCDSsQOPIDVNavUB9A3gqD3+ZEh37P+9uIS2W4ejcqKj53bG9QwIPGY/ej1cwo88huTk8Mv04LXcLxedPEj0COU3aVIxN3D5Y74BwHOcMvl2hTKcz54hUr2j4tJ1JVz/eBg9QMpMkjhXn4XmxsZ80qbPqpDbAxOnqNXD5gzYhhYp+mzWTu6/enS/zBRbeb66oe5Y9KXFtXucf56IfU+3+OoI9xMhnu+mBnN12uFJ4ugn5mXl1F4jUeJSWqHcVQ=
52 | file: $FRAMEWORK_NAME.framework.zip
53 | skip_cleanup: true
54 | on:
55 | repo: RxSwiftCommunity/$FRAMEWORK_NAME
56 | tags: true
57 | condition: $JOB = Xcode
58 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## Master
2 |
3 | ##### Breaking
4 |
5 | * None
6 |
7 | ##### Enhancements
8 |
9 | * None
10 |
11 | ##### Bug Fixes
12 |
13 | * None
14 |
15 | ## 0.2.0
16 |
17 | ##### Breaking
18 |
19 | * `stdin`, `stdout`, and `stderr` are now treated as raw `Data`.
20 | Encoding/Decoding is left to the user.
21 |
22 | ##### Enhancements
23 |
24 | * `stdin` is now available when `launch`ing a `Task`.
25 | * `Task` conforms to `CustomStringConvertible` and `Equatable`.
26 |
27 | ##### Bug Fixes
28 |
29 | * None
30 |
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "ReactiveX/RxSwift" ~> 3.2
2 |
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "ReactiveX/RxSwift" "3.2.0"
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 RxSwiftCommunity
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | import PackageDescription
2 |
3 | let package = Package(
4 | name: "RxTask",
5 | dependencies: [
6 | .Package(url: "https://github.com/ReactiveX/RxSwift.git", majorVersion: 3, minor: 2)
7 | ]
8 | )
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RxTask
2 | An [RxSwift](https://github.com/ReactiveX/RxSwift) implementation of a command line task runner.
3 |
4 | []()
5 | [](https://travis-ci.org/RxSwiftCommunity/RxTask)
6 | [](https://codecov.io/gh/RxSwiftCommunity/RxTask)
7 | [](https://RxSwiftCommunity.github.io/RxTask/)
8 | [](https://github.com/Carthage/Carthage)
9 | [](https://github.com/apple/swift-package-manager)
10 | 
11 | [](https://swift.org)
12 |
13 | ## Linux Compatibility
14 |
15 | Currently, RxTask does not support Linux. RxTask relies on some functionality
16 | in `Foundation` that is currently not available in the Linux port. This will be
17 | re-evaluated after the Swift 3.1 release. PRs in this area are quite welcome! 👍
18 |
19 | ## Installation
20 |
21 | ### Carthage
22 |
23 | ```shell
24 | github "RxSwiftCommunity/RxTask"
25 | ```
26 |
27 | ### SPM
28 |
29 | ```swift
30 | import PackageDescription
31 |
32 | let package = Package(
33 | name: "YOUR_PROJECT_NAME",
34 | targets: [],
35 | dependencies: [
36 | .Package(url: "https://github.com/RxSwiftCommunity/RxSwift.git", majorVersion: 0)
37 | ]
38 | )
39 | ```
40 |
41 | ## Usage
42 |
43 | ### Create A Task
44 |
45 | Creating a task is as simple as providing a `launchPath` to the executable.
46 |
47 | ```swift
48 | let task = Task(launchPath: "/bin/ls")
49 | ```
50 |
51 | Optionally, you can provide `arguments`, a `workingDirectory`, and an
52 | `environment`.
53 |
54 | ```swift
55 | let task = Task(launchPath: "/bin/echo", arguments: ["$MESSAGE"], environment: ["MESSAGE": "Hello World!"])
56 | ```
57 |
58 | ### Launch A Task
59 |
60 | `Task`s can be launched with the `launch()` method. This produces a
61 | self-contained process. This means the same task can be `launch()`ed multiple
62 | times producing separate processes.
63 |
64 | #### TaskEvent
65 |
66 | The output of `launch()` is a `Observable`. `TaskEvent` is an `enum`
67 | that is used to report significant events in the task lifetime. The possible
68 | events are:
69 |
70 | * `launch(command: String)`
71 | * `stdOut(Data)`
72 | * `stdErr(Data)`
73 | * `exit(statusCode: Int)`
74 |
75 | **Note:** Currently an event is only considered successful if it exits with a
76 | `statusCode` of 0. Other exit statuses will be considered a `TaskError`.
77 |
78 | #### StdIn
79 |
80 | If you create a task that expects input, you can provide an `Observable`
81 | for `stdin` when you are `launch()`ing the `Task`. Data will be written to
82 | `stdin` as soon as it is emitted by the `Observable`.
83 |
84 | #### Filtering TaskEvents
85 |
86 | If you are only concerned with whether a `Task` has completed successfully, you
87 | can use the built-in operator `justExitStatus()`.
88 |
89 | ```swift
90 | Task(launchPath: "/bin/ls").launch()
91 | .justExitStatus()
92 | .subscribe(onNext: { exitStatus in /* ... */ })
93 | .disposed(by: disposeBag)
94 | ```
95 |
96 | Alternatively, if you are only interested in the output of a `Task`, you can use
97 | the operator `justOutput()`. *This will send the output of both `stdout` and
98 | `stderr`*.
99 |
100 | ```swift
101 | Task(launchPath: "/bin/ls").launch()
102 | .justOutput()
103 | .subscribe(onNext: { output in /* ... */ })
104 | .disposed(by: disposeBag)
105 | ```
106 |
107 | #### TaskError
108 |
109 | `TaskError` is an `Error` that will be emitted under the following situations:
110 |
111 | * `uncaughtSignal`: The `Task` terminated with an uncaught signal (e.g. `SIGINT`).
112 | * `exit(statusCode: Int)`: The `Task` exited with a non-zero exit code.
113 |
114 | ## API Reference
115 |
116 | Full docs can be found [here](https://RxSwiftCommunity.github.io/RxTask/).
117 |
--------------------------------------------------------------------------------
/RxTask.xcodeproj/RxTaskTests_Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | CFBundleDevelopmentRegion
5 | en
6 | CFBundleExecutable
7 | $(EXECUTABLE_NAME)
8 | CFBundleIdentifier
9 | $(PRODUCT_BUNDLE_IDENTIFIER)
10 | CFBundleInfoDictionaryVersion
11 | 6.0
12 | CFBundleName
13 | $(PRODUCT_NAME)
14 | CFBundlePackageType
15 | BNDL
16 | CFBundleShortVersionString
17 | 1.0
18 | CFBundleSignature
19 | ????
20 | CFBundleVersion
21 | $(CURRENT_PROJECT_VERSION)
22 | NSPrincipalClass
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/RxTask.xcodeproj/RxTask_Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/RxTask.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/RxTask.xcodeproj/xcshareddata/xcschemes/RxTask.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
34 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
56 |
57 |
63 |
64 |
65 |
66 |
67 |
68 |
74 |
75 |
77 |
78 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/RxTask.xcodeproj/xcshareddata/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SchemeUserState
5 |
6 | RxRunner.xcscheme
7 |
8 |
9 | SuppressBuildableAutocreation
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Sources/Observable+Task.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Observable+Task.swift
3 | // RxTask
4 | //
5 | // Created by Scott Hoyt on 2/20/17.
6 | //
7 | //
8 |
9 | import Foundation
10 | import RxSwift
11 |
12 | /// A protocol encapsulated `TaskEvent`. Necessary to create `Observable` operators and not intended for public use.
13 | public protocol TaskEventType {
14 |
15 | /// The exit status code if available, `nil` otherwise.
16 | var exitStatus: Int? { get }
17 |
18 | /// The output of the event if available, `nil` otherwise.
19 | var output: Data? { get }
20 | }
21 |
22 | extension TaskEvent: TaskEventType {
23 |
24 | /// The exit status code if available, `nil` otherwise.
25 | public var exitStatus: Int? {
26 | switch self {
27 | case .exit(let statusCode):
28 | return statusCode
29 | default:
30 | return nil
31 | }
32 | }
33 |
34 | /// The output of the event if available, `nil` otherwise.
35 | public var output: Data? {
36 | switch self {
37 | case .stdErr(let output), .stdOut(let output):
38 | return output
39 | default:
40 | return nil
41 | }
42 | }
43 | }
44 |
45 | public extension Observable where Element: TaskEventType {
46 |
47 | /// Filters out the output and launch events to produce just an `Observable` of the exit status.
48 | func justExitStatus() -> Observable {
49 | return flatMap { event -> Observable in
50 | guard let exitStatus = event.exitStatus else {
51 | return Observable.empty()
52 | }
53 |
54 | return Observable.just(exitStatus)
55 | }
56 | }
57 |
58 | /// Filters out the launch and exit events to just produce and `Observable` of the output (`stdout` and `stderr`).
59 | func justOutput() -> Observable {
60 | return flatMap { event -> Observable in
61 | guard let output = event.output else {
62 | return Observable.empty()
63 | }
64 |
65 | return Observable.just(output)
66 | }
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/Sources/Task.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Runner.swift
3 | // RxTask
4 | //
5 | // Created by Scott Hoyt on 2/18/17.
6 | //
7 | //
8 |
9 | import Foundation
10 | import RxSwift
11 |
12 | #if os(Linux)
13 | typealias Process = Foundation.Task
14 |
15 | extension Process {
16 | var isRunning: Bool {
17 | return running
18 | }
19 | }
20 | #endif
21 |
22 | /// Event emitted by a launched `Task`.
23 | public enum TaskEvent {
24 |
25 | /// The `Task` has launched.
26 | case launch(command: String)
27 |
28 | /// The `Task` has output to `stdout`.
29 | case stdOut(Data)
30 |
31 | /// The `Task` has output to `stderr`.
32 | case stdErr(Data)
33 |
34 | /// The `Task` exited successfully.
35 | case exit(statusCode: Int)
36 | }
37 |
38 | extension TaskEvent: Equatable {
39 |
40 | /// Equates two `TaskEvent`s.
41 | public static func == (lhs: TaskEvent, rhs: TaskEvent) -> Bool {
42 | switch (lhs, rhs) {
43 | case let (.launch(left), .launch(right)):
44 | return left == right
45 | case let (.stdOut(left), .stdOut(right)):
46 | return left == right
47 | case let (.stdErr(left), .stdErr(right)):
48 | return left == right
49 | case let (.exit(left), .exit(right)):
50 | return left == right
51 | default:
52 | return false
53 | }
54 | }
55 | }
56 |
57 | /// An error encountered in the execution of a `Task`.
58 | public enum TaskError: Error {
59 |
60 | /// An uncaught signal was encountered.
61 | case uncaughtSignal
62 |
63 | /// The `Task` exited unsuccessfully.
64 | case exit(statusCode: Int)
65 | }
66 |
67 | extension TaskError: Equatable {
68 |
69 | /// Equates two `TaskError`s.
70 | public static func == (lhs: TaskError, rhs: TaskError) -> Bool {
71 | switch (lhs, rhs) {
72 | case (.uncaughtSignal, .uncaughtSignal):
73 | return true
74 | case let (.exit(left), .exit(right)):
75 | return left == right
76 | default:
77 | return false
78 | }
79 | }
80 | }
81 |
82 | /// Encapsulates launching a RxSwift powered command line task.
83 | public struct Task {
84 |
85 | /// The location of the executable.
86 | let launchPath: String
87 |
88 | /// The arguments to be passed to the executable.
89 | let arguments: [String]
90 |
91 | /// The working directory of the task. If `nil`, this will inherit from the parent process.
92 | let workingDirectory: String?
93 |
94 | /// The environment to launch the task with. If `nil`, this will inherit from the parent process.
95 | let environment: [String: String]?
96 |
97 | private let disposeBag = DisposeBag()
98 |
99 | /**
100 | Create a new task.
101 |
102 | - parameters:
103 | - launchPath: The location of the executable.
104 | - arguments: The arguments to be passed to the executable.
105 | - workingDirectory: The working directory of the task. If not used, this will inherit from the parent process.
106 | - environment: The environment to launch the task with. If not used, this will inherit from the parent process.
107 | */
108 | public init(launchPath: String, arguments: [String] = [], workingDirectory: String? = nil, environment: [String: String]? = nil) {
109 | self.launchPath = launchPath
110 | self.arguments = arguments
111 | self.workingDirectory = workingDirectory
112 | self.environment = environment
113 | }
114 |
115 | /**
116 | Launch the `Task`.
117 |
118 | - parameter stdIn: An optional `Observable` to provide `stdin` for the process. Defaults to `nil`.
119 | */
120 | public func launch(stdIn: Observable? = nil) -> Observable {
121 | let process = Process()
122 | process.launchPath = self.launchPath
123 | process.arguments = self.arguments
124 |
125 | if let workingDirectory = workingDirectory { process.currentDirectoryPath = workingDirectory }
126 | if let environment = environment { process.environment = environment }
127 |
128 | return Observable.create { observer in
129 | process.standardOutput = self.outPipe { observer.onNext(.stdOut($0)) }
130 | process.standardError = self.outPipe { observer.onNext(.stdErr($0)) }
131 |
132 | if let stdIn = stdIn {
133 | process.standardInput = self.inPipe(stdIn: stdIn, errorHandler: observer.onError)
134 | }
135 |
136 | process.terminationHandler = self.terminationHandler(observer: observer)
137 |
138 | observer.onNext(.launch(command: self.description))
139 | process.launch()
140 |
141 | return Disposables.create {
142 | if process.isRunning {
143 | process.terminate()
144 | }
145 | }
146 | }
147 | }
148 |
149 | private func terminationHandler(observer: AnyObserver) -> (Process) -> Void {
150 | // Handle process termination and determine if it was a normal exit
151 | // or an error.
152 | return { process in
153 | switch process.terminationReason {
154 | case .exit:
155 | if process.terminationStatus == 0 {
156 | observer.onNext(.exit(statusCode: Int(process.terminationStatus)))
157 | observer.onCompleted()
158 | } else {
159 | observer.onError(TaskError.exit(statusCode: Int(process.terminationStatus)))
160 | }
161 | case .uncaughtSignal:
162 | observer.onError(TaskError.uncaughtSignal)
163 | }
164 | }
165 | }
166 |
167 | private func outPipe(withHandler handler: @escaping (Data) -> Void) -> Pipe {
168 | let pipe = Pipe()
169 |
170 | pipe.fileHandleForReading.readabilityHandler = { handler($0.availableData) }
171 |
172 | return pipe
173 | }
174 |
175 | private func inPipe(stdIn: Observable, errorHandler: @escaping (Error) -> Void) -> Pipe {
176 | let pipe = Pipe()
177 |
178 | stdIn
179 | .subscribe(onNext: pipe.fileHandleForWriting.write)
180 | .disposed(by: disposeBag)
181 |
182 | return pipe
183 | }
184 | }
185 |
186 | extension Task: CustomStringConvertible {
187 |
188 | /// A `String` describing the `Task`.
189 | public var description: String {
190 | return ([launchPath] + arguments).joined(separator: " ")
191 | }
192 | }
193 |
194 | extension Task: Equatable {
195 |
196 | /// Whether or not two `Task`s are equal.
197 | public static func == (lhs: Task, rhs: Task) -> Bool {
198 | return lhs.launchPath == rhs.launchPath &&
199 | lhs.arguments == rhs.arguments &&
200 | lhs.workingDirectory == rhs.workingDirectory &&
201 | envsEqual(lhs: lhs.environment, rhs: rhs.environment)
202 | }
203 |
204 | private static func envsEqual(lhs: [String: String]?, rhs: [String: String]?) -> Bool {
205 | switch (lhs, rhs) {
206 | case (nil, nil):
207 | return true
208 | case let (.some(left), .some(right)):
209 | return left == right
210 | default:
211 | return false
212 | }
213 | }
214 | }
215 |
--------------------------------------------------------------------------------
/Tests/LinuxMain.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 | @testable import RxRunnerTests
3 |
4 | XCTMain([
5 | testCase(TaskTests.allTests),
6 | testCase(ObservableTaskTests.allTests)
7 | ])
8 |
--------------------------------------------------------------------------------
/Tests/RxTaskTests/Observable+TaskTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Observable+TaskTests.swift
3 | // RxTask
4 | //
5 | // Created by Scott Hoyt on 2/20/17.
6 | //
7 | //
8 |
9 | import XCTest
10 | @testable import RxTask
11 | import RxBlocking
12 |
13 | class ObservableTaskTests: XCTestCase {
14 | func testJustExitStatus() throws {
15 | let script = try ScriptFile(commands: [
16 | "echo hello",
17 | "echo world"
18 | ])
19 |
20 | let exitStatus = try Task(launchPath: script.path).launch()
21 | .justExitStatus()
22 | .toBlocking()
23 | .toArray()
24 |
25 | XCTAssertEqual(exitStatus.count, 1)
26 | XCTAssertEqual(exitStatus[0], 0)
27 | }
28 |
29 | func testJustOutput() throws {
30 | let script = try ScriptFile(commands: [
31 | "echo hello",
32 | "sleep 0.1",
33 | "echo world",
34 | "sleep 0.1"
35 | ])
36 |
37 | let exitStatus = try Task(launchPath: script.path).launch()
38 | .justOutput()
39 | .toBlocking()
40 | .toArray()
41 |
42 | XCTAssertEqual(exitStatus.count, 2)
43 | XCTAssertEqual(exitStatus[0], "hello\n".data(using: .utf8)!)
44 | XCTAssertEqual(exitStatus[1], "world\n".data(using: .utf8)!)
45 | }
46 |
47 | static var allTests: [(String, (ObservableTaskTests) -> () throws -> Void)] {
48 | return [
49 | ("testJustExitStatus", testJustExitStatus),
50 | ("testJustOutput", testJustOutput)
51 | ]
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Tests/RxTaskTests/ScriptFile.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScriptFile.swift
3 | // RxTask
4 | //
5 | // Created by Scott Hoyt on 2/20/17.
6 | //
7 | //
8 |
9 | import Foundation
10 |
11 | class ScriptFile {
12 | private let url: URL
13 |
14 | var path: String {
15 | return url.path
16 | }
17 |
18 | init(commands: [String]) throws {
19 | let fileName = UUID().uuidString + ".sh"
20 | let fileURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true).appendingPathComponent(fileName)
21 |
22 | let shebang = "#!/bin/bash"
23 | let contents = ([shebang] + commands).joined(separator: "\n")
24 | try contents.write(to: fileURL, atomically: true, encoding: .utf8)
25 |
26 | let permissions = Int16(0o0770)
27 | try FileManager.default.setAttributes([.posixPermissions: permissions], ofItemAtPath: fileURL.path)
28 | url = fileURL
29 | }
30 |
31 | deinit {
32 | try? FileManager.default.removeItem(at: url)
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/Tests/RxTaskTests/TaskTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TaskTests.swift
3 | // RxTask
4 | //
5 | // Created by Scott Hoyt on 2/20/17.
6 | //
7 | //
8 |
9 | import XCTest
10 | @testable import RxTask
11 | import RxSwift
12 | import RxBlocking
13 |
14 | class TaskTests: XCTestCase {
15 | func testStdOut() throws {
16 | let script = try ScriptFile(commands: [
17 | "echo hello world",
18 | "sleep 0.1"
19 | ])
20 |
21 | let events = try getEvents(for: script)
22 |
23 | XCTAssertEqual(events.count, 3)
24 | XCTAssertEqual(events[0], .launch(command: script.path))
25 | XCTAssertEqual(events[1], .stdOut("hello world\n".data(using: .utf8)!))
26 | XCTAssertEqual(events[2], .exit(statusCode: 0))
27 | }
28 |
29 | func testStdErr() throws {
30 | let script = try ScriptFile(commands: [
31 | "echo hello world 1>&2",
32 | "sleep 0.1"
33 | ])
34 |
35 | let events = try getEvents(for: script)
36 |
37 | XCTAssertEqual(events.count, 3)
38 | XCTAssertEqual(events[0], .launch(command: script.path))
39 | XCTAssertEqual(events[1], .stdErr("hello world\n".data(using: .utf8)!))
40 | XCTAssertEqual(events[2], .exit(statusCode: 0))
41 | }
42 |
43 | func testExitsWithFailingStatusErrors() throws {
44 | let script = try ScriptFile(commands: ["exit 100"])
45 |
46 | do {
47 | _ = try getEvents(for: script)
48 |
49 | // If we get this far it is a failure
50 | XCTFail()
51 | } catch {
52 | if let error = error as? TaskError {
53 | XCTAssertEqual(error, .exit(statusCode: 100))
54 | } else {
55 | XCTFail()
56 | }
57 | }
58 | }
59 |
60 | func testUncaughtSignalErrors() throws {
61 | let script = try ScriptFile(commands: [
62 | "kill $$",
63 | "sleep 10"
64 | ])
65 |
66 | do {
67 | _ = try getEvents(for: script)
68 |
69 | // If we get this far it is a failure
70 | XCTFail()
71 | } catch {
72 | if let error = error as? TaskError {
73 | XCTAssertEqual(error, .uncaughtSignal)
74 | } else {
75 | XCTFail()
76 | }
77 | }
78 | }
79 |
80 | func testStdIn() throws {
81 | let script = try ScriptFile(commands: [
82 | "read var1",
83 | "echo $var1",
84 | "sleep 0.1",
85 | "read var2",
86 | "echo $var2",
87 | "sleep 0.1"
88 | ])
89 |
90 | let stdIn = Observable.of("hello\n", "world\n").map { $0.data(using: .utf8) ?? Data() }
91 |
92 | let events = try Task(launchPath: script.path)
93 | .launch(stdIn: stdIn)
94 | .toBlocking()
95 | .toArray()
96 |
97 | XCTAssertEqual(events.count, 4)
98 | XCTAssertEqual(events[0], .launch(command: script.path))
99 | XCTAssertEqual(events[1], .stdOut("hello\n".data(using: .utf8)!))
100 | XCTAssertEqual(events[2], .stdOut("world\n".data(using: .utf8)!))
101 | XCTAssertEqual(events[3], .exit(statusCode: 0))
102 | }
103 |
104 | func testTaskEquality() {
105 | let task1 = Task(launchPath: "/bin/echo", arguments: ["$MESSAGE"], workingDirectory: "/", environment: ["MESSAGE": "Hello World!"])
106 | let task2 = Task(launchPath: "/bin/echo", arguments: ["$MESSAGE"], workingDirectory: "/", environment: ["MESSAGE": "Hello World!"])
107 | let task3 = Task(launchPath: "/bin/echo", arguments: ["$MESSAGE"], workingDirectory: "/")
108 | let task4 = Task(launchPath: "/bin/echo", arguments: ["$MESSAGE"], workingDirectory: "/")
109 |
110 | XCTAssertEqual(task1, task2)
111 | XCTAssertEqual(task3, task4)
112 |
113 | XCTAssertNotEqual(task1, task3)
114 | }
115 |
116 | static var allTests: [(String, (TaskTests) -> () throws -> Void)] {
117 | return [
118 | ("testStdOut", testStdOut),
119 | ("testStdErr", testStdErr),
120 | ("testExitsWithFailingStatusErrors", testExitsWithFailingStatusErrors),
121 | ("testUncaughtSignalErrors", testUncaughtSignalErrors)
122 | ]
123 | }
124 |
125 | // MARK: Helpers
126 |
127 | func getEvents(for script: ScriptFile) throws -> [TaskEvent] {
128 | return try Task(launchPath: script.path).launch()
129 | .toBlocking()
130 | .toArray()
131 | }
132 | }
133 |
--------------------------------------------------------------------------------
/docs/Enums.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Enums Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
33 |
34 |
40 |
41 |
42 |
43 |
44 | RxTask Reference
45 |
46 | Enums Reference
47 |
48 |
49 |
50 |
89 |
90 |
91 |
92 |
93 |
Enums
94 |
The following enums are available globally.
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | -
104 |
105 |
106 |
107 |
108 | TaskEvent
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
Event emitted by a launched Task
.
117 |
118 |
See more
119 |
120 |
121 |
Declaration
122 |
123 |
Swift
124 |
public enum TaskEvent
125 |
126 |
127 |
128 |
129 |
130 |
131 | -
132 |
133 |
134 |
135 |
136 | TaskError
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
An error encountered in the execution of a Task
.
145 |
146 |
See more
147 |
148 |
149 |
Declaration
150 |
151 |
Swift
152 |
public enum TaskError: Error
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
170 |
171 |
172 |
173 |
--------------------------------------------------------------------------------
/docs/Extensions.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Extensions Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
42 |
43 |
44 | RxTask Reference
45 |
46 | Extensions Reference
47 |
48 |
49 |
50 |
89 |
90 |
91 |
92 |
93 |
Extensions
94 |
The following extensions are available globally.
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | -
104 |
111 |
112 |
113 |
114 |
115 |
119 |
120 |
Declaration
121 |
122 |
Swift
123 |
class Observable<Element> : ObservableType
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
141 |
142 |
143 |
144 |
--------------------------------------------------------------------------------
/docs/Extensions/Observable.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Observable Extension Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
43 |
44 |
45 | RxTask Reference
46 |
47 | Observable Extension Reference
48 |
49 |
50 |
51 |
90 |
91 |
92 |
93 |
94 |
Observable
95 |
96 |
97 |
class Observable<Element> : ObservableType
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | -
110 |
117 |
118 |
119 |
120 |
121 |
122 |
Filters out the output and launch events to produce just an Observable
of the exit status.
123 |
124 |
125 |
126 |
Declaration
127 |
128 |
Swift
129 |
func justExitStatus() -> Observable<Int>
130 |
131 |
132 |
133 |
134 |
135 |
136 | -
137 |
144 |
145 |
146 |
147 |
148 |
149 |
Filters out the launch and exit events to just produce and Observable
of the output (stdout
and stderr
).
150 |
151 |
152 |
153 |
Declaration
154 |
155 |
Swift
156 |
func justOutput() -> Observable<Data>
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
174 |
175 |
176 |
177 |
--------------------------------------------------------------------------------
/docs/Protocols.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Protocols Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
42 |
43 |
44 | RxTask Reference
45 |
46 | Protocols Reference
47 |
48 |
49 |
50 |
89 |
90 |
91 |
92 |
93 |
Protocols
94 |
The following protocols are available globally.
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | -
104 |
111 |
112 |
113 |
114 |
115 |
116 |
A protocol encapsulated TaskEvent
. Necessary to create Observable
operators and not intended for public use.
117 |
118 |
See more
119 |
120 |
121 |
Declaration
122 |
123 |
Swift
124 |
public protocol TaskEventType
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
142 |
143 |
144 |
145 |
--------------------------------------------------------------------------------
/docs/Protocols/TaskEventType.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | TaskEventType Protocol Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
43 |
44 |
45 | RxTask Reference
46 |
47 | TaskEventType Protocol Reference
48 |
49 |
50 |
51 |
90 |
91 |
92 |
93 |
94 |
TaskEventType
95 |
96 |
97 |
public protocol TaskEventType
98 |
99 |
100 |
101 |
A protocol encapsulated TaskEvent
. Necessary to create Observable
operators and not intended for public use.
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 | -
111 |
118 |
119 |
120 |
121 |
122 |
123 |
The exit status code if available, nil
otherwise.
124 |
125 |
126 |
127 |
Declaration
128 |
129 |
Swift
130 |
var exitStatus: Int?
131 |
132 |
133 |
134 |
135 |
136 |
137 | -
138 |
139 |
140 |
141 |
142 | output
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
The output of the event if available, nil
otherwise.
151 |
152 |
153 |
154 |
Declaration
155 |
156 |
Swift
157 |
var output: Data?
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
175 |
176 |
177 |
178 |
--------------------------------------------------------------------------------
/docs/Structs.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Structs Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
42 |
43 |
44 | RxTask Reference
45 |
46 | Structs Reference
47 |
48 |
49 |
50 |
89 |
90 |
91 |
92 |
93 |
Structs
94 |
The following structs are available globally.
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | -
104 |
105 |
106 |
107 |
108 | Task
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
Encapsulates launching a RxSwift powered command line task.
117 |
118 |
See more
119 |
120 |
121 |
Declaration
122 |
123 |
Swift
124 |
public struct Task
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
142 |
143 |
144 |
145 |
--------------------------------------------------------------------------------
/docs/badge.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/css/highlight.css:
--------------------------------------------------------------------------------
1 | /* Credit to https://gist.github.com/wataru420/2048287 */
2 | .highlight {
3 | /* Comment */
4 | /* Error */
5 | /* Keyword */
6 | /* Operator */
7 | /* Comment.Multiline */
8 | /* Comment.Preproc */
9 | /* Comment.Single */
10 | /* Comment.Special */
11 | /* Generic.Deleted */
12 | /* Generic.Deleted.Specific */
13 | /* Generic.Emph */
14 | /* Generic.Error */
15 | /* Generic.Heading */
16 | /* Generic.Inserted */
17 | /* Generic.Inserted.Specific */
18 | /* Generic.Output */
19 | /* Generic.Prompt */
20 | /* Generic.Strong */
21 | /* Generic.Subheading */
22 | /* Generic.Traceback */
23 | /* Keyword.Constant */
24 | /* Keyword.Declaration */
25 | /* Keyword.Pseudo */
26 | /* Keyword.Reserved */
27 | /* Keyword.Type */
28 | /* Literal.Number */
29 | /* Literal.String */
30 | /* Name.Attribute */
31 | /* Name.Builtin */
32 | /* Name.Class */
33 | /* Name.Constant */
34 | /* Name.Entity */
35 | /* Name.Exception */
36 | /* Name.Function */
37 | /* Name.Namespace */
38 | /* Name.Tag */
39 | /* Name.Variable */
40 | /* Operator.Word */
41 | /* Text.Whitespace */
42 | /* Literal.Number.Float */
43 | /* Literal.Number.Hex */
44 | /* Literal.Number.Integer */
45 | /* Literal.Number.Oct */
46 | /* Literal.String.Backtick */
47 | /* Literal.String.Char */
48 | /* Literal.String.Doc */
49 | /* Literal.String.Double */
50 | /* Literal.String.Escape */
51 | /* Literal.String.Heredoc */
52 | /* Literal.String.Interpol */
53 | /* Literal.String.Other */
54 | /* Literal.String.Regex */
55 | /* Literal.String.Single */
56 | /* Literal.String.Symbol */
57 | /* Name.Builtin.Pseudo */
58 | /* Name.Variable.Class */
59 | /* Name.Variable.Global */
60 | /* Name.Variable.Instance */
61 | /* Literal.Number.Integer.Long */ }
62 | .highlight .c {
63 | color: #999988;
64 | font-style: italic; }
65 | .highlight .err {
66 | color: #a61717;
67 | background-color: #e3d2d2; }
68 | .highlight .k {
69 | color: #000000;
70 | font-weight: bold; }
71 | .highlight .o {
72 | color: #000000;
73 | font-weight: bold; }
74 | .highlight .cm {
75 | color: #999988;
76 | font-style: italic; }
77 | .highlight .cp {
78 | color: #999999;
79 | font-weight: bold; }
80 | .highlight .c1 {
81 | color: #999988;
82 | font-style: italic; }
83 | .highlight .cs {
84 | color: #999999;
85 | font-weight: bold;
86 | font-style: italic; }
87 | .highlight .gd {
88 | color: #000000;
89 | background-color: #ffdddd; }
90 | .highlight .gd .x {
91 | color: #000000;
92 | background-color: #ffaaaa; }
93 | .highlight .ge {
94 | color: #000000;
95 | font-style: italic; }
96 | .highlight .gr {
97 | color: #aa0000; }
98 | .highlight .gh {
99 | color: #999999; }
100 | .highlight .gi {
101 | color: #000000;
102 | background-color: #ddffdd; }
103 | .highlight .gi .x {
104 | color: #000000;
105 | background-color: #aaffaa; }
106 | .highlight .go {
107 | color: #888888; }
108 | .highlight .gp {
109 | color: #555555; }
110 | .highlight .gs {
111 | font-weight: bold; }
112 | .highlight .gu {
113 | color: #aaaaaa; }
114 | .highlight .gt {
115 | color: #aa0000; }
116 | .highlight .kc {
117 | color: #000000;
118 | font-weight: bold; }
119 | .highlight .kd {
120 | color: #000000;
121 | font-weight: bold; }
122 | .highlight .kp {
123 | color: #000000;
124 | font-weight: bold; }
125 | .highlight .kr {
126 | color: #000000;
127 | font-weight: bold; }
128 | .highlight .kt {
129 | color: #445588; }
130 | .highlight .m {
131 | color: #009999; }
132 | .highlight .s {
133 | color: #d14; }
134 | .highlight .na {
135 | color: #008080; }
136 | .highlight .nb {
137 | color: #0086B3; }
138 | .highlight .nc {
139 | color: #445588;
140 | font-weight: bold; }
141 | .highlight .no {
142 | color: #008080; }
143 | .highlight .ni {
144 | color: #800080; }
145 | .highlight .ne {
146 | color: #990000;
147 | font-weight: bold; }
148 | .highlight .nf {
149 | color: #990000; }
150 | .highlight .nn {
151 | color: #555555; }
152 | .highlight .nt {
153 | color: #000080; }
154 | .highlight .nv {
155 | color: #008080; }
156 | .highlight .ow {
157 | color: #000000;
158 | font-weight: bold; }
159 | .highlight .w {
160 | color: #bbbbbb; }
161 | .highlight .mf {
162 | color: #009999; }
163 | .highlight .mh {
164 | color: #009999; }
165 | .highlight .mi {
166 | color: #009999; }
167 | .highlight .mo {
168 | color: #009999; }
169 | .highlight .sb {
170 | color: #d14; }
171 | .highlight .sc {
172 | color: #d14; }
173 | .highlight .sd {
174 | color: #d14; }
175 | .highlight .s2 {
176 | color: #d14; }
177 | .highlight .se {
178 | color: #d14; }
179 | .highlight .sh {
180 | color: #d14; }
181 | .highlight .si {
182 | color: #d14; }
183 | .highlight .sx {
184 | color: #d14; }
185 | .highlight .sr {
186 | color: #009926; }
187 | .highlight .s1 {
188 | color: #d14; }
189 | .highlight .ss {
190 | color: #990073; }
191 | .highlight .bp {
192 | color: #999999; }
193 | .highlight .vc {
194 | color: #008080; }
195 | .highlight .vg {
196 | color: #008080; }
197 | .highlight .vi {
198 | color: #008080; }
199 | .highlight .il {
200 | color: #009999; }
201 |
--------------------------------------------------------------------------------
/docs/css/jazzy.css:
--------------------------------------------------------------------------------
1 | *, *:before, *:after {
2 | box-sizing: inherit; }
3 |
4 | body {
5 | margin: 0;
6 | background: #fff;
7 | color: #333;
8 | font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
9 | letter-spacing: .2px;
10 | -webkit-font-smoothing: antialiased;
11 | box-sizing: border-box; }
12 |
13 | h1 {
14 | font-size: 2rem;
15 | font-weight: 700;
16 | margin: 1.275em 0 0.6em; }
17 |
18 | h2 {
19 | font-size: 1.75rem;
20 | font-weight: 700;
21 | margin: 1.275em 0 0.3em; }
22 |
23 | h3 {
24 | font-size: 1.5rem;
25 | font-weight: 700;
26 | margin: 1em 0 0.3em; }
27 |
28 | h4 {
29 | font-size: 1.25rem;
30 | font-weight: 700;
31 | margin: 1.275em 0 0.85em; }
32 |
33 | h5 {
34 | font-size: 1rem;
35 | font-weight: 700;
36 | margin: 1.275em 0 0.85em; }
37 |
38 | h6 {
39 | font-size: 1rem;
40 | font-weight: 700;
41 | margin: 1.275em 0 0.85em;
42 | color: #777; }
43 |
44 | p {
45 | margin: 0 0 1em; }
46 |
47 | ul, ol {
48 | padding: 0 0 0 2em;
49 | margin: 0 0 0.85em; }
50 |
51 | blockquote {
52 | margin: 0 0 0.85em;
53 | padding: 0 15px;
54 | color: #858585;
55 | border-left: 4px solid #e5e5e5; }
56 |
57 | img {
58 | max-width: 100%; }
59 |
60 | a {
61 | color: #4183c4;
62 | text-decoration: none; }
63 | a:hover, a:focus {
64 | outline: 0;
65 | text-decoration: underline; }
66 |
67 | table {
68 | background: #fff;
69 | width: 100%;
70 | border-collapse: collapse;
71 | border-spacing: 0;
72 | overflow: auto;
73 | margin: 0 0 0.85em; }
74 |
75 | tr:nth-child(2n) {
76 | background-color: #fbfbfb; }
77 |
78 | th, td {
79 | padding: 6px 13px;
80 | border: 1px solid #ddd; }
81 |
82 | pre {
83 | margin: 0 0 1.275em;
84 | padding: .85em 1em;
85 | overflow: auto;
86 | background: #f7f7f7;
87 | font-size: .85em;
88 | font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; }
89 |
90 | code {
91 | font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; }
92 |
93 | p > code, li > code {
94 | background: #f7f7f7;
95 | padding: .2em; }
96 | p > code:before, p > code:after, li > code:before, li > code:after {
97 | letter-spacing: -.2em;
98 | content: "\00a0"; }
99 |
100 | pre code {
101 | padding: 0;
102 | white-space: pre; }
103 |
104 | .content-wrapper {
105 | display: flex;
106 | flex-direction: column; }
107 | @media (min-width: 768px) {
108 | .content-wrapper {
109 | flex-direction: row; } }
110 |
111 | .header {
112 | display: flex;
113 | padding: 8px;
114 | font-size: 0.875em;
115 | background: #444;
116 | color: #999; }
117 |
118 | .header-col {
119 | margin: 0;
120 | padding: 0 8px; }
121 |
122 | .header-col--primary {
123 | flex: 1; }
124 |
125 | .header-link {
126 | color: #fff; }
127 |
128 | .header-icon {
129 | padding-right: 6px;
130 | vertical-align: -4px;
131 | height: 16px; }
132 |
133 | .breadcrumbs {
134 | font-size: 0.875em;
135 | padding: 8px 16px;
136 | margin: 0;
137 | background: #fbfbfb;
138 | border-bottom: 1px solid #ddd; }
139 |
140 | .carat {
141 | height: 10px;
142 | margin: 0 5px; }
143 |
144 | .navigation {
145 | order: 2; }
146 | @media (min-width: 768px) {
147 | .navigation {
148 | order: 1;
149 | width: 25%;
150 | max-width: 300px;
151 | padding-bottom: 64px;
152 | overflow: hidden;
153 | word-wrap: normal;
154 | background: #fbfbfb;
155 | border-right: 1px solid #ddd; } }
156 |
157 | .nav-groups {
158 | list-style-type: none;
159 | padding-left: 0; }
160 |
161 | .nav-group-name {
162 | border-bottom: 1px solid #ddd;
163 | padding: 8px 0 8px 16px; }
164 |
165 | .nav-group-name-link {
166 | color: #333; }
167 |
168 | .nav-group-tasks {
169 | margin: 8px 0;
170 | padding: 0 0 0 8px; }
171 |
172 | .nav-group-task {
173 | font-size: 1em;
174 | list-style-type: none;
175 | white-space: nowrap; }
176 |
177 | .nav-group-task-link {
178 | color: #808080; }
179 |
180 | .main-content {
181 | order: 1; }
182 | @media (min-width: 768px) {
183 | .main-content {
184 | order: 2;
185 | flex: 1;
186 | padding-bottom: 60px; } }
187 |
188 | .section {
189 | padding: 0 32px;
190 | border-bottom: 1px solid #ddd; }
191 |
192 | .section-content {
193 | max-width: 834px;
194 | margin: 0 auto;
195 | padding: 16px 0; }
196 |
197 | .section-name {
198 | color: #666;
199 | display: block; }
200 |
201 | .declaration .highlight {
202 | overflow-x: initial;
203 | padding: 8px 0;
204 | margin: 0;
205 | background-color: transparent;
206 | border: none; }
207 |
208 | .task-group-section {
209 | border-top: 1px solid #ddd; }
210 |
211 | .task-group {
212 | padding-top: 0px; }
213 |
214 | .task-name-container a[name]:before {
215 | content: "";
216 | display: block; }
217 |
218 | .item-container {
219 | padding: 0; }
220 |
221 | .item {
222 | padding-top: 8px;
223 | width: 100%;
224 | list-style-type: none; }
225 | .item a[name]:before {
226 | content: "";
227 | display: block; }
228 | .item .token {
229 | padding-left: 3px;
230 | margin-left: 0px;
231 | font-size: 1rem; }
232 | .item .declaration-note {
233 | font-size: .85em;
234 | color: #808080;
235 | font-style: italic; }
236 |
237 | .pointer-container {
238 | border-bottom: 1px solid #ddd;
239 | left: -23px;
240 | padding-bottom: 13px;
241 | position: relative;
242 | width: 110%; }
243 |
244 | .pointer {
245 | left: 21px;
246 | top: 7px;
247 | display: block;
248 | position: absolute;
249 | width: 12px;
250 | height: 12px;
251 | border-left: 1px solid #ddd;
252 | border-top: 1px solid #ddd;
253 | background: #fff;
254 | transform: rotate(45deg); }
255 |
256 | .height-container {
257 | display: none;
258 | position: relative;
259 | width: 100%;
260 | overflow: hidden; }
261 | .height-container .section {
262 | background: #fff;
263 | border: 1px solid #ddd;
264 | border-top-width: 0;
265 | padding-top: 10px;
266 | padding-bottom: 5px;
267 | padding: 8px 16px; }
268 |
269 | .aside, .language {
270 | padding: 6px 12px;
271 | margin: 12px 0;
272 | border-left: 5px solid #dddddd;
273 | overflow-y: hidden; }
274 | .aside .aside-title, .language .aside-title {
275 | font-size: 9px;
276 | letter-spacing: 2px;
277 | text-transform: uppercase;
278 | padding-bottom: 0;
279 | margin: 0;
280 | color: #aaa;
281 | -webkit-user-select: none; }
282 | .aside p:last-child, .language p:last-child {
283 | margin-bottom: 0; }
284 |
285 | .language {
286 | border-left: 5px solid #cde9f4; }
287 | .language .aside-title {
288 | color: #4183c4; }
289 |
290 | .aside-warning {
291 | border-left: 5px solid #ff6666; }
292 | .aside-warning .aside-title {
293 | color: #ff0000; }
294 |
295 | .graybox {
296 | border-collapse: collapse;
297 | width: 100%; }
298 | .graybox p {
299 | margin: 0;
300 | word-break: break-word;
301 | min-width: 50px; }
302 | .graybox td {
303 | border: 1px solid #ddd;
304 | padding: 5px 25px 5px 10px;
305 | vertical-align: middle; }
306 | .graybox tr td:first-of-type {
307 | text-align: right;
308 | padding: 7px;
309 | vertical-align: top;
310 | word-break: normal;
311 | width: 40px; }
312 |
313 | .slightly-smaller {
314 | font-size: 0.9em; }
315 |
316 | .footer {
317 | padding: 8px 16px;
318 | background: #444;
319 | color: #ddd;
320 | font-size: 0.8em; }
321 | .footer p {
322 | margin: 8px 0; }
323 | .footer a {
324 | color: #fff; }
325 |
326 | html.dash .header, html.dash .breadcrumbs, html.dash .navigation {
327 | display: none; }
328 | html.dash .height-container {
329 | display: block; }
330 |
331 | form[role=search] input {
332 | font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
333 | font-size: 14px;
334 | line-height: 24px;
335 | padding: 0 10px;
336 | margin: 0;
337 | border: none;
338 | border-radius: 1em; }
339 | .loading form[role=search] input {
340 | background: white url(../img/spinner.gif) center right 4px no-repeat; }
341 | form[role=search] .tt-menu {
342 | margin: 0;
343 | min-width: 300px;
344 | background: #fbfbfb;
345 | color: #333;
346 | border: 1px solid #ddd; }
347 | form[role=search] .tt-highlight {
348 | font-weight: bold; }
349 | form[role=search] .tt-suggestion {
350 | font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
351 | padding: 0 8px; }
352 | form[role=search] .tt-suggestion span {
353 | display: table-cell;
354 | white-space: nowrap; }
355 | form[role=search] .tt-suggestion .doc-parent-name {
356 | width: 100%;
357 | text-align: right;
358 | font-weight: normal;
359 | font-size: 0.9em;
360 | padding-left: 16px; }
361 | form[role=search] .tt-suggestion:hover,
362 | form[role=search] .tt-suggestion.tt-cursor {
363 | cursor: pointer;
364 | background-color: #4183c4;
365 | color: #fff; }
366 | form[role=search] .tt-suggestion:hover .doc-parent-name,
367 | form[role=search] .tt-suggestion.tt-cursor .doc-parent-name {
368 | color: #fff; }
369 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleIdentifier
6 | com.jazzy.
7 | CFBundleName
8 |
9 | DocSetPlatformFamily
10 |
11 | isDashDocset
12 |
13 | dashIndexFilePath
14 | index.html
15 | isJavaScriptEnabled
16 |
17 | DashDocSetFamily
18 | dashtoc
19 |
20 |
21 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/Enums.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Enums Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
36 |
37 |
38 | Reference
39 |
40 | Enums Reference
41 |
42 |
43 |
44 |
83 |
84 |
85 |
86 |
87 |
Enums
88 |
The following enums are available globally.
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | -
98 |
105 |
106 |
107 |
108 |
109 |
110 |
Event emitted by a launched Task
.
111 |
112 |
See more
113 |
114 |
115 |
Declaration
116 |
117 |
Swift
118 |
public enum TaskEvent
119 |
120 |
121 |
122 |
123 |
124 |
125 | -
126 |
127 |
128 |
129 |
130 | TaskError
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
An error encountered in the execution of a Task
.
139 |
140 |
See more
141 |
142 |
143 |
Declaration
144 |
145 |
Swift
146 |
public enum TaskError: Error
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
164 |
165 |
166 |
167 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/Extensions.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Extensions Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
36 |
37 |
38 | Reference
39 |
40 | Extensions Reference
41 |
42 |
43 |
44 |
83 |
84 |
85 |
86 |
87 |
Extensions
88 |
The following extensions are available globally.
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | -
98 |
105 |
106 |
107 |
108 |
109 |
113 |
114 |
Declaration
115 |
116 |
Swift
117 |
class Observable<Element> : ObservableType
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
135 |
136 |
137 |
138 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/Extensions/Observable.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Observable Extension Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
37 |
38 |
39 | Reference
40 |
41 | Observable Extension Reference
42 |
43 |
44 |
45 |
84 |
85 |
86 |
87 |
88 |
Observable
89 |
90 |
91 |
class Observable<Element> : ObservableType
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | -
104 |
111 |
112 |
113 |
114 |
115 |
116 |
Filters out the output and launch events to produce just an Observable
of the exit status.
117 |
118 |
119 |
120 |
Declaration
121 |
122 |
Swift
123 |
func justExitStatus() -> Observable<Int>
124 |
125 |
126 |
127 |
128 |
129 |
130 | -
131 |
138 |
139 |
140 |
141 |
142 |
143 |
Filters out the launch and exit events to just produce and Observable
of the output (stdout
and stderr
).
144 |
145 |
146 |
147 |
Declaration
148 |
149 |
Swift
150 |
func justOutput() -> Observable<String>
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
168 |
169 |
170 |
171 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/Protocols.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Protocols Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
36 |
37 |
38 | Reference
39 |
40 | Protocols Reference
41 |
42 |
43 |
44 |
83 |
84 |
85 |
86 |
87 |
Protocols
88 |
The following protocols are available globally.
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | -
98 |
105 |
106 |
107 |
108 |
109 |
110 |
A protocol encapsulated TaskEvent
. Necessary to create Observable
operators and not intended for public use.
111 |
112 |
See more
113 |
114 |
115 |
Declaration
116 |
117 |
Swift
118 |
public protocol TaskEventType
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
136 |
137 |
138 |
139 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/Protocols/TaskEventType.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | TaskEventType Protocol Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
37 |
38 |
39 | Reference
40 |
41 | TaskEventType Protocol Reference
42 |
43 |
44 |
45 |
84 |
85 |
86 |
87 |
88 |
TaskEventType
89 |
90 |
91 |
public protocol TaskEventType
92 |
93 |
94 |
95 |
A protocol encapsulated TaskEvent
. Necessary to create Observable
operators and not intended for public use.
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 | -
105 |
112 |
113 |
114 |
115 |
116 |
117 |
The exit status code if available, nil
otherwise.
118 |
119 |
120 |
121 |
Declaration
122 |
123 |
Swift
124 |
var exitStatus: Int?
125 |
126 |
127 |
128 |
129 |
130 |
131 | -
132 |
133 |
134 |
135 |
136 | output
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
The output of the event if available, nil
otherwise.
145 |
146 |
147 |
148 |
Declaration
149 |
150 |
Swift
151 |
var output: String?
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
169 |
170 |
171 |
172 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/Structs.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Structs Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
36 |
37 |
38 | Reference
39 |
40 | Structs Reference
41 |
42 |
43 |
44 |
83 |
84 |
85 |
86 |
87 |
Structs
88 |
The following structs are available globally.
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | -
98 |
99 |
100 |
101 |
102 | Task
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
Encapsulates launching a RxSwift powered command line task.
111 |
112 |
See more
113 |
114 |
115 |
Declaration
116 |
117 |
Swift
118 |
public struct Task
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
136 |
137 |
138 |
139 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css:
--------------------------------------------------------------------------------
1 | /* Credit to https://gist.github.com/wataru420/2048287 */
2 | .highlight {
3 | /* Comment */
4 | /* Error */
5 | /* Keyword */
6 | /* Operator */
7 | /* Comment.Multiline */
8 | /* Comment.Preproc */
9 | /* Comment.Single */
10 | /* Comment.Special */
11 | /* Generic.Deleted */
12 | /* Generic.Deleted.Specific */
13 | /* Generic.Emph */
14 | /* Generic.Error */
15 | /* Generic.Heading */
16 | /* Generic.Inserted */
17 | /* Generic.Inserted.Specific */
18 | /* Generic.Output */
19 | /* Generic.Prompt */
20 | /* Generic.Strong */
21 | /* Generic.Subheading */
22 | /* Generic.Traceback */
23 | /* Keyword.Constant */
24 | /* Keyword.Declaration */
25 | /* Keyword.Pseudo */
26 | /* Keyword.Reserved */
27 | /* Keyword.Type */
28 | /* Literal.Number */
29 | /* Literal.String */
30 | /* Name.Attribute */
31 | /* Name.Builtin */
32 | /* Name.Class */
33 | /* Name.Constant */
34 | /* Name.Entity */
35 | /* Name.Exception */
36 | /* Name.Function */
37 | /* Name.Namespace */
38 | /* Name.Tag */
39 | /* Name.Variable */
40 | /* Operator.Word */
41 | /* Text.Whitespace */
42 | /* Literal.Number.Float */
43 | /* Literal.Number.Hex */
44 | /* Literal.Number.Integer */
45 | /* Literal.Number.Oct */
46 | /* Literal.String.Backtick */
47 | /* Literal.String.Char */
48 | /* Literal.String.Doc */
49 | /* Literal.String.Double */
50 | /* Literal.String.Escape */
51 | /* Literal.String.Heredoc */
52 | /* Literal.String.Interpol */
53 | /* Literal.String.Other */
54 | /* Literal.String.Regex */
55 | /* Literal.String.Single */
56 | /* Literal.String.Symbol */
57 | /* Name.Builtin.Pseudo */
58 | /* Name.Variable.Class */
59 | /* Name.Variable.Global */
60 | /* Name.Variable.Instance */
61 | /* Literal.Number.Integer.Long */ }
62 | .highlight .c {
63 | color: #999988;
64 | font-style: italic; }
65 | .highlight .err {
66 | color: #a61717;
67 | background-color: #e3d2d2; }
68 | .highlight .k {
69 | color: #000000;
70 | font-weight: bold; }
71 | .highlight .o {
72 | color: #000000;
73 | font-weight: bold; }
74 | .highlight .cm {
75 | color: #999988;
76 | font-style: italic; }
77 | .highlight .cp {
78 | color: #999999;
79 | font-weight: bold; }
80 | .highlight .c1 {
81 | color: #999988;
82 | font-style: italic; }
83 | .highlight .cs {
84 | color: #999999;
85 | font-weight: bold;
86 | font-style: italic; }
87 | .highlight .gd {
88 | color: #000000;
89 | background-color: #ffdddd; }
90 | .highlight .gd .x {
91 | color: #000000;
92 | background-color: #ffaaaa; }
93 | .highlight .ge {
94 | color: #000000;
95 | font-style: italic; }
96 | .highlight .gr {
97 | color: #aa0000; }
98 | .highlight .gh {
99 | color: #999999; }
100 | .highlight .gi {
101 | color: #000000;
102 | background-color: #ddffdd; }
103 | .highlight .gi .x {
104 | color: #000000;
105 | background-color: #aaffaa; }
106 | .highlight .go {
107 | color: #888888; }
108 | .highlight .gp {
109 | color: #555555; }
110 | .highlight .gs {
111 | font-weight: bold; }
112 | .highlight .gu {
113 | color: #aaaaaa; }
114 | .highlight .gt {
115 | color: #aa0000; }
116 | .highlight .kc {
117 | color: #000000;
118 | font-weight: bold; }
119 | .highlight .kd {
120 | color: #000000;
121 | font-weight: bold; }
122 | .highlight .kp {
123 | color: #000000;
124 | font-weight: bold; }
125 | .highlight .kr {
126 | color: #000000;
127 | font-weight: bold; }
128 | .highlight .kt {
129 | color: #445588; }
130 | .highlight .m {
131 | color: #009999; }
132 | .highlight .s {
133 | color: #d14; }
134 | .highlight .na {
135 | color: #008080; }
136 | .highlight .nb {
137 | color: #0086B3; }
138 | .highlight .nc {
139 | color: #445588;
140 | font-weight: bold; }
141 | .highlight .no {
142 | color: #008080; }
143 | .highlight .ni {
144 | color: #800080; }
145 | .highlight .ne {
146 | color: #990000;
147 | font-weight: bold; }
148 | .highlight .nf {
149 | color: #990000; }
150 | .highlight .nn {
151 | color: #555555; }
152 | .highlight .nt {
153 | color: #000080; }
154 | .highlight .nv {
155 | color: #008080; }
156 | .highlight .ow {
157 | color: #000000;
158 | font-weight: bold; }
159 | .highlight .w {
160 | color: #bbbbbb; }
161 | .highlight .mf {
162 | color: #009999; }
163 | .highlight .mh {
164 | color: #009999; }
165 | .highlight .mi {
166 | color: #009999; }
167 | .highlight .mo {
168 | color: #009999; }
169 | .highlight .sb {
170 | color: #d14; }
171 | .highlight .sc {
172 | color: #d14; }
173 | .highlight .sd {
174 | color: #d14; }
175 | .highlight .s2 {
176 | color: #d14; }
177 | .highlight .se {
178 | color: #d14; }
179 | .highlight .sh {
180 | color: #d14; }
181 | .highlight .si {
182 | color: #d14; }
183 | .highlight .sx {
184 | color: #d14; }
185 | .highlight .sr {
186 | color: #009926; }
187 | .highlight .s1 {
188 | color: #d14; }
189 | .highlight .ss {
190 | color: #990073; }
191 | .highlight .bp {
192 | color: #999999; }
193 | .highlight .vc {
194 | color: #008080; }
195 | .highlight .vg {
196 | color: #008080; }
197 | .highlight .vi {
198 | color: #008080; }
199 | .highlight .il {
200 | color: #009999; }
201 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css:
--------------------------------------------------------------------------------
1 | *, *:before, *:after {
2 | box-sizing: inherit; }
3 |
4 | body {
5 | margin: 0;
6 | background: #fff;
7 | color: #333;
8 | font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
9 | letter-spacing: .2px;
10 | -webkit-font-smoothing: antialiased;
11 | box-sizing: border-box; }
12 |
13 | h1 {
14 | font-size: 2rem;
15 | font-weight: 700;
16 | margin: 1.275em 0 0.6em; }
17 |
18 | h2 {
19 | font-size: 1.75rem;
20 | font-weight: 700;
21 | margin: 1.275em 0 0.3em; }
22 |
23 | h3 {
24 | font-size: 1.5rem;
25 | font-weight: 700;
26 | margin: 1em 0 0.3em; }
27 |
28 | h4 {
29 | font-size: 1.25rem;
30 | font-weight: 700;
31 | margin: 1.275em 0 0.85em; }
32 |
33 | h5 {
34 | font-size: 1rem;
35 | font-weight: 700;
36 | margin: 1.275em 0 0.85em; }
37 |
38 | h6 {
39 | font-size: 1rem;
40 | font-weight: 700;
41 | margin: 1.275em 0 0.85em;
42 | color: #777; }
43 |
44 | p {
45 | margin: 0 0 1em; }
46 |
47 | ul, ol {
48 | padding: 0 0 0 2em;
49 | margin: 0 0 0.85em; }
50 |
51 | blockquote {
52 | margin: 0 0 0.85em;
53 | padding: 0 15px;
54 | color: #858585;
55 | border-left: 4px solid #e5e5e5; }
56 |
57 | img {
58 | max-width: 100%; }
59 |
60 | a {
61 | color: #4183c4;
62 | text-decoration: none; }
63 | a:hover, a:focus {
64 | outline: 0;
65 | text-decoration: underline; }
66 |
67 | table {
68 | background: #fff;
69 | width: 100%;
70 | border-collapse: collapse;
71 | border-spacing: 0;
72 | overflow: auto;
73 | margin: 0 0 0.85em; }
74 |
75 | tr:nth-child(2n) {
76 | background-color: #fbfbfb; }
77 |
78 | th, td {
79 | padding: 6px 13px;
80 | border: 1px solid #ddd; }
81 |
82 | pre {
83 | margin: 0 0 1.275em;
84 | padding: .85em 1em;
85 | overflow: auto;
86 | background: #f7f7f7;
87 | font-size: .85em;
88 | font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; }
89 |
90 | code {
91 | font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; }
92 |
93 | p > code, li > code {
94 | background: #f7f7f7;
95 | padding: .2em; }
96 | p > code:before, p > code:after, li > code:before, li > code:after {
97 | letter-spacing: -.2em;
98 | content: "\00a0"; }
99 |
100 | pre code {
101 | padding: 0;
102 | white-space: pre; }
103 |
104 | .content-wrapper {
105 | display: flex;
106 | flex-direction: column; }
107 | @media (min-width: 768px) {
108 | .content-wrapper {
109 | flex-direction: row; } }
110 |
111 | .header {
112 | display: flex;
113 | padding: 8px;
114 | font-size: 0.875em;
115 | background: #444;
116 | color: #999; }
117 |
118 | .header-col {
119 | margin: 0;
120 | padding: 0 8px; }
121 |
122 | .header-col--primary {
123 | flex: 1; }
124 |
125 | .header-link {
126 | color: #fff; }
127 |
128 | .header-icon {
129 | padding-right: 6px;
130 | vertical-align: -4px;
131 | height: 16px; }
132 |
133 | .breadcrumbs {
134 | font-size: 0.875em;
135 | padding: 8px 16px;
136 | margin: 0;
137 | background: #fbfbfb;
138 | border-bottom: 1px solid #ddd; }
139 |
140 | .carat {
141 | height: 10px;
142 | margin: 0 5px; }
143 |
144 | .navigation {
145 | order: 2; }
146 | @media (min-width: 768px) {
147 | .navigation {
148 | order: 1;
149 | width: 25%;
150 | max-width: 300px;
151 | padding-bottom: 64px;
152 | overflow: hidden;
153 | word-wrap: normal;
154 | background: #fbfbfb;
155 | border-right: 1px solid #ddd; } }
156 |
157 | .nav-groups {
158 | list-style-type: none;
159 | padding-left: 0; }
160 |
161 | .nav-group-name {
162 | border-bottom: 1px solid #ddd;
163 | padding: 8px 0 8px 16px; }
164 |
165 | .nav-group-name-link {
166 | color: #333; }
167 |
168 | .nav-group-tasks {
169 | margin: 8px 0;
170 | padding: 0 0 0 8px; }
171 |
172 | .nav-group-task {
173 | font-size: 1em;
174 | list-style-type: none;
175 | white-space: nowrap; }
176 |
177 | .nav-group-task-link {
178 | color: #808080; }
179 |
180 | .main-content {
181 | order: 1; }
182 | @media (min-width: 768px) {
183 | .main-content {
184 | order: 2;
185 | flex: 1;
186 | padding-bottom: 60px; } }
187 |
188 | .section {
189 | padding: 0 32px;
190 | border-bottom: 1px solid #ddd; }
191 |
192 | .section-content {
193 | max-width: 834px;
194 | margin: 0 auto;
195 | padding: 16px 0; }
196 |
197 | .section-name {
198 | color: #666;
199 | display: block; }
200 |
201 | .declaration .highlight {
202 | overflow-x: initial;
203 | padding: 8px 0;
204 | margin: 0;
205 | background-color: transparent;
206 | border: none; }
207 |
208 | .task-group-section {
209 | border-top: 1px solid #ddd; }
210 |
211 | .task-group {
212 | padding-top: 0px; }
213 |
214 | .task-name-container a[name]:before {
215 | content: "";
216 | display: block; }
217 |
218 | .item-container {
219 | padding: 0; }
220 |
221 | .item {
222 | padding-top: 8px;
223 | width: 100%;
224 | list-style-type: none; }
225 | .item a[name]:before {
226 | content: "";
227 | display: block; }
228 | .item .token {
229 | padding-left: 3px;
230 | margin-left: 0px;
231 | font-size: 1rem; }
232 | .item .declaration-note {
233 | font-size: .85em;
234 | color: #808080;
235 | font-style: italic; }
236 |
237 | .pointer-container {
238 | border-bottom: 1px solid #ddd;
239 | left: -23px;
240 | padding-bottom: 13px;
241 | position: relative;
242 | width: 110%; }
243 |
244 | .pointer {
245 | left: 21px;
246 | top: 7px;
247 | display: block;
248 | position: absolute;
249 | width: 12px;
250 | height: 12px;
251 | border-left: 1px solid #ddd;
252 | border-top: 1px solid #ddd;
253 | background: #fff;
254 | transform: rotate(45deg); }
255 |
256 | .height-container {
257 | display: none;
258 | position: relative;
259 | width: 100%;
260 | overflow: hidden; }
261 | .height-container .section {
262 | background: #fff;
263 | border: 1px solid #ddd;
264 | border-top-width: 0;
265 | padding-top: 10px;
266 | padding-bottom: 5px;
267 | padding: 8px 16px; }
268 |
269 | .aside, .language {
270 | padding: 6px 12px;
271 | margin: 12px 0;
272 | border-left: 5px solid #dddddd;
273 | overflow-y: hidden; }
274 | .aside .aside-title, .language .aside-title {
275 | font-size: 9px;
276 | letter-spacing: 2px;
277 | text-transform: uppercase;
278 | padding-bottom: 0;
279 | margin: 0;
280 | color: #aaa;
281 | -webkit-user-select: none; }
282 | .aside p:last-child, .language p:last-child {
283 | margin-bottom: 0; }
284 |
285 | .language {
286 | border-left: 5px solid #cde9f4; }
287 | .language .aside-title {
288 | color: #4183c4; }
289 |
290 | .aside-warning {
291 | border-left: 5px solid #ff6666; }
292 | .aside-warning .aside-title {
293 | color: #ff0000; }
294 |
295 | .graybox {
296 | border-collapse: collapse;
297 | width: 100%; }
298 | .graybox p {
299 | margin: 0;
300 | word-break: break-word;
301 | min-width: 50px; }
302 | .graybox td {
303 | border: 1px solid #ddd;
304 | padding: 5px 25px 5px 10px;
305 | vertical-align: middle; }
306 | .graybox tr td:first-of-type {
307 | text-align: right;
308 | padding: 7px;
309 | vertical-align: top;
310 | word-break: normal;
311 | width: 40px; }
312 |
313 | .slightly-smaller {
314 | font-size: 0.9em; }
315 |
316 | .footer {
317 | padding: 8px 16px;
318 | background: #444;
319 | color: #ddd;
320 | font-size: 0.8em; }
321 | .footer p {
322 | margin: 8px 0; }
323 | .footer a {
324 | color: #fff; }
325 |
326 | html.dash .header, html.dash .breadcrumbs, html.dash .navigation {
327 | display: none; }
328 | html.dash .height-container {
329 | display: block; }
330 |
331 | form[role=search] input {
332 | font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
333 | font-size: 14px;
334 | line-height: 24px;
335 | padding: 0 10px;
336 | margin: 0;
337 | border: none;
338 | border-radius: 1em; }
339 | .loading form[role=search] input {
340 | background: white url(../img/spinner.gif) center right 4px no-repeat; }
341 | form[role=search] .tt-menu {
342 | margin: 0;
343 | min-width: 300px;
344 | background: #fbfbfb;
345 | color: #333;
346 | border: 1px solid #ddd; }
347 | form[role=search] .tt-highlight {
348 | font-weight: bold; }
349 | form[role=search] .tt-suggestion {
350 | font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
351 | padding: 0 8px; }
352 | form[role=search] .tt-suggestion span {
353 | display: table-cell;
354 | white-space: nowrap; }
355 | form[role=search] .tt-suggestion .doc-parent-name {
356 | width: 100%;
357 | text-align: right;
358 | font-weight: normal;
359 | font-size: 0.9em;
360 | padding-left: 16px; }
361 | form[role=search] .tt-suggestion:hover,
362 | form[role=search] .tt-suggestion.tt-cursor {
363 | cursor: pointer;
364 | background-color: #4183c4;
365 | color: #fff; }
366 | form[role=search] .tt-suggestion:hover .doc-parent-name,
367 | form[role=search] .tt-suggestion.tt-cursor .doc-parent-name {
368 | color: #fff; }
369 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/img/carat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/.docset/Contents/Resources/Documents/img/carat.png
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/img/dash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/.docset/Contents/Resources/Documents/img/dash.png
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/img/gh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/.docset/Contents/Resources/Documents/img/gh.png
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/img/spinner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/.docset/Contents/Resources/Documents/img/spinner.gif
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js:
--------------------------------------------------------------------------------
1 | window.jazzy = {'docset': false}
2 | if (typeof window.dash != 'undefined') {
3 | document.documentElement.className += ' dash'
4 | window.jazzy.docset = true
5 | }
6 | if (navigator.userAgent.match(/xcode/i)) {
7 | document.documentElement.className += ' xcode'
8 | window.jazzy.docset = true
9 | }
10 |
11 | // On doc load, toggle the URL hash discussion if present
12 | $(document).ready(function() {
13 | if (!window.jazzy.docset) {
14 | var linkToHash = $('a[href="' + window.location.hash +'"]');
15 | linkToHash.trigger("click");
16 | }
17 | });
18 |
19 | // On token click, toggle its discussion and animate token.marginLeft
20 | $(".token").click(function(event) {
21 | if (window.jazzy.docset) {
22 | return;
23 | }
24 | var link = $(this);
25 | var animationDuration = 300;
26 | $content = link.parent().parent().next();
27 | $content.slideToggle(animationDuration);
28 |
29 | // Keeps the document from jumping to the hash.
30 | var href = $(this).attr('href');
31 | if (history.pushState) {
32 | history.pushState({}, '', href);
33 | } else {
34 | location.hash = href;
35 | }
36 | event.preventDefault();
37 | });
38 |
39 | // Dumb down quotes within code blocks that delimit strings instead of quotations
40 | // https://github.com/realm/jazzy/issues/714
41 | $("code q").replaceWith(function () {
42 | return ["\"", $(this).contents(), "\""];
43 | });
44 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.search.js:
--------------------------------------------------------------------------------
1 | $(function(){
2 | var searchIndex = lunr(function() {
3 | this.ref('url');
4 | this.field('name');
5 | });
6 |
7 | var $typeahead = $('[data-typeahead]');
8 | var $form = $typeahead.parents('form');
9 | var searchURL = $form.attr('action');
10 |
11 | function displayTemplate(result) {
12 | return result.name;
13 | }
14 |
15 | function suggestionTemplate(result) {
16 | var t = '';
17 | t += '' + result.name + '';
18 | if (result.parent_name) {
19 | t += '' + result.parent_name + '';
20 | }
21 | t += '
';
22 | return t;
23 | }
24 |
25 | $typeahead.one('focus', function() {
26 | $form.addClass('loading');
27 |
28 | $.getJSON(searchURL).then(function(searchData) {
29 | $.each(searchData, function (url, doc) {
30 | searchIndex.add({url: url, name: doc.name});
31 | });
32 |
33 | $typeahead.typeahead(
34 | {
35 | highlight: true,
36 | minLength: 3
37 | },
38 | {
39 | limit: 10,
40 | display: displayTemplate,
41 | templates: { suggestion: suggestionTemplate },
42 | source: function(query, sync) {
43 | var results = searchIndex.search(query).map(function(result) {
44 | var doc = searchData[result.ref];
45 | doc.url = result.ref;
46 | return doc;
47 | });
48 | sync(results);
49 | }
50 | }
51 | );
52 | $form.removeClass('loading');
53 | $typeahead.trigger('focus');
54 | });
55 | });
56 |
57 | var baseURL = searchURL.slice(0, -"search.json".length);
58 |
59 | $typeahead.on('typeahead:select', function(e, result) {
60 | window.location = baseURL + result.url;
61 | });
62 | });
63 |
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/search.json:
--------------------------------------------------------------------------------
1 | {"Structs/Task.html#/s:FV6RxTask4TaskcFT10launchPathSS9argumentsGSaSS_16workingDirectoryGSqSS_11environmentGSqGVs10DictionarySSSS___S0_":{"name":"init(launchPath:arguments:workingDirectory:environment:)","abstract":"Create a new task.
","parent_name":"Task"},"Structs/Task.html#/s:FV6RxTask4Task6launchFT_GC7RxSwift10ObservableOS_9TaskEvent_":{"name":"launch()","abstract":"Launch the Task
.
","parent_name":"Task"},"Structs/Task.html":{"name":"Task","abstract":"Encapsulates launching a RxSwift powered command line task.
"},"Protocols/TaskEventType.html#/s:vP6RxTask13TaskEventType10exitStatusGSqSi_":{"name":"exitStatus","abstract":"The exit status code if available, nil
otherwise.
","parent_name":"TaskEventType"},"Protocols/TaskEventType.html#/s:vP6RxTask13TaskEventType6outputGSqSS_":{"name":"output","abstract":"The output of the event if available, nil
otherwise.
","parent_name":"TaskEventType"},"Protocols/TaskEventType.html":{"name":"TaskEventType","abstract":"A protocol encapsulated TaskEvent
. Necessary to create Observable
operators and not intended for public use.
"},"Extensions/Observable.html#/s:Fe6RxTaskRxS_13TaskEventTyperC7RxSwift10Observable14justExitStatusFT_GS2_Si_":{"name":"justExitStatus()","abstract":"Filters out the output and launch events to produce just an Observable
of the exit status.
","parent_name":"Observable"},"Extensions/Observable.html#/s:Fe6RxTaskRxS_13TaskEventTyperC7RxSwift10Observable10justOutputFT_GS2_SS_":{"name":"justOutput()","abstract":"Filters out the launch and exit events to just produce and Observable
of the output (stdout
and stderr
).
","parent_name":"Observable"},"Extensions/Observable.html":{"name":"Observable"},"Enums/TaskError.html#/s:FO6RxTask9TaskError14uncaughtSignalFMS0_S0_":{"name":"uncaughtSignal","abstract":"An uncaught signal was encountered.
","parent_name":"TaskError"},"Enums/TaskError.html#/s:FO6RxTask9TaskError4exitFMS0_FT10statusCodeSi_S0_":{"name":"exit","abstract":"The Task
exited unsuccessfully.
","parent_name":"TaskError"},"Enums/TaskError.html#/s:ZFO6RxTask9TaskErroroi2eeFTS0_S0__Sb":{"name":"==(_:_:)","abstract":"Equates two TaskError
s.
","parent_name":"TaskError"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent6launchFMS0_FT7commandSS_S0_":{"name":"launch","abstract":"The Task
has launched.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent6stdOutFMS0_FSSS0_":{"name":"stdOut","abstract":"The Task
has output to stdout
.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent6stdErrFMS0_FSSS0_":{"name":"stdErr","abstract":"The Task
has output to stderr
.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent4exitFMS0_FT10statusCodeSi_S0_":{"name":"exit","abstract":"The Task
exited successfully.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:ZFO6RxTask9TaskEventoi2eeFTS0_S0__Sb":{"name":"==(_:_:)","abstract":"Equates two TaskEvent
s.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:vO6RxTask9TaskEvent10exitStatusGSqSi_":{"name":"exitStatus","abstract":"The exit status code if available, nil
otherwise.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:vO6RxTask9TaskEvent6outputGSqSS_":{"name":"output","abstract":"The output of the event if available, nil
otherwise.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html":{"name":"TaskEvent","abstract":"Event emitted by a launched Task
.
"},"Enums/TaskError.html":{"name":"TaskError","abstract":"An error encountered in the execution of a Task
.
"},"Enums.html":{"name":"Enums","abstract":"The following enums are available globally."},"Extensions.html":{"name":"Extensions","abstract":"The following extensions are available globally."},"Protocols.html":{"name":"Protocols","abstract":"The following protocols are available globally."},"Structs.html":{"name":"Structs","abstract":"The following structs are available globally."}}
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/Documents/undocumented.json:
--------------------------------------------------------------------------------
1 | {
2 | "warnings": [
3 |
4 | ],
5 | "source_directory": "/Users/scottrhoyt/Development/RxTask"
6 | }
--------------------------------------------------------------------------------
/docs/docsets/.docset/Contents/Resources/docSet.dsidx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/.docset/Contents/Resources/docSet.dsidx
--------------------------------------------------------------------------------
/docs/docsets/.tgz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/.tgz
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleIdentifier
6 | com.jazzy.rxtask
7 | CFBundleName
8 | RxTask
9 | DocSetPlatformFamily
10 | rxtask
11 | isDashDocset
12 |
13 | dashIndexFilePath
14 | index.html
15 | isJavaScriptEnabled
16 |
17 | DashDocSetFamily
18 | dashtoc
19 |
20 |
21 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/Enums.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Enums Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
42 |
43 |
44 | RxTask Reference
45 |
46 | Enums Reference
47 |
48 |
49 |
50 |
89 |
90 |
91 |
92 |
93 |
Enums
94 |
The following enums are available globally.
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | -
104 |
105 |
106 |
107 |
108 | TaskEvent
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
Event emitted by a launched Task
.
117 |
118 |
See more
119 |
120 |
121 |
Declaration
122 |
123 |
Swift
124 |
public enum TaskEvent
125 |
126 |
127 |
128 |
129 |
130 |
131 | -
132 |
133 |
134 |
135 |
136 | TaskError
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
An error encountered in the execution of a Task
.
145 |
146 |
See more
147 |
148 |
149 |
Declaration
150 |
151 |
Swift
152 |
public enum TaskError: Error
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
170 |
171 |
172 |
173 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/Extensions.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Extensions Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
42 |
43 |
44 | RxTask Reference
45 |
46 | Extensions Reference
47 |
48 |
49 |
50 |
89 |
90 |
91 |
92 |
93 |
Extensions
94 |
The following extensions are available globally.
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | -
104 |
111 |
112 |
113 |
114 |
115 |
119 |
120 |
Declaration
121 |
122 |
Swift
123 |
class Observable<Element> : ObservableType
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
141 |
142 |
143 |
144 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/Extensions/Observable.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Observable Extension Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
43 |
44 |
45 | RxTask Reference
46 |
47 | Observable Extension Reference
48 |
49 |
50 |
51 |
90 |
91 |
92 |
93 |
94 |
Observable
95 |
96 |
97 |
class Observable<Element> : ObservableType
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | -
110 |
117 |
118 |
119 |
120 |
121 |
122 |
Filters out the output and launch events to produce just an Observable
of the exit status.
123 |
124 |
125 |
126 |
Declaration
127 |
128 |
Swift
129 |
func justExitStatus() -> Observable<Int>
130 |
131 |
132 |
133 |
134 |
135 |
136 | -
137 |
144 |
145 |
146 |
147 |
148 |
149 |
Filters out the launch and exit events to just produce and Observable
of the output (stdout
and stderr
).
150 |
151 |
152 |
153 |
Declaration
154 |
155 |
Swift
156 |
func justOutput() -> Observable<Data>
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
174 |
175 |
176 |
177 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/Protocols.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Protocols Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
42 |
43 |
44 | RxTask Reference
45 |
46 | Protocols Reference
47 |
48 |
49 |
50 |
89 |
90 |
91 |
92 |
93 |
Protocols
94 |
The following protocols are available globally.
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | -
104 |
111 |
112 |
113 |
114 |
115 |
116 |
A protocol encapsulated TaskEvent
. Necessary to create Observable
operators and not intended for public use.
117 |
118 |
See more
119 |
120 |
121 |
Declaration
122 |
123 |
Swift
124 |
public protocol TaskEventType
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
142 |
143 |
144 |
145 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/Protocols/TaskEventType.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | TaskEventType Protocol Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
43 |
44 |
45 | RxTask Reference
46 |
47 | TaskEventType Protocol Reference
48 |
49 |
50 |
51 |
90 |
91 |
92 |
93 |
94 |
TaskEventType
95 |
96 |
97 |
public protocol TaskEventType
98 |
99 |
100 |
101 |
A protocol encapsulated TaskEvent
. Necessary to create Observable
operators and not intended for public use.
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 | -
111 |
118 |
119 |
120 |
121 |
122 |
123 |
The exit status code if available, nil
otherwise.
124 |
125 |
126 |
127 |
Declaration
128 |
129 |
Swift
130 |
var exitStatus: Int?
131 |
132 |
133 |
134 |
135 |
136 |
137 | -
138 |
139 |
140 |
141 |
142 | output
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
The output of the event if available, nil
otherwise.
151 |
152 |
153 |
154 |
Declaration
155 |
156 |
Swift
157 |
var output: Data?
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
175 |
176 |
177 |
178 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/Structs.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Structs Reference
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
42 |
43 |
44 | RxTask Reference
45 |
46 | Structs Reference
47 |
48 |
49 |
50 |
89 |
90 |
91 |
92 |
93 |
Structs
94 |
The following structs are available globally.
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | -
104 |
105 |
106 |
107 |
108 | Task
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
Encapsulates launching a RxSwift powered command line task.
117 |
118 |
See more
119 |
120 |
121 |
Declaration
122 |
123 |
Swift
124 |
public struct Task
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
142 |
143 |
144 |
145 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/badge.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/css/highlight.css:
--------------------------------------------------------------------------------
1 | /* Credit to https://gist.github.com/wataru420/2048287 */
2 | .highlight {
3 | /* Comment */
4 | /* Error */
5 | /* Keyword */
6 | /* Operator */
7 | /* Comment.Multiline */
8 | /* Comment.Preproc */
9 | /* Comment.Single */
10 | /* Comment.Special */
11 | /* Generic.Deleted */
12 | /* Generic.Deleted.Specific */
13 | /* Generic.Emph */
14 | /* Generic.Error */
15 | /* Generic.Heading */
16 | /* Generic.Inserted */
17 | /* Generic.Inserted.Specific */
18 | /* Generic.Output */
19 | /* Generic.Prompt */
20 | /* Generic.Strong */
21 | /* Generic.Subheading */
22 | /* Generic.Traceback */
23 | /* Keyword.Constant */
24 | /* Keyword.Declaration */
25 | /* Keyword.Pseudo */
26 | /* Keyword.Reserved */
27 | /* Keyword.Type */
28 | /* Literal.Number */
29 | /* Literal.String */
30 | /* Name.Attribute */
31 | /* Name.Builtin */
32 | /* Name.Class */
33 | /* Name.Constant */
34 | /* Name.Entity */
35 | /* Name.Exception */
36 | /* Name.Function */
37 | /* Name.Namespace */
38 | /* Name.Tag */
39 | /* Name.Variable */
40 | /* Operator.Word */
41 | /* Text.Whitespace */
42 | /* Literal.Number.Float */
43 | /* Literal.Number.Hex */
44 | /* Literal.Number.Integer */
45 | /* Literal.Number.Oct */
46 | /* Literal.String.Backtick */
47 | /* Literal.String.Char */
48 | /* Literal.String.Doc */
49 | /* Literal.String.Double */
50 | /* Literal.String.Escape */
51 | /* Literal.String.Heredoc */
52 | /* Literal.String.Interpol */
53 | /* Literal.String.Other */
54 | /* Literal.String.Regex */
55 | /* Literal.String.Single */
56 | /* Literal.String.Symbol */
57 | /* Name.Builtin.Pseudo */
58 | /* Name.Variable.Class */
59 | /* Name.Variable.Global */
60 | /* Name.Variable.Instance */
61 | /* Literal.Number.Integer.Long */ }
62 | .highlight .c {
63 | color: #999988;
64 | font-style: italic; }
65 | .highlight .err {
66 | color: #a61717;
67 | background-color: #e3d2d2; }
68 | .highlight .k {
69 | color: #000000;
70 | font-weight: bold; }
71 | .highlight .o {
72 | color: #000000;
73 | font-weight: bold; }
74 | .highlight .cm {
75 | color: #999988;
76 | font-style: italic; }
77 | .highlight .cp {
78 | color: #999999;
79 | font-weight: bold; }
80 | .highlight .c1 {
81 | color: #999988;
82 | font-style: italic; }
83 | .highlight .cs {
84 | color: #999999;
85 | font-weight: bold;
86 | font-style: italic; }
87 | .highlight .gd {
88 | color: #000000;
89 | background-color: #ffdddd; }
90 | .highlight .gd .x {
91 | color: #000000;
92 | background-color: #ffaaaa; }
93 | .highlight .ge {
94 | color: #000000;
95 | font-style: italic; }
96 | .highlight .gr {
97 | color: #aa0000; }
98 | .highlight .gh {
99 | color: #999999; }
100 | .highlight .gi {
101 | color: #000000;
102 | background-color: #ddffdd; }
103 | .highlight .gi .x {
104 | color: #000000;
105 | background-color: #aaffaa; }
106 | .highlight .go {
107 | color: #888888; }
108 | .highlight .gp {
109 | color: #555555; }
110 | .highlight .gs {
111 | font-weight: bold; }
112 | .highlight .gu {
113 | color: #aaaaaa; }
114 | .highlight .gt {
115 | color: #aa0000; }
116 | .highlight .kc {
117 | color: #000000;
118 | font-weight: bold; }
119 | .highlight .kd {
120 | color: #000000;
121 | font-weight: bold; }
122 | .highlight .kp {
123 | color: #000000;
124 | font-weight: bold; }
125 | .highlight .kr {
126 | color: #000000;
127 | font-weight: bold; }
128 | .highlight .kt {
129 | color: #445588; }
130 | .highlight .m {
131 | color: #009999; }
132 | .highlight .s {
133 | color: #d14; }
134 | .highlight .na {
135 | color: #008080; }
136 | .highlight .nb {
137 | color: #0086B3; }
138 | .highlight .nc {
139 | color: #445588;
140 | font-weight: bold; }
141 | .highlight .no {
142 | color: #008080; }
143 | .highlight .ni {
144 | color: #800080; }
145 | .highlight .ne {
146 | color: #990000;
147 | font-weight: bold; }
148 | .highlight .nf {
149 | color: #990000; }
150 | .highlight .nn {
151 | color: #555555; }
152 | .highlight .nt {
153 | color: #000080; }
154 | .highlight .nv {
155 | color: #008080; }
156 | .highlight .ow {
157 | color: #000000;
158 | font-weight: bold; }
159 | .highlight .w {
160 | color: #bbbbbb; }
161 | .highlight .mf {
162 | color: #009999; }
163 | .highlight .mh {
164 | color: #009999; }
165 | .highlight .mi {
166 | color: #009999; }
167 | .highlight .mo {
168 | color: #009999; }
169 | .highlight .sb {
170 | color: #d14; }
171 | .highlight .sc {
172 | color: #d14; }
173 | .highlight .sd {
174 | color: #d14; }
175 | .highlight .s2 {
176 | color: #d14; }
177 | .highlight .se {
178 | color: #d14; }
179 | .highlight .sh {
180 | color: #d14; }
181 | .highlight .si {
182 | color: #d14; }
183 | .highlight .sx {
184 | color: #d14; }
185 | .highlight .sr {
186 | color: #009926; }
187 | .highlight .s1 {
188 | color: #d14; }
189 | .highlight .ss {
190 | color: #990073; }
191 | .highlight .bp {
192 | color: #999999; }
193 | .highlight .vc {
194 | color: #008080; }
195 | .highlight .vg {
196 | color: #008080; }
197 | .highlight .vi {
198 | color: #008080; }
199 | .highlight .il {
200 | color: #009999; }
201 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/img/carat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/RxTask.docset/Contents/Resources/Documents/img/carat.png
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/img/dash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/RxTask.docset/Contents/Resources/Documents/img/dash.png
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/img/gh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/RxTask.docset/Contents/Resources/Documents/img/gh.png
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/img/spinner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/RxTask.docset/Contents/Resources/Documents/img/spinner.gif
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/js/jazzy.js:
--------------------------------------------------------------------------------
1 | window.jazzy = {'docset': false}
2 | if (typeof window.dash != 'undefined') {
3 | document.documentElement.className += ' dash'
4 | window.jazzy.docset = true
5 | }
6 | if (navigator.userAgent.match(/xcode/i)) {
7 | document.documentElement.className += ' xcode'
8 | window.jazzy.docset = true
9 | }
10 |
11 | // On doc load, toggle the URL hash discussion if present
12 | $(document).ready(function() {
13 | if (!window.jazzy.docset) {
14 | var linkToHash = $('a[href="' + window.location.hash +'"]');
15 | linkToHash.trigger("click");
16 | }
17 | });
18 |
19 | // On token click, toggle its discussion and animate token.marginLeft
20 | $(".token").click(function(event) {
21 | if (window.jazzy.docset) {
22 | return;
23 | }
24 | var link = $(this);
25 | var animationDuration = 300;
26 | $content = link.parent().parent().next();
27 | $content.slideToggle(animationDuration);
28 |
29 | // Keeps the document from jumping to the hash.
30 | var href = $(this).attr('href');
31 | if (history.pushState) {
32 | history.pushState({}, '', href);
33 | } else {
34 | location.hash = href;
35 | }
36 | event.preventDefault();
37 | });
38 |
39 | // Dumb down quotes within code blocks that delimit strings instead of quotations
40 | // https://github.com/realm/jazzy/issues/714
41 | $("code q").replaceWith(function () {
42 | return ["\"", $(this).contents(), "\""];
43 | });
44 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/js/jazzy.search.js:
--------------------------------------------------------------------------------
1 | $(function(){
2 | var searchIndex = lunr(function() {
3 | this.ref('url');
4 | this.field('name');
5 | });
6 |
7 | var $typeahead = $('[data-typeahead]');
8 | var $form = $typeahead.parents('form');
9 | var searchURL = $form.attr('action');
10 |
11 | function displayTemplate(result) {
12 | return result.name;
13 | }
14 |
15 | function suggestionTemplate(result) {
16 | var t = '';
17 | t += '' + result.name + '';
18 | if (result.parent_name) {
19 | t += '' + result.parent_name + '';
20 | }
21 | t += '
';
22 | return t;
23 | }
24 |
25 | $typeahead.one('focus', function() {
26 | $form.addClass('loading');
27 |
28 | $.getJSON(searchURL).then(function(searchData) {
29 | $.each(searchData, function (url, doc) {
30 | searchIndex.add({url: url, name: doc.name});
31 | });
32 |
33 | $typeahead.typeahead(
34 | {
35 | highlight: true,
36 | minLength: 3
37 | },
38 | {
39 | limit: 10,
40 | display: displayTemplate,
41 | templates: { suggestion: suggestionTemplate },
42 | source: function(query, sync) {
43 | var results = searchIndex.search(query).map(function(result) {
44 | var doc = searchData[result.ref];
45 | doc.url = result.ref;
46 | return doc;
47 | });
48 | sync(results);
49 | }
50 | }
51 | );
52 | $form.removeClass('loading');
53 | $typeahead.trigger('focus');
54 | });
55 | });
56 |
57 | var baseURL = searchURL.slice(0, -"search.json".length);
58 |
59 | $typeahead.on('typeahead:select', function(e, result) {
60 | window.location = baseURL + result.url;
61 | });
62 | });
63 |
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/search.json:
--------------------------------------------------------------------------------
1 | {"Structs/Task.html#/s:FV6RxTask4TaskcFT10launchPathSS9argumentsGSaSS_16workingDirectoryGSqSS_11environmentGSqGVs10DictionarySSSS___S0_":{"name":"init(launchPath:arguments:workingDirectory:environment:)","abstract":"Create a new task.
","parent_name":"Task"},"Structs/Task.html#/s:FV6RxTask4Task6launchFT5stdInGSqGC7RxSwift10ObservableV10Foundation4Data___GS2_OS_9TaskEvent_":{"name":"launch(stdIn:)","abstract":"Launch the Task
.
","parent_name":"Task"},"Structs/Task.html#/s:vV6RxTask4Task11descriptionSS":{"name":"description","abstract":"A String
describing the Task
.
","parent_name":"Task"},"Structs/Task.html#/s:ZFV6RxTask4Taskoi2eeFTS0_S0__Sb":{"name":"==(_:_:)","abstract":"Whether or not two Task
s are equal.
","parent_name":"Task"},"Structs/Task.html":{"name":"Task","abstract":"Encapsulates launching a RxSwift powered command line task.
"},"Protocols/TaskEventType.html#/s:vP6RxTask13TaskEventType10exitStatusGSqSi_":{"name":"exitStatus","abstract":"The exit status code if available, nil
otherwise.
","parent_name":"TaskEventType"},"Protocols/TaskEventType.html#/s:vP6RxTask13TaskEventType6outputGSqV10Foundation4Data_":{"name":"output","abstract":"The output of the event if available, nil
otherwise.
","parent_name":"TaskEventType"},"Protocols/TaskEventType.html":{"name":"TaskEventType","abstract":"A protocol encapsulated TaskEvent
. Necessary to create Observable
operators and not intended for public use.
"},"Extensions/Observable.html#/s:Fe6RxTaskRxS_13TaskEventTyperC7RxSwift10Observable14justExitStatusFT_GS2_Si_":{"name":"justExitStatus()","abstract":"Filters out the output and launch events to produce just an Observable
of the exit status.
","parent_name":"Observable"},"Extensions/Observable.html#/s:Fe6RxTaskRxS_13TaskEventTyperC7RxSwift10Observable10justOutputFT_GS2_V10Foundation4Data_":{"name":"justOutput()","abstract":"Filters out the launch and exit events to just produce and Observable
of the output (stdout
and stderr
).
","parent_name":"Observable"},"Extensions/Observable.html":{"name":"Observable"},"Enums/TaskError.html#/s:FO6RxTask9TaskError14uncaughtSignalFMS0_S0_":{"name":"uncaughtSignal","abstract":"An uncaught signal was encountered.
","parent_name":"TaskError"},"Enums/TaskError.html#/s:FO6RxTask9TaskError4exitFMS0_FT10statusCodeSi_S0_":{"name":"exit","abstract":"The Task
exited unsuccessfully.
","parent_name":"TaskError"},"Enums/TaskError.html#/s:ZFO6RxTask9TaskErroroi2eeFTS0_S0__Sb":{"name":"==(_:_:)","abstract":"Equates two TaskError
s.
","parent_name":"TaskError"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent6launchFMS0_FT7commandSS_S0_":{"name":"launch","abstract":"The Task
has launched.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent6stdOutFMS0_FV10Foundation4DataS0_":{"name":"stdOut","abstract":"The Task
has output to stdout
.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent6stdErrFMS0_FV10Foundation4DataS0_":{"name":"stdErr","abstract":"The Task
has output to stderr
.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent4exitFMS0_FT10statusCodeSi_S0_":{"name":"exit","abstract":"The Task
exited successfully.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:ZFO6RxTask9TaskEventoi2eeFTS0_S0__Sb":{"name":"==(_:_:)","abstract":"Equates two TaskEvent
s.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:vO6RxTask9TaskEvent10exitStatusGSqSi_":{"name":"exitStatus","abstract":"The exit status code if available, nil
otherwise.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:vO6RxTask9TaskEvent6outputGSqV10Foundation4Data_":{"name":"output","abstract":"The output of the event if available, nil
otherwise.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html":{"name":"TaskEvent","abstract":"Event emitted by a launched Task
.
"},"Enums/TaskError.html":{"name":"TaskError","abstract":"An error encountered in the execution of a Task
.
"},"Enums.html":{"name":"Enums","abstract":"The following enums are available globally."},"Extensions.html":{"name":"Extensions","abstract":"The following extensions are available globally."},"Protocols.html":{"name":"Protocols","abstract":"The following protocols are available globally."},"Structs.html":{"name":"Structs","abstract":"The following structs are available globally."}}
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/Documents/undocumented.json:
--------------------------------------------------------------------------------
1 | {
2 | "warnings": [
3 |
4 | ],
5 | "source_directory": "/Users/scottrhoyt/Development/RxTask"
6 | }
--------------------------------------------------------------------------------
/docs/docsets/RxTask.docset/Contents/Resources/docSet.dsidx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/RxTask.docset/Contents/Resources/docSet.dsidx
--------------------------------------------------------------------------------
/docs/docsets/RxTask.tgz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/docsets/RxTask.tgz
--------------------------------------------------------------------------------
/docs/img/carat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/img/carat.png
--------------------------------------------------------------------------------
/docs/img/dash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/img/dash.png
--------------------------------------------------------------------------------
/docs/img/gh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/img/gh.png
--------------------------------------------------------------------------------
/docs/img/spinner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RxSwiftCommunity/RxTask/f6f4110b960a4bf7c36c56303acac5b81f513102/docs/img/spinner.gif
--------------------------------------------------------------------------------
/docs/js/jazzy.js:
--------------------------------------------------------------------------------
1 | window.jazzy = {'docset': false}
2 | if (typeof window.dash != 'undefined') {
3 | document.documentElement.className += ' dash'
4 | window.jazzy.docset = true
5 | }
6 | if (navigator.userAgent.match(/xcode/i)) {
7 | document.documentElement.className += ' xcode'
8 | window.jazzy.docset = true
9 | }
10 |
11 | // On doc load, toggle the URL hash discussion if present
12 | $(document).ready(function() {
13 | if (!window.jazzy.docset) {
14 | var linkToHash = $('a[href="' + window.location.hash +'"]');
15 | linkToHash.trigger("click");
16 | }
17 | });
18 |
19 | // On token click, toggle its discussion and animate token.marginLeft
20 | $(".token").click(function(event) {
21 | if (window.jazzy.docset) {
22 | return;
23 | }
24 | var link = $(this);
25 | var animationDuration = 300;
26 | $content = link.parent().parent().next();
27 | $content.slideToggle(animationDuration);
28 |
29 | // Keeps the document from jumping to the hash.
30 | var href = $(this).attr('href');
31 | if (history.pushState) {
32 | history.pushState({}, '', href);
33 | } else {
34 | location.hash = href;
35 | }
36 | event.preventDefault();
37 | });
38 |
39 | // Dumb down quotes within code blocks that delimit strings instead of quotations
40 | // https://github.com/realm/jazzy/issues/714
41 | $("code q").replaceWith(function () {
42 | return ["\"", $(this).contents(), "\""];
43 | });
44 |
--------------------------------------------------------------------------------
/docs/js/jazzy.search.js:
--------------------------------------------------------------------------------
1 | $(function(){
2 | var searchIndex = lunr(function() {
3 | this.ref('url');
4 | this.field('name');
5 | });
6 |
7 | var $typeahead = $('[data-typeahead]');
8 | var $form = $typeahead.parents('form');
9 | var searchURL = $form.attr('action');
10 |
11 | function displayTemplate(result) {
12 | return result.name;
13 | }
14 |
15 | function suggestionTemplate(result) {
16 | var t = '';
17 | t += '' + result.name + '';
18 | if (result.parent_name) {
19 | t += '' + result.parent_name + '';
20 | }
21 | t += '
';
22 | return t;
23 | }
24 |
25 | $typeahead.one('focus', function() {
26 | $form.addClass('loading');
27 |
28 | $.getJSON(searchURL).then(function(searchData) {
29 | $.each(searchData, function (url, doc) {
30 | searchIndex.add({url: url, name: doc.name});
31 | });
32 |
33 | $typeahead.typeahead(
34 | {
35 | highlight: true,
36 | minLength: 3
37 | },
38 | {
39 | limit: 10,
40 | display: displayTemplate,
41 | templates: { suggestion: suggestionTemplate },
42 | source: function(query, sync) {
43 | var results = searchIndex.search(query).map(function(result) {
44 | var doc = searchData[result.ref];
45 | doc.url = result.ref;
46 | return doc;
47 | });
48 | sync(results);
49 | }
50 | }
51 | );
52 | $form.removeClass('loading');
53 | $typeahead.trigger('focus');
54 | });
55 | });
56 |
57 | var baseURL = searchURL.slice(0, -"search.json".length);
58 |
59 | $typeahead.on('typeahead:select', function(e, result) {
60 | window.location = baseURL + result.url;
61 | });
62 | });
63 |
--------------------------------------------------------------------------------
/docs/search.json:
--------------------------------------------------------------------------------
1 | {"Structs/Task.html#/s:FV6RxTask4TaskcFT10launchPathSS9argumentsGSaSS_16workingDirectoryGSqSS_11environmentGSqGVs10DictionarySSSS___S0_":{"name":"init(launchPath:arguments:workingDirectory:environment:)","abstract":"Create a new task.
","parent_name":"Task"},"Structs/Task.html#/s:FV6RxTask4Task6launchFT5stdInGSqGC7RxSwift10ObservableV10Foundation4Data___GS2_OS_9TaskEvent_":{"name":"launch(stdIn:)","abstract":"Launch the Task
.
","parent_name":"Task"},"Structs/Task.html#/s:vV6RxTask4Task11descriptionSS":{"name":"description","abstract":"A String
describing the Task
.
","parent_name":"Task"},"Structs/Task.html#/s:ZFV6RxTask4Taskoi2eeFTS0_S0__Sb":{"name":"==(_:_:)","abstract":"Whether or not two Task
s are equal.
","parent_name":"Task"},"Structs/Task.html":{"name":"Task","abstract":"Encapsulates launching a RxSwift powered command line task.
"},"Protocols/TaskEventType.html#/s:vP6RxTask13TaskEventType10exitStatusGSqSi_":{"name":"exitStatus","abstract":"The exit status code if available, nil
otherwise.
","parent_name":"TaskEventType"},"Protocols/TaskEventType.html#/s:vP6RxTask13TaskEventType6outputGSqV10Foundation4Data_":{"name":"output","abstract":"The output of the event if available, nil
otherwise.
","parent_name":"TaskEventType"},"Protocols/TaskEventType.html":{"name":"TaskEventType","abstract":"A protocol encapsulated TaskEvent
. Necessary to create Observable
operators and not intended for public use.
"},"Extensions/Observable.html#/s:Fe6RxTaskRxS_13TaskEventTyperC7RxSwift10Observable14justExitStatusFT_GS2_Si_":{"name":"justExitStatus()","abstract":"Filters out the output and launch events to produce just an Observable
of the exit status.
","parent_name":"Observable"},"Extensions/Observable.html#/s:Fe6RxTaskRxS_13TaskEventTyperC7RxSwift10Observable10justOutputFT_GS2_V10Foundation4Data_":{"name":"justOutput()","abstract":"Filters out the launch and exit events to just produce and Observable
of the output (stdout
and stderr
).
","parent_name":"Observable"},"Extensions/Observable.html":{"name":"Observable"},"Enums/TaskError.html#/s:FO6RxTask9TaskError14uncaughtSignalFMS0_S0_":{"name":"uncaughtSignal","abstract":"An uncaught signal was encountered.
","parent_name":"TaskError"},"Enums/TaskError.html#/s:FO6RxTask9TaskError4exitFMS0_FT10statusCodeSi_S0_":{"name":"exit","abstract":"The Task
exited unsuccessfully.
","parent_name":"TaskError"},"Enums/TaskError.html#/s:ZFO6RxTask9TaskErroroi2eeFTS0_S0__Sb":{"name":"==(_:_:)","abstract":"Equates two TaskError
s.
","parent_name":"TaskError"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent6launchFMS0_FT7commandSS_S0_":{"name":"launch","abstract":"The Task
has launched.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent6stdOutFMS0_FV10Foundation4DataS0_":{"name":"stdOut","abstract":"The Task
has output to stdout
.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent6stdErrFMS0_FV10Foundation4DataS0_":{"name":"stdErr","abstract":"The Task
has output to stderr
.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:FO6RxTask9TaskEvent4exitFMS0_FT10statusCodeSi_S0_":{"name":"exit","abstract":"The Task
exited successfully.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:ZFO6RxTask9TaskEventoi2eeFTS0_S0__Sb":{"name":"==(_:_:)","abstract":"Equates two TaskEvent
s.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:vO6RxTask9TaskEvent10exitStatusGSqSi_":{"name":"exitStatus","abstract":"The exit status code if available, nil
otherwise.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html#/s:vO6RxTask9TaskEvent6outputGSqV10Foundation4Data_":{"name":"output","abstract":"The output of the event if available, nil
otherwise.
","parent_name":"TaskEvent"},"Enums/TaskEvent.html":{"name":"TaskEvent","abstract":"Event emitted by a launched Task
.
"},"Enums/TaskError.html":{"name":"TaskError","abstract":"An error encountered in the execution of a Task
.
"},"Enums.html":{"name":"Enums","abstract":"The following enums are available globally."},"Extensions.html":{"name":"Extensions","abstract":"The following extensions are available globally."},"Protocols.html":{"name":"Protocols","abstract":"The following protocols are available globally."},"Structs.html":{"name":"Structs","abstract":"The following structs are available globally."}}
--------------------------------------------------------------------------------
/docs/undocumented.json:
--------------------------------------------------------------------------------
1 | {
2 | "warnings": [
3 |
4 | ],
5 | "source_directory": "/Users/scottrhoyt/Development/RxTask"
6 | }
--------------------------------------------------------------------------------
/scripts/upstall-carthage.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Update Homebrew
4 | brew update
5 |
6 | # Check for SwiftLint install
7 | VERSIONS=`brew ls --versions carthage`
8 | if [[ -z $VERSIONS ]]; then
9 | echo 'Carthage not installed. Installing.'
10 | brew install carthage
11 | else
12 | echo 'Carthage installed. Upgrading if neccessary.'
13 | brew outdated carthage || brew upgrade carthage
14 | fi
15 |
--------------------------------------------------------------------------------
/scripts/upstall-swiftlint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Update Homebrew
4 | brew update
5 |
6 | # Check for SwiftLint install
7 | VERSIONS=`brew ls --versions swiftlint`
8 | if [[ -z $VERSIONS ]]; then
9 | echo 'SwiftLint not installed. Installing.'
10 | brew install swiftlint
11 | else
12 | echo 'SwiftLint installed. Upgrading if neccessary.'
13 | brew outdated swiftlint || brew upgrade swiftlint
14 | fi
15 |
--------------------------------------------------------------------------------