media - salamand | explorer
This commit is contained in:
parent
b75ba8028c
commit
975e8f91ed
3
packages/.gitignore
vendored
3
packages/.gitignore
vendored
@ -3,4 +3,5 @@
|
||||
*.log
|
||||
.DS_Store
|
||||
part-registry
|
||||
nexe
|
||||
nexe
|
||||
nexe-24
|
||||
|
||||
2
packages/i18n/dist/lib/translate.d.ts
vendored
2
packages/i18n/dist/lib/translate.d.ts
vendored
@ -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>;
|
||||
|
||||
2
packages/i18n/dist/lib/translate_yaml.d.ts
vendored
2
packages/i18n/dist/lib/translate_yaml.d.ts
vendored
@ -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>;
|
||||
|
||||
@ -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": {
|
||||
|
||||
8
packages/i18n/salamand.json
Normal file
8
packages/i18n/salamand.json
Normal 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"
|
||||
}
|
||||
}
|
||||
BIN
packages/media/build/pm-media.exe
Normal file
BIN
packages/media/build/pm-media.exe
Normal file
Binary file not shown.
BIN
packages/media/build/sharp/build/Release/sharp-win32-x64.node
Normal file
BIN
packages/media/build/sharp/build/Release/sharp-win32-x64.node
Normal file
Binary file not shown.
BIN
packages/media/build/sharp/vendor/lib/libvips-42.dll
vendored
Normal file
BIN
packages/media/build/sharp/vendor/lib/libvips-42.dll
vendored
Normal file
Binary file not shown.
BIN
packages/media/build/sharp/vendor/lib/libvips-cpp-8.17.1.dll
vendored
Normal file
BIN
packages/media/build/sharp/vendor/lib/libvips-cpp-8.17.1.dll
vendored
Normal file
Binary file not shown.
1
packages/media/dist-in/commands/audio.d.ts
vendored
1
packages/media/dist-in/commands/audio.d.ts
vendored
@ -1 +0,0 @@
|
||||
export declare const defaultOptions: (yargs: any) => any;
|
||||
@ -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==
|
||||
3
packages/media/dist-in/commands/convert.d.ts
vendored
3
packages/media/dist-in/commands/convert.d.ts
vendored
@ -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;
|
||||
@ -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
2
packages/media/dist-in/commands/svg2jpg.d.ts
vendored
2
packages/media/dist-in/commands/svg2jpg.d.ts
vendored
@ -1,2 +0,0 @@
|
||||
import * as CLI from 'yargs';
|
||||
export declare const register: (cli: CLI.Argv) => any;
|
||||
@ -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=
|
||||
3
packages/media/dist-in/commands/thumbs.d.ts
vendored
3
packages/media/dist-in/commands/thumbs.d.ts
vendored
@ -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;
|
||||
@ -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==
|
||||
3
packages/media/dist-in/commands/video.d.ts
vendored
3
packages/media/dist-in/commands/video.d.ts
vendored
@ -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;
|
||||
@ -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==
|
||||
@ -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;
|
||||
@ -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=
|
||||
@ -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
|
||||
8
packages/media/dist-in/lib/fs/index.d.ts
vendored
8
packages/media/dist-in/lib/fs/index.d.ts
vendored
@ -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[]>;
|
||||
@ -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
|
||||
@ -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
2
packages/media/dist-in/lib/media/ffmpeg.d.ts
vendored
2
packages/media/dist-in/lib/media/ffmpeg.d.ts
vendored
@ -1,2 +0,0 @@
|
||||
import { FfprobeData } from 'fluent-ffmpeg';
|
||||
export declare const meta: (src: string) => Promise<FfprobeData>;
|
||||
@ -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
|
||||
@ -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
133
packages/media/dist-in/lib/media/video/index.d.ts
vendored
133
packages/media/dist-in/lib/media/video/index.d.ts
vendored
@ -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>;
|
||||
@ -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=
|
||||
@ -1 +0,0 @@
|
||||
export {};
|
||||
@ -1,2 +0,0 @@
|
||||
export {};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZWRpYS92aWRlby9saWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
||||
@ -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
@ -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
1
packages/media/dist-in/lib/pdf/split.d.ts
vendored
1
packages/media/dist-in/lib/pdf/split.d.ts
vendored
@ -1 +0,0 @@
|
||||
export {};
|
||||
@ -1,2 +0,0 @@
|
||||
export {};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BkZi9zcGxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
||||
68
packages/media/dist-in/lib/pdf/types.d.ts
vendored
68
packages/media/dist-in/lib/pdf/types.d.ts
vendored
@ -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>;
|
||||
@ -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=
|
||||
12
packages/media/dist-in/lib/ui/types.d.ts
vendored
12
packages/media/dist-in/lib/ui/types.d.ts
vendored
@ -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;
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
export {};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3VpL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
||||
2
packages/media/dist-in/ref/chatgpt-ex.d.ts
vendored
2
packages/media/dist-in/ref/chatgpt-ex.d.ts
vendored
@ -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
11
packages/media/dist-in/ref/query.d.ts
vendored
11
packages/media/dist-in/ref/query.d.ts
vendored
@ -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
@ -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;
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
export {};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX2JhY2tncm91bmRfcmVtb3ZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3pvZF90eXBlc19iYWNrZ3JvdW5kX3JlbW92ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
||||
@ -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;
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
export {};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX2JhY2tncm91bmRfcmVtb3ZlX2JyaWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvem9kX3R5cGVzX2JhY2tncm91bmRfcmVtb3ZlX2JyaWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
||||
@ -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;
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
export {};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX2Nyb3BfZm9yZWdyb3VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy96b2RfdHlwZXNfY3JvcF9mb3JlZ3JvdW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
||||
16
packages/media/dist-in/zod_types_pdf2jpg.d.ts
vendored
16
packages/media/dist-in/zod_types_pdf2jpg.d.ts
vendored
@ -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;
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
export {};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX3BkZjJqcGcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvem9kX3R5cGVzX3BkZjJqcGcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
||||
51
packages/media/dist-in/zod_types_resize.d.ts
vendored
51
packages/media/dist-in/zod_types_resize.d.ts
vendored
@ -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;
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
export {};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX3Jlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy96b2RfdHlwZXNfcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
||||
38
packages/media/dist-in/zod_types_watermark.d.ts
vendored
38
packages/media/dist-in/zod_types_watermark.d.ts
vendored
@ -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;
|
||||
}
|
||||
@ -1,2 +0,0 @@
|
||||
export {};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzX3dhdGVybWFyay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy96b2RfdHlwZXNfd2F0ZXJtYXJrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
||||
BIN
packages/media/dist/038ccdb7acfc39091fb3.wasm
vendored
Normal file
BIN
packages/media/dist/038ccdb7acfc39091fb3.wasm
vendored
Normal file
Binary file not shown.
22
packages/media/dist/225.main_node.js
vendored
Normal file
22
packages/media/dist/225.main_node.js
vendored
Normal 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
300
packages/media/dist/350.main_node.js
vendored
Normal 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
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
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
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
288844
packages/media/dist/main_node.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
packages/media/dist/win-64/dist/038ccdb7acfc39091fb3.wasm
vendored
Normal file
BIN
packages/media/dist/win-64/dist/038ccdb7acfc39091fb3.wasm
vendored
Normal file
Binary file not shown.
BIN
packages/media/dist/win-64/pm-media.exe
vendored
Normal file
BIN
packages/media/dist/win-64/pm-media.exe
vendored
Normal file
Binary file not shown.
21
packages/media/integration/jpg.reg
Normal file
21
packages/media/integration/jpg.reg
Normal 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\""
|
||||
@ -5,6 +5,9 @@
|
||||
},
|
||||
{
|
||||
"path": "../kbot"
|
||||
},
|
||||
{
|
||||
"path": "../i18n"
|
||||
}
|
||||
],
|
||||
"settings": {}
|
||||
|
||||
2490
packages/media/package-lock.json
generated
2490
packages/media/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -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": {
|
||||
|
||||
@ -1,95 +1,94 @@
|
||||
// nexe.js - Compile pm-media to Windows executable using nexe Node.js API
|
||||
import { compile } from 'nexe';
|
||||
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';
|
||||
|
||||
// Ensure output directory exists
|
||||
if (!fs.existsSync(outputDir)) {
|
||||
fs.mkdirSync(outputDir, { recursive: true });
|
||||
console.log(`📁 Created output directory: ${outputDir}`);
|
||||
}
|
||||
|
||||
// Ensure nexe temp directory exists
|
||||
if (!fs.existsSync(nexeTemp)) {
|
||||
fs.mkdirSync(nexeTemp, { recursive: true });
|
||||
console.log(`📁 Created temp directory: ${nexeTemp}`);
|
||||
}
|
||||
|
||||
// Check if entry point exists
|
||||
if (!fs.existsSync(entryPoint)) {
|
||||
console.log(`❌ Entry point ${entryPoint} not found. Please run 'npm run build' first.`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const outputPath = path.join(outputDir, outputFile);
|
||||
|
||||
console.log('📦 Compiling with nexe...');
|
||||
console.log(` Entry: ${entryPoint}`);
|
||||
console.log(` Output: ${outputPath}`);
|
||||
console.log(` Temp: ${nexeTemp}`);
|
||||
console.log(` Target: windows-x64-${nodeVersion}`);
|
||||
|
||||
try {
|
||||
await compile({
|
||||
input: entryPoint,
|
||||
output: outputPath,
|
||||
target: `windows-x64-${nodeVersion}`,
|
||||
build: true, // Build from source for native modules like sharp
|
||||
temp: nexeTemp,
|
||||
name: 'pm-media',
|
||||
configure: ['--with-intl=full-icu'], // Full ICU support
|
||||
make: ['-j4'], // Parallel build
|
||||
loglevel: 'verbose',
|
||||
// Resources - include any additional files if needed
|
||||
resources: [
|
||||
// Add any resource patterns here if needed
|
||||
// './assets/**/*'
|
||||
],
|
||||
patches: [
|
||||
// Patch for better native module support
|
||||
async (compiler, next) => {
|
||||
// This patch helps with native modules like sharp
|
||||
await compiler.replaceInFileAsync(
|
||||
'lib/internal/bootstrap/pre_execution.js',
|
||||
'process.dlopen = function(',
|
||||
`
|
||||
// Nexe patch for native modules
|
||||
const originalDlopen = process.dlopen;
|
||||
process.dlopen = function(`
|
||||
);
|
||||
return next();
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
console.log(`✅ Successfully compiled to ${outputPath}`);
|
||||
|
||||
// Show file size
|
||||
if (fs.existsSync(outputPath)) {
|
||||
const stats = fs.statSync(outputPath);
|
||||
const fileSizeInMB = (stats.size / (1024 * 1024)).toFixed(2);
|
||||
console.log(`📊 Executable size: ${fileSizeInMB} MB`);
|
||||
}
|
||||
|
||||
console.log('🎉 Build complete!');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Compilation failed:', error.message);
|
||||
if (error.stack) {
|
||||
console.error(error.stack);
|
||||
}
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Run the build
|
||||
buildExecutable().catch(console.error);
|
||||
// nexe.js - Compile pm-media to Windows executable using nexe Node.js API
|
||||
import { compile } from 'nexe';
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
|
||||
async function buildExecutable() {
|
||||
const outputDir = './dist/win-64';
|
||||
const outputFile = 'pm-media.exe';
|
||||
const entryPoint = './dist/main_node.cjs';
|
||||
const nexeTemp = '../nexe-24';
|
||||
const nodeVersion = '24.5.0';
|
||||
|
||||
// Ensure output directory exists
|
||||
if (!fs.existsSync(outputDir)) {
|
||||
fs.mkdirSync(outputDir, { recursive: true });
|
||||
console.log(`📁 Created output directory: ${outputDir}`);
|
||||
}
|
||||
|
||||
// Ensure nexe temp directory exists
|
||||
if (!fs.existsSync(nexeTemp)) {
|
||||
fs.mkdirSync(nexeTemp, { recursive: true });
|
||||
console.log(`📁 Created temp directory: ${nexeTemp}`);
|
||||
}
|
||||
|
||||
// Check if entry point exists
|
||||
if (!fs.existsSync(entryPoint)) {
|
||||
console.log(`❌ Entry point ${entryPoint} not found. Please run 'npm run build' first.`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const outputPath = path.join(outputDir, outputFile);
|
||||
|
||||
console.log('📦 Compiling with nexe...');
|
||||
console.log(` Entry: ${entryPoint}`);
|
||||
console.log(` Output: ${outputPath}`);
|
||||
console.log(` Temp: ${nexeTemp}`);
|
||||
console.log(` Target: windows-x64-${nodeVersion}`);
|
||||
|
||||
try {
|
||||
await compile({
|
||||
input: entryPoint,
|
||||
output: outputPath,
|
||||
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
|
||||
loglevel: 'verbose',
|
||||
// Resources - include any additional files if needed
|
||||
resources: [
|
||||
// Add any resource patterns here if needed
|
||||
// './assets/**/*'
|
||||
],
|
||||
patches: [
|
||||
// Patch for better native module support
|
||||
async (compiler, next) => {
|
||||
// This patch helps with native modules like sharp
|
||||
await compiler.replaceInFileAsync(
|
||||
'lib/internal/bootstrap/pre_execution.js',
|
||||
'process.dlopen = function(',
|
||||
`
|
||||
// Nexe patch for native modules
|
||||
const originalDlopen = process.dlopen;
|
||||
process.dlopen = function(`
|
||||
);
|
||||
return next();
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
console.log(`✅ Successfully compiled to ${outputPath}`);
|
||||
|
||||
// Show file size
|
||||
if (fs.existsSync(outputPath)) {
|
||||
const stats = fs.statSync(outputPath);
|
||||
const fileSizeInMB = (stats.size / (1024 * 1024)).toFixed(2);
|
||||
console.log(`📊 Executable size: ${fileSizeInMB} MB`);
|
||||
}
|
||||
|
||||
console.log('🎉 Build complete!');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Compilation failed:', error.message);
|
||||
if (error.stack) {
|
||||
console.error(error.stack);
|
||||
}
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Run the build
|
||||
buildExecutable().catch(console.error);
|
||||
|
||||
5
packages/media/scripts/nexe.sh
Normal file
5
packages/media/scripts/nexe.sh
Normal 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/
|
||||
@ -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
|
||||
|
||||
for (const entry of entries) {
|
||||
try {
|
||||
// Create the key if it doesn't exist
|
||||
await promisified.createKey([entry.keyPath])
|
||||
|
||||
// Write the value using correct regedit format
|
||||
// For default values, use empty string as key name
|
||||
const valueName = entry.valueName || ''
|
||||
const valuesToWrite: RegistryItemPutCollection = {
|
||||
[entry.keyPath]: {
|
||||
[valueName]: {
|
||||
value: entry.value,
|
||||
type: entry.type as 'REG_SZ'
|
||||
}
|
||||
}
|
||||
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) {
|
||||
if (!keyGroups[entry.keyPath]) {
|
||||
keyGroups[entry.keyPath] = []
|
||||
}
|
||||
keyGroups[entry.keyPath].push(entry)
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
await promisified.putValue(valuesToWrite)
|
||||
logger.debug(`✓ Created registry entry: ${entry.keyPath} = ${entry.value}`)
|
||||
logger.debug(`✓ Created ${allKeys.length} registry keys`)
|
||||
|
||||
} 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
|
||||
})
|
||||
}
|
||||
}
|
||||
// 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 = {
|
||||
[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
|
||||
}
|
||||
}
|
||||
|
||||
// Write all values for this key at once
|
||||
regedit.putValue(valuesToWrite, (err) => {
|
||||
completed++
|
||||
|
||||
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) {
|
||||
|
||||
@ -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>
|
||||
|
||||
|
||||
31
packages/media/webpack.config.js
Normal file
31
packages/media/webpack.config.js
Normal 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'
|
||||
}
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user