media - salamand | explorer

This commit is contained in:
babayaga 2025-08-13 18:12:54 +02:00
parent b75ba8028c
commit 975e8f91ed
79 changed files with 582967 additions and 2571 deletions

1
packages/.gitignore vendored
View File

@ -4,3 +4,4 @@
.DS_Store
part-registry
nexe
nexe-24

View File

@ -6,7 +6,7 @@ export declare const TRANSLATORS: {
'.html': (src: string, dst: string, options: IOptions) => Promise<any>;
'.json': (src: string, dst: string, options: IOptions) => Promise<any>;
'.toml': (src: string, dst: string, options: IOptions) => Promise<any>;
'.yaml': (src: string, dst: string, options: IOptions) => Promise<string | Record<string, import("smol-toml").TomlPrimitive>>;
'.yaml': (src: string, dst: string, options: IOptions) => Promise<string | import("smol-toml").TomlTable>;
'.xlsx': (src: string, dst: string, options: IOptions) => Promise<any>;
'.xls': (src: string, dst: string, options: IOptions) => Promise<any>;
'.txt': (text: string, srcLang: string, dstLang: string, options?: IOptions) => Promise<any>;

View File

@ -1,3 +1,3 @@
import { IOptions } from '../types.js';
import * as TOML from 'smol-toml';
export declare const translateYAML: (src: string, dst: string, options: IOptions) => Promise<string | Record<string, TOML.TomlPrimitive>>;
export declare const translateYAML: (src: string, dst: string, options: IOptions) => Promise<string | TOML.TomlTable>;

View File

@ -7,7 +7,7 @@
"access": "public"
},
"bin": {
"osr-i18n": "main.js"
"pm-i18n": "dist/main.js"
},
"exports": {
".": {
@ -85,7 +85,8 @@
"dev-test-md": "node ./dist/main.js translate --debug --src='./tests/*.md'",
"dev-test-md-de": "node ./dist/main.js translate --targetLang='EN' --sourceLang='DE' --debug --src='./tests/DE/*.md'",
"dev-test-json": "node ./dist/main.js translate --debug --src='./tests/*.json'",
"dev-test-toml": "node ./dist/main.js translate --debug --src='./tests/*.toml'"
"dev-test-toml": "node ./dist/main.js translate --debug --src='./tests/*.toml'",
"register-commands": "pm-cli register-commands --config=salamand.json --group=i18n"
},
"homepage": "https://git.osr-plastic.org/osr-plastic/osr-i18n",
"repository": {

View File

@ -0,0 +1,8 @@
{
"translate-es": {
"name": "Translate to EU Languages",
"command": "pm-i18n",
"args": "translate --alt=true --src=\"$(FullName)\" --dst=\"&{SRC_DIR}/&{SRC_NAME}_&{DST_LANG}.md\" --srcLang='en' --dstLang='es,de,it,fr'",
"description": "Translate to EU"
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
export declare const defaultOptions: (yargs: any) => any;

View File

@ -1,29 +0,0 @@
import { logger } from '../index.js';
import { convert } from '../lib/media/audio/convert.js';
import { cli } from '../main.js';
import { defaults, sanitizeVideo } 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'
});
};
cli.command('video <verb>', 'Convert video', defaultOptions, async (argv) => {
defaults();
const options = sanitizeVideo(argv);
logger.info("options " + argv.dst, options);
if (options.verb == 'convert') {
return convert(options);
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvYXVkaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUdwRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNwQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQUVELEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ3hFLFFBQVEsRUFBRSxDQUFBO0lBQ1YsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBeUIsQ0FBQTtJQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzNDLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM1QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMzQixDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUEifQ==

View File

@ -1,3 +0,0 @@
import * as CLI from 'yargs';
export declare const defaultOptions: (yargs: CLI.Argv) => any;
export declare const register: (cli: CLI.Argv) => any;

View File

@ -1,37 +0,0 @@
import { logger } from '../index.js';
import { convert } from '../lib/media/images/index.js';
import { defaults, sanitizeVideo } 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'
});
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9jb252ZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFcEMsT0FBTyxFQUNILE9BQU8sRUFDVixNQUFNLDhCQUE4QixDQUFBO0FBRXJDLE9BQU8sRUFFSCxRQUFRLEVBQ1IsYUFBYSxFQUNoQixNQUFNLFlBQVksQ0FBQTtBQU9uQixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBRXhELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQW1CLEVBQUUsRUFBRTtRQUM1RSxRQUFRLEVBQUUsQ0FBQTtRQUNWLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQWEsQ0FBQTtRQUMvQyxPQUFPLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDNUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUEifQ==

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
import * as CLI from 'yargs';
export declare const register: (cli: CLI.Argv) => any;

View File

@ -1,45 +0,0 @@
import * as path from 'path';
import { Helper } from '../lib/process/index.js';
import * as bluebird from 'bluebird';
import { logger } from '../index.js';
import { filesEx } from '@polymech/commons/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 = filesEx(src, '*.svg|*.SVG');
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnMmpwZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9zdmcyanBnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDekIsT0FBTyxFQUFFLElBQUk7UUFDYixRQUFRLEVBQUUsYUFBYTtLQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNmLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRSwrQkFBK0I7S0FDNUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDO0FBRUYsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV6RCxLQUFLLFVBQVUsWUFBWSxDQUFDLEtBQUs7SUFDN0IsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFDakQ7WUFDSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEdBQUc7WUFDbkIsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixJQUFJLE9BQU8sQ0FBQyxJQUFJLE9BQU87U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ0Qsb0RBQW9EO0FBRXBELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQUMsT0FBTztRQUFDLENBQUM7UUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUE4QixHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDIn0=

View File

@ -1,3 +0,0 @@
import * as CLI from 'yargs';
export declare const defaultOptions: (yargs: CLI.Argv) => any;
export declare const register: (cli: CLI.Argv) => any;

View File

@ -1,68 +0,0 @@
import { logger } from '../index';
import { resize } from '../lib/media/images/resize';
import { sanitize, defaults } 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'
}).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('logLevel', {
describe: 'Log level : warn, info, debug, error',
type: 'string',
default: 'info'
});
};
let options = (yargs) => defaultOptions(yargs);
export const register = (cli) => {
return cli.command('thumbails', 'Create Thumbnail files', options, async (argv) => {
defaults();
const options = sanitize(argv);
logger.setSettings({
minLevel: options.logLevel
});
logger.info("options " + argv.dst, options);
await resize(options);
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGh1bWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3RodW1icy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ2pDLE9BQU8sRUFDSCxNQUFNLEVBQ1QsTUFBTSw0QkFBNEIsQ0FBQTtBQUVuQyxPQUFPLEVBQ0gsUUFBUSxFQUNSLFFBQVEsRUFDWCxNQUFNLFNBQVMsQ0FBQTtBQU1oQixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNqQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSwyQkFBMkI7UUFDckMsSUFBSSxFQUFFLFFBQVE7S0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDZixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsSUFBSSxFQUFFLFFBQVE7S0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDaEIsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUscUJBQXFCO1FBQy9CLElBQUksRUFBRSxRQUFRO0tBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1FBQ25CLFFBQVEsRUFBRSw2QkFBNkI7UUFDdkMsSUFBSSxFQUFFLFFBQVE7S0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDbEIsUUFBUSxFQUFFLDRCQUE0QjtRQUN0QyxJQUFJLEVBQUUsUUFBUTtLQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNqQixRQUFRLEVBQUUsMkJBQTJCO1FBQ3JDLElBQUksRUFBRSxRQUFRO0tBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ2pCLFFBQVEsRUFBRSxpQ0FBaUM7UUFDM0MsSUFBSSxFQUFFLFFBQVE7S0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDbEIsUUFBUSxFQUFFLHNDQUFzQztRQUNoRCxJQUFJLEVBQUUsUUFBUTtRQUNkLE9BQU8sRUFBRSxNQUFNO0tBQ2xCLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQUVELElBQUksT0FBTyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7QUFFeEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQW1CLEVBQUUsRUFBRTtRQUM3RixRQUFRLEVBQUUsQ0FBQTtRQUNWLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQWEsQ0FBQTtRQUMxQyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQ2YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFlO1NBQ3BDLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDM0MsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDekIsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUEifQ==

View File

@ -1,3 +0,0 @@
import * as CLI from 'yargs';
export declare const defaultOptions: (yargs: CLI.Argv) => any;
export declare const register: (cli: CLI.Argv) => any;

View File

@ -1,34 +0,0 @@
import { logger } from '../index.js';
import { convert, merge } from '../lib/media/video/index.js';
import { defaults, sanitizeVideo } 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'
});
};
let options = (yargs) => defaultOptions(yargs);
export const register = (cli) => {
return cli.command('video <verb>', '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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvdmlkZW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBR3BELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQzlDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDdkIsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QixZQUFZLEVBQUUsSUFBSTtLQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNiLFFBQVEsRUFBRSxrQkFBa0I7S0FDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDZixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxnQ0FBZ0M7UUFDMUMsSUFBSSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSx5Q0FBeUM7UUFDbkQsSUFBSSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBO0FBRUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUV4RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUN0QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQW1CLEVBQUUsRUFBRTtRQUN2RixRQUFRLEVBQUUsQ0FBQTtRQUNWLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQXlCLENBQUE7UUFDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMzQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDNUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0IsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUMxQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQVEsQ0FBQTtRQUNoQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUEifQ==

View File

@ -1,3 +0,0 @@
import * as CLI from 'yargs';
export declare const defaultOptions: (yargs: CLI.Argv) => any;
export declare const register: (cli: CLI.Argv) => any;

View File

@ -1,70 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0ZXJtYXJrLXJtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3dhdGVybWFyay1ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwQyxPQUFPLEVBQ0wsU0FBUyxFQUNWLE1BQU0sa0NBQWtDLENBQUE7QUFFekMsT0FBTyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1QsTUFBTSxZQUFZLENBQUE7QUFNbkIsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDaEQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUN6QixRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2YsUUFBUSxFQUFFLGtCQUFrQjtLQUM3QixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNqQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxnQ0FBZ0M7UUFDMUMsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDZixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSx5Q0FBeUM7UUFDbkQsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDZixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSx3QkFBd0I7UUFDbEMsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7UUFDbkIsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ25CLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLDJCQUEyQjtRQUNyQyxJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QixJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2xCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHFCQUFxQjtRQUMvQixJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1FBQ3JCLFFBQVEsRUFBRSw2QkFBNkI7UUFDdkMsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNwQixRQUFRLEVBQUUsNEJBQTRCO1FBQ3RDLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7UUFDbkIsUUFBUSxFQUFFLDJCQUEyQjtRQUNyQyxJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ25CLFFBQVEsRUFBRSxpQ0FBaUM7UUFDM0MsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNmLFFBQVEsRUFBRSxTQUFTO1FBQ25CLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUUxRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUN4QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLDhCQUE4QixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQ3JHLFFBQVEsRUFBRSxDQUFBO1FBQ1YsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBYSxDQUFBO1FBQzFDLE1BQU0sTUFBTSxHQUFRLGNBQWMsRUFBRSxDQUFBO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3JDLE9BQU07UUFDUixDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdEUsT0FBTyxTQUFTLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQzFELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBIn0=

View File

@ -3,4 +3,4 @@ export * from './types.js';
import { createLogger } from '@polymech/log';
import { MODULE_NAME } from './constants.js';
export const logger = createLogger(MODULE_NAME);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLFlBQVksQ0FBQTtBQUUxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBK0IsQ0FBQSJ9
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLFlBQVksQ0FBQTtBQUUxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU1QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBK0IsQ0FBQSJ9

View File

@ -1,8 +0,0 @@
export { sync as read } from '@polymech/fs/read';
export { sync as exists } from '@polymech/fs/exists';
export { sync as dir } from '@polymech/fs/dir';
export { sync as write } from '@polymech/fs/write';
export declare const files: (dir: any, glob: any) => [];
export declare const images: (source: any) => any[];
export declare const forward_slash: (path: any) => any;
export declare function resize_images(files: any): Promise<any[]>;

View File

@ -1,33 +0,0 @@
import * as path from 'path';
export { sync as read } from '@polymech/fs/read';
export { sync as exists } from '@polymech/fs/exists';
export { sync as dir } from '@polymech/fs/dir';
export { sync as write } from '@polymech/fs/write';
import { Helper } from '../process/index';
import pMap from 'p-map';
const IMAGES_GLOB = '*.+(JPG|jpg|png|PNG|gif)';
import { filesEx } from '@polymech/commons/glob';
export const files = (dir, glob) => filesEx(glob, { dot: true, cwd: dir, absolute: true });
export const images = (source) => files(source, IMAGES_GLOB);
export const forward_slash = (path) => {
const isExtendedLengthPath = /^\\\\\?\\/.test(path);
const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex
if (isExtendedLengthPath || hasNonAscii) {
return path;
}
return path.replace(/\\/g, '/');
};
export async function resize_images(files) {
return pMap(files, (file) => {
const inParts = path.parse(file);
const promise = Helper.run(inParts.dir, 'convert', [
`"${inParts.base}"`,
'-quality 70',
'-resize 1980',
'-sharpen 0x1.0',
`"${inParts.name}${inParts.ext}"`
]);
return promise;
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2ZzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sSUFBSSxNQUFNLE9BQU8sQ0FBQztBQUV6QixNQUFNLFdBQVcsR0FBRywwQkFBMEIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQU8sQ0FBQztBQUNqRyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFVLENBQUM7QUFDdEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7SUFDckMsTUFBTSxvQkFBb0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztJQUUzRixJQUFJLG9CQUFvQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQUMsS0FBSztJQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQzdDO1lBQ0ksSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHO1lBQ25CLGFBQWE7WUFDYixjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLElBQUksT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHO1NBQ3BDLENBQUMsQ0FBQztRQUNQLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyJ9

View File

@ -1,13 +0,0 @@
import { IConvertVideoOptions } from '../../../types';
export declare const split: (src: string, dst: string, onNode: any, options: {
interval: number;
}) => Promise<void>;
export declare const CONVERTERS: {
'.mp3': (src: string, dst: string, onNode: any, options: {
interval: number;
}) => Promise<void>;
};
export declare const converter: (file: string) => any;
export declare const convertFile: (file: any, target: any, onNode: (data: any) => void, options: IConvertVideoOptions) => Promise<any>;
export declare function _convert(file: any, targets: string[], onNode: (data: any) => void, options: IConvertVideoOptions): Promise<any>;
export declare const convert: (options: IConvertVideoOptions) => Promise<void>;

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
import { FfprobeData } from 'fluent-ffmpeg';
export declare const meta: (src: string) => Promise<FfprobeData>;

View File

@ -1,17 +0,0 @@
const FfmpegCommand = require('fluent-ffmpeg');
export const meta = async (src) => {
return new Promise((resolve, reject) => {
const ff = new FfmpegCommand(src);
ff.ffprobe(src, (err, metadata) => {
if (err) {
//logger.error('Error retrieving metadata:', err)
reject(err);
}
else {
//logger.info('Successfully retrieved metadata.');
resolve(metadata);
}
});
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmZtcGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZWRpYS9mZm1wZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBVyxFQUF3QixFQUFFO0lBQzVELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxFQUFFLEdBQUcsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDakMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixpREFBaUQ7Z0JBQ2pELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNkLENBQUM7aUJBQU0sQ0FBQztnQkFDTixrREFBa0Q7Z0JBQ2xELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNuQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQSJ9

View File

@ -1,23 +0,0 @@
import { IConvertVideoOptions } from '../../../types';
import { E_AudioCodec, E_Codec, E_Format } from '../video';
export declare const frames: (src: any, dst: any, onNode: any, options?: {
fps: number;
}) => Promise<void>;
export declare const CONVERTERS: {
'.mp3': (inputPath: string, outputPath: string) => Promise<void>;
'.jpg': (src: any, dst: any, onNode: any, options?: {
fps: number;
}) => Promise<void>;
};
export declare const converter: (file: string) => any;
export declare const convertFile: (file: any, target: any, onNode: (data: any) => void, options: IConvertVideoOptions) => Promise<any>;
export declare function _convert(file: any, targets: string[], onNode: (data: any) => void, options: IConvertVideoOptions): Promise<any>;
export declare const convert: (options: IConvertVideoOptions) => Promise<void>;
export declare const merge: (options: IConvertVideoOptions) => Promise<unknown>;
export interface VideoOptions {
frameRate?: number;
videoCodec?: keyof typeof E_Codec;
audioCodec?: keyof typeof E_AudioCodec;
format?: keyof typeof E_Format;
}
export declare const createVideoFromImages: (src: string, target: any, onNode: any, audio: any, { frameRate, videoCodec, audioCodec, format, }: VideoOptions) => Promise<unknown>;

File diff suppressed because one or more lines are too long

View File

@ -1,133 +0,0 @@
import { z } from 'zod';
export declare const GLOB_BASIC = "png|jpg|tiff|jpeg|webp";
export * from './resize';
export * from './convert';
export declare const E_Format: {
readonly MP4: "mp4";
readonly MKV: "mkv";
readonly MOV: "mov";
readonly AVI: "avi";
readonly FLV: "flv";
readonly WMV: "wmv";
readonly WEBM: "webm";
readonly MP3: "mp3";
readonly OGG: "ogg";
readonly WAV: "wav";
};
export declare const E_LogLevel: {
readonly QUIET: "quiet";
readonly PANIC: "panic";
readonly FATAL: "fatal";
readonly ERROR: "error";
readonly WARNING: "warning";
readonly INFO: "info";
readonly VERBOSE: "verbose";
readonly DEBUG: "debug";
readonly TRACE: "trace";
};
export declare const E_AudioCodec: {
readonly AAC: "aac";
readonly MP3: "mp3";
readonly VORBIS: "vorbis";
readonly FLAC: "flac";
readonly OPUS: "opus";
readonly WAV: "wav";
};
export declare const E_Codec: {
readonly LIBX264: "libx264";
readonly LIBX265: "libx265";
readonly LIBVP9: "libvpx-vp9";
readonly LIBAOM: "libaom-av1";
readonly LIBTHEORA: "libtheora";
readonly MPEG2VIDEO: "mpeg2video";
readonly COPY: "copy";
};
declare const ffmpegOptionsSchema: z.ZodObject<{
input: z.ZodString;
output: z.ZodString;
codec: z.ZodDefault<z.ZodOptional<z.ZodNativeEnum<{
readonly LIBX264: "libx264";
readonly LIBX265: "libx265";
readonly LIBVP9: "libvpx-vp9";
readonly LIBAOM: "libaom-av1";
readonly LIBTHEORA: "libtheora";
readonly MPEG2VIDEO: "mpeg2video";
readonly COPY: "copy";
}>>>;
bitrate: z.ZodOptional<z.ZodString>;
framerate: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
resolution: z.ZodOptional<z.ZodString>;
audioCodec: z.ZodDefault<z.ZodOptional<z.ZodNativeEnum<{
readonly AAC: "aac";
readonly MP3: "mp3";
readonly VORBIS: "vorbis";
readonly FLAC: "flac";
readonly OPUS: "opus";
readonly WAV: "wav";
}>>>;
audioBitrate: z.ZodOptional<z.ZodString>;
audioChannels: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
preset: z.ZodDefault<z.ZodOptional<z.ZodString>>;
crf: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
format: z.ZodDefault<z.ZodOptional<z.ZodNativeEnum<{
readonly MP4: "mp4";
readonly MKV: "mkv";
readonly MOV: "mov";
readonly AVI: "avi";
readonly FLV: "flv";
readonly WMV: "wmv";
readonly WEBM: "webm";
readonly MP3: "mp3";
readonly OGG: "ogg";
readonly WAV: "wav";
}>>>;
startTime: z.ZodOptional<z.ZodString>;
duration: z.ZodOptional<z.ZodString>;
overwrite: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
loglevel: z.ZodDefault<z.ZodOptional<z.ZodNativeEnum<{
readonly QUIET: "quiet";
readonly PANIC: "panic";
readonly FATAL: "fatal";
readonly ERROR: "error";
readonly WARNING: "warning";
readonly INFO: "info";
readonly VERBOSE: "verbose";
readonly DEBUG: "debug";
readonly TRACE: "trace";
}>>>;
}, "strip", z.ZodTypeAny, {
input?: string;
output?: string;
format?: "mp4" | "mkv" | "mov" | "avi" | "flv" | "wmv" | "webm" | "mp3" | "ogg" | "wav";
codec?: "libx264" | "libx265" | "libvpx-vp9" | "libaom-av1" | "libtheora" | "mpeg2video" | "copy";
bitrate?: string;
framerate?: number;
resolution?: string;
audioCodec?: "mp3" | "wav" | "aac" | "vorbis" | "flac" | "opus";
audioBitrate?: string;
audioChannels?: number;
preset?: string;
crf?: number;
startTime?: string;
duration?: string;
overwrite?: boolean;
loglevel?: "debug" | "verbose" | "info" | "error" | "quiet" | "panic" | "fatal" | "warning" | "trace";
}, {
input?: string;
output?: string;
format?: "mp4" | "mkv" | "mov" | "avi" | "flv" | "wmv" | "webm" | "mp3" | "ogg" | "wav";
codec?: "libx264" | "libx265" | "libvpx-vp9" | "libaom-av1" | "libtheora" | "mpeg2video" | "copy";
bitrate?: string;
framerate?: number;
resolution?: string;
audioCodec?: "mp3" | "wav" | "aac" | "vorbis" | "flac" | "opus";
audioBitrate?: string;
audioChannels?: number;
preset?: string;
crf?: number;
startTime?: string;
duration?: string;
overwrite?: boolean;
loglevel?: "debug" | "verbose" | "info" | "error" | "quiet" | "panic" | "fatal" | "warning" | "trace";
}>;
export type FFmpegOptions = z.infer<typeof ffmpegOptionsSchema>;

View File

@ -1,68 +0,0 @@
import { z } from 'zod';
const FfmpegCommand = require('fluent-ffmpeg');
export const GLOB_BASIC = 'png|jpg|tiff|jpeg|webp';
export * from './resize';
export * from './convert';
export const E_Format = {
MP4: 'mp4',
MKV: 'mkv',
MOV: 'mov',
AVI: 'avi',
FLV: 'flv',
WMV: 'wmv',
WEBM: 'webm',
MP3: 'mp3',
OGG: 'ogg',
WAV: 'wav'
};
export const E_LogLevel = {
QUIET: 'quiet',
PANIC: 'panic',
FATAL: 'fatal',
ERROR: 'error',
WARNING: 'warning',
INFO: 'info',
VERBOSE: 'verbose',
DEBUG: 'debug',
TRACE: 'trace'
};
export const E_AudioCodec = {
AAC: 'aac',
MP3: 'mp3',
VORBIS: 'vorbis',
FLAC: 'flac',
OPUS: 'opus',
WAV: 'wav'
};
export const E_Codec = {
LIBX264: 'libx264',
LIBX265: 'libx265',
LIBVP9: 'libvpx-vp9',
LIBAOM: 'libaom-av1',
LIBTHEORA: 'libtheora',
MPEG2VIDEO: 'mpeg2video',
COPY: 'copy'
};
const formatEnum = z.nativeEnum(E_Format);
const loglevelEnum = z.nativeEnum(E_LogLevel);
const audioCodecEnum = z.nativeEnum(E_AudioCodec);
const codecEnum = z.nativeEnum(E_Codec);
const ffmpegOptionsSchema = z.object({
input: z.string().describe("Path to the input file"),
output: z.string().describe("Path to the output file"),
codec: codecEnum.optional().describe("Codec to be used for encoding (e.g., 'libx264', 'aac')").default(E_Codec.LIBX264),
bitrate: z.string().optional().describe("Bitrate for encoding (e.g., '500k', '2M')"),
framerate: z.number().optional().describe("Frames per second (e.g., 30, 60)").default(30),
resolution: z.string().optional().describe("Resolution of the output (e.g., '1920x1080', '1280x720')"),
audioCodec: audioCodecEnum.optional().describe("Audio codec to be used for encoding (e.g., 'aac', 'mp3')").default(E_AudioCodec.AAC),
audioBitrate: z.string().optional().describe("Bitrate for audio encoding (e.g., '128k', '256k')"),
audioChannels: z.number().optional().describe("Number of audio channels (e.g., 1 for mono, 2 for stereo)").default(2),
preset: z.string().optional().describe("Encoding preset to use for balancing speed and quality (e.g., 'ultrafast', 'medium', 'slow')").default('medium'),
crf: z.number().optional().describe("Constant Rate Factor for controlling quality (lower values mean higher quality, range: 0-51)").default(23),
format: formatEnum.optional().describe("Container format for output file (e.g., 'mp4', 'mkv', 'mov')").default(E_Format.MP4),
startTime: z.string().optional().describe("Start time of the input file (e.g., '00:01:30' for 1 minute 30 seconds)"),
duration: z.string().optional().describe("Duration of the output (e.g., '00:05:00' for 5 minutes)"),
overwrite: z.boolean().optional().describe("Whether to overwrite the output file if it already exists").default(false),
loglevel: loglevelEnum.optional().describe("Logging level for ffmpeg output").default(E_LogLevel.INFO),
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lZGlhL3ZpZGVvL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFFdkIsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQTtBQUNsRCxjQUFjLFVBQVUsQ0FBQTtBQUN4QixjQUFjLFdBQVcsQ0FBQTtBQUV6QixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFDcEIsR0FBRyxFQUFFLEtBQUs7SUFDVixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsR0FBRyxFQUFFLEtBQUs7SUFDVixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsR0FBRyxFQUFFLEtBQUs7Q0FDRixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87SUFDZCxLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0lBQ2QsT0FBTyxFQUFFLFNBQVM7SUFDbEIsSUFBSSxFQUFFLE1BQU07SUFDWixPQUFPLEVBQUUsU0FBUztJQUNsQixLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0NBQ04sQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRztJQUMxQixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxLQUFLO0NBQ0YsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUNyQixPQUFPLEVBQUUsU0FBUztJQUNsQixPQUFPLEVBQUUsU0FBUztJQUNsQixNQUFNLEVBQUUsWUFBWTtJQUNwQixNQUFNLEVBQUUsWUFBWTtJQUNwQixTQUFTLEVBQUUsV0FBVztJQUN0QixVQUFVLEVBQUUsWUFBWTtJQUN4QixJQUFJLEVBQUUsTUFBTTtDQUNKLENBQUM7QUFFWCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQ3pDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDN0MsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUNqRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBRXZDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNuQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQztJQUNwRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQztJQUN0RCxLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyx3REFBd0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3ZILE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLDJDQUEyQyxDQUFDO0lBQ3BGLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGtDQUFrQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUN6RixVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQywwREFBMEQsQ0FBQztJQUN0RyxVQUFVLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQywwREFBMEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO0lBQ3BJLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLG1EQUFtRCxDQUFDO0lBQ2pHLGFBQWEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLDJEQUEyRCxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNySCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyw4RkFBOEYsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDeEosR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsOEZBQThGLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQy9JLE1BQU0sRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLDhEQUE4RCxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFDNUgsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMseUVBQXlFLENBQUM7SUFDcEgsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMseURBQXlELENBQUM7SUFDbkcsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsMkRBQTJELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3RILFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Q0FDdkcsQ0FBQyxDQUFDIn0=

View File

@ -1 +0,0 @@
export {};

View File

@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZWRpYS92aWRlby9saWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9

View File

@ -1,14 +0,0 @@
import { IConvertVideoOptions } from '../../../types';
export declare const frames: (src: any, dst: any, onNode: any, options?: {
interval: number;
}) => Promise<void>;
export declare const CONVERTERS: {
'.mp3': (inputPath: string, outputPath: string) => Promise<void>;
'.jpg': (src: any, dst: any, onNode: any, options?: {
interval: number;
}) => Promise<void>;
};
export declare const converter: (file: string) => any;
export declare const convertFile: (file: any, target: any, onNode: (data: any) => void, options: IConvertVideoOptions) => Promise<any>;
export declare function _convert(file: any, targets: string[], onNode: (data: any) => void, options: IConvertVideoOptions): Promise<any>;
export declare const convert: (options: IConvertVideoOptions) => Promise<void>;

File diff suppressed because one or more lines are too long

View File

@ -1,6 +0,0 @@
import * as sharp from 'sharp';
import { IOptions, IResizeOptions } from '../../../types';
export declare const meta: (file: any, image: sharp.Sharp) => Promise<sharp.Metadata>;
export declare const resizeFile: (file: any, target: any, onNode: (data: any) => void, options: IResizeOptions) => Promise<sharp.Sharp>;
export declare const _resize: (file: any, targets: string[], onNode: (data: any) => void, options: IOptions) => Promise<any>;
export declare const resize: (options: IOptions) => Promise<void>;

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
export {};

View File

@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BkZi9zcGxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=

View File

@ -1,68 +0,0 @@
import { z } from 'zod';
export declare const ConvertCommandArgsSchema: z.ZodObject<{
input: z.ZodString;
output: z.ZodOptional<z.ZodString>;
dpi: z.ZodDefault<z.ZodNumber>;
scale: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
format: z.ZodDefault<z.ZodEnum<["png", "jpg"]>>;
startPage: z.ZodOptional<z.ZodNumber>;
endPage: z.ZodOptional<z.ZodNumber>;
}, "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<z.ZodEffects<z.ZodObject<{
input: z.ZodString;
output: z.ZodOptional<z.ZodString>;
dpi: z.ZodDefault<z.ZodNumber>;
scale: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
format: z.ZodDefault<z.ZodEnum<["png", "jpg"]>>;
startPage: z.ZodOptional<z.ZodNumber>;
endPage: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodAny, z.objectOutputType<{
input: z.ZodString;
output: z.ZodOptional<z.ZodString>;
dpi: z.ZodDefault<z.ZodNumber>;
scale: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
format: z.ZodDefault<z.ZodEnum<["png", "jpg"]>>;
startPage: z.ZodOptional<z.ZodNumber>;
endPage: z.ZodOptional<z.ZodNumber>;
}, z.ZodAny, "strip">, z.objectInputType<{
input: z.ZodString;
output: z.ZodOptional<z.ZodString>;
dpi: z.ZodDefault<z.ZodNumber>;
scale: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
format: z.ZodDefault<z.ZodEnum<["png", "jpg"]>>;
startPage: z.ZodOptional<z.ZodNumber>;
endPage: z.ZodOptional<z.ZodNumber>;
}, z.ZodAny, "strip">>, any, z.objectInputType<{
input: z.ZodString;
output: z.ZodOptional<z.ZodString>;
dpi: z.ZodDefault<z.ZodNumber>;
scale: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
format: z.ZodDefault<z.ZodEnum<["png", "jpg"]>>;
startPage: z.ZodOptional<z.ZodNumber>;
endPage: z.ZodOptional<z.ZodNumber>;
}, z.ZodAny, "strip">>, any, z.objectInputType<{
input: z.ZodString;
output: z.ZodOptional<z.ZodString>;
dpi: z.ZodDefault<z.ZodNumber>;
scale: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
format: z.ZodDefault<z.ZodEnum<["png", "jpg"]>>;
startPage: z.ZodOptional<z.ZodNumber>;
endPage: z.ZodOptional<z.ZodNumber>;
}, z.ZodAny, "strip">>;
export type ConvertCommandConfig = z.infer<typeof ConvertCommandSchema>;

View File

@ -1,41 +0,0 @@
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=

View File

@ -1,12 +0,0 @@
export interface Button {
text: string;
onClick: () => void;
}
export interface Label {
text: string;
}
export interface Window {
title: string;
width: number;
height: number;
}

View File

@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3VpL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==

View File

@ -1,2 +0,0 @@
import * as CLI from 'yargs';
export declare const register: (cli: CLI.Argv) => any;

File diff suppressed because one or more lines are too long

View File

@ -1,11 +0,0 @@
import { OpenAI } from "openai";
import { IOptions } from '../..';
export declare const deepMerge: (target: string, source: any) => Promise<any>;
export declare const mergers: {
deepMerge: (target: string, source: any) => Promise<any>;
};
export declare const onCompletion: (query: string, ret: string, opts: IOptions) => Promise<string>;
export declare const createOpenAIFile: (client: OpenAI, filePath: string, purpose?: string) => Promise<any>;
export declare const queryEx: (api_key: string, options: IOptions) => Promise<unknown>;
export declare const query: (query: string, api_key: string, dst: string, options: IOptions) => Promise<any>;
export declare const transcribe: (query: string, api_key: string, dst: string, options: any) => Promise<any>;

File diff suppressed because one or more lines are too long

View File

@ -1,28 +0,0 @@
export interface IBackgroundRemoveOptions {
/** FILE|FOLDER|GLOB - Source file(s) to remove background from */
src: string;
/** FILE|FOLDER|GLOB - Destination for processed files */
dst?: string | undefined;
/** Enable internal debug messages */
debug?: boolean;
/** Use alternate tokenizer, & instead of $ */
alt?: boolean;
/** Run without conversion */
dry?: boolean;
/** Show internal messages */
verbose?: boolean;
/** Log level: warn, info, debug, error */
logLevel?: "warn" | "info" | "debug" | "error";
/** Replicate API key (or set REPLICATE_API_TOKEN env var) */
apiKey?: string | undefined;
/** Background removal model to use */
model?: string;
/** Enable alpha matting for better edge refinement */
alpha_matting?: boolean;
/** Alpha matting foreground threshold */
alpha_matting_foreground_threshold?: number;
/** Alpha matting background threshold */
alpha_matting_background_threshold?: number;
/** Alpha matting erode size */
alpha_matting_erode_size?: number;
}

View File

@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX2JhY2tncm91bmRfcmVtb3ZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3pvZF90eXBlc19iYWNrZ3JvdW5kX3JlbW92ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=

View File

@ -1,28 +0,0 @@
export interface IBriaBackgroundRemoveOptions {
/** FILE|FOLDER|GLOB - Source file(s) to remove background from */
src: string;
/** FILE|FOLDER|GLOB - Destination for processed files */
dst?: string | undefined;
/** Enable internal debug messages */
debug?: boolean;
/** Use alternate tokenizer, & instead of $ */
alt?: boolean;
/** Run without conversion */
dry?: boolean;
/** Show internal messages */
verbose?: boolean;
/** Log level: warn, info, debug, error */
logLevel?: "warn" | "info" | "debug" | "error";
/** Skip processing if target file already exists */
cache?: boolean;
/** Bria API key (or set in config.bria.key) */
apiKey?: string | undefined;
/** Use synchronous processing (recommended) */
sync?: boolean;
/** Enable content moderation */
contentModeration?: boolean;
/** Preserve alpha channel from input image */
preserveAlpha?: boolean;
/** Convert PNG output to JPG format and delete PNG */
jpg?: boolean;
}

View File

@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX2JhY2tncm91bmRfcmVtb3ZlX2JyaWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvem9kX3R5cGVzX2JhY2tncm91bmRfcmVtb3ZlX2JyaWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9

View File

@ -1,24 +0,0 @@
export interface ICropForegroundOptions {
/** FILE|FOLDER|GLOB - Source file(s) to crop foreground from */
src: string;
/** FILE|FOLDER|GLOB - Destination for processed files */
dst?: string | undefined;
/** Enable internal debug messages */
debug?: boolean;
/** Use alternate tokenizer, & instead of $ */
alt?: boolean;
/** Run without conversion */
dry?: boolean;
/** Show internal messages */
verbose?: boolean;
/** Log level: warn, info, debug, error */
logLevel?: "warn" | "info" | "debug" | "error";
/** Bria API key (or set in config.bria.key) */
apiKey?: string | undefined;
/** Use synchronous processing (recommended) */
sync?: boolean;
/** Enable content moderation */
contentModeration?: boolean;
/** Preserve alpha channel from input image */
preserveAlpha?: boolean;
}

View File

@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX2Nyb3BfZm9yZWdyb3VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy96b2RfdHlwZXNfY3JvcF9mb3JlZ3JvdW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==

View File

@ -1,16 +0,0 @@
export interface IPdf2JpgOptions {
/** Path to the input PDF file */
input: string;
/** Output path template (e.g., output/page_{PAGE}.png) */
output?: string | undefined;
/** Resolution for the output images */
dpi?: number;
/** Scaling factor to apply before rendering (e.g., 2 for 2x size) */
scale?: number;
/** Output image format */
format?: "png" | "jpg";
/** First page to convert (1-based index) */
startPage?: number | undefined;
/** Last page to convert (1-based index) */
endPage?: number | undefined;
}

View File

@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX3BkZjJqcGcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvem9kX3R5cGVzX3BkZjJqcGcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9

View File

@ -1,51 +0,0 @@
export interface IResizeOptions {
/** FILE|FOLDER|GLOB - Source file(s) to resize */
src: string;
/** FILE|FOLDER|GLOB - Destination for resized files */
dst?: string | undefined;
/** Enable internal debug messages */
debug?: boolean;
/** Use alternate tokenizer, & instead of $ */
alt?: boolean;
/** Run without conversion */
dry?: boolean;
/** Show internal messages */
verbose?: boolean;
/** Resize image width */
width?: number | undefined;
/** Resize image height */
height?: number | undefined;
/** Resize image minimum height */
minHeight?: number | undefined;
/** Resize image minimum width */
minWidth?: number | undefined;
/** Resize image size (bytes) */
minSize?: number | undefined;
/** Resize image in percent (width) */
percent?: number | undefined;
/** Fit image within width for 1:1 aspect ratio without cropping */
square?: boolean;
/** Fill color for square backgrounds (default: white) */
fillColor?: string;
/** Log level: warn, info, debug, error */
logLevel?: "warn" | "info" | "debug" | "error";
/** How the image should be resized to fit both provided dimensions */
fit?: ("cover" | "contain" | "fill" | "inside" | "outside") | undefined;
/** Position, gravity or strategy to use when fit is cover or contain */
position?: (number | string) | undefined;
/** Background color when using a fit of contain */
background?: (string | {
r: number;
g: number;
b: number;
alpha?: number | undefined;
}) | undefined;
/** The kernel to use for image reduction */
kernel?: ("nearest" | "cubic" | "mitchell" | "lanczos2" | "lanczos3") | undefined;
/** Do not enlarge if the width or height are already less than the specified dimensions */
withoutEnlargement?: boolean;
/** Do not reduce if the width or height are already greater than the specified dimensions */
withoutReduction?: boolean;
/** Take greater advantage of the JPEG and WebP shrink-on-load feature */
fastShrinkOnLoad?: boolean;
}

View File

@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX3Jlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy96b2RfdHlwZXNfcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==

View File

@ -1,38 +0,0 @@
export interface IWatermarkOptions {
/** FILE|FOLDER|GLOB - Source file(s) to add watermark to */
src: string;
/** FILE|FOLDER|GLOB - Destination for watermarked files */
dst?: string | undefined;
/** Enable internal debug messages */
debug?: boolean;
/** Use alternate tokenizer, & instead of $ */
alt?: boolean;
/** Run without conversion */
dry?: boolean;
/** Show internal messages */
verbose?: boolean;
/** Log level: warn, info, debug, error */
logLevel?: "warn" | "info" | "debug" | "error";
/** Skip processing if target file already exists */
cache?: boolean;
/** Watermark content: text string or path to image file (PNG, JPG, SVG) */
watermark: string;
/** Position of watermark */
position?: "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center";
/** Margin from edges in pixels */
margin?: number;
/** Opacity of watermark (0-1) */
opacity?: number;
/** Size of image watermark as percentage of base image width (0-1) */
sizePct?: number;
/** Font size for text watermark in pixels */
fontSize?: number;
/** Text color (hex format, e.g., #ffffff) */
color?: string;
/** Font family for text watermark */
fontFamily?: string;
/** Text stroke color (hex format, e.g., #000000) */
strokeColor?: string;
/** Text stroke width in pixels */
strokeWidth?: number;
}

View File

@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX3dhdGVybWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy96b2RfdHlwZXNfd2F0ZXJtYXJrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==

Binary file not shown.

22
packages/media/dist/225.main_node.js vendored Normal file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env node
exports.id = 225;
exports.ids = [225];
exports.modules = {
/***/ 7225:
/***/ ((module) => {
function webpackEmptyContext(req) {
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
webpackEmptyContext.keys = () => ([]);
webpackEmptyContext.resolve = webpackEmptyContext;
webpackEmptyContext.id = 7225;
module.exports = webpackEmptyContext;
/***/ })
};
;

300
packages/media/dist/350.main_node.js vendored Normal file
View File

@ -0,0 +1,300 @@
#!/usr/bin/env node
"use strict";
exports.id = 350;
exports.ids = [350];
exports.modules = {
/***/ 3350:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ pMap)
/* harmony export */ });
/* unused harmony exports pMapIterable, pMapSkip */
async function pMap(
iterable,
mapper,
{
concurrency = Number.POSITIVE_INFINITY,
stopOnError = true,
signal,
} = {},
) {
return new Promise((resolve_, reject_) => {
if (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {
throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
}
if (typeof mapper !== 'function') {
throw new TypeError('Mapper function is required');
}
if (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {
throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`);
}
const result = [];
const errors = [];
const skippedIndexesMap = new Map();
let isRejected = false;
let isResolved = false;
let isIterableDone = false;
let resolvingCount = 0;
let currentIndex = 0;
const iterator = iterable[Symbol.iterator] === undefined ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
const signalListener = () => {
reject(signal.reason);
};
const cleanup = () => {
signal?.removeEventListener('abort', signalListener);
};
const resolve = value => {
resolve_(value);
cleanup();
};
const reject = reason => {
isRejected = true;
isResolved = true;
reject_(reason);
cleanup();
};
if (signal) {
if (signal.aborted) {
reject(signal.reason);
}
signal.addEventListener('abort', signalListener, {once: true});
}
const next = async () => {
if (isResolved) {
return;
}
const nextItem = await iterator.next();
const index = currentIndex;
currentIndex++;
// Note: `iterator.next()` can be called many times in parallel.
// This can cause multiple calls to this `next()` function to
// receive a `nextItem` with `done === true`.
// The shutdown logic that rejects/resolves must be protected
// so it runs only one time as the `skippedIndex` logic is
// non-idempotent.
if (nextItem.done) {
isIterableDone = true;
if (resolvingCount === 0 && !isResolved) {
if (!stopOnError && errors.length > 0) {
reject(new AggregateError(errors)); // eslint-disable-line unicorn/error-message
return;
}
isResolved = true;
if (skippedIndexesMap.size === 0) {
resolve(result);
return;
}
const pureResult = [];
// Support multiple `pMapSkip`'s.
for (const [index, value] of result.entries()) {
if (skippedIndexesMap.get(index) === pMapSkip) {
continue;
}
pureResult.push(value);
}
resolve(pureResult);
}
return;
}
resolvingCount++;
// Intentionally detached
(async () => {
try {
const element = await nextItem.value;
if (isResolved) {
return;
}
const value = await mapper(element, index);
// Use Map to stage the index of the element.
if (value === pMapSkip) {
skippedIndexesMap.set(index, value);
}
result[index] = value;
resolvingCount--;
await next();
} catch (error) {
if (stopOnError) {
reject(error);
} else {
errors.push(error);
resolvingCount--;
// In that case we can't really continue regardless of `stopOnError` state
// since an iterable is likely to continue throwing after it throws once.
// If we continue calling `next()` indefinitely we will likely end up
// in an infinite loop of failed iteration.
try {
await next();
} catch (error) {
reject(error);
}
}
}
})();
};
// Create the concurrent runners in a detached (non-awaited)
// promise. We need this so we can await the `next()` calls
// to stop creating runners before hitting the concurrency limit
// if the iterable has already been marked as done.
// NOTE: We *must* do this for async iterators otherwise we'll spin up
// infinite `next()` calls by default and never start the event loop.
(async () => {
for (let index = 0; index < concurrency; index++) {
try {
// eslint-disable-next-line no-await-in-loop
await next();
} catch (error) {
reject(error);
break;
}
if (isIterableDone || isRejected) {
break;
}
}
})();
});
}
function pMapIterable(
iterable,
mapper,
{
concurrency = Number.POSITIVE_INFINITY,
backpressure = concurrency,
} = {},
) {
if (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {
throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
}
if (typeof mapper !== 'function') {
throw new TypeError('Mapper function is required');
}
if (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {
throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`);
}
if (!((Number.isSafeInteger(backpressure) && backpressure >= concurrency) || backpressure === Number.POSITIVE_INFINITY)) {
throw new TypeError(`Expected \`backpressure\` to be an integer from \`concurrency\` (${concurrency}) and up or \`Infinity\`, got \`${backpressure}\` (${typeof backpressure})`);
}
return {
async * [Symbol.asyncIterator]() {
const iterator = iterable[Symbol.asyncIterator] === undefined ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();
const promises = [];
let runningMappersCount = 0;
let isDone = false;
let index = 0;
function trySpawn() {
if (isDone || !(runningMappersCount < concurrency && promises.length < backpressure)) {
return;
}
const promise = (async () => {
const {done, value} = await iterator.next();
if (done) {
return {done: true};
}
runningMappersCount++;
// Spawn if still below concurrency and backpressure limit
trySpawn();
try {
const returnValue = await mapper(await value, index++);
runningMappersCount--;
if (returnValue === pMapSkip) {
const index = promises.indexOf(promise);
if (index > 0) {
promises.splice(index, 1);
}
}
// Spawn if still below backpressure limit and just dropped below concurrency limit
trySpawn();
return {done: false, value: returnValue};
} catch (error) {
isDone = true;
return {error};
}
})();
promises.push(promise);
}
trySpawn();
while (promises.length > 0) {
const {error, done, value} = await promises[0]; // eslint-disable-line no-await-in-loop
promises.shift();
if (error) {
throw error;
}
if (done) {
return;
}
// Spawn if just dropped below backpressure limit and below the concurrency limit
trySpawn();
if (value === pMapSkip) {
continue;
}
yield value;
}
},
};
}
const pMapSkip = Symbol('skip');
/***/ })
};
;

2206
packages/media/dist/649.main_node.js vendored Normal file

File diff suppressed because it is too large Load Diff

252
packages/media/dist/680.main_node.js vendored Normal file

File diff suppressed because one or more lines are too long

288844
packages/media/dist/main_node.cjs vendored Normal file

File diff suppressed because one or more lines are too long

288844
packages/media/dist/main_node.js vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

BIN
packages/media/dist/win-64/pm-media.exe vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,21 @@
Windows Registry Editor Version 5.00
; Associate both lowercase and uppercase .jpg to jpegfile
[HKEY_CLASSES_ROOT\.jpg]
@="jpegfile"
[HKEY_CLASSES_ROOT\.JPG]
@="jpegfile"
; Main group "Image Tools"
[HKEY_CLASSES_ROOT\jpegfile\shell\ImageTools]
"MUIVerb"="Image Tools"
"SubCommands"=""
; --- Resize Command ---
[HKEY_CLASSES_ROOT\jpegfile\shell\ImageTools\shell\Resize]
"MUIVerb"="Resize"
"Icon"="imageres.dll,-5308"
[HKEY_CLASSES_ROOT\jpegfile\shell\ImageTools\shell\Resize\command]
@="\"pm-media" resize --minWidth=1900 --width=1980 --alt=true --logLevel=info --src=\"%1\""

View File

@ -5,6 +5,9 @@
},
{
"path": "../kbot"
},
{
"path": "../i18n"
}
],
"settings": {}

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,16 @@
"exports": {
".": "./dist-in/index.js"
},
"pkg": {
"targets": [
"node18-win-x64"
],
"assets": [
"node_modules/sharp/build/Release/sharp.node",
"node_modules/sharp/vendor/**"
],
"outputPath": "build"
},
"dependencies": {
"@polymech/cache": "file:../cache",
"@polymech/commons": "file:../commons",
@ -33,9 +43,12 @@
"p-map": "^7.0.3",
"regedit": "^5.1.4",
"replicate": "^1.0.1",
"sharp": "^0.34.2",
"sharp": "^0.34.3",
"tslog": "^4.9.3",
"typescript": "^5.8.3",
"webpack": "^5.101.1",
"webpack-cli": "^6.0.1",
"webpack-visualizer-plugin2": "^2.0.0",
"yargs": "^18.0.0",
"zod": "^3.25.74"
},
@ -43,6 +56,7 @@
"@types/glob": "^8.1.0",
"@types/showdown": "^2.0.6",
"nexe": "^5.0.0-beta.4",
"pkg": "^5.8.1",
"vitest": "^3.1.1"
},
"scripts": {
@ -55,7 +69,8 @@
"dev": "tsc -p . --declaration -w",
"typings": "tsc --declaration",
"docs": "npx typedoc src/index.ts",
"dev-test-watch": "mocha-typescript-watch"
"dev-test-watch": "mocha-typescript-watch",
"webpack": "webpack --config webpack.config.js --stats-error-details"
},
"homepage": "https://git.osr-plastic.org/osr-plastic/osr-media",
"repository": {

View File

@ -4,13 +4,11 @@ import path from 'path';
import fs from 'fs';
async function buildExecutable() {
console.log('🔨 Building pm-media Windows executable...');
const outputDir = './dist/win-64';
const outputFile = 'pm-media.exe';
const entryPoint = './dist-in/main.js';
const nexeTemp = '../nexe';
const nodeVersion = '20.11.1';
const entryPoint = './dist/main_node.cjs';
const nexeTemp = '../nexe-24';
const nodeVersion = '24.5.0';
// Ensure output directory exists
if (!fs.existsSync(outputDir)) {
@ -45,6 +43,7 @@ async function buildExecutable() {
target: `windows-x64-${nodeVersion}`,
build: true, // Build from source for native modules like sharp
temp: nexeTemp,
clean: false,
name: 'pm-media',
configure: ['--with-intl=full-icu'], // Full ICU support
make: ['-j4'], // Parallel build

View File

@ -0,0 +1,5 @@
npm run webpack
cp ./dist/main_node.js ./dist/main_node.cjs
node scripts/nexe.js
mkdir -p dist/win-64/dist
cp dist/win-64/*.wasm dist/win-64/dist/

View File

@ -3,6 +3,10 @@ import { logger } from '../index.js'
import { cli } from '../cli.js'
import { defaults } from '../_cli.js'
import regedit, { RegistryItemPutCollection, REG_SZ_Value } from 'regedit'
import { exec } from 'child_process'
import { promisify } from 'util'
const execAsync = promisify(exec)
export const defaultOptions = (yargs: CLI.Argv) => {
return yargs.option('group', {
@ -17,6 +21,10 @@ export const defaultOptions = (yargs: CLI.Argv) => {
default: false,
describe: 'Show what would be registered without actually doing it',
type: 'boolean'
}).option('refresh-shell', {
default: true,
describe: 'Refresh Windows Shell to apply changes immediately',
type: 'boolean'
}).option('logLevel', {
describe: 'Log level : warn, info, debug, error',
type: 'string',
@ -29,38 +37,42 @@ export const desc = 'Register pm-media commands in Windows Explorer context menu
export const builder = defaultOptions
// Image file extensions to register with
const IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp', '.svg']
//const IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp', '.svg']
const IMAGE_EXTENSIONS = ['.jpg']
type RegType = 'REG_SZ' | 'REG_DWORD' | 'REG_DEFAULT'
interface ExplorerRegistryEntry {
keyPath: string
valueName: string
value: string
type: RegType
}
// Command mappings for Explorer context menu
const EXPLORER_COMMANDS = [
{
name: 'Convert to JPG',
command: 'pm-media',
args: 'convert --alt=true --logLevel=info --src="%1" --dst="%~dpn1_converted.jpg"'
args: 'convert --logLevel=info --src="%1" --dst="%~dpn1_converted.jpg"'
},
{
name: 'Resize Image',
command: 'pm-media',
args: 'resize --alt=true --logLevel=info --src="%1" --dst="%~dpn1_resized%~x1"'
args: 'resize --logLevel=info --src="%1" --dst="%~dpn1_resized%~x1"'
},
{
name: 'Add Watermark',
command: 'pm-media',
args: 'watermark --alt=true --logLevel=info --src="%1" --watermark="&{POLYMECH-ROOT}/nordin-ex/branding/polymech-saw-ex.svg" --dst="%~dpn1_watermarked%~x1"'
args: 'watermark --logLevel=info --src="%1" --watermark="${POLYMECH-ROOT}/nordin-ex/branding/logos/polymech-saw-ex.svg" --dst="${SRC_DIR}/${SRC_NAME}_watermarked.${SRC_EXT}"'
},
{
name: 'Remove Background',
command: 'pm-media',
args: 'background:remove --alt=true --logLevel=info --src="%1" --dst="%~dpn1_bg_removed%~x1"'
args: 'background:remove --logLevel=info --src="%1" --dst="%~dpn1_bg_removed%~x1"'
}
]
interface ExplorerRegistryEntry {
keyPath: string
valueName: string
value: string
type: 'REG_SZ' | 'REG_DWORD'
}
/**
* Generate registry entries for Windows Explorer shell extensions
@ -69,45 +81,49 @@ function generateExplorerRegistryEntries(groupName: string): ExplorerRegistryEnt
const entries: ExplorerRegistryEntry[] = []
for (const ext of IMAGE_EXTENSIONS) {
const extKey = `HKCU\\Software\\Classes\\${ext}`
const extKey = `HKCU\\Software\\Classes\\SystemFileAssociations\\${ext}`
// For each command, create the shell extension entries
for (let i = 0; i < EXPLORER_COMMANDS.length; i++) {
const cmd = EXPLORER_COMMANDS[i]
const cmdKey = `${extKey}\\shell\\${groupName}\\shell\\${cmd.name.replace(/\s+/g, '')}`
// Command display name
entries.push({
keyPath: cmdKey,
valueName: '',
value: cmd.name,
type: 'REG_SZ'
})
// Command execution
entries.push({
keyPath: `${cmdKey}\\command`,
valueName: '',
value: `${cmd.command} ${cmd.args}`,
type: 'REG_SZ'
})
}
// Set the group submenu display name
// Create the main group entry with MUIVerb and subCommands
entries.push({
keyPath: `${extKey}\\shell\\${groupName}`,
valueName: '',
valueName: 'MUIVerb',
value: groupName,
type: 'REG_SZ'
})
// Set submenu position (optional)
entries.push({
keyPath: `${extKey}\\shell\\${groupName}`,
valueName: 'Position',
value: 'Middle',
valueName: 'subCommands',
value: '',
type: 'REG_SZ'
})
// For each command, create the shell extension entries
for (let i = 0; i < EXPLORER_COMMANDS.length; i++) {
const cmd = EXPLORER_COMMANDS[i]
const cmdId = cmd.name.replace(/\s+/g, '').toLowerCase()
const cmdKey = `${extKey}\\shell\\${groupName}\\shell\\${cmdId}`
// Command display name using MUIVerb
entries.push({
keyPath: cmdKey,
valueName: 'MUIVerb',
value: cmd.name,
type: 'REG_SZ'
})
// Direct command execution - pm-media is a global npm command
const commandLine = `${cmd.command} ${cmd.args}`
entries.push({
keyPath: `${cmdKey}\\command`,
valueName: '',
value: commandLine,
type: 'REG_DEFAULT'
})
logger.debug(`Will create command entry: ${cmdKey}\\command = ${commandLine}`)
logger.debug(` Command parts: cmd="${cmd.command}", args="${cmd.args}"`)
}
}
return entries
@ -117,38 +133,80 @@ function generateExplorerRegistryEntries(groupName: string): ExplorerRegistryEnt
* Write registry entries for Explorer shell extensions
*/
async function writeExplorerRegistryEntries(entries: ExplorerRegistryEntry[]): Promise<void> {
const promisified = regedit.promisified
return new Promise((resolve, reject) => {
// Try a different approach - batch all values for each key together
const keyGroups: { [keyPath: string]: ExplorerRegistryEntry[] } = {}
// Group entries by keyPath
for (const entry of entries) {
try {
// Create the key if it doesn't exist
await promisified.createKey([entry.keyPath])
if (!keyGroups[entry.keyPath]) {
keyGroups[entry.keyPath] = []
}
keyGroups[entry.keyPath].push(entry)
}
// Write the value using correct regedit format
// For default values, use empty string as key name
const valueName = entry.valueName || ''
const allKeys = Object.keys(keyGroups)
// Create all keys first
regedit.createKey(allKeys, (err) => {
if (err) {
logger.error('Failed to create registry keys:', err)
reject(err)
return
}
logger.debug(`✓ Created ${allKeys.length} registry keys`)
// Wait for keys to be created
setTimeout(() => {
let completed = 0
let hasError = false
// Process each key group
for (const [keyPath, keyEntries] of Object.entries(keyGroups)) {
const valuesToWrite: RegistryItemPutCollection = {
[entry.keyPath]: {
[valueName]: {
value: entry.value,
type: entry.type as 'REG_SZ'
[keyPath]: {}
}
// Add all values for this key
for (const entry of keyEntries) {
const isDefault = entry.type === 'REG_DEFAULT'
const valueName = isDefault ? '___default___' : entry.valueName || '' // name is ignored for REG_DEFAULT
valuesToWrite[keyPath][valueName] = {
value: entry.value,
// IMPORTANT: use REG_DEFAULT for unnamed default
type: (isDefault ? 'REG_DEFAULT' : entry.type) as any
}
}
await promisified.putValue(valuesToWrite)
logger.debug(`✓ Created registry entry: ${entry.keyPath} = ${entry.value}`)
// Write all values for this key at once
regedit.putValue(valuesToWrite, (err) => {
completed++
} catch (error) {
logger.error(`Failed to create registry entry ${entry.keyPath}:`, error)
logger.error(`Entry details:`, {
keyPath: entry.keyPath,
valueName: entry.valueName,
value: entry.value,
type: entry.type
if (err) {
hasError = true
logger.error(`Failed to set values for ${keyPath}:`, err)
} else {
logger.debug(`✓ Set ${keyEntries.length} values for key: ${keyPath}`)
for (const entry of keyEntries) {
const displayName = entry.type === 'REG_DEFAULT' ? '(Default)' : entry.valueName
logger.debug(` - ${displayName} = ${entry.value}`)
}
}
if (completed === allKeys.length) {
if (hasError) {
reject(new Error('Some registry values failed to set'))
} else {
resolve()
}
}
})
}
}
}, 500)
})
})
}
/**
@ -158,7 +216,7 @@ async function removeExplorerRegistryEntries(groupName: string): Promise<void> {
const promisified = regedit.promisified
for (const ext of IMAGE_EXTENSIONS) {
const extKey = `HKCU\\Software\\Classes\\${ext}`
const extKey = `HKCU\\Software\\Classes\\SystemFileAssociations\\${ext}`
const groupKey = `${extKey}\\shell\\${groupName}`
try {
@ -174,6 +232,25 @@ async function removeExplorerRegistryEntries(groupName: string): Promise<void> {
}
}
/**
* Refresh Windows Shell to apply registry changes without restarting Explorer
*/
async function refreshShell(): Promise<void> {
try {
logger.info('Refreshing Windows Shell to apply changes...')
// Use SHChangeNotify to refresh the shell
// This is much safer than killing explorer.exe
await execAsync('powershell -Command "Add-Type -TypeDefinition \'using System; using System.Runtime.InteropServices; public class Shell32 { [DllImport(\\\"shell32.dll\\\")] public static extern void SHChangeNotify(int wEventId, int uFlags, IntPtr dwItem1, IntPtr dwItem2); }\'; [Shell32]::SHChangeNotify(0x8000000, 0, [IntPtr]::Zero, [IntPtr]::Zero)"')
logger.info('✓ Windows Shell refreshed successfully')
logger.info('Context menu changes should now be visible')
} catch (error) {
logger.warn('Failed to refresh shell automatically:', error)
logger.warn('You may need to log out and log back in, or restart Windows to see the context menu changes')
}
}
export async function handler(argv: CLI.Arguments) {
defaults()
logger.settings.minLevel = argv.logLevel as any
@ -181,7 +258,8 @@ export async function handler(argv: CLI.Arguments) {
const options = {
group: argv.group as string,
unregister: argv.unregister as boolean,
dry: argv.dry as boolean
dry: argv.dry as boolean,
refreshShell: argv['refresh-shell'] as boolean
}
if (process.platform !== 'win32') {
@ -204,6 +282,10 @@ export async function handler(argv: CLI.Arguments) {
await removeExplorerRegistryEntries(options.group)
logger.info(`✓ Successfully removed Explorer shell extensions for: ${options.group}`)
if (options.refreshShell) {
await refreshShell()
}
} else {
logger.info(`Registering Explorer shell extensions for group: ${options.group}`)
logger.info(`Target file types: ${IMAGE_EXTENSIONS.join(', ')}`)
@ -228,7 +310,12 @@ export async function handler(argv: CLI.Arguments) {
logger.info(`Registered ${EXPLORER_COMMANDS.length} commands for ${IMAGE_EXTENSIONS.length} file types`)
logger.info(`Total registry entries created: ${entries.length}`)
logger.info('\nExplorer context menu entries have been registered.')
logger.info('You may need to restart Explorer.exe to see the changes.')
if (options.refreshShell) {
await refreshShell()
} else {
logger.info('You may need to log out and log back in to see the changes.')
}
}
} catch (error) {

View File

@ -3,5 +3,6 @@ export * from './types.js'
import { Logger, ILogObj } from 'tslog'
import { createLogger } from '@polymech/log'
import { MODULE_NAME } from './constants.js'
import { API_NAMESPACE } from '@polymech/commons'
export const logger = createLogger(MODULE_NAME) as unknown as Logger<ILogObj>

View File

@ -0,0 +1,31 @@
import path from 'path';
import { fileURLToPath } from 'url';
import webpack from 'webpack';
const __dirname = fileURLToPath(new URL('.', import.meta.url));
export default {
devtool: false,
plugins: [
new webpack.BannerPlugin({ banner: "#!/usr/bin/env node", raw: true })
],
entry: './dist-in/main.js',
target: 'node',
mode: 'production',
module: {
rules: []
},
optimization: {
minimize: false
},
resolve: {
extensions: ['.js', '.ts']
},
output: {
filename: 'main_node.js',
path: path.resolve(__dirname, 'dist')
},
externals: {
'sharp': 'commonjs sharp'
}
};