ppu-paddle-ocr
Version:
Lightweight, probably the fastest PaddleOCR SDK in TypeScript. Runs anywhere JavaScript runs: Node.js, Bun, Deno, mobile react-native, web browsers, and browser extensions. Docker & CLI supported. The official SDK is browser-only. Accurate text detection
6 lines • 1.69 kB
JavaScript
import{existsSync,globSync,readFileSync,writeFileSync}from"node:fs";import{dirname,join}from"node:path";export class CliError extends Error{code;constructor(message,code=1){super(message);this.name="CliError";this.code=code}}export function usageError(message){throw new CliError(message,2)}let HTTP=/^https?:\/\//i;let GLOB_MAGIC=/[*?[\]{}]/;export async function loadImageInput(arg){if(HTTP.test(arg)){let res=await fetch(arg);if(!res.ok)throw new CliError(`Failed to fetch ${arg}: ${res.status} ${res.statusText}`);return res.arrayBuffer()}if(!existsSync(arg))throw new CliError(`No such file: ${arg}`);let buf=readFileSync(arg);return buf.buffer.slice(buf.byteOffset,buf.byteOffset+buf.byteLength)}export function isMissingLocalFile(arg){return!HTTP.test(arg)&&!existsSync(arg)}export function expandPatterns(patterns){let out=[];for(let pattern of patterns){if(HTTP.test(pattern)||!GLOB_MAGIC.test(pattern)){out.push(pattern);continue}let matches=globSync(pattern).sort();if(matches.length===0)throw new CliError(`No files match: ${pattern}`);out.push(...matches)}return out}export function readVersion(){let dir=import.meta.dirname;for(;;){let pkgPath=join(dir,"package.json");if(existsSync(pkgPath)){try{let pkg=JSON.parse(readFileSync(pkgPath,"utf-8"));if(pkg.name==="ppu-paddle-ocr"&&pkg.version)return pkg.version}catch{}}let parent=dirname(dir);if(parent===dir)return"0.0.0";dir=parent}}export function writeOutput(content,outputPath){if(outputPath){writeFileSync(outputPath,content.endsWith(`
`)?content:`${content}
`);return}process.stdout.write(content.endsWith(`
`)?content:`${content}
`)}export function logStderr(message,quiet){if(!quiet)process.stderr.write(`${message}
`)}