Commit b38972e
Changed files (4)
src/core.ts
@@ -48,8 +48,9 @@ const processCwd = Symbol('processCwd')
export interface Options {
[processCwd]: string
cwd?: string
- verbose: boolean
ac?: AbortController
+ input?: string | Buffer | Readable | ProcessOutput | ProcessPromise
+ verbose: boolean
env: NodeJS.ProcessEnv
shell: string | boolean
nothrow: boolean
@@ -187,11 +188,15 @@ export class ProcessPromise extends Promise<ProcessOutput> {
}
run(): ProcessPromise {
- const $ = this._snapshot
- const self = this
if (this.child) return this // The _run() can be called from a few places.
this._prerun() // In case $1.pipe($2), the $2 returned, and on $2._run() invoke $1._run().
+ const $ = this._snapshot
+ const self = this
+ const input = ($.input as ProcessPromise | ProcessOutput)?.stdout ?? $.input
+
+ if (input) this.stdio('pipe')
+
$.log({
kind: 'cmd',
cmd: this._command,
@@ -199,6 +204,7 @@ export class ProcessPromise extends Promise<ProcessOutput> {
})
this.zurk = exec({
+ input,
cmd: $.prefix + this._command,
cwd: $.cwd ?? $[processCwd],
ac: $.ac,
test/core.test.js
@@ -15,7 +15,7 @@
import assert from 'node:assert'
import { test, describe, beforeEach } from 'node:test'
import { inspect } from 'node:util'
-import { Writable } from 'node:stream'
+import { Readable, Writable } from 'node:stream'
import { Socket } from 'node:net'
import { ProcessPromise, ProcessOutput } from '../build/index.js'
import '../build/globals.js'
@@ -106,6 +106,20 @@ describe('core', () => {
}
})
+ test('handles `input` option', async () => {
+ const p1 = $({ input: 'foo' })`cat`
+ const p2 = $({ input: Readable.from('bar') })`cat`
+ const p3 = $({ input: Buffer.from('baz') })`cat`
+ const p4 = $({ input: p3 })`cat`
+ const p5 = $({ input: await p3 })`cat`
+
+ assert.equal((await p1).stdout, 'foo')
+ assert.equal((await p2).stdout, 'bar')
+ assert.equal((await p3).stdout, 'baz')
+ assert.equal((await p4).stdout, 'baz')
+ assert.equal((await p5).stdout, 'baz')
+ })
+
test('pipes are working', async () => {
let { stdout } = await $`echo "hello"`
.pipe($`awk '{print $1" world"}'`)
package-lock.json
@@ -32,11 +32,11 @@
"node-fetch-native": "^1.6.2",
"prettier": "^2.8.8",
"ps-tree": "^1.2.0",
- "tsd": "^0.28.1",
+ "tsd": "^0.30.7",
"typescript": "^5.0.4",
"webpod": "^0",
"which": "^3.0.0",
- "yaml": "^2.3.4",
+ "yaml": "^2.4.1",
"zurk": "^0.0.31"
},
"engines": {
@@ -1413,10 +1413,13 @@
}
},
"node_modules/@tsd/typescript": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.0.4.tgz",
- "integrity": "sha512-YQi2lvZSI+xidKeUjlbv6b6Zw7qB3aXHw5oGJLs5OOGAEqKIOvz5UIAkWyg0bJbkSUWPBEtaOHpVxU4EYBO1Jg==",
- "dev": true
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.3.3.tgz",
+ "integrity": "sha512-CQlfzol0ldaU+ftWuG52vH29uRoKboLinLy84wS8TQOu+m+tWoaUfk4svL4ij2V8M5284KymJBlHUusKj6k34w==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.17"
+ }
},
"node_modules/@types/eslint": {
"version": "7.29.0",
@@ -6403,12 +6406,12 @@
}
},
"node_modules/tsd": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.28.1.tgz",
- "integrity": "sha512-FeYrfJ05QgEMW/qOukNCr4fAJHww4SaKnivAXRv4g5kj4FeLpNV7zH4dorzB9zAfVX4wmA7zWu/wQf7kkcvfbw==",
+ "version": "0.30.7",
+ "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.30.7.tgz",
+ "integrity": "sha512-oTiJ28D6B/KXoU3ww/Eji+xqHJojiuPVMwA12g4KYX1O72N93Nb6P3P3h2OAhhf92Xl8NIhb/xFmBZd5zw/xUw==",
"dev": true,
"dependencies": {
- "@tsd/typescript": "~5.0.2",
+ "@tsd/typescript": "~5.3.3",
"eslint-formatter-pretty": "^4.1.0",
"globby": "^11.0.1",
"jest-diff": "^29.0.3",
@@ -6749,10 +6752,13 @@
"dev": true
},
"node_modules/yaml": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
- "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
+ "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
"dev": true,
+ "bin": {
+ "yaml": "bin.mjs"
+ },
"engines": {
"node": ">= 14"
}
@@ -7755,9 +7761,9 @@
}
},
"@tsd/typescript": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.0.4.tgz",
- "integrity": "sha512-YQi2lvZSI+xidKeUjlbv6b6Zw7qB3aXHw5oGJLs5OOGAEqKIOvz5UIAkWyg0bJbkSUWPBEtaOHpVxU4EYBO1Jg==",
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.3.3.tgz",
+ "integrity": "sha512-CQlfzol0ldaU+ftWuG52vH29uRoKboLinLy84wS8TQOu+m+tWoaUfk4svL4ij2V8M5284KymJBlHUusKj6k34w==",
"dev": true
},
"@types/eslint": {
@@ -11360,12 +11366,12 @@
}
},
"tsd": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.28.1.tgz",
- "integrity": "sha512-FeYrfJ05QgEMW/qOukNCr4fAJHww4SaKnivAXRv4g5kj4FeLpNV7zH4dorzB9zAfVX4wmA7zWu/wQf7kkcvfbw==",
+ "version": "0.30.7",
+ "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.30.7.tgz",
+ "integrity": "sha512-oTiJ28D6B/KXoU3ww/Eji+xqHJojiuPVMwA12g4KYX1O72N93Nb6P3P3h2OAhhf92Xl8NIhb/xFmBZd5zw/xUw==",
"dev": true,
"requires": {
- "@tsd/typescript": "~5.0.2",
+ "@tsd/typescript": "~5.3.3",
"eslint-formatter-pretty": "^4.1.0",
"globby": "^11.0.1",
"jest-diff": "^29.0.3",
@@ -11611,9 +11617,9 @@
"dev": true
},
"yaml": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
- "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
+ "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
"dev": true
},
"yargs": {
package.json
@@ -78,11 +78,11 @@
"node-fetch-native": "^1.6.2",
"prettier": "^2.8.8",
"ps-tree": "^1.2.0",
- "tsd": "^0.28.1",
+ "tsd": "^0.30.7",
"typescript": "^5.0.4",
"webpod": "^0",
"which": "^3.0.0",
- "yaml": "^2.3.4",
+ "yaml": "^2.4.1",
"zurk": "^0.0.31"
},
"publishConfig": {