@vlandoss/clibuddy 0.0.4 → 0.0.5-git-2ebd77c.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -52,7 +52,8 @@ var safe = (style) => colorIsSupported() ? style : identity;
52
52
  var colors = {
53
53
  blueBright: safe(import_chalk.default.blueBright),
54
54
  redBright: safe(import_chalk.default.redBright),
55
- greenBright: safe(import_chalk.default.greenBright)
55
+ greenBright: safe(import_chalk.default.greenBright),
56
+ bold: safe(import_chalk.default.bold)
56
57
  };
57
58
 
58
59
  // src/services/pkg.ts
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/colors.ts","../src/services/pkg.ts","../src/services/shell/create.ts","../src/services/shell/shell.ts","../src/services/shell/utils.ts","../src/version.ts"],"sourcesContent":["export * from \"./colors\";\nexport * from \"./services\";\nexport * from \"./version\";\n","import chalk, { type ChalkInstance } from \"chalk\";\nimport supportsColor from \"supports-color\";\n\n// https://no-color.org/\nconst colorIsSupported = () => supportsColor.stdout && !process.env.NO_COLOR;\n\nconst identity = <T>(x: T) => x;\nconst safe = (style: ChalkInstance) => (colorIsSupported() ? style : identity);\n\nexport const colors = {\n blueBright: safe(chalk.blueBright),\n redBright: safe(chalk.redBright),\n greenBright: safe(chalk.greenBright),\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { findWorkspacePackages, type Project } from \"@pnpm/workspace.find-packages\";\nimport { readWorkspaceManifest } from \"@pnpm/workspace.read-manifest\";\nimport { type NormalizedPackageJson, readPackageUp } from \"read-package-up\";\n\nexport type { Project };\n\nexport class PkgService {\n #packageJson: NormalizedPackageJson;\n #dirPath: string;\n\n get dirPath() {\n return this.#dirPath;\n }\n\n get packageJson() {\n return this.#packageJson;\n }\n\n constructor(packageJson: NormalizedPackageJson, pkgPath: string) {\n this.#packageJson = packageJson;\n this.#dirPath = path.dirname(pkgPath);\n }\n\n info() {\n return {\n packageJson: this.#packageJson,\n dirPath: this.#dirPath,\n };\n }\n\n hasFile(name: string, dir?: string) {\n const filepath = dir ? path.join(dir, name) : this.#fromApp(name);\n return fs.existsSync(filepath);\n }\n\n isMonorepo() {\n return this.#packageJson.workspaces !== undefined || this.#hasPnpmWorkspace();\n }\n\n async getWorkspaceProjects() {\n let patterns: string[];\n\n if (this.#hasPnpmWorkspace()) {\n const manifest = await readWorkspaceManifest(this.#dirPath);\n\n if (!manifest) {\n throw new Error(\"Can't read pnpm workspace manifest\");\n }\n\n patterns = manifest.packages;\n } else {\n patterns = Array.isArray(this.#packageJson.workspaces)\n ? this.#packageJson.workspaces\n : (this.#packageJson.workspaces?.packages ?? []);\n }\n\n if (!Array.isArray(patterns) || patterns.some((p) => typeof p !== \"string\")) {\n throw new Error(\"Invalid workspace patterns\");\n }\n\n const projects = await findWorkspacePackages(this.#dirPath, {\n patterns,\n });\n\n const excludeRoot = (projects: Project[]) => {\n return projects.filter((project) => project.rootDir !== this.#dirPath);\n };\n\n return excludeRoot(projects);\n }\n\n #hasPnpmWorkspace() {\n return this.hasFile(\"pnpm-workspace.yaml\");\n }\n\n #fromApp(...args: string[]) {\n return path.join(this.#dirPath, ...args);\n }\n}\n\nexport async function createPkgService(cwd: string): Promise<PkgService | null> {\n const searchResult = await readPackageUp({ cwd });\n\n if (!searchResult) {\n return null;\n }\n\n const { packageJson, path } = searchResult;\n\n return new PkgService(packageJson, path);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { ShellService } from \"./shell\";\nimport type { CreateOptions } from \"./types\";\n\nexport const cwd = fs.realpathSync(process.cwd());\n\n// Inspired by https://dub.sh/6tiHVgn\nexport function quote(arg: string) {\n if (/^[\\w./:=@-]+$/i.test(arg) || arg === \"\") {\n return arg;\n }\n\n return arg\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/'/g, \"\\\\'\")\n .replace(/\\f/g, \"\\\\f\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\v/g, \"\\\\v\")\n .replace(/\\0/g, \"\\\\0\");\n}\n\nexport const isRaw = (arg: unknown): arg is { stdout: string } =>\n typeof arg === \"object\" && arg !== null && \"stdout\" in arg && typeof arg.stdout === \"string\";\n\nconst getLocalBinPath = (dirPath: string) => path.join(dirPath, \"node_modules\", \".bin\");\n\nfunction defaultQuote(arg: unknown) {\n if (typeof arg === \"string\") {\n return quote(arg);\n }\n\n if (isRaw(arg)) {\n return arg.stdout;\n }\n\n throw TypeError(`Unsupported argument type: ${typeof arg}`);\n}\n\nexport function createShellService(options: CreateOptions = {}) {\n const preferLocal = !options.localBaseBinPath\n ? undefined\n : Array.isArray(options.localBaseBinPath)\n ? options.localBaseBinPath.map(getLocalBinPath)\n : [options.localBaseBinPath].map(getLocalBinPath);\n\n return new ShellService({\n verbose: true,\n cwd,\n preferLocal,\n quote: defaultQuote,\n ...options,\n });\n}\n","import { $ as make$ } from \"zx\";\nimport type { Shell, ShellOptions } from \"./types\";\n\nexport class ShellService {\n #shell: Shell;\n #options: ShellOptions;\n\n constructor(options: ShellOptions) {\n this.#options = Object.freeze(options);\n this.#shell = make$(options);\n }\n\n get options() {\n return this.#options;\n }\n\n get $() {\n return this.#shell;\n }\n\n quiet(options?: ShellOptions) {\n return this.child({\n ...options,\n verbose: false,\n });\n }\n\n at(cwd: string, options?: ShellOptions) {\n return this.child({\n ...options,\n cwd,\n });\n }\n\n child(options: ShellOptions) {\n return new ShellService({\n ...this.#options,\n ...options,\n });\n }\n}\n","import { ProcessOutput } from \"zx\";\n\nexport function isProcessOutput(value: unknown): value is ProcessOutput {\n return value instanceof ProcessOutput;\n}\n","import type { PkgService } from \"./services\";\n\nexport function getVersion(pkg: PkgService) {\n return process.env.VERSION || pkg.packageJson.version;\n}\n"],"mappings":"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","names":["supportsColor","chalk","import_workspace","path","fs","projects","cwd","import_node_fs","import_node_path","make$","cwd","fs","path","import_zx"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/colors.ts","../src/services/pkg.ts","../src/services/shell/create.ts","../src/services/shell/shell.ts","../src/services/shell/utils.ts","../src/version.ts"],"sourcesContent":["export * from \"./colors\";\nexport * from \"./services\";\nexport * from \"./version\";\n","import chalk, { type ChalkInstance } from \"chalk\";\nimport supportsColor from \"supports-color\";\n\n// https://no-color.org/\nconst colorIsSupported = () => supportsColor.stdout && !process.env.NO_COLOR;\n\nconst identity = <T>(x: T) => x;\nconst safe = (style: ChalkInstance) => (colorIsSupported() ? style : identity);\n\nexport const colors = {\n blueBright: safe(chalk.blueBright),\n redBright: safe(chalk.redBright),\n greenBright: safe(chalk.greenBright),\n bold: safe(chalk.bold),\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { findWorkspacePackages, type Project } from \"@pnpm/workspace.find-packages\";\nimport { readWorkspaceManifest } from \"@pnpm/workspace.read-manifest\";\nimport { type NormalizedPackageJson, readPackageUp } from \"read-package-up\";\n\nexport type { Project };\n\nexport class PkgService {\n #packageJson: NormalizedPackageJson;\n #dirPath: string;\n\n get dirPath() {\n return this.#dirPath;\n }\n\n get packageJson() {\n return this.#packageJson;\n }\n\n constructor(packageJson: NormalizedPackageJson, pkgPath: string) {\n this.#packageJson = packageJson;\n this.#dirPath = path.dirname(pkgPath);\n }\n\n info() {\n return {\n packageJson: this.#packageJson,\n dirPath: this.#dirPath,\n };\n }\n\n hasFile(name: string, dir?: string) {\n const filepath = dir ? path.join(dir, name) : this.#fromApp(name);\n return fs.existsSync(filepath);\n }\n\n isMonorepo() {\n return this.#packageJson.workspaces !== undefined || this.#hasPnpmWorkspace();\n }\n\n async getWorkspaceProjects() {\n let patterns: string[];\n\n if (this.#hasPnpmWorkspace()) {\n const manifest = await readWorkspaceManifest(this.#dirPath);\n\n if (!manifest) {\n throw new Error(\"Can't read pnpm workspace manifest\");\n }\n\n patterns = manifest.packages;\n } else {\n patterns = Array.isArray(this.#packageJson.workspaces)\n ? this.#packageJson.workspaces\n : (this.#packageJson.workspaces?.packages ?? []);\n }\n\n if (!Array.isArray(patterns) || patterns.some((p) => typeof p !== \"string\")) {\n throw new Error(\"Invalid workspace patterns\");\n }\n\n const projects = await findWorkspacePackages(this.#dirPath, {\n patterns,\n });\n\n const excludeRoot = (projects: Project[]) => {\n return projects.filter((project) => project.rootDir !== this.#dirPath);\n };\n\n return excludeRoot(projects);\n }\n\n #hasPnpmWorkspace() {\n return this.hasFile(\"pnpm-workspace.yaml\");\n }\n\n #fromApp(...args: string[]) {\n return path.join(this.#dirPath, ...args);\n }\n}\n\nexport async function createPkgService(cwd: string): Promise<PkgService | null> {\n const searchResult = await readPackageUp({ cwd });\n\n if (!searchResult) {\n return null;\n }\n\n const { packageJson, path } = searchResult;\n\n return new PkgService(packageJson, path);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { ShellService } from \"./shell\";\nimport type { CreateOptions } from \"./types\";\n\nexport const cwd = fs.realpathSync(process.cwd());\n\n// Inspired by https://dub.sh/6tiHVgn\nexport function quote(arg: string) {\n if (/^[\\w./:=@-]+$/i.test(arg) || arg === \"\") {\n return arg;\n }\n\n return arg\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/'/g, \"\\\\'\")\n .replace(/\\f/g, \"\\\\f\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\v/g, \"\\\\v\")\n .replace(/\\0/g, \"\\\\0\");\n}\n\nexport const isRaw = (arg: unknown): arg is { stdout: string } =>\n typeof arg === \"object\" && arg !== null && \"stdout\" in arg && typeof arg.stdout === \"string\";\n\nconst getLocalBinPath = (dirPath: string) => path.join(dirPath, \"node_modules\", \".bin\");\n\nfunction defaultQuote(arg: unknown) {\n if (typeof arg === \"string\") {\n return quote(arg);\n }\n\n if (isRaw(arg)) {\n return arg.stdout;\n }\n\n throw TypeError(`Unsupported argument type: ${typeof arg}`);\n}\n\nexport function createShellService(options: CreateOptions = {}) {\n const preferLocal = !options.localBaseBinPath\n ? undefined\n : Array.isArray(options.localBaseBinPath)\n ? options.localBaseBinPath.map(getLocalBinPath)\n : [options.localBaseBinPath].map(getLocalBinPath);\n\n return new ShellService({\n verbose: true,\n cwd,\n preferLocal,\n quote: defaultQuote,\n ...options,\n });\n}\n","import { $ as make$ } from \"zx\";\nimport type { Shell, ShellOptions } from \"./types\";\n\nexport class ShellService {\n #shell: Shell;\n #options: ShellOptions;\n\n constructor(options: ShellOptions) {\n this.#options = Object.freeze(options);\n this.#shell = make$(options);\n }\n\n get options() {\n return this.#options;\n }\n\n get $() {\n return this.#shell;\n }\n\n quiet(options?: ShellOptions) {\n return this.child({\n ...options,\n verbose: false,\n });\n }\n\n at(cwd: string, options?: ShellOptions) {\n return this.child({\n ...options,\n cwd,\n });\n }\n\n child(options: ShellOptions) {\n return new ShellService({\n ...this.#options,\n ...options,\n });\n }\n}\n","import { ProcessOutput } from \"zx\";\n\nexport function isProcessOutput(value: unknown): value is ProcessOutput {\n return value instanceof ProcessOutput;\n}\n","import type { PkgService } from \"./services\";\n\nexport function getVersion(pkg: PkgService) {\n return process.env.VERSION || pkg.packageJson.version;\n}\n"],"mappings":"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","names":["supportsColor","chalk","import_workspace","path","fs","projects","cwd","import_node_fs","import_node_path","make$","cwd","fs","path","import_zx"]}
package/dist/index.d.cts CHANGED
@@ -9,6 +9,7 @@ declare const colors: {
9
9
  blueBright: (<T>(x: T) => T) | ChalkInstance;
10
10
  redBright: (<T>(x: T) => T) | ChalkInstance;
11
11
  greenBright: (<T>(x: T) => T) | ChalkInstance;
12
+ bold: (<T>(x: T) => T) | ChalkInstance;
12
13
  };
13
14
 
14
15
  declare class PkgService {
package/dist/index.d.ts CHANGED
@@ -9,6 +9,7 @@ declare const colors: {
9
9
  blueBright: (<T>(x: T) => T) | ChalkInstance;
10
10
  redBright: (<T>(x: T) => T) | ChalkInstance;
11
11
  greenBright: (<T>(x: T) => T) | ChalkInstance;
12
+ bold: (<T>(x: T) => T) | ChalkInstance;
12
13
  };
13
14
 
14
15
  declare class PkgService {
package/dist/index.js CHANGED
@@ -7,12 +7,13 @@ var safe = (style) => colorIsSupported() ? style : identity;
7
7
  var colors = {
8
8
  blueBright: safe(chalk.blueBright),
9
9
  redBright: safe(chalk.redBright),
10
- greenBright: safe(chalk.greenBright)
10
+ greenBright: safe(chalk.greenBright),
11
+ bold: safe(chalk.bold)
11
12
  };
12
13
 
13
14
  // src/services/pkg.ts
14
- import fs from "node:fs";
15
- import path from "node:path";
15
+ import fs from "fs";
16
+ import path from "path";
16
17
  import { findWorkspacePackages } from "@pnpm/workspace.find-packages";
17
18
  import { readWorkspaceManifest } from "@pnpm/workspace.read-manifest";
18
19
  import { readPackageUp } from "read-package-up";
@@ -81,8 +82,8 @@ async function createPkgService(cwd2) {
81
82
  }
82
83
 
83
84
  // src/services/shell/create.ts
84
- import fs2 from "node:fs";
85
- import path2 from "node:path";
85
+ import fs2 from "fs";
86
+ import path2 from "path";
86
87
 
87
88
  // src/services/shell/shell.ts
88
89
  import { $ as make$ } from "zx";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/colors.ts","../src/services/pkg.ts","../src/services/shell/create.ts","../src/services/shell/shell.ts","../src/services/shell/utils.ts","../src/version.ts"],"sourcesContent":["import chalk, { type ChalkInstance } from \"chalk\";\nimport supportsColor from \"supports-color\";\n\n// https://no-color.org/\nconst colorIsSupported = () => supportsColor.stdout && !process.env.NO_COLOR;\n\nconst identity = <T>(x: T) => x;\nconst safe = (style: ChalkInstance) => (colorIsSupported() ? style : identity);\n\nexport const colors = {\n blueBright: safe(chalk.blueBright),\n redBright: safe(chalk.redBright),\n greenBright: safe(chalk.greenBright),\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { findWorkspacePackages, type Project } from \"@pnpm/workspace.find-packages\";\nimport { readWorkspaceManifest } from \"@pnpm/workspace.read-manifest\";\nimport { type NormalizedPackageJson, readPackageUp } from \"read-package-up\";\n\nexport type { Project };\n\nexport class PkgService {\n #packageJson: NormalizedPackageJson;\n #dirPath: string;\n\n get dirPath() {\n return this.#dirPath;\n }\n\n get packageJson() {\n return this.#packageJson;\n }\n\n constructor(packageJson: NormalizedPackageJson, pkgPath: string) {\n this.#packageJson = packageJson;\n this.#dirPath = path.dirname(pkgPath);\n }\n\n info() {\n return {\n packageJson: this.#packageJson,\n dirPath: this.#dirPath,\n };\n }\n\n hasFile(name: string, dir?: string) {\n const filepath = dir ? path.join(dir, name) : this.#fromApp(name);\n return fs.existsSync(filepath);\n }\n\n isMonorepo() {\n return this.#packageJson.workspaces !== undefined || this.#hasPnpmWorkspace();\n }\n\n async getWorkspaceProjects() {\n let patterns: string[];\n\n if (this.#hasPnpmWorkspace()) {\n const manifest = await readWorkspaceManifest(this.#dirPath);\n\n if (!manifest) {\n throw new Error(\"Can't read pnpm workspace manifest\");\n }\n\n patterns = manifest.packages;\n } else {\n patterns = Array.isArray(this.#packageJson.workspaces)\n ? this.#packageJson.workspaces\n : (this.#packageJson.workspaces?.packages ?? []);\n }\n\n if (!Array.isArray(patterns) || patterns.some((p) => typeof p !== \"string\")) {\n throw new Error(\"Invalid workspace patterns\");\n }\n\n const projects = await findWorkspacePackages(this.#dirPath, {\n patterns,\n });\n\n const excludeRoot = (projects: Project[]) => {\n return projects.filter((project) => project.rootDir !== this.#dirPath);\n };\n\n return excludeRoot(projects);\n }\n\n #hasPnpmWorkspace() {\n return this.hasFile(\"pnpm-workspace.yaml\");\n }\n\n #fromApp(...args: string[]) {\n return path.join(this.#dirPath, ...args);\n }\n}\n\nexport async function createPkgService(cwd: string): Promise<PkgService | null> {\n const searchResult = await readPackageUp({ cwd });\n\n if (!searchResult) {\n return null;\n }\n\n const { packageJson, path } = searchResult;\n\n return new PkgService(packageJson, path);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { ShellService } from \"./shell\";\nimport type { CreateOptions } from \"./types\";\n\nexport const cwd = fs.realpathSync(process.cwd());\n\n// Inspired by https://dub.sh/6tiHVgn\nexport function quote(arg: string) {\n if (/^[\\w./:=@-]+$/i.test(arg) || arg === \"\") {\n return arg;\n }\n\n return arg\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/'/g, \"\\\\'\")\n .replace(/\\f/g, \"\\\\f\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\v/g, \"\\\\v\")\n .replace(/\\0/g, \"\\\\0\");\n}\n\nexport const isRaw = (arg: unknown): arg is { stdout: string } =>\n typeof arg === \"object\" && arg !== null && \"stdout\" in arg && typeof arg.stdout === \"string\";\n\nconst getLocalBinPath = (dirPath: string) => path.join(dirPath, \"node_modules\", \".bin\");\n\nfunction defaultQuote(arg: unknown) {\n if (typeof arg === \"string\") {\n return quote(arg);\n }\n\n if (isRaw(arg)) {\n return arg.stdout;\n }\n\n throw TypeError(`Unsupported argument type: ${typeof arg}`);\n}\n\nexport function createShellService(options: CreateOptions = {}) {\n const preferLocal = !options.localBaseBinPath\n ? undefined\n : Array.isArray(options.localBaseBinPath)\n ? options.localBaseBinPath.map(getLocalBinPath)\n : [options.localBaseBinPath].map(getLocalBinPath);\n\n return new ShellService({\n verbose: true,\n cwd,\n preferLocal,\n quote: defaultQuote,\n ...options,\n });\n}\n","import { $ as make$ } from \"zx\";\nimport type { Shell, ShellOptions } from \"./types\";\n\nexport class ShellService {\n #shell: Shell;\n #options: ShellOptions;\n\n constructor(options: ShellOptions) {\n this.#options = Object.freeze(options);\n this.#shell = make$(options);\n }\n\n get options() {\n return this.#options;\n }\n\n get $() {\n return this.#shell;\n }\n\n quiet(options?: ShellOptions) {\n return this.child({\n ...options,\n verbose: false,\n });\n }\n\n at(cwd: string, options?: ShellOptions) {\n return this.child({\n ...options,\n cwd,\n });\n }\n\n child(options: ShellOptions) {\n return new ShellService({\n ...this.#options,\n ...options,\n });\n }\n}\n","import { ProcessOutput } from \"zx\";\n\nexport function isProcessOutput(value: unknown): value is ProcessOutput {\n return value instanceof ProcessOutput;\n}\n","import type { PkgService } from \"./services\";\n\nexport function getVersion(pkg: PkgService) {\n return process.env.VERSION || pkg.packageJson.version;\n}\n"],"mappings":"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","names":["projects","cwd","path","fs","path","cwd","fs","path"]}
1
+ {"version":3,"sources":["../src/colors.ts","../src/services/pkg.ts","../src/services/shell/create.ts","../src/services/shell/shell.ts","../src/services/shell/utils.ts","../src/version.ts"],"sourcesContent":["import chalk, { type ChalkInstance } from \"chalk\";\nimport supportsColor from \"supports-color\";\n\n// https://no-color.org/\nconst colorIsSupported = () => supportsColor.stdout && !process.env.NO_COLOR;\n\nconst identity = <T>(x: T) => x;\nconst safe = (style: ChalkInstance) => (colorIsSupported() ? style : identity);\n\nexport const colors = {\n blueBright: safe(chalk.blueBright),\n redBright: safe(chalk.redBright),\n greenBright: safe(chalk.greenBright),\n bold: safe(chalk.bold),\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { findWorkspacePackages, type Project } from \"@pnpm/workspace.find-packages\";\nimport { readWorkspaceManifest } from \"@pnpm/workspace.read-manifest\";\nimport { type NormalizedPackageJson, readPackageUp } from \"read-package-up\";\n\nexport type { Project };\n\nexport class PkgService {\n #packageJson: NormalizedPackageJson;\n #dirPath: string;\n\n get dirPath() {\n return this.#dirPath;\n }\n\n get packageJson() {\n return this.#packageJson;\n }\n\n constructor(packageJson: NormalizedPackageJson, pkgPath: string) {\n this.#packageJson = packageJson;\n this.#dirPath = path.dirname(pkgPath);\n }\n\n info() {\n return {\n packageJson: this.#packageJson,\n dirPath: this.#dirPath,\n };\n }\n\n hasFile(name: string, dir?: string) {\n const filepath = dir ? path.join(dir, name) : this.#fromApp(name);\n return fs.existsSync(filepath);\n }\n\n isMonorepo() {\n return this.#packageJson.workspaces !== undefined || this.#hasPnpmWorkspace();\n }\n\n async getWorkspaceProjects() {\n let patterns: string[];\n\n if (this.#hasPnpmWorkspace()) {\n const manifest = await readWorkspaceManifest(this.#dirPath);\n\n if (!manifest) {\n throw new Error(\"Can't read pnpm workspace manifest\");\n }\n\n patterns = manifest.packages;\n } else {\n patterns = Array.isArray(this.#packageJson.workspaces)\n ? this.#packageJson.workspaces\n : (this.#packageJson.workspaces?.packages ?? []);\n }\n\n if (!Array.isArray(patterns) || patterns.some((p) => typeof p !== \"string\")) {\n throw new Error(\"Invalid workspace patterns\");\n }\n\n const projects = await findWorkspacePackages(this.#dirPath, {\n patterns,\n });\n\n const excludeRoot = (projects: Project[]) => {\n return projects.filter((project) => project.rootDir !== this.#dirPath);\n };\n\n return excludeRoot(projects);\n }\n\n #hasPnpmWorkspace() {\n return this.hasFile(\"pnpm-workspace.yaml\");\n }\n\n #fromApp(...args: string[]) {\n return path.join(this.#dirPath, ...args);\n }\n}\n\nexport async function createPkgService(cwd: string): Promise<PkgService | null> {\n const searchResult = await readPackageUp({ cwd });\n\n if (!searchResult) {\n return null;\n }\n\n const { packageJson, path } = searchResult;\n\n return new PkgService(packageJson, path);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { ShellService } from \"./shell\";\nimport type { CreateOptions } from \"./types\";\n\nexport const cwd = fs.realpathSync(process.cwd());\n\n// Inspired by https://dub.sh/6tiHVgn\nexport function quote(arg: string) {\n if (/^[\\w./:=@-]+$/i.test(arg) || arg === \"\") {\n return arg;\n }\n\n return arg\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/'/g, \"\\\\'\")\n .replace(/\\f/g, \"\\\\f\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\v/g, \"\\\\v\")\n .replace(/\\0/g, \"\\\\0\");\n}\n\nexport const isRaw = (arg: unknown): arg is { stdout: string } =>\n typeof arg === \"object\" && arg !== null && \"stdout\" in arg && typeof arg.stdout === \"string\";\n\nconst getLocalBinPath = (dirPath: string) => path.join(dirPath, \"node_modules\", \".bin\");\n\nfunction defaultQuote(arg: unknown) {\n if (typeof arg === \"string\") {\n return quote(arg);\n }\n\n if (isRaw(arg)) {\n return arg.stdout;\n }\n\n throw TypeError(`Unsupported argument type: ${typeof arg}`);\n}\n\nexport function createShellService(options: CreateOptions = {}) {\n const preferLocal = !options.localBaseBinPath\n ? undefined\n : Array.isArray(options.localBaseBinPath)\n ? options.localBaseBinPath.map(getLocalBinPath)\n : [options.localBaseBinPath].map(getLocalBinPath);\n\n return new ShellService({\n verbose: true,\n cwd,\n preferLocal,\n quote: defaultQuote,\n ...options,\n });\n}\n","import { $ as make$ } from \"zx\";\nimport type { Shell, ShellOptions } from \"./types\";\n\nexport class ShellService {\n #shell: Shell;\n #options: ShellOptions;\n\n constructor(options: ShellOptions) {\n this.#options = Object.freeze(options);\n this.#shell = make$(options);\n }\n\n get options() {\n return this.#options;\n }\n\n get $() {\n return this.#shell;\n }\n\n quiet(options?: ShellOptions) {\n return this.child({\n ...options,\n verbose: false,\n });\n }\n\n at(cwd: string, options?: ShellOptions) {\n return this.child({\n ...options,\n cwd,\n });\n }\n\n child(options: ShellOptions) {\n return new ShellService({\n ...this.#options,\n ...options,\n });\n }\n}\n","import { ProcessOutput } from \"zx\";\n\nexport function isProcessOutput(value: unknown): value is ProcessOutput {\n return value instanceof ProcessOutput;\n}\n","import type { PkgService } from \"./services\";\n\nexport function getVersion(pkg: PkgService) {\n return process.env.VERSION || pkg.packageJson.version;\n}\n"],"mappings":"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","names":["projects","cwd","path","fs","path","cwd","fs","path"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vlandoss/clibuddy",
3
- "version": "0.0.4",
3
+ "version": "0.0.5-git-2ebd77c.0",
4
4
  "description": "A helper library to create CLIs in Variable Land",
5
5
  "homepage": "https://github.com/variableland/dx/tree/main/packages/clibuddy#readme",
6
6
  "bugs": {
@@ -46,7 +46,6 @@
46
46
  "bun": ">=1.0.0"
47
47
  },
48
48
  "scripts": {
49
- "build": "tsup",
50
- "typecheck": "rr tsc"
49
+ "build": "tsup"
51
50
  }
52
51
  }
package/src/colors.ts CHANGED
@@ -11,4 +11,5 @@ export const colors = {
11
11
  blueBright: safe(chalk.blueBright),
12
12
  redBright: safe(chalk.redBright),
13
13
  greenBright: safe(chalk.greenBright),
14
+ bold: safe(chalk.bold),
14
15
  };