🙆

ちょっとVS Codeフレンドリーなコマンドラッパー

に公開

概要

なんとなく思いついたので外部コマンドをラップしてTypescriptのスクリプトから実行しやすいようにするmisocmdを作成しました。
中身は単純にspwanSyncを呼び出しているだけですが、登録したコマンドが補完で表示されるのが(唯一の)特徴です。


(上の画像のコードは間違いがあり、実際には実行例が正しい)

使い方

詳細はJSRレポジトリを参照してください。

インストール

# npm
npx jsr add @misogohei/misocmd
# deno
deno add jsr:@misogohei/misocmd
# bun
bunx jsr add @misogohei/misocmd

実行例1

import { buildMisoCommand } from "@misogohei/misocmd";

const deno = buildMisoCommand("deno") // 実行するコマンドへのパス
  .command("compile", ["compile"])    // 登録するコマンドと引数
  .command("run", ["run", "-A"])
  .command("test", ["test"])
  .build();

// commandの第一引数がそのままメソッドになる
deno.compile(["file.ts"]); // deno compile file.ts
// build時に登録した引数と実行時に渡された引数が合わせてコマンドへ渡される
deno.run(["file.ts"]);     // deno run -A file.ts
deno.test();               // deno test

実行例2

import { buildMisoCommand } from "@misogohei/misocmd";

const cat = buildMisoCommand("cat")
  .command("do")
  .build();

// 第2引数はそのままspawnSyncへのオプションとなる
const result = cat.do([], { input: "Hello World!" });
console.log(result.asText()); // Hello World!

const result2 = cat.do([], { input: '{ "key": "val" }' });
console.log(result2.asObject()); // { key: "val" }

const result3 = cat.do([], { input: "line1\nline2" });
console.log(result3.asLines()); // ["line1", "line2"]

雑感

spawnSyncではなくspawnを使って並列で動作させるようにできないと実用的ではないと思うが、その場で書いたコードの内容で補完表示されるのが一番やりたかったことなので満足してしまった。

Discussion