Skip to content

chore: update versions#211

Merged
rqbazan merged 1 commit into
mainfrom
changeset-release/main
May 12, 2026
Merged

chore: update versions#211
rqbazan merged 1 commit into
mainfrom
changeset-release/main

Conversation

@vland-bot
Copy link
Copy Markdown
Contributor

@vland-bot vland-bot Bot commented May 12, 2026

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@vlandoss/clibuddy@0.6.0

Minor Changes

  • #210 7d7e673 Thanks @rqbazan! - Breaking: Replace zx with tinyexec and redesign ShellService around array-based exec.

    The previous tagged-template API (shell.$\...`) and its surrounding helpers (quote, isRaw, defaultQuote, getPreferLocal, localBaseBinPath, mute(), quiet(), isProcessOutput, ./test-helpersexport) are gone. They duplicated zx internals, introduced a quoting bug for whitespace strings, and surfaced inconsistentnode_modules/.bin` resolution.

    New surface:

    • shell.run(cmd, args, opts?) — streams stdio to the terminal and prints $ <cmd> <args> in verbose mode. Throws NonZeroExitError on non-zero exit by default.
    • shell.runCaptured(cmd, args, opts?) — silent, returns the captured Output { stdout, stderr, exitCode }. Same throw-by-default semantics.
    • shell.at(cwd) / shell.child(opts) — child shells with merged options.
    • RunOptions: cwd, env, verbose, throwOnError, shell (pass-through shell: true for &&/pipes), stdin, display (override the verbose-printed name without affecting what's spawned).
    • resolvePackageBin(pkg, { from, binName? }) — async resolver that returns the absolute path to an installed package's binary, tolerating restrictive exports maps (oxlint) and packages without main/exports at all (@biomejs/biome). Memoised per (pkg, from, binName).
    • isNonZeroExitError(value) — replaces isProcessOutput.

    tinyexec automatically prepends every parent node_modules/.bin to PATH, so localBaseBinPath / getPreferLocal are no longer needed.

    New dependencies: tinyexec (replaces zx), memoize (for resolvePackageBin).

    Migration

    • await shell.$\git init`await shell.run("git", ["init"])`
    • await shell.$\git config`.nothrow()await shell.runCaptured("git", ["config", ...], { throwOnError: false })`
    • shell.mute() → call runCaptured instead (silent by default).
    • createShellService({ localBaseBinPath: [dir] }) → drop the option; tinyexec walks up automatically.
    • isProcessOutput(err)isNonZeroExitError(err).
    • Tools wrapping a npm package (e.g. biome, tsdown) should resolve the bin path via resolvePackageBin and pass it as the cmd with display: "<friendly-name>" to avoid node_modules/.bin/<name> shim loops.

@vlandoss/vland@0.2.0

Minor Changes

  • #210 7d7e673 Thanks @rqbazan! - vland init now prompts (default-yes) for installing dependencies and initialising a git repository when those flags aren't passed on the CLI. Use --install / --no-install and --git / --no-git to skip the prompts; in non-interactive contexts both default to true.

    Also fixes the git initialisation step: the commit message was being split on whitespace by the underlying shell layer, producing errors like pathspec 'initial' did not match any file(s) and leaving the repo half-initialised. The migration to tinyexec (via @vlandoss/clibuddy) makes each argv entry survive as a separate token, so the canonical first commit chore: initial commit from vland now lands cleanly.

Patch Changes

  • Updated dependencies [7d7e673]:
    • @vlandoss/clibuddy@0.6.0

@vlandoss/run-run@0.5.3

Patch Changes

  • #210 7d7e673 Thanks @rqbazan! - Internal migration to the new tinyexec-backed ShellService (see @vlandoss/clibuddy).

    • ToolService.exec now accepts only string[] (the string overload that silently word-split on spaces is gone). All tool services (biome, oxlint, oxfmt, tsdown, tsc) build their flags as arrays so each flag survives as its own argv entry.
    • Bin resolution moves into the base ToolService: subclasses declare { pkg, bin?, ui } in the constructor and the base resolves the absolute path via resolvePackageBin (memoised). The verbose $ <bin> <args> line is preserved via the display option so users still see $ biome check ... instead of an absolute resolved path. Resolving to the absolute path bypasses the node_modules/.bin/<bin> shims that run-run itself publishes (tools/biome etc.), which would otherwise loop back through rr tools <bin> indefinitely.
    • tscheck runs pretsc / pretypecheck package scripts through shell: true so they can use &&, pipes, and env-var substitution.
    • Bump tsdown from 0.21.10 to 0.22.0. tsdown@0.21.x depends on unrun@^0.2.37, which pnpm resolved to 0.2.38 — whose published tarball is missing dist/, producing WARN Failed to create bin … unrun on every install. tsdown@0.22.0 dropped unrun from dependencies (now an optional peer), erradicating the warning.

    Tests reorganised into one e2e file per command (cli, jsc, lint, format, tsc, build-lib). Each spawns the real rr binary against a temp fixture (makeFixture helper) and asserts on observable output, so we no longer rely on a clibuddy/test-helpers mock.

    End-user CLI behaviour is unchanged.

  • Updated dependencies [7d7e673]:

    • @vlandoss/clibuddy@0.6.0

Releases:
  @vlandoss/clibuddy@0.6.0
  @vlandoss/run-run@0.5.3
  @vlandoss/vland@0.2.0

[skip ci]
@rqbazan rqbazan merged commit ede3461 into main May 12, 2026
@rqbazan rqbazan deleted the changeset-release/main branch May 12, 2026 22:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant