diff --git a/packages/media/dist-in/commands/audio.d.ts b/packages/media/dist-in/commands/audio.d.ts index 279bf080..3298fb71 100644 --- a/packages/media/dist-in/commands/audio.d.ts +++ b/packages/media/dist-in/commands/audio.d.ts @@ -1,2 +1,3 @@ -export declare const defaultOptions: (yargs: CLI.Argv) => any; -export declare const register: (cli: CLI.Argv) => any; +import * as CLI from 'yargs'; +export declare const defaultOptions: (yargs: CLI.Argv) => any; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/media/dist-in/commands/audio.js b/packages/media/dist-in/commands/audio.js index dfaf267b..cba4ecbf 100644 --- a/packages/media/dist-in/commands/audio.js +++ b/packages/media/dist-in/commands/audio.js @@ -1,36 +1,31 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.register = exports.defaultOptions = void 0; -const __1 = require("../"); -const convert_1 = require("../lib/media/audio/convert"); -const _cli_1 = require("../_cli"); -const defaultOptions = (yargs) => { - return yargs.option('src', { - describe: 'FILE|FOLDER|GLOB', - demandOption: true - }).option('dst', { - describe: 'FILE|FOLDER|GLOB' - }).option('debug', { - default: false, - describe: 'Enable internal debug messages', - type: 'boolean' - }).option('alt', { - default: false, - describe: 'Use alternate tokenizer, & instead of $', - type: 'boolean' - }); -}; -exports.defaultOptions = defaultOptions; -let options = (yargs) => (0, exports.defaultOptions)(yargs); -const register = (cli) => { - return cli.command('video ', 'Convert video', options, (argv) => { - (0, _cli_1.defaults)(); - const options = (0, _cli_1.sanitizeVideo)(argv); - __1.logger.info("options " + argv.dst, options); - if (argv.verb = 'convert') { - return (0, convert_1.convert)(options); - } - }); -}; -exports.register = register; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvYXVkaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkJBQTRCO0FBQzVCLHdEQUFvRDtBQUVwRCxrQ0FBaUQ7QUFHMUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQWZZLFFBQUEsY0FBYyxrQkFlMUI7QUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsSUFBQSxzQkFBYyxFQUFDLEtBQUssQ0FBQyxDQUFBO0FBRWpELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBbUIsRUFBRSxFQUFFO1FBQ2pGLElBQUEsZUFBUSxHQUFFLENBQUE7UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxDQUF5QixDQUFBO1FBQzNELFVBQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDM0MsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsRUFBRTtZQUN2QixPQUFPLElBQUEsaUJBQU8sRUFBQyxPQUFPLENBQUMsQ0FBQTtTQUMxQjtJQUNMLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBO0FBVFksUUFBQSxRQUFRLFlBU3BCIn0= \ No newline at end of file +import { logger } from '../'; +import { convert } from '../lib/media/audio/convert'; +import { defaults, sanitizeVideo } from '../_cli'; +export const defaultOptions = (yargs) => { + return yargs.option('src', { + describe: 'FILE|FOLDER|GLOB', + demandOption: true + }).option('dst', { + describe: 'FILE|FOLDER|GLOB' + }).option('debug', { + default: false, + describe: 'Enable internal debug messages', + type: 'boolean' + }).option('alt', { + default: false, + describe: 'Use alternate tokenizer, & instead of $', + type: 'boolean' + }); +}; +let options = (yargs) => defaultOptions(yargs); +export const register = (cli) => { + return cli.command('video ', 'Convert video', options, (argv) => { + defaults(); + const options = sanitizeVideo(argv); + logger.info("options " + argv.dst, options); + if (argv.verb = 'convert') { + return convert(options); + } + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvYXVkaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFHakQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDOUMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUN2QixRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLFlBQVksRUFBRSxJQUFJO0tBQ3JCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsUUFBUSxFQUFFLGtCQUFrQjtLQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNmLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLGdDQUFnQztRQUMxQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNiLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHlDQUF5QztRQUNuRCxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBRXhELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQW1CLEVBQUUsRUFBRTtRQUNqRixRQUFRLEVBQUUsQ0FBQTtRQUNWLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQXlCLENBQUE7UUFDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDeEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0IsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/media/dist-in/commands/convert.d.ts b/packages/media/dist-in/commands/convert.d.ts index 279bf080..3298fb71 100644 --- a/packages/media/dist-in/commands/convert.d.ts +++ b/packages/media/dist-in/commands/convert.d.ts @@ -1,2 +1,3 @@ -export declare const defaultOptions: (yargs: CLI.Argv) => any; -export declare const register: (cli: CLI.Argv) => any; +import * as CLI from 'yargs'; +export declare const defaultOptions: (yargs: CLI.Argv) => any; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/media/dist-in/commands/convert.js b/packages/media/dist-in/commands/convert.js index f20c52fb..f7dc26c2 100644 --- a/packages/media/dist-in/commands/convert.js +++ b/packages/media/dist-in/commands/convert.js @@ -1,42 +1,37 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.register = exports.defaultOptions = void 0; -const __1 = require("../"); -const images_1 = require("../lib/media/images"); -const _cli_1 = require("../_cli"); -const defaultOptions = (yargs) => { - return yargs.option('src', { - describe: 'FILE|FOLDER|GLOB', - demandOption: true - }).option('dst', { - describe: 'FILE|FOLDER|GLOB' - }).option('debug', { - default: false, - describe: 'Enable internal debug messages', - type: 'boolean' - }).option('alt', { - default: false, - describe: 'Use alternate tokenizer, & instead of $', - type: 'boolean' - }).option('dry', { - default: false, - describe: 'Run without conversion', - type: 'boolean' - }).option('verbose', { - default: false, - describe: 'Show internal messages', - type: 'boolean' - }); -}; -exports.defaultOptions = defaultOptions; -let options = (yargs) => (0, exports.defaultOptions)(yargs); -const register = (cli) => { - return cli.command('convert', 'Convert files', options, (argv) => { - (0, _cli_1.defaults)(); - const options = (0, _cli_1.sanitizeVideo)(argv); - options.debug && __1.logger.info("options " + argv.dst, options); - return (0, images_1.convert)(options); - }); -}; -exports.register = register; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9jb252ZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJCQUE0QjtBQUU1QixnREFFNEI7QUFFNUIsa0NBSWdCO0FBT1QsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUF2QlksUUFBQSxjQUFjLGtCQXVCMUI7QUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsSUFBQSxzQkFBYyxFQUFDLEtBQUssQ0FBQyxDQUFBO0FBRWpELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBbUIsRUFBRSxFQUFFO1FBQzVFLElBQUEsZUFBUSxHQUFFLENBQUE7UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxDQUFhLENBQUE7UUFDL0MsT0FBTyxDQUFDLEtBQUssSUFBSSxVQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzVELE9BQU8sSUFBQSxnQkFBTyxFQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBO0FBUFksUUFBQSxRQUFRLFlBT3BCIn0= \ No newline at end of file +import { logger } from '../'; +import { convert } from '../lib/media/images'; +import { defaults, sanitizeVideo } from '../_cli'; +export const defaultOptions = (yargs) => { + return yargs.option('src', { + describe: 'FILE|FOLDER|GLOB', + demandOption: true + }).option('dst', { + describe: 'FILE|FOLDER|GLOB' + }).option('debug', { + default: false, + describe: 'Enable internal debug messages', + type: 'boolean' + }).option('alt', { + default: false, + describe: 'Use alternate tokenizer, & instead of $', + type: 'boolean' + }).option('dry', { + default: false, + describe: 'Run without conversion', + type: 'boolean' + }).option('verbose', { + default: false, + describe: 'Show internal messages', + type: 'boolean' + }); +}; +let options = (yargs) => defaultOptions(yargs); +export const register = (cli) => { + return cli.command('convert', 'Convert files', options, (argv) => { + defaults(); + const options = sanitizeVideo(argv); + options.debug && logger.info("options " + argv.dst, options); + return convert(options); + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9jb252ZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFFNUIsT0FBTyxFQUNILE9BQU8sRUFDVixNQUFNLHFCQUFxQixDQUFBO0FBRTVCLE9BQU8sRUFFSCxRQUFRLEVBQ1IsYUFBYSxFQUNoQixNQUFNLFNBQVMsQ0FBQTtBQU9oQixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBRXhELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQW1CLEVBQUUsRUFBRTtRQUM1RSxRQUFRLEVBQUUsQ0FBQTtRQUNWLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQWEsQ0FBQTtRQUMvQyxPQUFPLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDNUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/packages/media/dist-in/commands/pdf2jpg.d.ts b/packages/media/dist-in/commands/pdf2jpg.d.ts index e4aa7e05..60d0edcf 100644 --- a/packages/media/dist-in/commands/pdf2jpg.d.ts +++ b/packages/media/dist-in/commands/pdf2jpg.d.ts @@ -1 +1,6 @@ -export declare const register: (cli: CLI.Argv) => any; +import * as CLI from 'yargs'; +export declare const command = "pdf2jpg"; +export declare const desc = "Convert PDF to images"; +export declare const builder: (yargs: CLI.Argv) => any; +export declare function handler(argv: CLI.Arguments): Promise; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/media/dist-in/commands/pdf2jpg.js b/packages/media/dist-in/commands/pdf2jpg.js index 1f73baa1..de5800a7 100644 --- a/packages/media/dist-in/commands/pdf2jpg.js +++ b/packages/media/dist-in/commands/pdf2jpg.js @@ -1,76 +1,71 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.register = void 0; -const __1 = require("../"); -const path = __importStar(require("path")); -const index_1 = require("../lib/process/index"); -const pMap = __importStar(require("p-map")); -const fg = require('fast-glob'); -const defaultOptions = (yargs) => { - return yargs.option('input', { - default: './', - describe: 'The sources' - }).option('debug', { - default: 'false', - describe: 'Enable internal debug message' - }); -}; -let options = (yargs) => defaultOptions(yargs); -async function convertFiles(files) { - return pMap(files, (file) => { - const inParts = path.parse(file); - // magick convert leg.pdf -quality 100 -density 250 -trim -flatten -resize 200% -sharpen 0x1.0 leg.jpg - const promise = index_1.Helper.run(inParts.dir, 'convert', [ - `"${inParts.base}[0]"`, - '-quality 80', - '-density 250', - '-trim', - '-flatten', - '-sharpen 0x1.0', - `"${inParts.name}.jpg"` - ]); - return promise; - }, { concurrency: 1 }); -} -// node ./build/main.js pdf2jpg --input=../drawings -const register = (cli) => { - return cli.command('pdf2jpg', '', options, async (argv) => { - if (argv.help) { - return; - } - const src = path.resolve('' + argv.input); - if (argv.debug) { - __1.logger.debug(`Begin convert PDF files${src}`); - } - const files = fg.sync('*.pdf|*.PDF', { dot: true, cwd: src, absolute: true }); - await convertFiles(files); - if (argv.debug) { - __1.logger.debug(`Converted ${files.length} files`); - } - }); -}; -exports.register = register; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmMmpwZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9wZGYyanBnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsMkJBQTRCO0FBQzVCLDJDQUE0QjtBQUM1QixnREFBNkM7QUFDN0MsNENBQTZCO0FBRTdCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUUvQixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDekIsT0FBTyxFQUFFLElBQUk7UUFDYixRQUFRLEVBQUUsYUFBYTtLQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNmLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRSwrQkFBK0I7S0FDNUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDO0FBRUYsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV6RCxLQUFLLFVBQVUsWUFBWSxDQUFDLEtBQUs7SUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxzR0FBc0c7UUFDdEcsTUFBTSxPQUFPLEdBQUcsY0FBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFDakQ7WUFDSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLE1BQU07WUFDdEIsYUFBYTtZQUNiLGNBQWM7WUFDZCxPQUFPO1lBQ1AsVUFBVTtZQUNWLGdCQUFnQjtZQUNoQixJQUFJLE9BQU8sQ0FBQyxJQUFJLE9BQU87U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQyxFQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELG1EQUFtRDtBQUM1QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUFFLE9BQU87U0FBRTtRQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osVUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUNqRDtRQUNELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLFVBQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztTQUNuRDtJQUNMLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBO0FBYlksUUFBQSxRQUFRLFlBYXBCIn0= \ No newline at end of file +import { logger } from '../index.js'; +import { existsSync } from 'node:fs'; +import * as z from 'zod'; +import { runConversion } from '../lib/pdf/convert.js'; +import { ConvertCommandSchema } from '../lib/pdf/types.js'; +export const command = 'pdf2jpg'; +export const desc = 'Convert PDF to images'; +export const builder = (yargs) => { + return yargs + .option('input', { + alias: 'i', + describe: 'Path to the input PDF file', + demandOption: true, + type: 'string' + }) + .option('output', { + alias: 'o', + describe: 'Output path template (e.g., output/page_{PAGE}.png)', + type: 'string' + }) + .option('dpi', { + describe: 'Resolution for the output images', + default: 300, + type: 'number' + }) + .option('scale', { + describe: 'Scaling factor to apply before rendering (e.g., 2 for 2x size)', + default: 2, + type: 'number' + }) + .option('format', { + describe: 'Output image format', + choices: ['png', 'jpg'], + default: 'jpg', + type: 'string' + }) + .option('startPage', { + describe: 'First page to convert (1-based index)', + type: 'number' + }) + .option('endPage', { + describe: 'Last page to convert (1-based index)', + type: 'number' + }); +}; +export async function handler(argv) { + try { + const config = ConvertCommandSchema.parse(argv); + if (!existsSync(config.input)) { + throw new Error(`Input file ${config.input} does not exist`); + } + logger.info("Calling conversion library function..."); + const outputFiles = await runConversion(config, logger); + logger.info(`Conversion completed successfully`); + logger.info(`Generated ${outputFiles.length} images`); + } + catch (error) { + if (error instanceof z.ZodError) { + logger.error('Invalid arguments:', error.flatten()); + } + else { + const message = error instanceof Error ? error.message : String(error); + logger.error('Error during conversion command:', message, error); + } + process.exit(1); + } +} +export const register = (cli) => { + return cli.command(command, desc, builder, handler); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmMmpwZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9wZGYyanBnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUN6QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUF3QixvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDakMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLHVCQUF1QixDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQ3ZDLE9BQU8sS0FBSztTQUNQLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDYixLQUFLLEVBQUUsR0FBRztRQUNWLFFBQVEsRUFBRSw0QkFBNEI7UUFDdEMsWUFBWSxFQUFFLElBQUk7UUFDbEIsSUFBSSxFQUFFLFFBQVE7S0FDakIsQ0FBQztTQUNELE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDZCxLQUFLLEVBQUUsR0FBRztRQUNWLFFBQVEsRUFBRSxxREFBcUQ7UUFDL0QsSUFBSSxFQUFFLFFBQVE7S0FDakIsQ0FBQztTQUNELE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDWCxRQUFRLEVBQUUsa0NBQWtDO1FBQzVDLE9BQU8sRUFBRSxHQUFHO1FBQ1osSUFBSSxFQUFFLFFBQVE7S0FDakIsQ0FBQztTQUNELE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDYixRQUFRLEVBQUUsZ0VBQWdFO1FBQzFFLE9BQU8sRUFBRSxDQUFDO1FBQ1YsSUFBSSxFQUFFLFFBQVE7S0FDakIsQ0FBQztTQUNELE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDZCxRQUFRLEVBQUUscUJBQXFCO1FBQy9CLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDdkIsT0FBTyxFQUFFLEtBQUs7UUFDZCxJQUFJLEVBQUUsUUFBUTtLQUNqQixDQUFDO1NBQ0QsTUFBTSxDQUFDLFdBQVcsRUFBRTtRQUNqQixRQUFRLEVBQUUsdUNBQXVDO1FBQ2pELElBQUksRUFBRSxRQUFRO0tBQ2pCLENBQUM7U0FDRCxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ2YsUUFBUSxFQUFFLHNDQUFzQztRQUNoRCxJQUFJLEVBQUUsUUFBUTtLQUNqQixDQUFDLENBQUE7QUFDVixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FBQyxJQUFtQjtJQUM3QyxJQUFJLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUF5QixDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLE1BQU0sQ0FBQyxLQUFLLGlCQUFpQixDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxXQUFXLENBQUMsTUFBTSxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ3ZELENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/media/dist-in/commands/svg2jpg.d.ts b/packages/media/dist-in/commands/svg2jpg.d.ts index e4aa7e05..ca73784e 100644 --- a/packages/media/dist-in/commands/svg2jpg.d.ts +++ b/packages/media/dist-in/commands/svg2jpg.d.ts @@ -1 +1,2 @@ -export declare const register: (cli: CLI.Argv) => any; +import * as CLI from 'yargs'; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/media/dist-in/commands/svg2jpg.js b/packages/media/dist-in/commands/svg2jpg.js index e3cfdf40..2cebd513 100644 --- a/packages/media/dist-in/commands/svg2jpg.js +++ b/packages/media/dist-in/commands/svg2jpg.js @@ -1,72 +1,45 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.register = void 0; -const debug_1 = require("@plastichub/core/debug"); -const path = __importStar(require("path")); -const index_1 = require("../lib/process/index"); -const bluebird = __importStar(require("bluebird")); -const fg = require('fast-glob'); -const defaultOptions = (yargs) => { - return yargs.option('input', { - default: './', - describe: 'The sources' - }).option('debug', { - default: 'false', - describe: 'Enable internal debug message' - }); -}; -let options = (yargs) => defaultOptions(yargs); -async function convertFiles(files) { - return bluebird.mapSeries(files, (file) => { - const inParts = path.parse(file); - const promise = index_1.Helper.run(inParts.dir, 'convert', [ - `"${inParts.base}"`, - '-quality 40', - '-sharpen 0x1.0', - `"${inParts.name}.jpg"` - ]); - return promise; - }); -} -//node ./build/main.js svg2jpg --input=../tests/svg/ -const register = (cli) => { - return cli.command('svg2jpg', '', options, async (argv) => { - if (argv.help) { - return; - } - const src = path.resolve('' + argv.input); - const files = fg.sync('*.svg|*.SVG', { dot: true, cwd: src, absolute: true }); - if (argv.debug) { - (0, debug_1.debug)(`Begin convert SVG files at ${src} ${files}`); - } - await convertFiles(files); - if (argv.debug) { - (0, debug_1.debug)(`Converted ${files.length} files`); - } - }); -}; -exports.register = register; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnMmpwZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9zdmcyanBnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0Esa0RBQThDO0FBQzlDLDJDQUE2QjtBQUM3QixnREFBOEM7QUFDOUMsbURBQXFDO0FBRXJDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUVoQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDekIsT0FBTyxFQUFFLElBQUk7UUFDYixRQUFRLEVBQUUsYUFBYTtLQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNmLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRSwrQkFBK0I7S0FDNUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDO0FBRUYsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV6RCxLQUFLLFVBQVUsWUFBWSxDQUFDLEtBQUs7SUFDN0IsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsY0FBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFDakQ7WUFDSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEdBQUc7WUFDbkIsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixJQUFJLE9BQU8sQ0FBQyxJQUFJLE9BQU87U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ0Qsb0RBQW9EO0FBRTdDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFtQixFQUFFLEVBQUU7UUFDckUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWixJQUFBLGFBQUssRUFBQyw4QkFBOEIsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDdkQ7UUFDRCxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWixJQUFBLGFBQUssRUFBQyxhQUFhLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFiVyxRQUFBLFFBQVEsWUFhbkIifQ== \ No newline at end of file +import * as path from 'path'; +import { Helper } from '../lib/process/index.js'; +import * as bluebird from 'bluebird'; +import { logger } from '../index.js'; +const fg = require('fast-glob'); +const defaultOptions = (yargs) => { + return yargs.option('input', { + default: './', + describe: 'The sources' + }).option('debug', { + default: 'false', + describe: 'Enable internal debug message' + }); +}; +let options = (yargs) => defaultOptions(yargs); +async function convertFiles(files) { + return bluebird.mapSeries(files, (file) => { + const inParts = path.parse(file); + const promise = Helper.run(inParts.dir, 'convert', [ + `"${inParts.base}"`, + '-quality 40', + '-sharpen 0x1.0', + `"${inParts.name}.jpg"` + ]); + return promise; + }); +} +//node ./build/main.js svg2jpg --input=../tests/svg/ +export const register = (cli) => { + return cli.command('svg2jpg', '', options, async (argv) => { + if (argv.help) { + return; + } + const src = path.resolve('' + argv.input); + const files = fg.sync('*.svg|*.SVG', { dot: true, cwd: src, absolute: true }); + if (argv.debug) { + logger.debug(`Begin convert SVG files at ${src} ${files}`); + } + await convertFiles(files); + if (argv.debug) { + logger.debug(`Converted ${files.length} files`); + } + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnMmpwZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9zdmcyanBnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUVoQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDekIsT0FBTyxFQUFFLElBQUk7UUFDYixRQUFRLEVBQUUsYUFBYTtLQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNmLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRSwrQkFBK0I7S0FDNUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDO0FBRUYsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV6RCxLQUFLLFVBQVUsWUFBWSxDQUFDLEtBQUs7SUFDN0IsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFDakQ7WUFDSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEdBQUc7WUFDbkIsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixJQUFJLE9BQU8sQ0FBQyxJQUFJLE9BQU87U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ0Qsb0RBQW9EO0FBRXBELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQUMsT0FBTztRQUFDLENBQUM7UUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/packages/media/dist-in/commands/video.d.ts b/packages/media/dist-in/commands/video.d.ts index 279bf080..3298fb71 100644 --- a/packages/media/dist-in/commands/video.d.ts +++ b/packages/media/dist-in/commands/video.d.ts @@ -1,2 +1,3 @@ -export declare const defaultOptions: (yargs: CLI.Argv) => any; -export declare const register: (cli: CLI.Argv) => any; +import * as CLI from 'yargs'; +export declare const defaultOptions: (yargs: CLI.Argv) => any; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/media/dist-in/commands/video.js b/packages/media/dist-in/commands/video.js index f18bb590..6a4e892c 100644 --- a/packages/media/dist-in/commands/video.js +++ b/packages/media/dist-in/commands/video.js @@ -1,39 +1,34 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.register = exports.defaultOptions = void 0; -const __1 = require("../"); -const video_1 = require("../lib/media/video"); -const _cli_1 = require("../_cli"); -const defaultOptions = (yargs) => { - return yargs.option('src', { - describe: 'FILE|FOLDER|GLOB', - demandOption: true - }).option('dst', { - describe: 'FILE|FOLDER|GLOB' - }).option('debug', { - default: false, - describe: 'Enable internal debug messages', - type: 'boolean' - }).option('alt', { - default: false, - describe: 'Use alternate tokenizer, & instead of $', - type: 'boolean' - }); -}; -exports.defaultOptions = defaultOptions; -let options = (yargs) => (0, exports.defaultOptions)(yargs); -const register = (cli) => { - return cli.command('video ', 'Convert video', options, async (argv) => { - (0, _cli_1.defaults)(); - const options = (0, _cli_1.sanitizeVideo)(argv); - __1.logger.info("options " + argv.dst, options); - if (options.verb == 'convert') { - return (0, video_1.convert)(options); - } - if (options.verb == 'merge') { - return (0, video_1.merge)(options); - } - }); -}; -exports.register = register; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvdmlkZW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkJBQTRCO0FBQzVCLDhDQUFtRDtBQUNuRCxrQ0FBaUQ7QUFHMUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQWZZLFFBQUEsY0FBYyxrQkFlMUI7QUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsSUFBQSxzQkFBYyxFQUFDLEtBQUssQ0FBQyxDQUFBO0FBRWpELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFtQixFQUFFLEVBQUU7UUFDdkYsSUFBQSxlQUFRLEdBQUUsQ0FBQTtRQUNWLE1BQU0sT0FBTyxHQUFHLElBQUEsb0JBQWEsRUFBQyxJQUFJLENBQXlCLENBQUE7UUFDM0QsVUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMzQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFO1lBQzNCLE9BQU8sSUFBQSxlQUFPLEVBQUMsT0FBTyxDQUFDLENBQUE7U0FDMUI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFO1lBQ3pCLE9BQU8sSUFBQSxhQUFLLEVBQUMsT0FBTyxDQUFRLENBQUE7U0FDL0I7SUFDTCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQVpZLFFBQUEsUUFBUSxZQVlwQiJ9 \ No newline at end of file +import { logger } from '../'; +import { convert, merge } from '../lib/media/video'; +import { defaults, sanitizeVideo } from '../_cli'; +export const defaultOptions = (yargs) => { + return yargs.option('src', { + describe: 'FILE|FOLDER|GLOB', + demandOption: true + }).option('dst', { + describe: 'FILE|FOLDER|GLOB' + }).option('debug', { + default: false, + describe: 'Enable internal debug messages', + type: 'boolean' + }).option('alt', { + default: false, + describe: 'Use alternate tokenizer, & instead of $', + type: 'boolean' + }); +}; +let options = (yargs) => defaultOptions(yargs); +export const register = (cli) => { + return cli.command('video ', 'Convert video', options, async (argv) => { + defaults(); + const options = sanitizeVideo(argv); + logger.info("options " + argv.dst, options); + if (options.verb == 'convert') { + return convert(options); + } + if (options.verb == 'merge') { + return merge(options); + } + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvdmlkZW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBR2pELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQzlDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDdkIsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QixZQUFZLEVBQUUsSUFBSTtLQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNiLFFBQVEsRUFBRSxrQkFBa0I7S0FDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDZixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxnQ0FBZ0M7UUFDMUMsSUFBSSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSx5Q0FBeUM7UUFDbkQsSUFBSSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBO0FBRUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUV4RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUN0QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQW1CLEVBQUUsRUFBRTtRQUN2RixRQUFRLEVBQUUsQ0FBQTtRQUNWLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQXlCLENBQUE7UUFDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMzQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDNUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0IsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUMxQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQVEsQ0FBQTtRQUNoQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/packages/media/dist-in/commands/watermark.d.ts b/packages/media/dist-in/commands/watermark.d.ts index 279bf080..3298fb71 100644 --- a/packages/media/dist-in/commands/watermark.d.ts +++ b/packages/media/dist-in/commands/watermark.d.ts @@ -1,2 +1,3 @@ -export declare const defaultOptions: (yargs: CLI.Argv) => any; -export declare const register: (cli: CLI.Argv) => any; +import * as CLI from 'yargs'; +export declare const defaultOptions: (yargs: CLI.Argv) => any; +export declare const register: (cli: CLI.Argv) => any; diff --git a/packages/media/dist-in/commands/watermark.js b/packages/media/dist-in/commands/watermark.js index 42982bc2..7c16b144 100644 --- a/packages/media/dist-in/commands/watermark.js +++ b/packages/media/dist-in/commands/watermark.js @@ -1,75 +1,70 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.register = exports.defaultOptions = void 0; -const commons_1 = require("@polymech/commons"); -const index_1 = require("../index"); -const images_1 = require("../lib/media/images"); -const _cli_1 = require("../_cli"); -const defaultOptions = (yargs) => { - return yargs.option('src', { - describe: 'FILE|FOLDER|GLOB', - demandOption: true - }).option('dst', { - describe: 'FILE|FOLDER|GLOB' - }).option('debug', { - default: false, - describe: 'Enable internal debug messages', - type: 'boolean' - }).option('alt', { - default: false, - describe: 'Use alternate tokenizer, & instead of $', - type: 'boolean' - }).option('dry', { - default: false, - describe: 'Run without conversion', - type: 'boolean' - }).option('verbose', { - default: false, - describe: 'Show internal messages', - type: 'boolean' - }).option('percent', { - default: false, - describe: 'Resize image with percent', - type: 'number' - }).option('width', { - default: false, - describe: 'Resize image with', - type: 'number' - }).option('height', { - default: false, - describe: 'Resize image height', - type: 'number' - }).option('minHeight', { - describe: 'Resize image minimum height', - type: 'number' - }).option('minWidth', { - describe: 'Resize image minimum width', - type: 'number' - }).option('minSize', { - describe: 'Resize image size (bytes)', - type: 'number' - }).option('percent', { - describe: 'Resize image in percent (width)', - type: 'number' - }).option('key', { - describe: 'API Key', - type: 'string' - }); -}; -exports.defaultOptions = defaultOptions; -const options = (yargs) => (0, exports.defaultOptions)(yargs); -const register = (cli) => { - return cli.command('watermark', 'Remove watermark : FILE|GLOB', options, async (argv) => { - (0, _cli_1.defaults)(); - const options = (0, _cli_1.sanitize)(argv); - const config = (0, commons_1.CONFIG_DEFAULT)(); - if (!config.novita) { - index_1.logger.error("Novita key not found"); - return; - } - options.debug && index_1.logger.info("Watermark Options " + argv.dst, options); - return (0, images_1.watermark)({ ...options, key: config.novita.key }); - }); -}; -exports.register = register; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0ZXJtYXJrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3dhdGVybWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBa0Q7QUFFbEQsb0NBQWlDO0FBQ2pDLGdEQUU0QjtBQUU1QixrQ0FHZ0I7QUFNVCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQ2hELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDekIsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNmLFFBQVEsRUFBRSxrQkFBa0I7S0FDN0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDakIsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ25CLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNuQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSwyQkFBMkI7UUFDckMsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNqQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUNsQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxxQkFBcUI7UUFDL0IsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtRQUNyQixRQUFRLEVBQUUsNkJBQTZCO1FBQ3ZDLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDcEIsUUFBUSxFQUFFLDRCQUE0QjtRQUN0QyxJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ25CLFFBQVEsRUFBRSwyQkFBMkI7UUFDckMsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNuQixRQUFRLEVBQUUsaUNBQWlDO1FBQzNDLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDZixRQUFRLEVBQUUsU0FBUztRQUNuQixJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQWxEWSxRQUFBLGNBQWMsa0JBa0QxQjtBQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxJQUFBLHNCQUFjLEVBQUMsS0FBSyxDQUFDLENBQUE7QUFFbkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUN4QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLDhCQUE4QixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQ3JHLElBQUEsZUFBUSxHQUFFLENBQUE7UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFBLGVBQVEsRUFBQyxJQUFJLENBQWEsQ0FBQTtRQUMxQyxNQUFNLE1BQU0sR0FBUSxJQUFBLHdCQUFjLEdBQUUsQ0FBQTtRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNsQixjQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDckMsT0FBTTtTQUNQO1FBQ0QsT0FBTyxDQUFDLEtBQUssSUFBSSxjQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdEUsT0FBTyxJQUFBLGtCQUFTLEVBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQzFELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBWlksUUFBQSxRQUFRLFlBWXBCIn0= \ No newline at end of file +import { CONFIG_DEFAULT } from '@polymech/commons'; +import { logger } from '../index.js'; +import { watermark } from '../lib/media/images/watermark.js'; +import { sanitize, defaults } from '../_cli.js'; +export const defaultOptions = (yargs) => { + return yargs.option('src', { + describe: 'FILE|FOLDER|GLOB', + demandOption: true + }).option('dst', { + describe: 'FILE|FOLDER|GLOB' + }).option('debug', { + default: false, + describe: 'Enable internal debug messages', + type: 'boolean' + }).option('alt', { + default: false, + describe: 'Use alternate tokenizer, & instead of $', + type: 'boolean' + }).option('dry', { + default: false, + describe: 'Run without conversion', + type: 'boolean' + }).option('verbose', { + default: false, + describe: 'Show internal messages', + type: 'boolean' + }).option('percent', { + default: false, + describe: 'Resize image with percent', + type: 'number' + }).option('width', { + default: false, + describe: 'Resize image with', + type: 'number' + }).option('height', { + default: false, + describe: 'Resize image height', + type: 'number' + }).option('minHeight', { + describe: 'Resize image minimum height', + type: 'number' + }).option('minWidth', { + describe: 'Resize image minimum width', + type: 'number' + }).option('minSize', { + describe: 'Resize image size (bytes)', + type: 'number' + }).option('percent', { + describe: 'Resize image in percent (width)', + type: 'number' + }).option('key', { + describe: 'API Key', + type: 'string' + }); +}; +const options = (yargs) => defaultOptions(yargs); +export const register = (cli) => { + return cli.command('watermark', 'Remove watermark : FILE|GLOB', options, async (argv) => { + defaults(); + const options = sanitize(argv); + const config = CONFIG_DEFAULT(); + if (!config.novita) { + logger.error("Novita key not found"); + return; + } + options.debug && logger.info("Watermark Options " + argv.dst, options); + return watermark({ ...options, key: config.novita.key }); + }); +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0ZXJtYXJrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3dhdGVybWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwQyxPQUFPLEVBQ0wsU0FBUyxFQUNWLE1BQU0sa0NBQWtDLENBQUE7QUFFekMsT0FBTyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1QsTUFBTSxZQUFZLENBQUE7QUFNbkIsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDaEQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUN6QixRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2YsUUFBUSxFQUFFLGtCQUFrQjtLQUM3QixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNqQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxnQ0FBZ0M7UUFDMUMsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDZixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSx5Q0FBeUM7UUFDbkQsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDZixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSx3QkFBd0I7UUFDbEMsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7UUFDbkIsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ25CLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLDJCQUEyQjtRQUNyQyxJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QixJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2xCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHFCQUFxQjtRQUMvQixJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1FBQ3JCLFFBQVEsRUFBRSw2QkFBNkI7UUFDdkMsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNwQixRQUFRLEVBQUUsNEJBQTRCO1FBQ3RDLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7UUFDbkIsUUFBUSxFQUFFLDJCQUEyQjtRQUNyQyxJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ25CLFFBQVEsRUFBRSxpQ0FBaUM7UUFDM0MsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNmLFFBQVEsRUFBRSxTQUFTO1FBQ25CLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUUxRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUN4QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLDhCQUE4QixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQ3JHLFFBQVEsRUFBRSxDQUFBO1FBQ1YsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBYSxDQUFBO1FBQzFDLE1BQU0sTUFBTSxHQUFRLGNBQWMsRUFBRSxDQUFBO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3JDLE9BQU07UUFDUixDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdEUsT0FBTyxTQUFTLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQzFELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/media/dist-in/lib/common/platform.d.ts b/packages/media/dist-in/lib/common/platform.d.ts index f7c63700..7a57a206 100644 --- a/packages/media/dist-in/lib/common/platform.d.ts +++ b/packages/media/dist-in/lib/common/platform.d.ts @@ -1 +1 @@ -export declare const os: () => "windows" | "osx" | "arm" | "linux"; +export declare const os: () => "windows" | "osx" | "arm" | "linux"; diff --git a/packages/media/dist-in/lib/common/platform.js b/packages/media/dist-in/lib/common/platform.js index 02f93861..9e98d600 100644 --- a/packages/media/dist-in/lib/common/platform.js +++ b/packages/media/dist-in/lib/common/platform.js @@ -1,18 +1,14 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.os = void 0; -const os_1 = require("os"); -const os = () => { - if ((0, os_1.platform)() === 'win32') { - return 'windows'; - } - else if ((0, os_1.platform)() === 'darwin') { - return 'osx'; - } - else if ((0, os_1.arch)() === 'arm') { - return 'arm'; - } - return 'linux'; -}; -exports.os = os; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbW1vbi9wbGF0Zm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQkFBb0M7QUFFN0IsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFO0lBQ3JCLElBQUksSUFBQSxhQUFRLEdBQUUsS0FBSyxPQUFPLEVBQUU7UUFDMUIsT0FBTyxTQUFTLENBQUM7S0FDbEI7U0FBTSxJQUFJLElBQUEsYUFBUSxHQUFFLEtBQUssUUFBUSxFQUFFO1FBQ2xDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7U0FBTSxJQUFJLElBQUEsU0FBSSxHQUFFLEtBQUssS0FBSyxFQUFFO1FBQzNCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUE7QUFUWSxRQUFBLEVBQUUsTUFTZCJ9 \ No newline at end of file +import { platform, arch } from 'os'; +export const os = () => { + if (platform() === 'win32') { + return 'windows'; + } + else if (platform() === 'darwin') { + return 'osx'; + } + else if (arch() === 'arm') { + return 'arm'; + } + return 'linux'; +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbW1vbi9wbGF0Zm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQztBQUVwQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFO0lBQ3JCLElBQUksUUFBUSxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDM0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztTQUFNLElBQUksUUFBUSxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO1NBQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUEifQ== \ No newline at end of file diff --git a/packages/media/dist-in/lib/media/images/index.js b/packages/media/dist-in/lib/media/images/index.js index da3d6c68..8bf4e116 100644 --- a/packages/media/dist-in/lib/media/images/index.js +++ b/packages/media/dist-in/lib/media/images/index.js @@ -5,10 +5,10 @@ import pMap from 'p-map'; import * as path from 'path'; import * as fs from 'fs'; import sharp from 'sharp'; +import fg from 'fast-glob'; import { sync as exists } from "@polymech/fs/exists"; import { sync as mkdir } from "@polymech/fs/dir"; -const fg = require('fast-glob'); -const glob = require('glob'); +import glob from 'glob'; import { logger } from '../../../index.js'; import { sanitize } from '../../../_cli.js'; //https://www.lightgalleryjs.com/demos/responsive/ @@ -139,4 +139,4 @@ export const resizeSharp = async (patterns) => { }); }); }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lZGlhL2ltYWdlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLGNBQWMsQ0FBQTtBQUM1QixjQUFjLGdCQUFnQixDQUFBO0FBQzlCLE9BQU8sSUFBSSxNQUFNLE9BQU8sQ0FBQTtBQUN4QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQTtBQUN4QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFFekIsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRWhELE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7QUFFNUIsT0FBTyxFQUFrQixNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFM0Msa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQTtBQUVsRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsK0JBQStCLENBQUE7QUFFdkQsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7SUFDOUMsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsR0FBRztJQUNS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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lZGlhL2ltYWdlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLGNBQWMsQ0FBQTtBQUM1QixjQUFjLGdCQUFnQixDQUFBO0FBQzlCLE9BQU8sSUFBSSxNQUFNLE9BQU8sQ0FBQTtBQUN4QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUM1QixPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQTtBQUN4QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFDekIsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRTFCLE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDcEQsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVoRCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFFdkIsT0FBTyxFQUFrQixNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFM0Msa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQTtBQUVsRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsK0JBQStCLENBQUE7QUFFdkQsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7SUFDOUMsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsR0FBRztJQUNSLFFBQVEsRUFBRSxJQUFJO0NBQ2pCLENBQUMsQ0FB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 \ No newline at end of file diff --git a/packages/media/dist-in/lib/media/images/watermark.js b/packages/media/dist-in/lib/media/images/watermark.js index 0a415e2c..8e5b6895 100644 --- a/packages/media/dist-in/lib/media/images/watermark.js +++ b/packages/media/dist-in/lib/media/images/watermark.js @@ -1,5 +1,4 @@ -import * as bluebird from 'bluebird'; -import { Promise as BPromise } from 'bluebird'; +import BPromise from 'bluebird'; import { async as write } from "@polymech/fs/write"; import { logger } from '../../../index.js'; import { imageToBase64, base64ToBuffer } from './lib.js'; @@ -24,7 +23,7 @@ const _watermark = async (file, targets, onNode = () => { }, options) => { return BPromise.resolve(targets).map((target) => { options.verbose && logger.debug(`Removing Watermark ${file} to ${target}`); if (options.dry) { - return bluebird.resolve(); + return BPromise.resolve(); } return removeWatermark(file, target, onNode, options); }, { concurrency: 1 }); @@ -45,4 +44,4 @@ export const watermark = async (options) => { options.debug && logger.error(`Invalid source info`); } }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0ZXJtYXJrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZWRpYS9pbWFnZXMvd2F0ZXJtYXJrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxRQUFRLE1BQU0sVUFBVSxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLElBQUksUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQzlDLE9BQU8sRUFBRSxLQUFLLElBQUksS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDbkQsT0FBTyxFQUNILE1BQU0sRUFDVCxNQUFNLG1CQUFtQixDQUFBO0FBTzFCLE9BQU8sRUFDSCxhQUFhLEVBQ2IsY0FBYyxFQUNqQixNQUFNLFVBQVUsQ0FBQTtBQUdqQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3RDLE9BQU8sRUFBRyxPQUFPLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV0RCxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUE4QixHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBdUIsRUFBRSxFQUFFO0lBQzdHLE1BQU0sWUFBWSxHQUFHLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMvQyxNQUFNLE1BQU0sR0FBRztRQUNYLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFDckMsdURBQXVEO0tBQzFELENBQUE7SUFDRCxJQUFJLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEQsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxPQUFPLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDdEQsS0FBSyxDQUFDLE1BQU0sRUFBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLCtCQUErQixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUM1RCxDQUFDO0FBQ0wsQ0FBQyxDQUFBO0FBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFpQixFQUFFLFNBQThCLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFpQixFQUFFLEVBQUU7SUFDN0csT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQzVDLE9BQU8sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxPQUFPLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDMUUsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUM3QixDQUFDO1FBQ0QsT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDMUIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxPQUFpQixFQUFFLEVBQUU7SUFFakQsa0JBQWtCO0lBQ2xCLElBQUksT0FBTyxHQUFRLEVBQUUsQ0FBQTtJQUNyQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFBO1FBQy9FLE9BQU8sTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDM0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNuQyxPQUFPLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUMzRCxPQUFPLFVBQVUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNsRCxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUMxQixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0lBQ3hELENBQUM7QUFDTCxDQUFDLENBQUEifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0ZXJtYXJrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZWRpYS9pbWFnZXMvd2F0ZXJtYXJrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQTtBQUMvQixPQUFPLEVBQUUsS0FBSyxJQUFJLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ25ELE9BQU8sRUFDSCxNQUFNLEVBQ1QsTUFBTSxtQkFBbUIsQ0FBQTtBQU8xQixPQUFPLEVBQ0gsYUFBYSxFQUNiLGNBQWMsRUFDakIsTUFBTSxVQUFVLENBQUE7QUFHakIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN0QyxPQUFPLEVBQUcsT0FBTyxFQUFlLE1BQU0sZ0JBQWdCLENBQUE7QUFFdEQsTUFBTSxlQUFlLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBOEIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQXVCLEVBQUUsRUFBRTtJQUM3RyxNQUFNLFlBQVksR0FBRyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDL0MsTUFBTSxNQUFNLEdBQUc7UUFDWCxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQ3JDLHVEQUF1RDtLQUMxRCxDQUFBO0lBQ0QsSUFBSSxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3hELE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLElBQUksT0FBTyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ3RELEtBQUssQ0FBQyxNQUFNLEVBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDNUQsQ0FBQztBQUNMLENBQUMsQ0FBQTtBQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBaUIsRUFBRSxTQUE4QixHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBaUIsRUFBRSxFQUFFO0lBQzdHLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUM1QyxPQUFPLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLElBQUksT0FBTyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQzFFLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDN0IsQ0FBQztRQUNELE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQzFCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQUUsT0FBaUIsRUFBRSxFQUFFO0lBRWpELGtCQUFrQjtJQUNsQixJQUFJLE9BQU8sR0FBUSxFQUFFLENBQUE7SUFDckIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDaEQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQTtRQUMvRSxPQUFPLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkMsT0FBTyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDM0QsT0FBTyxVQUFVLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbEQsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDMUIsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0FBQ0wsQ0FBQyxDQUFBIn0= \ No newline at end of file diff --git a/packages/media/dist-in/lib/pdf/convert.d.ts b/packages/media/dist-in/lib/pdf/convert.d.ts new file mode 100644 index 00000000..2969c07f --- /dev/null +++ b/packages/media/dist-in/lib/pdf/convert.d.ts @@ -0,0 +1,24 @@ +import { Logger } from 'tslog'; +import { Buffer } from 'node:buffer'; +import { ConvertCommandConfig } from "./types.js"; +export declare const DEFAULT_OUTPUT_TEMPLATE = "${SRC_DIR}/${SRC_NAME}/${SRC_NAME}_${PAGE}.${FORMAT}"; +export type ImageFormat = 'png' | 'jpg'; +export interface PdfToImageOptions { + baseVariables: Record; + outputPathTemplate: string; + dpi: number; + scale?: number; + format: ImageFormat; + startPage?: number; + endPage?: number; + logger?: Logger; +} +export declare function convertPdfToImages(pdfData: Buffer, options: PdfToImageOptions): Promise; +/** + * Runs the PDF to images conversion process. + * Generates variables, determines output path, reads PDF, and calls the conversion engine. + * @param config - The conversion configuration options (inferred from Zod schema). + * @param logger - The logger instance to use for logging. + * @returns A promise that resolves with an array of generated image file paths. + */ +export declare function runConversion(config: ConvertCommandConfig, logger: Logger): Promise; diff --git a/packages/media/dist-in/lib/pdf/convert.js b/packages/media/dist-in/lib/pdf/convert.js new file mode 100644 index 00000000..b1e84c30 --- /dev/null +++ b/packages/media/dist-in/lib/pdf/convert.js @@ -0,0 +1,195 @@ +import * as mupdf from 'mupdf'; +import { Logger } from 'tslog'; +import { dirname } from 'node:path'; +import { resolveVariables, pathInfoEx } from '@polymech/commons'; +import { sync as mkdir } from '@polymech/fs/dir'; +import { writeFileSync } from 'node:fs'; +import { Buffer } from 'node:buffer'; +import { statSync } from "node:fs"; +import { sep, resolve as pathResolve, parse as pathParse, relative as pathRelative } from "node:path"; +import { readFile } from "node:fs/promises"; +import { DEFAULT_ROOTS, DEFAULT_VARS } from "@polymech/commons"; +export const DEFAULT_OUTPUT_TEMPLATE = "\${SRC_DIR}/\${SRC_NAME}/\${SRC_NAME}_\${PAGE}.\${FORMAT}"; +// Helper function to convert object-like image data to Buffer +function imageDataObjectToBuffer(imageDataObject) { + const keys = Object.keys(imageDataObject).map(Number).sort((a, b) => a - b); + const bufferLength = keys.length > 0 ? keys[keys.length - 1] + 1 : 0; // Determine length based on max index + 1 + const buffer = Buffer.allocUnsafe(bufferLength); // Use allocUnsafe for performance if overwriting all bytes + for (const key in imageDataObject) { + if (Object.prototype.hasOwnProperty.call(imageDataObject, key)) { + const index = parseInt(key, 10); + if (!isNaN(index) && index >= 0 && index < bufferLength) { + buffer[index] = imageDataObject[key]; + } + } + } + return buffer; +} +export async function convertPdfToImages(pdfData, options) { + const logger = options.logger || new Logger(); + const outputFiles = []; + try { + const doc = mupdf.Document.openDocument(pdfData, 'pdf'); + const pageCount = doc.countPages(); + // Validate and determine page range (adjusting for 0-based index) + const start = (options.startPage ?? 1) - 1; + const end = (options.endPage ?? pageCount) - 1; + if (start < 0 || start >= pageCount) { + throw new Error(`startPage (${options.startPage}) is out of valid range (1-${pageCount})`); + } + if (end < 0 || end >= pageCount) { + throw new Error(`endPage (${options.endPage}) is out of valid range (1-${pageCount})`); + } + if (start > end) { + // This should also be caught by Zod schema, but good to double-check + throw new Error(`startPage (${options.startPage}) cannot be greater than endPage (${options.endPage})`); + } + const numPagesToProcess = end - start + 1; + logger.info(`Processing pages ${start + 1} to ${end + 1} (${numPagesToProcess} pages) of ${pageCount} total`); + // Determine the scaling matrix + const scaleValue = options.scale ?? 2; + const matrix = scaleValue === 1 ? mupdf.Matrix.identity : mupdf.Matrix.scale(scaleValue, scaleValue); + logger.info(`Using scale factor: ${scaleValue}`); + for (let i = start; i <= end; i++) { + const pageNumber = i + 1; // User-facing page number (1-based) + // Create page-specific variables + const pageVariables = { + ...options.baseVariables, + PAGE: pageNumber.toString() + }; + // Resolve the output path using the template and page-specific variables + const outputPath = await resolveVariables(options.outputPathTemplate, false, pageVariables); + const page = doc.loadPage(i); + // Use the scaling matrix here + const pixmap = page.toPixmap(matrix, mupdf.ColorSpace.DeviceRGB, false); + // Note: DPI is implicitly handled by the scaling factor now. + // The pixmap dimensions will be scaled * scaleFactor. + // We might want to remove the explicit DPI option later if it's confusing. + const imageData = options.format === 'png' + ? pixmap.asPNG() + : pixmap.asJPEG(60, false); + mkdir(dirname(outputPath)); + writeFileSync(outputPath, imageDataObjectToBuffer(imageData)); + outputFiles.push(outputPath); + logger.info(`Converted page ${pageNumber} to ${outputPath}`); + } + return outputFiles; + } + catch (error) { + logger.error('Error converting PDF to images:', error); + throw error; + } +} +/** + * Runs the PDF to images conversion process. + * Generates variables, determines output path, reads PDF, and calls the conversion engine. + * @param config - The conversion configuration options (inferred from Zod schema). + * @param logger - The logger instance to use for logging. + * @returns A promise that resolves with an array of generated image file paths. + */ +export async function runConversion(config, logger) { + const inputPath = pathResolve(config.input); + let srcInfo = {}; + try { + srcInfo = pathInfoEx(inputPath); + const parsed = pathParse(inputPath); + srcInfo = { + ...srcInfo, + SRC_DIR: parsed.dir, + SRC_NAME: parsed.name, + SRC_EXT: parsed.ext, + }; + } + catch (e) { + logger.warn("pathInfoEx not found or failed, using basic path.parse"); + } + let baseVariables = { + ...DEFAULT_ROOTS, + ...DEFAULT_VARS({}), + ...srcInfo, + DPI: config.dpi, + FORMAT: config.format, + }; + if (baseVariables.ROOT && baseVariables.SRC_DIR) { + baseVariables.SRC_REL = pathRelative(baseVariables.ROOT, baseVariables.SRC_DIR); + } + const srcName = baseVariables.SRC_NAME || ''; + const dashed = srcName.split('-'); + if (dashed.length > 1) { + for (let i = 0; i < dashed.length; i++) { + baseVariables[`SRC_NAME-${i}`] = dashed[i]; + } + } + const dotted = srcName.split('.'); + if (dotted.length > 1) { + for (let i = 0; i < dotted.length; i++) { + baseVariables[`SRC_NAME.${i}`] = dotted[i]; + } + } + const underscored = srcName.split('_'); + if (underscored.length > 1) { + for (let i = 0; i < underscored.length; i++) { + baseVariables[`SRC_NAME_${i}`] = underscored[i]; + } + } + // Process var-* arguments directly from config object passed in + const cliVars = Object.keys(config).filter(k => k.startsWith('var-')).reduce((acc, k) => { + acc[k.replace('var-', '').toUpperCase()] = config[k]; + return acc; + }, {}); + // Uppercase base variable keys + baseVariables = Object.keys(baseVariables).reduce((acc, key) => { + acc[key.toUpperCase()] = baseVariables[key]; + return acc; + }, {}); + baseVariables = { ...baseVariables, ...cliVars }; + let outputPathTemplate; + let isExplicitDir = false; + if (config.output) { + const outputPath = pathResolve(config.output); + try { + const stats = statSync(outputPath); + if (stats.isDirectory()) { + isExplicitDir = true; + } + } + catch (e) { + if (config.output.endsWith(sep) || config.output.endsWith("/")) { + isExplicitDir = true; + } + else { + isExplicitDir = false; + } + } + if (isExplicitDir) { + baseVariables["OUT_DIR"] = outputPath; + outputPathTemplate = "\${OUT_DIR}/\${SRC_NAME}_\${PAGE}.\${FORMAT}"; + logger.info(`Output directory specified: ${outputPath}`); + } + else { + outputPathTemplate = config.output; + logger.info(`Using output path pattern: ${outputPathTemplate}`); + } + } + else { + // Use default pattern directly from constant + outputPathTemplate = DEFAULT_OUTPUT_TEMPLATE; + logger.info(`Using default output path pattern: ${outputPathTemplate}`); + } + // --- Read PDF and Call Conversion (moved from commands/convert.ts) --- + logger.info(`Reading PDF: ${config.input}`); + const pdfData = await readFile(config.input); + logger.info(`Starting conversion process...`); + const outputFiles = await convertPdfToImages(pdfData, { + baseVariables, + outputPathTemplate, + dpi: config.dpi, + format: config.format, + scale: config.scale, + startPage: config.startPage, + endPage: config.endPage, + logger + }); + return outputFiles; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcGRmL2NvbnZlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUE7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUU5QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxLQUFLLElBQUksU0FBUyxFQUFFLFFBQVEsSUFBSSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHaEUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsMkRBQTJELENBQUM7QUFFbkcsOERBQThEO0FBQzlELFNBQVMsdUJBQXVCLENBQUMsZUFBdUM7SUFDdEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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 \ No newline at end of file diff --git a/packages/media/dist-in/lib/pdf/types.d.ts b/packages/media/dist-in/lib/pdf/types.d.ts new file mode 100644 index 00000000..9171b3f6 --- /dev/null +++ b/packages/media/dist-in/lib/pdf/types.d.ts @@ -0,0 +1,68 @@ +import { z } from 'zod'; +export declare const ConvertCommandArgsSchema: z.ZodObject<{ + input: z.ZodString; + output: z.ZodOptional; + dpi: z.ZodDefault; + scale: z.ZodOptional>; + format: z.ZodDefault>; + startPage: z.ZodOptional; + endPage: z.ZodOptional; +}, "strip", z.ZodTypeAny, { + input?: string; + output?: string; + dpi?: number; + scale?: number; + format?: "jpg" | "png"; + startPage?: number; + endPage?: number; +}, { + input?: string; + output?: string; + dpi?: number; + scale?: number; + format?: "jpg" | "png"; + startPage?: number; + endPage?: number; +}>; +export declare const ConvertCommandSchema: z.ZodEffects; + dpi: z.ZodDefault; + scale: z.ZodOptional>; + format: z.ZodDefault>; + startPage: z.ZodOptional; + endPage: z.ZodOptional; +}, "strip", z.ZodAny, z.objectOutputType<{ + input: z.ZodString; + output: z.ZodOptional; + dpi: z.ZodDefault; + scale: z.ZodOptional>; + format: z.ZodDefault>; + startPage: z.ZodOptional; + endPage: z.ZodOptional; +}, z.ZodAny, "strip">, z.objectInputType<{ + input: z.ZodString; + output: z.ZodOptional; + dpi: z.ZodDefault; + scale: z.ZodOptional>; + format: z.ZodDefault>; + startPage: z.ZodOptional; + endPage: z.ZodOptional; +}, z.ZodAny, "strip">>, any, z.objectInputType<{ + input: z.ZodString; + output: z.ZodOptional; + dpi: z.ZodDefault; + scale: z.ZodOptional>; + format: z.ZodDefault>; + startPage: z.ZodOptional; + endPage: z.ZodOptional; +}, z.ZodAny, "strip">>, any, z.objectInputType<{ + input: z.ZodString; + output: z.ZodOptional; + dpi: z.ZodDefault; + scale: z.ZodOptional>; + format: z.ZodDefault>; + startPage: z.ZodOptional; + endPage: z.ZodOptional; +}, z.ZodAny, "strip">>; +export type ConvertCommandConfig = z.infer; diff --git a/packages/media/dist-in/lib/pdf/types.js b/packages/media/dist-in/lib/pdf/types.js new file mode 100644 index 00000000..f77ee47c --- /dev/null +++ b/packages/media/dist-in/lib/pdf/types.js @@ -0,0 +1,41 @@ +import { z } from 'zod'; +// Define the base shape for arguments +export const ConvertCommandArgsSchema = z.object({ + input: z.string().describe('Path to the input PDF file'), + output: z.string().describe('Output path template (e.g., output/page_{PAGE}.png)').optional(), + dpi: z.number().int().positive().default(300).describe('Resolution for the output images'), + scale: z.number().positive().default(2).describe('Scaling factor to apply before rendering (e.g., 2 for 2x size)').optional(), + format: z.enum(['png', 'jpg']).default('png').describe('Output image format'), + startPage: z.number().int().positive().describe('First page to convert (1-based index)').optional(), + endPage: z.number().int().positive().describe('Last page to convert (1-based index)').optional() +}); +// Add refinements, transformations, and catchall for final validation/parsing +export const ConvertCommandSchema = ConvertCommandArgsSchema + .catchall(z.any()) // Allow var-* and other properties + .transform((data) => { + // Explicitly pick known fields + extras (var-*) + const known = { + input: data.input, + output: data.output, + dpi: data.dpi, + format: data.format, + startPage: data.startPage, + endPage: data.endPage, + scale: data.scale, + }; + // Keep only extra properties (like var-*) + const extras = Object.keys(data) + .filter(key => !['input', 'output', 'dpi', 'format', 'startPage', 'endPage', 'scale', '_', '$0'].includes(key)) + .reduce((acc, key) => { acc[key] = data[key]; return acc; }, {}); + return { ...known, ...extras }; +}) + .refine((data) => { + if (data.startPage !== undefined && data.endPage !== undefined) { + return data.startPage <= data.endPage; + } + return true; +}, { + message: "startPage must be less than or equal to endPage", + path: ["startPage"], +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BkZi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLHNDQUFzQztBQUN0QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQy9DLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDO0lBQ3hELE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLHFEQUFxRCxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzdGLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQ0FBa0MsQ0FBQztJQUMxRixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0VBQWdFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDN0gsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDO0lBQzdFLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLHVDQUF1QyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ25HLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLHNDQUFzQyxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ2pHLENBQUMsQ0FBQztBQUVILDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyx3QkFBd0I7S0FDekQsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLG1DQUFtQztLQUNyRCxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUNsQixnREFBZ0Q7SUFDaEQsTUFBTSxLQUFLLEdBQUc7UUFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7UUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1FBQ25CLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztRQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtRQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7UUFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1FBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztLQUNsQixDQUFDO0lBQ0YsMENBQTBDO0lBQzFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5RyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBUyxDQUFDLENBQUM7SUFFMUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDakMsQ0FBQyxDQUFDO0tBQ0QsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7SUFDZixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0QsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFO0lBQ0QsT0FBTyxFQUFFLGlEQUFpRDtJQUMxRCxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7Q0FDcEIsQ0FBQyxDQUFDIn0= \ No newline at end of file diff --git a/packages/media/dist-in/lib/process/index.d.ts b/packages/media/dist-in/lib/process/index.d.ts index a7b3285c..268d212b 100644 --- a/packages/media/dist-in/lib/process/index.d.ts +++ b/packages/media/dist-in/lib/process/index.d.ts @@ -1,18 +1,18 @@ -export declare enum STATUS { - OK = 0, - ERROR = 1, - PENDING = 2 -} -export declare class Process { - binary: string; - cwd: string; - args: string; - constructor(options?: any); - optionsToString(options: any): string; - optionsToArray(options: any): string[]; - exec(command: string, options?: any, args?: any[]): Promise; -} -export declare class Helper { - static run(cwd: any, command: string, gitArgs: string[]): Promise; - static runBin(cwd: any, bin: any, command: string, gitArgs: string[]): Promise; -} +export declare enum STATUS { + OK = 0, + ERROR = 1, + PENDING = 2 +} +export declare class Process { + binary: string; + cwd: string; + args: string; + constructor(options?: any); + optionsToString(options: any): string; + optionsToArray(options: any): string[]; + exec(command: string, options?: any, args?: any[]): Promise; +} +export declare class Helper { + static run(cwd: any, command: string, gitArgs: string[]): Promise; + static runBin(cwd: any, bin: any, command: string, gitArgs: string[]): Promise; +} diff --git a/packages/media/dist-in/lib/process/index.js b/packages/media/dist-in/lib/process/index.js index 5c722ce3..ab60bbad 100644 --- a/packages/media/dist-in/lib/process/index.js +++ b/packages/media/dist-in/lib/process/index.js @@ -1,149 +1,144 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Helper = exports.Process = exports.STATUS = void 0; -const __1 = require("../.."); -const child_process_1 = require("child_process"); -const platform_1 = require("../common/platform"); -var STATUS; -(function (STATUS) { - STATUS[STATUS["OK"] = 0] = "OK"; - STATUS[STATUS["ERROR"] = 1] = "ERROR"; - STATUS[STATUS["PENDING"] = 2] = "PENDING"; -})(STATUS = exports.STATUS || (exports.STATUS = {})); -const fatalHandler = (message, fn) => { - if (message.startsWith('fatal:')) { - fn('\t\ ' + message); - return true; - } - return false; -}; -// tslint:disable-next-line:no-empty -const subscribe = (signal, collector = () => { }) => { - const buffer = []; - signal.on('message', (message) => __1.logger.debug('message', message)); - signal.on('error', (error) => __1.logger.error('std-error', error)); - signal.on('data', (data) => { - const message = data.toString(); - buffer.push(message); // .replace(/[\x00-\x1F\x7F-\x9F]/g, "") - collector(buffer); - }); -}; -const merge = (buffer, data) => buffer.concat(data); -const hook = (process, resolve, reject, cmd) => { - let buffer = []; - const collector = (data) => { buffer = buffer.concat(data); }; - const stdout = subscribe(process.stdout, collector); - const stderr = subscribe(process.stderr, collector); - process.on('exit', (code, signal) => { - if (code) { - resolve({ - code: STATUS.ERROR, - command: cmd, - error: code, - messages: buffer - }); - } - else { - resolve({ - code: STATUS.OK, - command: cmd, - messages: buffer - }); - } - }); - return process; -}; -class Process { - binary = 'magick'; - cwd = ''; - args = ''; - constructor(options = {}) { - this.binary = options.binary || this.binary; - //this.binary = path.resolve(which(this.binary)); - this.cwd = options.cwd || process.cwd(); - } - optionsToString(options) { - const args = []; - // tslint:disable-next-line:forin - for (const k in options) { - const val = options[k]; - if (k.length === 1) { - // val is true, add '-k' - if (val === true) { - args.push('-' + k); - } - else if (val !== false) { - // if val is not false, add '-k val' - args.push('-' + k + ' ' + val); - } - } - else { - if (val === true) { - args.push('--' + k); - } - else if (val !== false) { - args.push('--' + k + '=' + val); - } - } - } - return args.join(' '); - } - optionsToArray(options) { - const args = []; - // tslint:disable-next-line:forin - for (const k in options) { - const val = options[k]; - if (k.length === 1) { - // val is true, add '-k' - if (val === true) { - args.push('-' + k); - } - else if (val !== false) { - // if val is not false, add '-k val' - args.push('-' + k + ' ' + val); - } - } - else { - if (val === true) { - args.push('--' + k); - } - else if (val !== false) { - args.push('--' + k + '=' + val); - } - } - } - return args; - } - async exec(command, options = {}, args = []) { - args = [command].concat(args); - return new Promise((resolve, reject) => { - const p = (0, child_process_1.exec)(this.binary + ' ' + args.join(' '), { - cwd: this.cwd - }); - return hook(p, resolve, reject, this.binary + ' ' + args.join(' ')); - }); - } -} -exports.Process = Process; -class Helper { - static async run(cwd, command, gitArgs) { - const gitProcess = new Process({ - cwd: cwd, - binary: (0, platform_1.os)() == 'windows' ? 'magick' : '' - }); - const p = gitProcess.exec(command, {}, gitArgs); - p.catch((e) => __1.logger.error('Error git command : ' + command)); - return p; - } - static async runBin(cwd, bin, command, gitArgs) { - const gitProcess = new Process({ - cwd: cwd, - binary: bin - }); - const p = gitProcess.exec(command, {}, gitArgs); - p.catch((e) => __1.logger.error('Error git command : ' + command)); - return p; - } -} -exports.Helper = Helper; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Byb2Nlc3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQStCO0FBRS9CLGlEQUFtRDtBQUNuRCxpREFBd0M7QUFFeEMsSUFBWSxNQUlYO0FBSkQsV0FBWSxNQUFNO0lBQ2QsK0JBQUUsQ0FBQTtJQUNGLHFDQUFLLENBQUE7SUFDTCx5Q0FBTyxDQUFBO0FBQ1gsQ0FBQyxFQUpXLE1BQU0sR0FBTixjQUFNLEtBQU4sY0FBTSxRQUlqQjtBQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQXlCLEVBQVcsRUFBRTtJQUN6RSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDOUIsRUFBRSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsb0NBQW9DO0FBQ3BDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBdUIsRUFBRSxZQUFpQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRTtJQUN0RixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDcEUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztRQUM5RCxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFDRixNQUFNLEtBQUssR0FBRyxDQUFDLE1BQWdCLEVBQUUsSUFBUyxFQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTdFLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBcUIsRUFBRSxPQUFZLEVBQUUsTUFBVyxFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQzNFLElBQUksTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUMxQixNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDaEMsSUFBSSxJQUFJLEVBQUU7WUFDTixPQUFPLENBQUM7Z0JBQ0osSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNsQixPQUFPLEVBQUUsR0FBRztnQkFDWixLQUFLLEVBQUUsSUFBSTtnQkFDWCxRQUFRLEVBQUUsTUFBTTthQUNuQixDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsT0FBTyxDQUFDO2dCQUNKLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDZixPQUFPLEVBQUUsR0FBRztnQkFDWixRQUFRLEVBQUUsTUFBTTthQUNuQixDQUFDLENBQUM7U0FDTjtJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsTUFBYSxPQUFPO0lBQ1QsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUNsQixHQUFHLEdBQVcsRUFBRSxDQUFDO0lBQ2pCLElBQUksR0FBVyxFQUFFLENBQUM7SUFDekIsWUFBWSxVQUFlLEVBQUU7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUMsaURBQWlEO1FBQ2pELElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUNNLGVBQWUsQ0FBQyxPQUFZO1FBQy9CLE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQztRQUN2QixpQ0FBaUM7UUFDakMsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUU7WUFDckIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ2hCLHdCQUF3QjtnQkFDeEIsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO29CQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUN0QjtxQkFBTSxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUU7b0JBQ3RCLG9DQUFvQztvQkFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztpQkFDbEM7YUFDSjtpQkFBTTtnQkFDSCxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZCO3FCQUFNLElBQUksR0FBRyxLQUFLLEtBQUssRUFBRTtvQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztpQkFDbkM7YUFDSjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDTSxjQUFjLENBQUMsT0FBWTtRQUM5QixNQUFNLElBQUksR0FBVSxFQUFFLENBQUM7UUFDdkIsaUNBQWlDO1FBQ2pDLEtBQUssTUFBTSxDQUFDLElBQUksT0FBTyxFQUFFO1lBQ3JCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNoQix3QkFBd0I7Z0JBQ3hCLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtvQkFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDdEI7cUJBQU0sSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFO29CQUN0QixvQ0FBb0M7b0JBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7aUJBQ2xDO2FBQ0o7aUJBQU07Z0JBQ0gsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO29CQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUN2QjtxQkFBTSxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7aUJBQ25DO2FBQ0o7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWUsRUFBRSxVQUFlLEVBQUUsRUFBRSxPQUFjLEVBQUU7UUFDbEUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxPQUFPLENBQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDeEMsTUFBTSxDQUFDLEdBQUcsSUFBQSxvQkFBSSxFQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQy9DLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRzthQUNoQixDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFoRUQsMEJBZ0VDO0FBRUQsTUFBYSxNQUFNO0lBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQWUsRUFBRSxPQUFpQjtRQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQztZQUMzQixHQUFHLEVBQUUsR0FBRztZQUNSLE1BQU0sRUFBRSxJQUFBLGFBQUUsR0FBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQzVDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDL0QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBQ00sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBRSxPQUFlLEVBQUUsT0FBaUI7UUFDbEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUM7WUFDM0IsR0FBRyxFQUFFLEdBQUc7WUFDUixNQUFNLEVBQUUsR0FBRztTQUNkLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDL0QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0o7QUFuQkQsd0JBbUJDIn0= \ No newline at end of file +import { logger } from '../../index.js'; +import { exec } from 'child_process'; +import { os } from '../common/platform.js'; +export var STATUS; +(function (STATUS) { + STATUS[STATUS["OK"] = 0] = "OK"; + STATUS[STATUS["ERROR"] = 1] = "ERROR"; + STATUS[STATUS["PENDING"] = 2] = "PENDING"; +})(STATUS || (STATUS = {})); +const fatalHandler = (message, fn) => { + if (message.startsWith('fatal:')) { + fn('\t\ ' + message); + return true; + } + return false; +}; +// tslint:disable-next-line:no-empty +const subscribe = (signal, collector = () => { }) => { + const buffer = []; + signal.on('message', (message) => logger.debug('message', message)); + signal.on('error', (error) => logger.error('std-error', error)); + signal.on('data', (data) => { + const message = data.toString(); + buffer.push(message); // .replace(/[\x00-\x1F\x7F-\x9F]/g, "") + collector(buffer); + }); +}; +const merge = (buffer, data) => buffer.concat(data); +const hook = (process, resolve, reject, cmd) => { + let buffer = []; + const collector = (data) => { buffer = buffer.concat(data); }; + const stdout = subscribe(process.stdout, collector); + const stderr = subscribe(process.stderr, collector); + process.on('exit', (code, signal) => { + if (code) { + resolve({ + code: STATUS.ERROR, + command: cmd, + error: code, + messages: buffer + }); + } + else { + resolve({ + code: STATUS.OK, + command: cmd, + messages: buffer + }); + } + }); + return process; +}; +export class Process { + binary = 'magick'; + cwd = ''; + args = ''; + constructor(options = {}) { + this.binary = options.binary || this.binary; + //this.binary = path.resolve(which(this.binary)); + this.cwd = options.cwd || process.cwd(); + } + optionsToString(options) { + const args = []; + // tslint:disable-next-line:forin + for (const k in options) { + const val = options[k]; + if (k.length === 1) { + // val is true, add '-k' + if (val === true) { + args.push('-' + k); + } + else if (val !== false) { + // if val is not false, add '-k val' + args.push('-' + k + ' ' + val); + } + } + else { + if (val === true) { + args.push('--' + k); + } + else if (val !== false) { + args.push('--' + k + '=' + val); + } + } + } + return args.join(' '); + } + optionsToArray(options) { + const args = []; + // tslint:disable-next-line:forin + for (const k in options) { + const val = options[k]; + if (k.length === 1) { + // val is true, add '-k' + if (val === true) { + args.push('-' + k); + } + else if (val !== false) { + // if val is not false, add '-k val' + args.push('-' + k + ' ' + val); + } + } + else { + if (val === true) { + args.push('--' + k); + } + else if (val !== false) { + args.push('--' + k + '=' + val); + } + } + } + return args; + } + async exec(command, options = {}, args = []) { + args = [command].concat(args); + return new Promise((resolve, reject) => { + const p = exec(this.binary + ' ' + args.join(' '), { + cwd: this.cwd + }); + return hook(p, resolve, reject, this.binary + ' ' + args.join(' ')); + }); + } +} +export class Helper { + static async run(cwd, command, gitArgs) { + const gitProcess = new Process({ + cwd: cwd, + binary: os() == 'windows' ? 'magick' : '' + }); + const p = gitProcess.exec(command, {}, gitArgs); + p.catch((e) => logger.error('Error git command : ' + command)); + return p; + } + static async runBin(cwd, bin, command, gitArgs) { + const gitProcess = new Process({ + cwd: cwd, + binary: bin + }); + const p = gitProcess.exec(command, {}, gitArgs); + p.catch((e) => logger.error('Error git command : ' + command)); + return p; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Byb2Nlc3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBZ0IsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUzQyxNQUFNLENBQU4sSUFBWSxNQUlYO0FBSkQsV0FBWSxNQUFNO0lBQ2QsK0JBQUUsQ0FBQTtJQUNGLHFDQUFLLENBQUE7SUFDTCx5Q0FBTyxDQUFBO0FBQ1gsQ0FBQyxFQUpXLE1BQU0sS0FBTixNQUFNLFFBSWpCO0FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBeUIsRUFBVyxFQUFFO0lBQ3pFLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLG9DQUFvQztBQUNwQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQXVCLEVBQUUsWUFBaUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7SUFDdEYsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxL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 \ No newline at end of file diff --git a/packages/media/dist-in/main.js b/packages/media/dist-in/main.js index 37857fed..941b3005 100644 --- a/packages/media/dist-in/main.js +++ b/packages/media/dist-in/main.js @@ -2,15 +2,16 @@ import { defaults } from './_cli.js'; defaults(); import * as cli from 'yargs'; -import { register as registerResize } from './commands/resize.js'; -registerResize(cli); +import { register as registerPDF2JPG } from './commands/pdf2jpg.js'; +registerPDF2JPG(cli); +import { register as registerSVG2JPG } from './commands/svg2jpg.js'; +registerSVG2JPG(cli); /* -import { register as registerPDF2JPG } from './commands/pdf2jpg'; registerPDF2JPG(cli) -import { register as registerSVG2JPG } from './commands/svg2jpg'; registerSVG2JPG(cli) -import { register as registerConvert } from './commands/convert'; registerConvert(cli) -import { register as registerAudio } from './commands/audio'; registerAudio(cli) -import { register as registerVideo } from './commands/video'; registerVideo(cli) -import { register as registerWatermark } from './commands/watermark'; registerWatermark(cli) +import { register as registerResize } from './commands/resize.js'; registerResize(cli) +import { register as registerConvert } from './commands/convert.js'; registerConvert(cli) +import { register as registerAudio } from './commands/audio.js'; registerAudio(cli) +import { register as registerVideo } from './commands/video.js'; registerVideo(cli) +import { register as registerWatermark } from './commands/watermark.js'; registerWatermark(cli) */ const argv = cli.argv; if (argv.h || argv.help) { @@ -20,4 +21,4 @@ if (argv.h || argv.help) { else if (argv.v || argv.version) { process.exit(); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQUMsUUFBUSxFQUFFLENBQUE7QUFFaEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUE7QUFLNUIsT0FBTyxFQUFFLFFBQVEsSUFBSSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUN0Rjs7Ozs7OztFQU9FO0FBRUYsTUFBTSxJQUFJLEdBQVEsR0FBRyxDQUFDLElBQUksQ0FBQztBQUUzQixJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNmLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuQixDQUFDO0tBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkIsQ0FBQyJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQUMsUUFBUSxFQUFFLENBQUE7QUFFaEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUE7QUFLNUIsT0FBTyxFQUFFLFFBQVEsSUFBSSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUN6RixPQUFPLEVBQUUsUUFBUSxJQUFJLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3pGOzs7Ozs7RUFNRTtBQUNGLE1BQU0sSUFBSSxHQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFFM0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDZixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkIsQ0FBQztLQUFNLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ25CLENBQUMifQ== \ No newline at end of file diff --git a/packages/media/package-lock.json b/packages/media/package-lock.json index 9c8816db..0289be50 100644 --- a/packages/media/package-lock.json +++ b/packages/media/package-lock.json @@ -19,6 +19,7 @@ "bluebird": "^3.7.2", "fluent-ffmpeg": "^2.1.3", "js-beautify": "^1.14.6", + "mupdf": "^1.3.3", "novita-sdk": "^1.0.37", "p-map": "^7.0.3", "sharp": "^0.34.2", @@ -31,7 +32,8 @@ "pm-media": "main.js" }, "devDependencies": { - "@types/showdown": "^2.0.6" + "@types/showdown": "^2.0.6", + "vitest": "^3.1.1" }, "engines": { "node": ">= 14.0.0" @@ -257,6 +259,431 @@ "tslib": "^2.4.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.34.2", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", @@ -653,6 +1080,13 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "dev": true, + "license": "MIT" + }, "node_modules/@polymech/cache": { "resolved": "../cache", "link": true @@ -673,6 +1107,310 @@ "resolved": "../log", "link": true }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz", + "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz", + "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz", + "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz", + "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz", + "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz", + "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz", + "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz", + "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz", + "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz", + "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz", + "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz", + "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz", + "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz", + "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz", + "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz", + "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz", + "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz", + "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz", + "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz", + "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/fluent-ffmpeg": { "version": "2.1.27", "resolved": "https://registry.npmjs.org/@types/fluent-ffmpeg/-/fluent-ffmpeg-2.1.27.tgz", @@ -698,6 +1436,121 @@ "dev": true, "license": "MIT" }, + "node_modules/@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -727,6 +1580,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", @@ -758,6 +1621,43 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chai": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, "node_modules/cliui": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", @@ -833,6 +1733,34 @@ "proto-list": "~1.2.1" } }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -875,6 +1803,54 @@ "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "license": "MIT" }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -883,6 +1859,41 @@ "node": ">=6" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fluent-ffmpeg": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.3.tgz", @@ -933,6 +1944,21 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1039,6 +2065,20 @@ "node": ">=10" } }, + "node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loupe": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz", + "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==", + "dev": true, + "license": "MIT" + }, "node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -1048,6 +2088,16 @@ "yallist": "^2.1.2" } }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -1067,6 +2117,38 @@ "node": ">= 0.6" } }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mupdf": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/mupdf/-/mupdf-1.26.2.tgz", + "integrity": "sha512-BYSTaIyHnSkkZog+Bh+VRT+TPguqt3MPiOkOdXJaWnr55lwHAe6/vF+WXKjncOOPXeQeDrXbypnxIv4eUBirSA==", + "license": "AGPL-3.0-or-later" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/nopt": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", @@ -1109,6 +2191,72 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -1124,6 +2272,46 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, + "node_modules/rollup": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz", + "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.44.2", + "@rollup/rollup-android-arm64": "4.44.2", + "@rollup/rollup-darwin-arm64": "4.44.2", + "@rollup/rollup-darwin-x64": "4.44.2", + "@rollup/rollup-freebsd-arm64": "4.44.2", + "@rollup/rollup-freebsd-x64": "4.44.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.44.2", + "@rollup/rollup-linux-arm-musleabihf": "4.44.2", + "@rollup/rollup-linux-arm64-gnu": "4.44.2", + "@rollup/rollup-linux-arm64-musl": "4.44.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.44.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-musl": "4.44.2", + "@rollup/rollup-linux-s390x-gnu": "4.44.2", + "@rollup/rollup-linux-x64-gnu": "4.44.2", + "@rollup/rollup-linux-x64-musl": "4.44.2", + "@rollup/rollup-win32-arm64-msvc": "4.44.2", + "@rollup/rollup-win32-ia32-msvc": "4.44.2", + "@rollup/rollup-win32-x64-msvc": "4.44.2", + "fsevents": "~2.3.2" + } + }, "node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -1185,6 +2373,13 @@ "node": ">=10" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, "node_modules/sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -1199,6 +2394,30 @@ "is-arrayish": "^0.3.1" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true, + "license": "MIT" + }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -1231,6 +2450,80 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -1269,6 +2562,177 @@ "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "license": "MIT" }, + "node_modules/vite": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.2.tgz", + "integrity": "sha512-hxdyZDY1CM6SNpKI4w4lcUc3Mtkd9ej4ECWVHSMrOdSinVc2zYOAppHeGc/hzmRo3pxM5blMzkuWHOJA/3NiFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.2", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -1280,6 +2744,23 @@ "which": "bin/which" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", @@ -1361,6 +2842,181 @@ "tslib": "^2.4.0" } }, + "@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "dev": true, + "optional": true + }, "@img/sharp-darwin-arm64": { "version": "0.34.2", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", @@ -1514,6 +3170,12 @@ "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", "optional": true }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "dev": true + }, "@polymech/cache": { "version": "file:../cache", "requires": { @@ -1605,6 +3267,167 @@ "zod": "^3.24.1" } }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz", + "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz", + "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz", + "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz", + "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz", + "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz", + "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz", + "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz", + "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz", + "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz", + "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz", + "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz", + "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz", + "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz", + "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz", + "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz", + "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz", + "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz", + "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz", + "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz", + "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==", + "dev": true, + "optional": true + }, + "@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "requires": { + "@types/deep-eql": "*" + } + }, + "@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, + "@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, "@types/fluent-ffmpeg": { "version": "2.1.27", "resolved": "https://registry.npmjs.org/@types/fluent-ffmpeg/-/fluent-ffmpeg-2.1.27.tgz", @@ -1627,6 +3450,81 @@ "integrity": "sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ==", "dev": true }, + "@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "requires": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + } + }, + "@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "requires": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + } + }, + "@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "requires": { + "tinyrainbow": "^2.0.0" + } + }, + "@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "requires": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + } + }, + "@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "requires": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + } + }, + "@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "requires": { + "tinyspy": "^4.0.3" + } + }, + "@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "requires": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1642,6 +3540,12 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" }, + "assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true + }, "async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", @@ -1672,6 +3576,31 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, + "cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true + }, + "chai": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "dev": true, + "requires": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + } + }, + "check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true + }, "cliui": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", @@ -1730,6 +3659,21 @@ "proto-list": "~1.2.1" } }, + "debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1763,11 +3707,72 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==" }, + "es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true + }, + "esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + }, + "expect-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", + "dev": true + }, + "fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "requires": {} + }, "fluent-ffmpeg": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.3.tgz", @@ -1797,6 +3802,13 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1877,6 +3889,18 @@ } } }, + "js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true + }, + "loupe": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz", + "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==", + "dev": true + }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -1886,6 +3910,15 @@ "yallist": "^2.1.2" } }, + "magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -1899,6 +3932,23 @@ "mime-db": "1.52.0" } }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "mupdf": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/mupdf/-/mupdf-1.26.2.tgz", + "integrity": "sha512-BYSTaIyHnSkkZog+Bh+VRT+TPguqt3MPiOkOdXJaWnr55lwHAe6/vF+WXKjncOOPXeQeDrXbypnxIv4eUBirSA==" + }, + "nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true + }, "nopt": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", @@ -1928,6 +3978,41 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==" }, + "pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true + }, + "pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + }, + "postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "requires": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -1943,6 +4028,36 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, + "rollup": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz", + "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.44.2", + "@rollup/rollup-android-arm64": "4.44.2", + "@rollup/rollup-darwin-arm64": "4.44.2", + "@rollup/rollup-darwin-x64": "4.44.2", + "@rollup/rollup-freebsd-arm64": "4.44.2", + "@rollup/rollup-freebsd-x64": "4.44.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.44.2", + "@rollup/rollup-linux-arm-musleabihf": "4.44.2", + "@rollup/rollup-linux-arm64-gnu": "4.44.2", + "@rollup/rollup-linux-arm64-musl": "4.44.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.44.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-musl": "4.44.2", + "@rollup/rollup-linux-s390x-gnu": "4.44.2", + "@rollup/rollup-linux-x64-gnu": "4.44.2", + "@rollup/rollup-linux-x64-musl": "4.44.2", + "@rollup/rollup-win32-arm64-msvc": "4.44.2", + "@rollup/rollup-win32-ia32-msvc": "4.44.2", + "@rollup/rollup-win32-x64-msvc": "4.44.2", + "@types/estree": "1.0.8", + "fsevents": "~2.3.2" + } + }, "semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -1986,6 +4101,12 @@ } } }, + "siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -1999,6 +4120,24 @@ "is-arrayish": "^0.3.1" } }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true + }, + "stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true + }, "string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -2017,6 +4156,55 @@ "ansi-regex": "^6.0.1" } }, + "strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, + "requires": { + "js-tokens": "^9.0.1" + } + }, + "tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true + }, + "tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "requires": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + } + }, + "tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true + }, + "tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true + }, + "tinyspy": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "dev": true + }, "tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -2038,6 +4226,65 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==" }, + "vite": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.2.tgz", + "integrity": "sha512-hxdyZDY1CM6SNpKI4w4lcUc3Mtkd9ej4ECWVHSMrOdSinVc2zYOAppHeGc/hzmRo3pxM5blMzkuWHOJA/3NiFw==", + "dev": true, + "requires": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "fsevents": "~2.3.3", + "picomatch": "^4.0.2", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + } + }, + "vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "requires": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + } + }, + "vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "requires": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -2046,6 +4293,16 @@ "isexe": "^2.0.0" } }, + "why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "requires": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + } + }, "wrap-ansi": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", diff --git a/packages/media/package.json b/packages/media/package.json index 858b1630..0c1f1c8c 100644 --- a/packages/media/package.json +++ b/packages/media/package.json @@ -23,6 +23,7 @@ "bluebird": "^3.7.2", "fluent-ffmpeg": "^2.1.3", "js-beautify": "^1.14.6", + "mupdf": "^1.3.3", "novita-sdk": "^1.0.37", "p-map": "^7.0.3", "sharp": "^0.34.2", @@ -32,10 +33,12 @@ "zod": "^3.25.74" }, "devDependencies": { - "@types/showdown": "^2.0.6" + "@types/showdown": "^2.0.6", + "vitest": "^3.1.1" }, "scripts": { "test": "tsc; mocha --full-trace mocha \"spec/**/*.spec.js\"", + "test:pdf": "vitest run tests/pdf", "test-with-coverage": "istanbul cover node_modules/.bin/_mocha -- 'spec/**/*.spec.js'", "lint": "tslint --project=./tsconfig.json", "build": "tsc -p .", diff --git a/packages/media/src/commands/audio.ts b/packages/media/src/commands/audio.ts index cc7bc6ea..021c4b74 100644 --- a/packages/media/src/commands/audio.ts +++ b/packages/media/src/commands/audio.ts @@ -1,8 +1,8 @@ import * as CLI from 'yargs' -import { logger } from '../' -import { convert } from '../lib/media/audio/convert' +import { logger } from '../index.js' +import { convert } from '../lib/media/audio/convert.js' -import { defaults, sanitizeVideo } from '../_cli' +import { defaults, sanitizeVideo } from '../_cli.js' import { IConvertVideoOptions } from '../types' export const defaultOptions = (yargs: CLI.Argv) => { diff --git a/packages/media/src/commands/convert.ts b/packages/media/src/commands/convert.ts index f811b370..d94dc47b 100644 --- a/packages/media/src/commands/convert.ts +++ b/packages/media/src/commands/convert.ts @@ -1,19 +1,19 @@ import * as CLI from 'yargs' -import { logger } from '../' +import { logger } from '../index.js' import { convert -} from '../lib/media/images' +} from '../lib/media/images/index.js' import { sanitize, defaults, sanitizeVideo -} from '../_cli' +} from '../_cli.js' import { IOptions -} from '../types' +} from '../types.js' export const defaultOptions = (yargs: CLI.Argv) => { diff --git a/packages/media/src/commands/pdf2jpg.ts b/packages/media/src/commands/pdf2jpg.ts index 7c0bf19c..7cf38b29 100644 --- a/packages/media/src/commands/pdf2jpg.ts +++ b/packages/media/src/commands/pdf2jpg.ts @@ -1,53 +1,73 @@ import * as CLI from 'yargs' -import { logger } from '../' -import * as path from 'path' -import { Helper } from '../lib/process/index' -import * as pMap from 'p-map' +import { logger } from '../index.js' +import { existsSync } from 'node:fs'; +import * as z from 'zod'; +import { runConversion } from '../lib/pdf/convert.js'; +import { ConvertCommandConfig, ConvertCommandSchema } from '../lib/pdf/types.js' -const fg = require('fast-glob') +export const command = 'pdf2jpg'; +export const desc = 'Convert PDF to images'; -const defaultOptions = (yargs: CLI.Argv) => { - return yargs.option('input', { - default: './', - describe: 'The sources' - }).option('debug', { - default: 'false', - describe: 'Enable internal debug message' - }) -}; - -let options = (yargs: CLI.Argv) => defaultOptions(yargs); - -async function convertFiles(files){ - return pMap(files,(file: any) => { - const inParts = path.parse(file); - // magick convert leg.pdf -quality 100 -density 250 -trim -flatten -resize 200% -sharpen 0x1.0 leg.jpg - const promise = Helper.run(inParts.dir, 'convert', - [ - `"${inParts.base}[0]"`, - '-quality 80', - '-density 250', - '-trim', - '-flatten', - '-sharpen 0x1.0', - `"${inParts.name}.jpg"` - ]); - return promise; - },{ concurrency: 1 }); +export const builder = (yargs: CLI.Argv) => { + return yargs + .option('input', { + alias: 'i', + describe: 'Path to the input PDF file', + demandOption: true, + type: 'string' + }) + .option('output', { + alias: 'o', + describe: 'Output path template (e.g., output/page_{PAGE}.png)', + type: 'string' + }) + .option('dpi', { + describe: 'Resolution for the output images', + default: 300, + type: 'number' + }) + .option('scale', { + describe: 'Scaling factor to apply before rendering (e.g., 2 for 2x size)', + default: 2, + type: 'number' + }) + .option('format', { + describe: 'Output image format', + choices: ['png', 'jpg'], + default: 'jpg', + type: 'string' + }) + .option('startPage', { + describe: 'First page to convert (1-based index)', + type: 'number' + }) + .option('endPage', { + describe: 'Last page to convert (1-based index)', + type: 'number' + }) +} + +export async function handler(argv: CLI.Arguments) { + try { + const config = ConvertCommandSchema.parse(argv) as ConvertCommandConfig; + if (!existsSync(config.input)) { + throw new Error(`Input file ${config.input} does not exist`); + } + logger.info("Calling conversion library function..."); + const outputFiles = await runConversion(config, logger); + logger.info(`Conversion completed successfully`); + logger.info(`Generated ${outputFiles.length} images`); + } catch (error) { + if (error instanceof z.ZodError) { + logger.error('Invalid arguments:', error.flatten()); + } else { + const message = error instanceof Error ? error.message : String(error); + logger.error('Error during conversion command:', message, error); + } + process.exit(1); + } } -// node ./build/main.js pdf2jpg --input=../drawings export const register = (cli: CLI.Argv) => { - return cli.command('pdf2jpg', '', options, async (argv: CLI.Arguments) => { - if (argv.help) { return; } - const src = path.resolve('' + argv.input); - if (argv.debug) { - logger.debug(`Begin convert PDF files${src}`); - } - const files = fg.sync('*.pdf|*.PDF', { dot: true, cwd: src, absolute: true }); - await convertFiles(files); - if (argv.debug) { - logger.debug(`Converted ${files.length} files`); - } - }) + return cli.command(command, desc, builder, handler) } diff --git a/packages/media/src/commands/svg2jpg.ts b/packages/media/src/commands/svg2jpg.ts index c7937d3e..e7ab8694 100644 --- a/packages/media/src/commands/svg2jpg.ts +++ b/packages/media/src/commands/svg2jpg.ts @@ -1,9 +1,8 @@ import * as CLI from 'yargs'; -import { debug } from '@plastichub/core/debug' import * as path from 'path'; -import { Helper } from '../lib/process/index'; +import { Helper } from '../lib/process/index.js'; import * as bluebird from 'bluebird'; - +import { logger } from '../index.js'; const fg = require('fast-glob'); const defaultOptions = (yargs: CLI.Argv) => { @@ -39,11 +38,11 @@ export const register = (cli: CLI.Argv) => { const src = path.resolve('' + argv.input); const files = fg.sync('*.svg|*.SVG', { dot: true, cwd: src, absolute: true }); if (argv.debug) { - debug(`Begin convert SVG files at ${src} ${files}`); + logger.debug(`Begin convert SVG files at ${src} ${files}`); } await convertFiles(files); if (argv.debug) { - debug(`Converted ${files.length} files`); + logger.debug(`Converted ${files.length} files`); } }); }; diff --git a/packages/media/src/commands/video.ts b/packages/media/src/commands/video.ts index 226ded45..71658588 100644 --- a/packages/media/src/commands/video.ts +++ b/packages/media/src/commands/video.ts @@ -1,8 +1,8 @@ import * as CLI from 'yargs' -import { logger } from '../' -import { convert, merge } from '../lib/media/video' -import { defaults, sanitizeVideo } from '../_cli' -import { IConvertVideoOptions } from '../types' +import { logger } from '../index.js' +import { convert, merge } from '../lib/media/video/index.js' +import { defaults, sanitizeVideo } from '../_cli.js' +import { IConvertVideoOptions } from '../types.js' export const defaultOptions = (yargs: CLI.Argv) => { return yargs.option('src', { diff --git a/packages/media/src/commands/watermark.ts b/packages/media/src/commands/watermark.ts index ee28297d..8f7bfecd 100644 --- a/packages/media/src/commands/watermark.ts +++ b/packages/media/src/commands/watermark.ts @@ -1,18 +1,18 @@ import { CONFIG_DEFAULT } from '@polymech/commons' import * as CLI from 'yargs' -import { logger } from '../index' +import { logger } from '../index.js' import { watermark -} from '../lib/media/images' +} from '../lib/media/images/watermark.js' import { sanitize, defaults -} from '../_cli' +} from '../_cli.js' import { IOptions -} from '../types' +} from '../types.js' export const defaultOptions = (yargs: CLI.Argv) => { return yargs.option('src', { diff --git a/packages/media/src/lib/media/images/index.ts b/packages/media/src/lib/media/images/index.ts index bc8e7417..41338528 100644 --- a/packages/media/src/lib/media/images/index.ts +++ b/packages/media/src/lib/media/images/index.ts @@ -5,12 +5,12 @@ import pMap from 'p-map' import * as path from 'path' import * as fs from 'fs' import sharp from 'sharp' +import fg from 'fast-glob' import { sync as exists } from "@polymech/fs/exists" import { sync as mkdir } from "@polymech/fs/dir" -const fg = require('fast-glob'); -const glob = require('glob') +import glob from 'glob' import { IResizeOptions, logger } from '../../../index.js' import { sanitize } from '../../../_cli.js' diff --git a/packages/media/src/lib/media/images/watermark.ts b/packages/media/src/lib/media/images/watermark.ts index fa1699e7..6c90fd35 100644 --- a/packages/media/src/lib/media/images/watermark.ts +++ b/packages/media/src/lib/media/images/watermark.ts @@ -1,8 +1,8 @@ // https://novita.ai/playground#remove-watermark import * as fs from 'fs' import * as path from 'path' -import * as bluebird from 'bluebird' -import { Promise as BPromise } from 'bluebird' +import { CONFIG_DEFAULT } from '@polymech/commons' +import BPromise from 'bluebird' import { async as write } from "@polymech/fs/write" import { logger @@ -41,7 +41,7 @@ const _watermark = async (file, targets: string[], onNode: (data: any) => void = return BPromise.resolve(targets).map((target) => { options.verbose && logger.debug(`Removing Watermark ${file} to ${target}`) if (options.dry) { - return bluebird.resolve() + return BPromise.resolve() } return removeWatermark(file, target, onNode, options); }, { concurrency: 1 }) diff --git a/packages/media/src/lib/pdf/convert.ts b/packages/media/src/lib/pdf/convert.ts new file mode 100644 index 00000000..dfd90e1d --- /dev/null +++ b/packages/media/src/lib/pdf/convert.ts @@ -0,0 +1,242 @@ +import * as mupdf from 'mupdf' +import { Logger } from 'tslog' + +import { dirname } from 'node:path' +import { resolveVariables, pathInfoEx } from '@polymech/commons' +import { sync as mkdir } from '@polymech/fs/dir' +import { writeFileSync } from 'node:fs' +import { Buffer } from 'node:buffer' +import { statSync } from "node:fs"; +import { sep, resolve as pathResolve, parse as pathParse, relative as pathRelative } from "node:path"; +import { readFile } from "node:fs/promises"; +import { DEFAULT_ROOTS, DEFAULT_VARS } from "@polymech/commons"; +import { ConvertCommandConfig } from "./types.js"; + +export const DEFAULT_OUTPUT_TEMPLATE = "\${SRC_DIR}/\${SRC_NAME}/\${SRC_NAME}_\${PAGE}.\${FORMAT}"; + +// Helper function to convert object-like image data to Buffer +function imageDataObjectToBuffer(imageDataObject: Record): Buffer { + const keys = Object.keys(imageDataObject).map(Number).sort((a, b) => a - b); + const bufferLength = keys.length > 0 ? keys[keys.length - 1] + 1 : 0; // Determine length based on max index + 1 + const buffer = Buffer.allocUnsafe(bufferLength); // Use allocUnsafe for performance if overwriting all bytes + + for (const key in imageDataObject) { + if (Object.prototype.hasOwnProperty.call(imageDataObject, key)) { + const index = parseInt(key, 10); + if (!isNaN(index) && index >= 0 && index < bufferLength) { + buffer[index] = imageDataObject[key]; + } + } + } + return buffer; +} + +export type ImageFormat = 'png' | 'jpg'; + +export interface PdfToImageOptions { + baseVariables: Record; + outputPathTemplate: string; + dpi: number; + scale?: number; + format: ImageFormat; + startPage?: number; + endPage?: number; + logger?: Logger; +} + +export async function convertPdfToImages( + pdfData: Buffer, + options: PdfToImageOptions +): Promise { + const logger = options.logger || new Logger(); + const outputFiles: string[] = []; + + try { + const doc = mupdf.Document.openDocument(pdfData, 'pdf'); + const pageCount = doc.countPages(); + + // Validate and determine page range (adjusting for 0-based index) + const start = (options.startPage ?? 1) - 1; + const end = (options.endPage ?? pageCount) - 1; + + if (start < 0 || start >= pageCount) { + throw new Error(`startPage (${options.startPage}) is out of valid range (1-${pageCount})`); + } + if (end < 0 || end >= pageCount) { + throw new Error(`endPage (${options.endPage}) is out of valid range (1-${pageCount})`); + } + if (start > end) { + // This should also be caught by Zod schema, but good to double-check + throw new Error(`startPage (${options.startPage}) cannot be greater than endPage (${options.endPage})`); + } + + const numPagesToProcess = end - start + 1; + logger.info(`Processing pages ${start + 1} to ${end + 1} (${numPagesToProcess} pages) of ${pageCount} total`); + + // Determine the scaling matrix + const scaleValue = options.scale ?? 2; + const matrix = scaleValue === 1 ? mupdf.Matrix.identity : mupdf.Matrix.scale(scaleValue, scaleValue); + + logger.info(`Using scale factor: ${scaleValue}`); + + for (let i = start; i <= end; i++) { + const pageNumber = i + 1; // User-facing page number (1-based) + + // Create page-specific variables + const pageVariables: Record = { + ...options.baseVariables, + PAGE: pageNumber.toString() + }; + + // Resolve the output path using the template and page-specific variables + const outputPath = await resolveVariables(options.outputPathTemplate, false, pageVariables); + + const page = doc.loadPage(i); + // Use the scaling matrix here + const pixmap = page.toPixmap( + matrix, + mupdf.ColorSpace.DeviceRGB, + false + ); + + // Note: DPI is implicitly handled by the scaling factor now. + // The pixmap dimensions will be scaled * scaleFactor. + // We might want to remove the explicit DPI option later if it's confusing. + + const imageData = options.format === 'png' + ? pixmap.asPNG() + : pixmap.asJPEG(60, false); + + mkdir(dirname(outputPath)); + writeFileSync(outputPath, imageDataObjectToBuffer(imageData as any)) + outputFiles.push(outputPath); + logger.info(`Converted page ${pageNumber} to ${outputPath}`); + } + + return outputFiles; + } catch (error) { + logger.error('Error converting PDF to images:', error); + throw error; + } +} + +/** + * Runs the PDF to images conversion process. + * Generates variables, determines output path, reads PDF, and calls the conversion engine. + * @param config - The conversion configuration options (inferred from Zod schema). + * @param logger - The logger instance to use for logging. + * @returns A promise that resolves with an array of generated image file paths. + */ +export async function runConversion(config: ConvertCommandConfig, logger: Logger): Promise { + const inputPath = pathResolve(config.input); + let srcInfo: any = {}; + try { + srcInfo = pathInfoEx(inputPath); + const parsed = pathParse(inputPath); + srcInfo = { + ...srcInfo, + SRC_DIR: parsed.dir, + SRC_NAME: parsed.name, + SRC_EXT: parsed.ext, + }; + } catch (e) { + logger.warn("pathInfoEx not found or failed, using basic path.parse"); + } + + let baseVariables: Record = { + ...DEFAULT_ROOTS, + ...DEFAULT_VARS({}), + ...srcInfo, + DPI: config.dpi, + FORMAT: config.format, + }; + + if (baseVariables.ROOT && baseVariables.SRC_DIR) { + baseVariables.SRC_REL = pathRelative(baseVariables.ROOT, baseVariables.SRC_DIR); + } + + const srcName = baseVariables.SRC_NAME || ''; + const dashed = srcName.split('-'); + if (dashed.length > 1) { + for (let i = 0; i < dashed.length; i++) { + baseVariables[`SRC_NAME-${i}`] = dashed[i]; + } + } + const dotted = srcName.split('.'); + if (dotted.length > 1) { + for (let i = 0; i < dotted.length; i++) { + baseVariables[`SRC_NAME.${i}`] = dotted[i]; + } + } + const underscored = srcName.split('_'); + if (underscored.length > 1) { + for (let i = 0; i < underscored.length; i++) { + baseVariables[`SRC_NAME_${i}`] = underscored[i]; + } + } + + // Process var-* arguments directly from config object passed in + const cliVars = Object.keys(config).filter(k => k.startsWith('var-')).reduce((acc, k) => { + acc[k.replace('var-', '').toUpperCase()] = config[k]; + return acc; + }, {} as Record); + + // Uppercase base variable keys + baseVariables = Object.keys(baseVariables).reduce((acc, key) => { + acc[key.toUpperCase()] = baseVariables[key]; + return acc; + }, {} as Record); + + baseVariables = { ...baseVariables, ...cliVars }; + + let outputPathTemplate: string; + let isExplicitDir = false; + + if (config.output) { + const outputPath = pathResolve(config.output); + try { + const stats = statSync(outputPath); + if (stats.isDirectory()) { + isExplicitDir = true; + } + } catch (e: any) { + if (config.output.endsWith(sep) || config.output.endsWith("/")) { + isExplicitDir = true; + } else { + isExplicitDir = false; + } + } + + if (isExplicitDir) { + baseVariables["OUT_DIR"] = outputPath; + outputPathTemplate = "\${OUT_DIR}/\${SRC_NAME}_\${PAGE}.\${FORMAT}"; + logger.info(`Output directory specified: ${outputPath}`); + } else { + outputPathTemplate = config.output; + logger.info(`Using output path pattern: ${outputPathTemplate}`); + } + + } else { + // Use default pattern directly from constant + outputPathTemplate = DEFAULT_OUTPUT_TEMPLATE; + logger.info(`Using default output path pattern: ${outputPathTemplate}`); + } + + // --- Read PDF and Call Conversion (moved from commands/convert.ts) --- + logger.info(`Reading PDF: ${config.input}`); + const pdfData = await readFile(config.input); + + logger.info(`Starting conversion process...`); + const outputFiles = await convertPdfToImages(pdfData, { + baseVariables, + outputPathTemplate, + dpi: config.dpi, + format: config.format, + scale: config.scale, + startPage: config.startPage, + endPage: config.endPage, + logger + }); + + return outputFiles; + } \ No newline at end of file diff --git a/packages/media/src/lib/pdf/types.ts b/packages/media/src/lib/pdf/types.ts new file mode 100644 index 00000000..2bff36ba --- /dev/null +++ b/packages/media/src/lib/pdf/types.ts @@ -0,0 +1,45 @@ +import { z } from 'zod'; + +// Define the base shape for arguments +export const ConvertCommandArgsSchema = z.object({ + input: z.string().describe('Path to the input PDF file'), + output: z.string().describe('Output path template (e.g., output/page_{PAGE}.png)').optional(), + dpi: z.number().int().positive().default(300).describe('Resolution for the output images'), + scale: z.number().positive().default(2).describe('Scaling factor to apply before rendering (e.g., 2 for 2x size)').optional(), + format: z.enum(['png', 'jpg']).default('png').describe('Output image format'), + startPage: z.number().int().positive().describe('First page to convert (1-based index)').optional(), + endPage: z.number().int().positive().describe('Last page to convert (1-based index)').optional() +}); + +// Add refinements, transformations, and catchall for final validation/parsing +export const ConvertCommandSchema = ConvertCommandArgsSchema + .catchall(z.any()) // Allow var-* and other properties + .transform((data) => { + // Explicitly pick known fields + extras (var-*) + const known = { + input: data.input, + output: data.output, + dpi: data.dpi, + format: data.format, + startPage: data.startPage, + endPage: data.endPage, + scale: data.scale, + }; + // Keep only extra properties (like var-*) + const extras = Object.keys(data) + .filter(key => !['input', 'output', 'dpi', 'format', 'startPage', 'endPage', 'scale', '_', '$0'].includes(key)) + .reduce((acc, key) => { acc[key] = data[key]; return acc; }, {} as any); + + return { ...known, ...extras }; + }) + .refine((data) => { + if (data.startPage !== undefined && data.endPage !== undefined) { + return data.startPage <= data.endPage; + } + return true; + }, { + message: "startPage must be less than or equal to endPage", + path: ["startPage"], + }); + +export type ConvertCommandConfig = z.infer; \ No newline at end of file diff --git a/packages/media/src/lib/process/index.ts b/packages/media/src/lib/process/index.ts index e5994ecb..b818e88d 100644 --- a/packages/media/src/lib/process/index.ts +++ b/packages/media/src/lib/process/index.ts @@ -1,7 +1,7 @@ -import { logger } from '../..'; +import { logger } from '../../index.js'; import * as stream from 'stream'; import { ChildProcess, exec } from 'child_process'; -import { os } from '../common/platform'; +import { os } from '../common/platform.js'; export enum STATUS { OK, diff --git a/packages/media/src/main.ts b/packages/media/src/main.ts index 8e027791..dfc3aba5 100644 --- a/packages/media/src/main.ts +++ b/packages/media/src/main.ts @@ -6,16 +6,15 @@ import * as cli from 'yargs' import yargs from 'yargs' import { hideBin } from 'yargs/helpers' -import { register as registerResize } from './commands/resize.js'; registerResize(cli) +import { register as registerPDF2JPG } from './commands/pdf2jpg.js'; registerPDF2JPG(cli) +import { register as registerSVG2JPG } from './commands/svg2jpg.js'; registerSVG2JPG(cli) /* -import { register as registerPDF2JPG } from './commands/pdf2jpg'; registerPDF2JPG(cli) -import { register as registerSVG2JPG } from './commands/svg2jpg'; registerSVG2JPG(cli) -import { register as registerConvert } from './commands/convert'; registerConvert(cli) -import { register as registerAudio } from './commands/audio'; registerAudio(cli) -import { register as registerVideo } from './commands/video'; registerVideo(cli) -import { register as registerWatermark } from './commands/watermark'; registerWatermark(cli) +import { register as registerResize } from './commands/resize.js'; registerResize(cli) +import { register as registerConvert } from './commands/convert.js'; registerConvert(cli) +import { register as registerAudio } from './commands/audio.js'; registerAudio(cli) +import { register as registerVideo } from './commands/video.js'; registerVideo(cli) +import { register as registerWatermark } from './commands/watermark.js'; registerWatermark(cli) */ - const argv: any = cli.argv; if (argv.h || argv.help) { diff --git a/packages/media/tests/pdf/.temp/test.pdf b/packages/media/tests/pdf/.temp/test.pdf new file mode 100644 index 00000000..e88317a7 --- /dev/null +++ b/packages/media/tests/pdf/.temp/test.pdf @@ -0,0 +1,13 @@ +%PDF-1.4 +1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj +xref +0 4 +0000000000 65535 f +0000000010 00000 n +0000000053 00000 n +0000000102 00000 n + +trailer<> +startxref +149 +%%EOF \ No newline at end of file diff --git a/packages/media/tests/pdf/RS485-780.pdf b/packages/media/tests/pdf/RS485-780.pdf new file mode 100644 index 00000000..a5c7266d Binary files /dev/null and b/packages/media/tests/pdf/RS485-780.pdf differ diff --git a/packages/media/tests/pdf/cli/convert.test.ts b/packages/media/tests/pdf/cli/convert.test.ts new file mode 100644 index 00000000..7e3be1c2 --- /dev/null +++ b/packages/media/tests/pdf/cli/convert.test.ts @@ -0,0 +1,258 @@ +// Test suite for src/commands/convert.ts +import { describe, it, expect, vi, beforeEach, Mock, beforeAll } from 'vitest'; +// Import types first +import type { ConvertCommandConfig } from '../../../src/lib/pdf/types.js'; +import type { Arguments } from 'yargs'; +// Remove Buffer import if readFile is no longer mocked directly +// import { Buffer } from 'node:buffer'; +// Import path for constants only if needed, remove specific utils +import path from 'path'; + +// --- Define Mock Functions --- +// Keep only mocks needed for the simplified handler +const mockRunConversion = vi.fn(); // Mock the library function +const mockExistsSync = vi.fn(); +const mockLoggerInfo = vi.fn(); +const mockLoggerError = vi.fn(); +const mockProcessExit = vi.spyOn(process, 'exit').mockImplementation((() => {}) as any); + +// Remove mocks for functions no longer directly called by handler +// const mockConvertPdfToImagesFn = vi.fn(); +// const mockStatSync = vi.fn(); +// const mockReadFile = vi.fn(); +// const mockMkdir = vi.fn(); +// const mockDirname = vi.fn(); +// const mockBasename = vi.fn(); +// const mockExtname = vi.fn(); +// const mockResolve = vi.fn(); +// const mockParse = vi.fn(); +// const mockRelative = vi.fn(); +// const mockResolveVariables = vi.fn(); +// const mockPathInfoEx = vi.fn(); +// const mockDEFAULT_ROOTS = { CWD: '/test/cwd', SCRIPT_DIR: '/test/script' }; +// const mockDEFAULT_VARS = vi.fn().mockReturnValue({ SOME_DEFAULT: 'value' }); + +// Use beforeAll for mocks +beforeAll(() => { + // Mock dependencies using vi.doMock + // Remove unused mocks + // vi.doMock('../../src/lib/pdf.js', ...) + vi.doMock('../../src/lib/pdf/convert.js', () => ({ + runConversion: mockRunConversion, // Mock the refactored library function + })); + vi.doMock('node:fs', () => ({ + existsSync: mockExistsSync, + statSync: vi.fn(), + promises: { + readFile: vi.fn(), + writeFile: vi.fn(), + } + })); + // vi.doMock('node:fs/promises', ...) + // vi.doMock('node:path', ...) + vi.doMock('tslog', () => ({ + Logger: vi.fn().mockImplementation(() => ({ + info: mockLoggerInfo, + error: mockLoggerError, + })), + })); + // vi.doMock('@polymech/commons', ...) +}); + +// --- Test Suite --- +describe('Convert Command CLI Handler', () => { + let convertHandler: typeof import('../../../src/commands/pdf2jpg.js').handler; + + // Import the handler after mocks are set + beforeAll(async () => { + await vi.dynamicImportSettled(); // Ensure mocks are applied + const commandModule = await import('../../../src/commands/pdf2jpg.js'); + convertHandler = commandModule.handler; + }); + + // --- Helper Function to Run Handler --- + // Helper remains largely the same + async function runHandlerHelper(args: Partial) { + // Add default values for required fields if not provided in args, + // reflecting what yargs + schema default would do. + const fullArgs = { + _: ['convert'], + $0: 'test', + dpi: 300, + format: 'png', + ...args, + } as Arguments; + + // Need to simulate the full argv object including potential var-* args + // Zod schema parsing happens inside the handler now. + + if (!convertHandler) throw new Error('Handler not loaded'); + await convertHandler(fullArgs); + } + + beforeEach(() => { + vi.clearAllMocks(); + // Reset only necessary mocks + mockRunConversion.mockResolvedValue(['path/to/image1.png']); // Default success + mockExistsSync.mockReturnValue(true); + // Removed resets for unused mocks + mockProcessExit.mockClear(); + }); + + // --- Updated Test cases --- + it('should call runConversion with config when output is omitted (uses default)', async () => { + const args = { + input: 'pdfs/document.pdf', + // output is omitted + }; + + await runHandlerHelper(args); + + expect(mockExistsSync).toHaveBeenCalledWith(args.input); + expect(mockRunConversion).toHaveBeenCalledTimes(1); + // Check the config object passed to runConversion + expect(mockRunConversion).toHaveBeenCalledWith( + expect.objectContaining({ + input: args.input, + output: undefined, // Output should be undefined in the config passed from handler + dpi: 300, // Default DPI + format: 'png', // Default format + // other args like startPage/endPage should be undefined + }), + expect.anything() // Logger instance + ); + // Verify final success logs are called + expect(mockLoggerInfo).toHaveBeenCalledWith('Conversion completed successfully'); + expect(mockLoggerInfo).toHaveBeenCalledWith(expect.stringContaining('Generated')); // Check for generated count message + expect(mockProcessExit).not.toHaveBeenCalled(); + }); + + it('should call runConversion with custom output path template when provided', async () => { + const customPattern = 'images/custom_${SRC_NAME}_page${PAGE}.${FORMAT}'; + const args = { + input: 'in.pdf', + output: customPattern, + }; + + await runHandlerHelper(args); + + expect(mockExistsSync).toHaveBeenCalledWith(args.input); + expect(mockRunConversion).toHaveBeenCalledTimes(1); + expect(mockRunConversion).toHaveBeenCalledWith( + expect.objectContaining({ + input: args.input, + output: customPattern, // Expect the custom pattern string + }), + expect.anything() // Logger instance + ); + expect(mockProcessExit).not.toHaveBeenCalled(); + }); + + it('should call runConversion with output path when it is a directory', async () => { + const dirPath = 'output/images/'; + const args = { + input: 'some/path/doc.pdf', + output: dirPath, + }; + + await runHandlerHelper(args); + + expect(mockExistsSync).toHaveBeenCalledWith(args.input); + expect(mockRunConversion).toHaveBeenCalledTimes(1); + expect(mockRunConversion).toHaveBeenCalledWith( + expect.objectContaining({ + input: args.input, + output: dirPath, // Expect the directory path string + }), + expect.anything() + ); + expect(mockProcessExit).not.toHaveBeenCalled(); + }); + + // Test for specific args being passed through + it('should call runConversion with specific args', async () => { + const args = { + input: 'input.pdf', + output: 'output/prefix', + dpi: 150, + format: 'jpg' as const, + startPage: 2, + endPage: 5, + }; + + await runHandlerHelper(args); + + expect(mockExistsSync).toHaveBeenCalledWith(args.input); + expect(mockRunConversion).toHaveBeenCalledTimes(1); + expect(mockRunConversion).toHaveBeenCalledWith( + expect.objectContaining({ + input: args.input, + output: args.output, + dpi: args.dpi, + format: args.format, + startPage: args.startPage, + endPage: args.endPage, + }), + expect.anything() + ); + expect(mockProcessExit).not.toHaveBeenCalled(); + }); + + // Test for var-* args being passed through + it('should pass var-* arguments to runConversion', async () => { + const args = { + input: 'input.pdf', + 'var-MY_VAR': 'myValue', + 'var-OTHER': 123 + }; + + await runHandlerHelper(args); + + expect(mockRunConversion).toHaveBeenCalledTimes(1); + expect(mockRunConversion).toHaveBeenCalledWith( + expect.objectContaining({ + input: args.input, + 'var-MY_VAR': 'myValue', // Zod schema with catchall should preserve these + 'var-OTHER': 123, + }), + expect.anything() + ); + expect(mockProcessExit).not.toHaveBeenCalled(); + }); + + + // --- Error Handling Tests --- + it('should handle missing input file', async () => { + mockExistsSync.mockReturnValue(false); + const args = { input: 'nonexistent.pdf' }; // Output is optional + await runHandlerHelper(args); + + expect(mockRunConversion).not.toHaveBeenCalled(); // Should not be called + // Check logger error message (updated) + expect(mockLoggerError).toHaveBeenCalledWith( + "Error during conversion command:", // Updated error context + expect.stringContaining('Input file nonexistent.pdf does not exist'), + expect.any(Error) + ); + expect(mockProcessExit).toHaveBeenCalledWith(1); + }); + + it('should handle conversion error from runConversion', async () => { + const conversionError = new Error('Conversion library failed'); + mockRunConversion.mockRejectedValue(conversionError); // Mock runConversion to throw + const args = { input: 'in.pdf', output: 'out' }; + + await runHandlerHelper(args); + + expect(mockRunConversion).toHaveBeenCalledTimes(1); + // Check logger error message (updated) + expect(mockLoggerError).toHaveBeenCalledWith( + "Error during conversion command:", // Updated error context + conversionError.message, + conversionError + ); + expect(mockProcessExit).toHaveBeenCalledWith(1); + }); + + // Remove tests checking internal logic that was moved (e.g., mkdir calls) +}); \ No newline at end of file diff --git a/packages/media/tests/pdf/cli/variables.test.ts b/packages/media/tests/pdf/cli/variables.test.ts new file mode 100644 index 00000000..65d3af75 --- /dev/null +++ b/packages/media/tests/pdf/cli/variables.test.ts @@ -0,0 +1,53 @@ +import { describe, it, expect, beforeAll, afterAll } from 'vitest'; +import { execSync } from 'node:child_process'; +import { existsSync, rmSync, readdirSync, mkdirSync } from 'node:fs'; +import * as path from 'node:path'; + +const packageRoot = process.cwd(); // Assumes test runs from package root +const inputPdf = path.join('tests', 'pdf', 'RS485-780.pdf'); +const outputDir = path.join(packageRoot, 'tests', 'pdf', 'out', 'RS485-780'); +const outputPattern = path.join(outputDir, '${SRC_NAME}-${PAGE}.jpg'); + +// Expected number of pages for RS485-780.pdf +const expectedPageCount = 29; +const expectedBaseName = 'RS485-780'; +const expectedFormat = 'jpg'; // Default format + +describe('CLI Integration Test - Variable Output Path', () => { + beforeAll(() => { + if (existsSync(outputDir)) { + rmSync(outputDir, { recursive: true, force: true }); + } + mkdirSync(outputDir, { recursive: true }); + }); + + afterAll(() => { + if (existsSync(outputDir)) { + // rmSync(outputDir, { recursive: true, force: true }); // Optional: clean up after tests + } + }); + + it('should create images in the correct directory with the correct filenames using variable substitution', () => { + const command = `node dist-in/main.js pdf2jpg --input "${inputPdf}" --output "${outputPattern}"`; + + try { + execSync(command, { encoding: 'utf8', stdio: 'pipe' }); + } catch (error: any) { + console.error('Command execution failed:', error.stderr || error.stdout || error.message); + expect.fail(`Command execution failed: ${error.message}`); + } + + // 1. Check if the output directory exists + expect(existsSync(outputDir), `Output directory "${outputDir}" should exist`).toBe(true); + + // 2. Check the number of files created + const files = readdirSync(outputDir); + expect(files.length, `Should have created ${expectedPageCount} files`).toBe(expectedPageCount); + + // 3. Check filenames + for (let i = 1; i <= expectedPageCount; i++) { + const expectedFilename = `${expectedBaseName}-${i}.${expectedFormat}`; + expect(files).toContain(expectedFilename); + } + }); +}); \ No newline at end of file diff --git a/packages/media/tests/pdf/e5dc.pdf b/packages/media/tests/pdf/e5dc.pdf new file mode 100644 index 00000000..9b98d3c6 Binary files /dev/null and b/packages/media/tests/pdf/e5dc.pdf differ diff --git a/packages/media/tests/pdf/ifb.pdf b/packages/media/tests/pdf/ifb.pdf new file mode 100644 index 00000000..1164dccc Binary files /dev/null and b/packages/media/tests/pdf/ifb.pdf differ diff --git a/packages/media/tests/pdf/lib/pdf.test.ts b/packages/media/tests/pdf/lib/pdf.test.ts new file mode 100644 index 00000000..81a6221c --- /dev/null +++ b/packages/media/tests/pdf/lib/pdf.test.ts @@ -0,0 +1,181 @@ +// Test suite for src/lib/pdf.ts +import { describe, it, expect, vi, beforeEach, Mock, beforeAll } from 'vitest'; +import { convertPdfToImages, PdfToImageOptions } from '../../../src/lib/pdf/convert.js'; +import { Logger } from 'tslog'; +import { Buffer } from 'node:buffer'; + +// --- Define Mock Functions FIRST --- +const mockWriteFile = vi.fn(); +const mockAsPNG = vi.fn(); +const mockAsJPEG = vi.fn(); +const mockToPixmap = vi.fn(); +const mockLoadPage = vi.fn(); +const mockCountPages = vi.fn(); +const mockOpenDocument = vi.fn(); +const mockLoggerInfo = vi.fn(); +const mockLoggerError = vi.fn(); + +// Use beforeAll to ensure mocks are set before tests run +beforeAll(() => { + // Use vi.doMock for non-hoisted mocking + vi.doMock('node:fs/promises', () => ({ + writeFile: mockWriteFile, + })); + vi.doMock('mupdf', () => ({ + Document: { + openDocument: mockOpenDocument, + }, + ColorSpace: { + DeviceRGB: 'DeviceRGB' + } + })); + vi.doMock('tslog', () => ({ + Logger: vi.fn().mockImplementation(() => ({ + info: mockLoggerInfo, + error: mockLoggerError, + })), + })); +}); + +describe('convertPdfToImages Function', () => { + let convertPdfToImages: typeof import('../../../src/lib/pdf/convert.js').convertPdfToImages; + + // Import the actual function *after* mocks are applied + beforeAll(async () => { + // Ensure mocks are ready before importing the module that uses them + await vi.dynamicImportSettled(); + const pdfLib = await import('../../../src/lib/pdf/convert.js'); + convertPdfToImages = pdfLib.convertPdfToImages; + }); + + const mockPdfData = Buffer.from('mock-pdf-data'); + const baseOptions: Omit = { + dpi: 300, + format: 'png', + }; + + // Mocks returned by other mocks need to be configured within beforeEach + const mockPixmap = { asPNG: mockAsPNG, asJPEG: mockAsJPEG }; + const mockPage = { toPixmap: mockToPixmap }; + const mockDoc = { countPages: mockCountPages, loadPage: mockLoadPage }; + + beforeEach(() => { + vi.clearAllMocks(); + + // Configure mock implementations/return values + mockWriteFile.mockResolvedValue(undefined); + mockAsPNG.mockReturnValue(Buffer.from('mock-png-data')); + mockAsJPEG.mockReturnValue(Buffer.from('mock-jpg-data')); + mockToPixmap.mockReturnValue(mockPixmap); + mockLoadPage.mockReturnValue(mockPage); + mockCountPages.mockReturnValue(5); + mockOpenDocument.mockReturnValue(mockDoc); + }); + + it('should convert all pages to PNG by default', async () => { + const options: PdfToImageOptions = { ...baseOptions, outputPathTemplate: 'output/image_${PAGE}.png', baseVariables: {} }; + const result = await convertPdfToImages(mockPdfData, options); + + expect(mockOpenDocument).toHaveBeenCalledWith(mockPdfData, 'pdf'); + expect(mockCountPages).toHaveBeenCalled(); + expect(mockLoadPage).toHaveBeenCalledTimes(5); + expect(mockToPixmap).toHaveBeenCalledTimes(5); + expect(mockAsPNG).toHaveBeenCalledTimes(5); + expect(mockAsJPEG).not.toHaveBeenCalled(); + expect(mockWriteFile).toHaveBeenCalledTimes(5); + expect(mockWriteFile).toHaveBeenNthCalledWith(1, 'output/image_1.png', Buffer.from('mock-png-data')); + expect(mockWriteFile).toHaveBeenNthCalledWith(5, 'output/image_5.png', Buffer.from('mock-png-data')); + expect(result).toEqual([ + 'output/image_1.png', + 'output/image_2.png', + 'output/image_3.png', + 'output/image_4.png', + 'output/image_5.png', + ]); + }); + + it('should convert specified page range to JPG', async () => { + const options: PdfToImageOptions = { + ...baseOptions, + outputPathTemplate: 'jpg_images/page_${PAGE}.jpg', + baseVariables: {}, + format: 'jpg', + startPage: 2, + endPage: 4, + }; + const result = await convertPdfToImages(mockPdfData, options); + + expect(mockLoadPage).toHaveBeenCalledTimes(3); // Pages 2, 3, 4 + expect(mockLoadPage).toHaveBeenNthCalledWith(1, 1); // 0-based index for page 2 + expect(mockLoadPage).toHaveBeenNthCalledWith(3, 3); // 0-based index for page 4 + expect(mockToPixmap).toHaveBeenCalledTimes(3); + expect(mockAsJPEG).toHaveBeenCalledTimes(3); + expect(mockAsPNG).not.toHaveBeenCalled(); + expect(mockWriteFile).toHaveBeenCalledTimes(3); + expect(mockWriteFile).toHaveBeenNthCalledWith(1, 'jpg_images/page_2.jpg', Buffer.from('mock-jpg-data')); + expect(mockWriteFile).toHaveBeenNthCalledWith(3, 'jpg_images/page_4.jpg', Buffer.from('mock-jpg-data')); + expect(result).toEqual([ + 'jpg_images/page_2.jpg', + 'jpg_images/page_3.jpg', + 'jpg_images/page_4.jpg', + ]); + }); + + it('should throw error for invalid startPage', async () => { + const options: PdfToImageOptions = { ...baseOptions, outputPathTemplate: 'err', baseVariables: {}, startPage: 0 }; + await expect(convertPdfToImages(mockPdfData, options)) + .rejects.toThrow('startPage (0) is out of valid range (1-5)'); + }); + + it('should throw error for invalid endPage', async () => { + mockCountPages.mockReturnValue(3); // Adjust page count for this test + const options: PdfToImageOptions = { ...baseOptions, outputPathTemplate: 'err', baseVariables: {}, endPage: 4 }; + await expect(convertPdfToImages(mockPdfData, options)) + .rejects.toThrow('endPage (4) is out of valid range (1-3)'); + }); + + it('should throw error if startPage > endPage', async () => { + const options: PdfToImageOptions = { ...baseOptions, outputPathTemplate: 'err', baseVariables: {}, startPage: 4, endPage: 2 }; + await expect(convertPdfToImages(mockPdfData, options)) + .rejects.toThrow('startPage (4) cannot be greater than endPage (2)'); + }); + + it('should propagate errors from mupdf loadPage', async () => { + const mupdfError = new Error('mupdf loadPage failed'); + mockLoadPage.mockImplementation(() => { + throw mupdfError; + }); + const options: PdfToImageOptions = { ...baseOptions, outputPathTemplate: 'mupdf_err', baseVariables: {} }; + await expect(convertPdfToImages(mockPdfData, options)) + .rejects.toThrow('mupdf loadPage failed'); + }); + + it('should propagate errors from writeFile', async () => { + const fsError = new Error('fs failed'); + mockWriteFile.mockImplementation(async () => { + throw fsError; + }); + const options: PdfToImageOptions = { ...baseOptions, outputPathTemplate: 'fs_err', baseVariables: {} }; + await expect(convertPdfToImages(mockPdfData, options)) + .rejects.toThrow('fs failed'); + }); + + it('should use provided logger', async () => { + const customLogger = { info: vi.fn(), error: vi.fn() }; + const options: PdfToImageOptions = { + ...baseOptions, + outputPathTemplate: 'log_test_${PAGE}.png', + baseVariables: {}, + logger: customLogger as any + }; + await convertPdfToImages(mockPdfData, options); + expect(customLogger.info).toHaveBeenCalledWith(expect.stringContaining('Processing pages 1 to 5')); + expect(customLogger.info).toHaveBeenCalledWith(expect.stringContaining('Converted page 1 to log_test_1.png')); + expect(customLogger.info).toHaveBeenCalledTimes(6); + expect(mockLoggerInfo).not.toHaveBeenCalled(); // Ensure default mock logger wasn't used + }); +}); + +// Need to alias the mock for use within the test file scope +import * as fsPromises from 'node:fs/promises'; +import * as mupdf from 'mupdf'; \ No newline at end of file diff --git a/packages/media/tests/pdf/out/RS485-780.pdf b/packages/media/tests/pdf/out/RS485-780.pdf new file mode 100644 index 00000000..a5c7266d Binary files /dev/null and b/packages/media/tests/pdf/out/RS485-780.pdf differ diff --git a/packages/media/tests/pdf/out/e5dc/_3.png b/packages/media/tests/pdf/out/e5dc/_3.png new file mode 100644 index 00000000..07ffac8b Binary files /dev/null and b/packages/media/tests/pdf/out/e5dc/_3.png differ diff --git a/packages/media/tests/pdf/out/e5dc/_4.png b/packages/media/tests/pdf/out/e5dc/_4.png new file mode 100644 index 00000000..8c2b1bbe Binary files /dev/null and b/packages/media/tests/pdf/out/e5dc/_4.png differ diff --git a/packages/media/tests/pdf/out/e5dc/_5.png b/packages/media/tests/pdf/out/e5dc/_5.png new file mode 100644 index 00000000..d89f790f Binary files /dev/null and b/packages/media/tests/pdf/out/e5dc/_5.png differ diff --git a/packages/media/tests/pdf/out/simple_test.png b/packages/media/tests/pdf/out/simple_test.png new file mode 100644 index 00000000..368a87c9 Binary files /dev/null and b/packages/media/tests/pdf/out/simple_test.png differ