Skip to content

Commit fd3658e

Browse files
committed
fix: update function signatures for $ and unindent to support TemplateStringsArray
1 parent e36579e commit fd3658e

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

src/common/process.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,18 @@ import { ResultAsync } from "@/result";
44
import { errorToMessage } from "./error";
55
import { PromiseWithResolvers } from "./promise";
66

7-
export const $ = (cmd: TemplateStringsArray | string) => {
8-
const command = isString(cmd) ? cmd : cmd[0]!;
7+
export function $(cmd: string): ResultAsync<{ stdout: string; stderr: string }, string>;
8+
export function $(
9+
cmd: TemplateStringsArray,
10+
...values: any[]
11+
): ResultAsync<{ stdout: string; stderr: string }, string>;
12+
export function $(cmd: string | TemplateStringsArray, ...values: any[]) {
13+
const command = isString(cmd)
14+
? cmd
15+
: cmd.reduce((acc, part, index) => acc + part + (values[index] ?? ""), "");
916

1017
const promise = import("node:child_process").then(({ exec }) => {
11-
const { promise, reject, resolve } = PromiseWithResolvers<{
12-
stdout: string;
13-
stderr: string;
14-
}>();
18+
const { promise, reject, resolve } = PromiseWithResolvers();
1519

1620
exec(command, (error, stdout, stderr) => {
1721
if (error) {
@@ -25,4 +29,4 @@ export const $ = (cmd: TemplateStringsArray | string) => {
2529
});
2630

2731
return ResultAsync.fromPromise(promise, errorToMessage(`Failed to execute command: ${cmd}`));
28-
};
32+
}

src/common/string.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isFunction, isPlainObject } from "@/remeda";
1+
import { isFunction, isPlainObject, isString } from "@/remeda";
22

33
const REGEXP_WHITESPACE = /^\s*$/;
44

@@ -78,8 +78,13 @@ export const splitWithSlash = (path: string) => split("/", path);
7878
* `
7979
* ```
8080
*/
81-
export const unindent = (str: TemplateStringsArray | string) => {
82-
const lines = (typeof str === "string" ? str : str[0]!).split("\n");
81+
export function unindent(template: string): string;
82+
export function unindent(template: TemplateStringsArray, ...values: any[]): string;
83+
export function unindent(template: string | TemplateStringsArray, ...values: any[]) {
84+
const string = isString(template)
85+
? template
86+
: template.reduce((acc, part, index) => acc + part + (values[index] ?? ""), "");
87+
const lines = string.split("\n");
8388
const whitespaceLines = lines.map(line => REGEXP_WHITESPACE.test(line));
8489

8590
const commonIndent = lines.reduce((min, line, idx) => {
@@ -102,7 +107,7 @@ export const unindent = (str: TemplateStringsArray | string) => {
102107
.slice(emptyLinesHead, lines.length - emptyLinesTail)
103108
.map(line => line.slice(commonIndent))
104109
.join("\n");
105-
};
110+
}
106111

107112
/**
108113
* @example

0 commit comments

Comments
 (0)