fix: jp2a requires --key=value arg format

jp2a 1.3.x does not accept space-separated long option args.
Added _argFormat: 'equals' to jp2a schema so buildArgs emits
--key=value for value flags. Also mirrors chafa's width/height →
--size=WxH combining in runJp2a.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
dev 2026-04-29 11:31:37 +00:00
parent a95c184be7
commit 9a4e501be9
2 changed files with 13 additions and 3 deletions

View File

@ -97,12 +97,12 @@ describe('buildArgs', () => {
it('accepts jp2a RGB weight values', () => {
expect(buildArgs('jp2a', { red: '0.5', green: '0.3', blue: '0.2' })).toEqual([
'--red', '0.5', '--green', '0.3', '--blue', '0.2',
'--red=0.5', '--green=0.3', '--blue=0.2',
])
})
it('accepts jp2a edge-threshold', () => {
expect(buildArgs('jp2a', { 'edge-threshold': '0.4' })).toEqual(['--edge-threshold', '0.4'])
expect(buildArgs('jp2a', { 'edge-threshold': '0.4' })).toEqual(['--edge-threshold=0.4'])
})
it('accepts valid img2txt format values', () => {

View File

@ -22,6 +22,8 @@ export const SCHEMAS = {
format: { type: 'value', valid: ['symbols', 'utf8'] },
},
jp2a: {
_argFormat: 'equals',
size: { type: 'value' },
width: { type: 'value' },
height: { type: 'value' },
chars: { type: 'value' },
@ -60,6 +62,7 @@ export function buildArgs(tool, flags) {
const schema = SCHEMAS[tool]
if (!schema) throw new Error(`Unknown tool: ${tool}`)
const equals = schema._argFormat === 'equals'
const args = []
for (const [key, value] of Object.entries(flags)) {
const def = schema[key]
@ -69,6 +72,8 @@ export function buildArgs(tool, flags) {
}
if (def.type === 'bool') {
if (value) args.push(`--${key}`)
} else if (equals) {
args.push(`--${key}=${String(value)}`)
} else {
args.push(`--${key}`, String(value))
}
@ -87,7 +92,12 @@ export async function runChafa(imagePath, flags) {
}
export async function runJp2a(imagePath, flags) {
const args = buildArgs('jp2a', flags)
const { width, height, ...rest } = flags
const processed = { ...rest }
if (width && height) processed.size = `${width}x${height}`
else if (width) processed.size = `${width}x`
else if (height) processed.size = `x${height}`
const args = buildArgs('jp2a', processed)
return execa('jp2a', [...args, imagePath], { timeout: TIMEOUT })
}