media : background | watermark
This commit is contained in:
parent
e7faf3ea02
commit
207cb53f6f
6
packages/bot/.gitignore
vendored
Normal file
6
packages/bot/.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
/node_modules
|
||||
/coverage
|
||||
*.log
|
||||
.DS_Store
|
||||
clear_history.sh
|
||||
./tests/assets
|
||||
3
packages/bot/.npmignore
Normal file
3
packages/bot/.npmignore
Normal file
@ -0,0 +1,3 @@
|
||||
docs
|
||||
scripts
|
||||
tests
|
||||
365
packages/bot/.vscode/launch.json
vendored
Normal file
365
packages/bot/.vscode/launch.json
vendored
Normal file
@ -0,0 +1,365 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images : JPG - Resize - Percent",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"resize",
|
||||
"--src='./tests/images/in/*.+(jpg)'",
|
||||
"--dst='./tests/images/out/'",
|
||||
"--percent=80",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images : ARW - Resize",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"resize",
|
||||
"--src='./tests/images/in/*.+(arw)'",
|
||||
"--dst='./tests/images/out/'",
|
||||
"--width=2000",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images : JPG - Resize Inplace",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"resize",
|
||||
"--src='./tests/images/in/*.+(jpg)'",
|
||||
"--width=2000",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"outputCapture": "std"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images Glob : Resize Inplace ",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"resize",
|
||||
"--alt=true",
|
||||
"--src='./tests/images/in/*.+(jpg)'",
|
||||
"--dst='./tests/images/in2/*.+(jpg)'",
|
||||
"--width=2000",
|
||||
"--minSize=1670016",
|
||||
"--minWidth=1900",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"outputCapture": "std"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images : JPG - Resize - Percent - WebP",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"resize",
|
||||
"--src='./tests/images/in/**/*.+(jpg)'",
|
||||
"--dst='./tests/images/out/*.+(webp)'",
|
||||
"--percent=80",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"outputCapture": "std"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images Convert : WebP -> Jpg",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"convert",
|
||||
"--src='./tests/images/in_webp/*.+(webp)'",
|
||||
"--dst='./tests/images/out_jpg/*.+(jpg)'",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images Convert - Single : WebP -> Jpg",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"convert",
|
||||
"--src='./tests/images/in_webp/DSC01177.webp'",
|
||||
"--dst='./tests/images/out_jpg/DSC01177.jpg'",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images Convert - Single - Expr : WebP -> Jpg",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"convert",
|
||||
"--src='./tests/images/in_webp/DSC01177.webp'",
|
||||
"--dst='${SRC_DIR}/${SRC_NAME}.+(jpg|png)'",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images Resize - Alt - Single",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"resize",
|
||||
"--alt=true",
|
||||
"--percent=80",
|
||||
"--src='./tests/images/in/DSC01177.JPG'",
|
||||
"--dst='&{SRC_DIR}/&{SRC_NAME}_medium.+(jpg)'",
|
||||
"--logLevel=debug"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
]
|
||||
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images Resize All Square - Glob",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"resize",
|
||||
"--width=1000",
|
||||
"--height=1000",
|
||||
"--fit=contain",
|
||||
"--src='./tests/images/in/**/*.+(jpg)'",
|
||||
"--dst='./tests/images/out_square/.+(jpg|webp)'",
|
||||
"--logLevel=debug"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"outputCapture": "std"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Images Resize All Square - Default",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"resize",
|
||||
"--width=1000",
|
||||
"--height=1000",
|
||||
"--fit=contain",
|
||||
"--src='./tests/images/in/**/*.+(jpg)'",
|
||||
"--_dst='${SRC_DIR}/${SRC_NAME}-thumb.webp'",
|
||||
"--dst='./tests/images/out_square/${SRC_NAME}-thumb.png'",
|
||||
"--logLevel=debug"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"outputCapture": "std"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test File with Glob",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"resize",
|
||||
"--width=1000",
|
||||
"--fit=contain",
|
||||
"--alt=true",
|
||||
"--src='./tests/images/in/DSC01301.JPG/**/*.+(&{IMAGES})'",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Resize Bazar",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program2": "${workspaceFolder}\\main.js",
|
||||
"program": "C:\\Users\\mc007\\AppData\\Roaming\\npm\\node_modules\\@plastichub\\osr-media\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"resize",
|
||||
"--minWidth=1900",
|
||||
"--width=1980",
|
||||
"--fit=contain",
|
||||
"--src='${OSR_ROOT}/pp-bazar/${YYYY}/${MM}/**/*.+(${IMAGES})'",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"outputCapture": "std"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Watermark",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"program2": "C:\\Users\\mc007\\AppData\\Roaming\\npm\\node_modules\\@plastichub\\osr-media\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"watermark",
|
||||
"--src='./tests/images/watermark-in/**/*.+(${IMAGES})'",
|
||||
"--debug=true"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"outputCapture": "std"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Video:Convert - MP4 -> MP3",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"video",
|
||||
"convert",
|
||||
"--src='./tests/assets/*.+(mp4)'",
|
||||
"--dst='./tests/audio/${SRC_NAME}-audio.mp3'",
|
||||
"--logLevel=debug"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"outputCapture": "std"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Video:Convert - MP4 -> JPG",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"video",
|
||||
"convert",
|
||||
"--src='./tests/assets/*.+(mp4)'",
|
||||
"--dst='./tests/video/${SRC_NAME}/${SRC_NAME}-%03d.jpg'",
|
||||
"--fps=30",
|
||||
"--logLevel=debug"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"outputCapture": "std"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Test Video:JPG -> MP4",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\main.js",
|
||||
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||
"args": [
|
||||
"video",
|
||||
"merge",
|
||||
"--src='./tests/video/tt-1/*.jpg'",
|
||||
"--dst='./tests/video/out/out.mp4'",
|
||||
"--interval=1",
|
||||
"--logLevel=debug"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"outputCapture": "std"
|
||||
}
|
||||
]
|
||||
}
|
||||
8
packages/bot/.vscode/settings.json
vendored
Normal file
8
packages/bot/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"cmake.configureOnOpen": false,
|
||||
"cSpell.words": [
|
||||
"novita",
|
||||
"plastichub",
|
||||
"Salamand"
|
||||
]
|
||||
}
|
||||
9
packages/bot/LICENSE
Normal file
9
packages/bot/LICENSE
Normal file
@ -0,0 +1,9 @@
|
||||
Copyright (c) <year> <owner> All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
71
packages/bot/README.md
Normal file
71
packages/bot/README.md
Normal file
@ -0,0 +1,71 @@
|
||||
# OSR CAD Tools
|
||||
|
||||
This is a CLI(CommandLineInterface) toolset to convert media files
|
||||
|
||||
## Requirements
|
||||
|
||||
1. [Node-JS](https://nodejs.org/en/download/)
|
||||
2. Optional: install [Git](https://git-scm.com/downloads) (Make sure you enable Linux tools on Windows console)
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
git clone https://gitlab.com/plastichub/osr/osr-media.git
|
||||
cd osr-media
|
||||
npm i
|
||||
```
|
||||
|
||||
or globally (recommended)
|
||||
|
||||
```
|
||||
npm i @plastichub/osr-media -g
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Open a terminal and run this:
|
||||
|
||||
```sh
|
||||
osr-media --help
|
||||
```
|
||||
|
||||
See more in [./docs/Examples.md](./docs/Examples.md)
|
||||
|
||||
### Commands - Todos - 2D/Pictures
|
||||
|
||||
- [ ] web formats (https://sharp.pixelplumbing.com/api-constructor)
|
||||
- [ ] vector formats: pdf|svg
|
||||
- [ ] meta exchange (from JSON, to Exif)
|
||||
|
||||
### Commands - Todos - Pixels
|
||||
|
||||
- [ ] RAW formats
|
||||
|
||||
### Commands - Video
|
||||
|
||||
- [ ] sub titles ?
|
||||
- [ ] ffmpg
|
||||
- [ ] split
|
||||
- [ ] merge
|
||||
- [ ] server/transcode ?
|
||||
|
||||
## References
|
||||
|
||||
- [pixelmatch](https://github.com/mapbox/pixelmatch)
|
||||
- [lib content](https://git.osr-plastic.org/osr-plastic/osr-lib-content)
|
||||
- [image diff](https://www.npmjs.com/package/img-diff-js)
|
||||
- [ARW spec](https://github.com/WeTransfer/format_parser/blob/master/lib/parsers/arw_parser.rb)
|
||||
- [ARW format notes - wiki](http://fileformats.archiveteam.org/wiki/Sony_ARW)
|
||||
- [RAW View - NodeJS](https://github.com/catdad/raw-viewer/releases)
|
||||
- [DCRaw - Github](https://github.com/zfedoran/dcraw.js)
|
||||
- [DCRaw Vendored - NPM](https://www.npmjs.com/package/dcraw-vendored-win32)
|
||||
- [Exif Data Reader](https://github.com/mattiasw/ExifReader)
|
||||
-
|
||||
|
||||
## AI Tools
|
||||
|
||||
- [Object Replace](https://novita.ai/product/replace-object)
|
||||
|
||||
## Video
|
||||
|
||||
- [https://github.com/fluent-ffmpeg/node-fluent-ffmpeg.git](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg.git)
|
||||
2
packages/bot/commands/audio.d.ts
vendored
Normal file
2
packages/bot/commands/audio.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
export declare const defaultOptions: (yargs: CLI.Argv) => any;
|
||||
export declare const register: (cli: CLI.Argv) => any;
|
||||
36
packages/bot/commands/audio.js
Normal file
36
packages/bot/commands/audio.js
Normal file
@ -0,0 +1,36 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.register = exports.defaultOptions = void 0;
|
||||
const __1 = require("../");
|
||||
const convert_1 = require("../lib/media/audio/convert");
|
||||
const _cli_1 = require("../_cli");
|
||||
const defaultOptions = (yargs) => {
|
||||
return yargs.option('src', {
|
||||
describe: 'FILE|FOLDER|GLOB',
|
||||
demandOption: true
|
||||
}).option('dst', {
|
||||
describe: 'FILE|FOLDER|GLOB'
|
||||
}).option('debug', {
|
||||
default: false,
|
||||
describe: 'Enable internal debug messages',
|
||||
type: 'boolean'
|
||||
}).option('alt', {
|
||||
default: false,
|
||||
describe: 'Use alternate tokenizer, & instead of $',
|
||||
type: 'boolean'
|
||||
});
|
||||
};
|
||||
exports.defaultOptions = defaultOptions;
|
||||
let options = (yargs) => (0, exports.defaultOptions)(yargs);
|
||||
const register = (cli) => {
|
||||
return cli.command('video <verb>', 'Convert video', options, (argv) => {
|
||||
(0, _cli_1.defaults)();
|
||||
const options = (0, _cli_1.sanitizeVideo)(argv);
|
||||
__1.logger.info("options " + argv.dst, options);
|
||||
if (argv.verb = 'convert') {
|
||||
return (0, convert_1.convert)(options);
|
||||
}
|
||||
});
|
||||
};
|
||||
exports.register = register;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29tbWFuZHMvYXVkaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkJBQTRCO0FBQzVCLHdEQUFvRDtBQUVwRCxrQ0FBaUQ7QUFHMUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQWZZLFFBQUEsY0FBYyxrQkFlMUI7QUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsSUFBQSxzQkFBYyxFQUFDLEtBQUssQ0FBQyxDQUFBO0FBRWpELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBbUIsRUFBRSxFQUFFO1FBQ2pGLElBQUEsZUFBUSxHQUFFLENBQUE7UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxDQUF5QixDQUFBO1FBQzNELFVBQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDM0MsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsRUFBRTtZQUN2QixPQUFPLElBQUEsaUJBQU8sRUFBQyxPQUFPLENBQUMsQ0FBQTtTQUMxQjtJQUNMLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBO0FBVFksUUFBQSxRQUFRLFlBU3BCIn0=
|
||||
10
packages/bot/commands/common/sanitize-filename.d.ts
vendored
Normal file
10
packages/bot/commands/common/sanitize-filename.d.ts
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
import * as CLI from 'yargs';
|
||||
export declare const register: (cli: CLI.Argv) => CLI.Argv<{
|
||||
input: string;
|
||||
} & {
|
||||
slugify: string;
|
||||
} & {
|
||||
debug: string;
|
||||
} & {
|
||||
dry: string;
|
||||
}>;
|
||||
69
packages/bot/commands/common/sanitize-filename.js
Normal file
69
packages/bot/commands/common/sanitize-filename.js
Normal file
@ -0,0 +1,69 @@
|
||||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.register = void 0;
|
||||
const path = require("path");
|
||||
const fs_1 = require("fs");
|
||||
const fs_2 = require("../../lib/fs");
|
||||
const __1 = require("../..");
|
||||
const sanitize = require("sanitize-filename");
|
||||
const filenamify = require('filenamify');
|
||||
const slugify = require('slugify');
|
||||
const defaultOptions = (yargs) => {
|
||||
return yargs.option('input', {
|
||||
default: './',
|
||||
describe: 'The sources'
|
||||
}).option('slugify', {
|
||||
default: 'false',
|
||||
describe: 'convert whitespaces to dashes, remove special ASCIs'
|
||||
}).option('debug', {
|
||||
default: 'false',
|
||||
describe: 'debug messages'
|
||||
}).option('dry', {
|
||||
default: 'false',
|
||||
describe: 'dry run, dont modify'
|
||||
});
|
||||
};
|
||||
let options = (yargs) => defaultOptions(yargs);
|
||||
const prep = (file) => {
|
||||
const parts = path.parse(file);
|
||||
const stats = (0, fs_1.lstatSync)(file);
|
||||
if (stats.isFile()) {
|
||||
console.log('p', parts);
|
||||
// return parts.name.trim() + parts.ext.trim().split('.')[1].trim();
|
||||
return filenamify(parts.name + parts.ext);
|
||||
}
|
||||
return prep;
|
||||
};
|
||||
// npm run build ; node ./build/main.js sanitize-filenames --input=.
|
||||
const register = (cli) => {
|
||||
return cli.command('sanitize-filename', 'Removes invalid chars in filenames', options, (argv) => __awaiter(void 0, void 0, void 0, function* () {
|
||||
if (argv.help) {
|
||||
return;
|
||||
}
|
||||
const _debug = argv.debug === 'true';
|
||||
const _dry = argv.dry === 'true';
|
||||
const src = path.resolve('' + argv.input);
|
||||
_debug && __1.logger.info(`sanitize ${src}`);
|
||||
if ((0, fs_1.existsSync)(src)) {
|
||||
!_dry && sanitize(src);
|
||||
if (argv.slugify === 'true') {
|
||||
let _files = (0, fs_2.files)(src, '**/**').map(prep).map(slugify);
|
||||
__1.logger.info('files', _files);
|
||||
}
|
||||
}
|
||||
else {
|
||||
_debug && __1.logger.error(`doesnt exists : ${src} `);
|
||||
}
|
||||
}));
|
||||
};
|
||||
exports.register = register;
|
||||
//# sourceMappingURL=sanitize-filename.js.map
|
||||
1
packages/bot/commands/common/sanitize-filename.js.map
Normal file
1
packages/bot/commands/common/sanitize-filename.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"sanitize-filename.js","sourceRoot":"","sources":["../../src/commands/common/sanitize-filename.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,6BAA6B;AAC7B,2BAA2C;AAC3C,qCAAqC;AAErC,6BAA+B;AAE/B,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACzC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAEnC,MAAM,cAAc,GAAG,CAAC,KAAe,EAAE,EAAE;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;QACzB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,aAAa;KAC1B,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE;QACjB,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,qDAAqD;KAClE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;QACf,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,gBAAgB;KAC7B,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;QACb,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,sBAAsB;KACnC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,IAAI,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;IAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAA,cAAS,EAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAC,KAAK,CAAC,CAAC;QAC/B,2EAA2E;QACnE,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;KAC7C;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAA;AAED,oEAAoE;AAC7D,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,EAAE;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,OAAO,EAAE,CAAO,IAAmB,EAAE,EAAE;QACjH,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO;SAAE;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,KAAM,MAAM,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,UAAM,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QACzC,IAAI,IAAA,eAAU,EAAC,GAAG,CAAC,EAAE;YAEjB,CAAC,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;gBACzB,IAAI,MAAM,GAAG,IAAA,UAAK,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxD,UAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAChC;SACJ;aAAM;YACH,MAAM,IAAI,UAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC;SACrD;IACL,CAAC,CAAA,CAAC,CAAC;AACP,CAAC,CAAC;AAlBW,QAAA,QAAQ,YAkBnB"}
|
||||
2
packages/bot/commands/convert.d.ts
vendored
Normal file
2
packages/bot/commands/convert.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
export declare const defaultOptions: (yargs: CLI.Argv) => any;
|
||||
export declare const register: (cli: CLI.Argv) => any;
|
||||
42
packages/bot/commands/convert.js
Normal file
42
packages/bot/commands/convert.js
Normal file
@ -0,0 +1,42 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.register = exports.defaultOptions = void 0;
|
||||
const __1 = require("../");
|
||||
const images_1 = require("../lib/media/images");
|
||||
const _cli_1 = require("../_cli");
|
||||
const defaultOptions = (yargs) => {
|
||||
return yargs.option('src', {
|
||||
describe: 'FILE|FOLDER|GLOB',
|
||||
demandOption: true
|
||||
}).option('dst', {
|
||||
describe: 'FILE|FOLDER|GLOB'
|
||||
}).option('debug', {
|
||||
default: false,
|
||||
describe: 'Enable internal debug messages',
|
||||
type: 'boolean'
|
||||
}).option('alt', {
|
||||
default: false,
|
||||
describe: 'Use alternate tokenizer, & instead of $',
|
||||
type: 'boolean'
|
||||
}).option('dry', {
|
||||
default: false,
|
||||
describe: 'Run without conversion',
|
||||
type: 'boolean'
|
||||
}).option('verbose', {
|
||||
default: false,
|
||||
describe: 'Show internal messages',
|
||||
type: 'boolean'
|
||||
});
|
||||
};
|
||||
exports.defaultOptions = defaultOptions;
|
||||
let options = (yargs) => (0, exports.defaultOptions)(yargs);
|
||||
const register = (cli) => {
|
||||
return cli.command('convert', 'Convert files', options, (argv) => {
|
||||
(0, _cli_1.defaults)();
|
||||
const options = (0, _cli_1.sanitizeVideo)(argv);
|
||||
options.debug && __1.logger.info("options " + argv.dst, options);
|
||||
return (0, images_1.convert)(options);
|
||||
});
|
||||
};
|
||||
exports.register = register;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tYW5kcy9jb252ZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJCQUE0QjtBQUU1QixnREFFNEI7QUFFNUIsa0NBSWdCO0FBT1QsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUF2QlksUUFBQSxjQUFjLGtCQXVCMUI7QUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsSUFBQSxzQkFBYyxFQUFDLEtBQUssQ0FBQyxDQUFBO0FBRWpELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBbUIsRUFBRSxFQUFFO1FBQzVFLElBQUEsZUFBUSxHQUFFLENBQUE7UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxDQUFhLENBQUE7UUFDL0MsT0FBTyxDQUFDLEtBQUssSUFBSSxVQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzVELE9BQU8sSUFBQSxnQkFBTyxFQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBO0FBUFksUUFBQSxRQUFRLFlBT3BCIn0=
|
||||
1
packages/bot/commands/pdf2jpg.d.ts
vendored
Normal file
1
packages/bot/commands/pdf2jpg.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export declare const register: (cli: CLI.Argv) => any;
|
||||
53
packages/bot/commands/pdf2jpg.js
Normal file
53
packages/bot/commands/pdf2jpg.js
Normal file
@ -0,0 +1,53 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.register = void 0;
|
||||
const __1 = require("../");
|
||||
const path = require("path");
|
||||
const index_1 = require("../lib/process/index");
|
||||
const pMap = require("p-map");
|
||||
const fg = require('fast-glob');
|
||||
const defaultOptions = (yargs) => {
|
||||
return yargs.option('input', {
|
||||
default: './',
|
||||
describe: 'The sources'
|
||||
}).option('debug', {
|
||||
default: 'false',
|
||||
describe: 'Enable internal debug message'
|
||||
});
|
||||
};
|
||||
let options = (yargs) => defaultOptions(yargs);
|
||||
async function convertFiles(files) {
|
||||
return pMap(files, (file) => {
|
||||
const inParts = path.parse(file);
|
||||
// magick convert leg.pdf -quality 100 -density 250 -trim -flatten -resize 200% -sharpen 0x1.0 leg.jpg
|
||||
const promise = index_1.Helper.run(inParts.dir, 'convert', [
|
||||
`"${inParts.base}[0]"`,
|
||||
'-quality 80',
|
||||
'-density 250',
|
||||
'-trim',
|
||||
'-flatten',
|
||||
'-sharpen 0x1.0',
|
||||
`"${inParts.name}.jpg"`
|
||||
]);
|
||||
return promise;
|
||||
}, { concurrency: 1 });
|
||||
}
|
||||
// node ./build/main.js pdf2jpg --input=../drawings
|
||||
const register = (cli) => {
|
||||
return cli.command('pdf2jpg', '', options, async (argv) => {
|
||||
if (argv.help) {
|
||||
return;
|
||||
}
|
||||
const src = path.resolve('' + argv.input);
|
||||
if (argv.debug) {
|
||||
__1.logger.debug(`Begin convert PDF files${src}`);
|
||||
}
|
||||
const files = fg.sync('*.pdf|*.PDF', { dot: true, cwd: src, absolute: true });
|
||||
await convertFiles(files);
|
||||
if (argv.debug) {
|
||||
__1.logger.debug(`Converted ${files.length} files`);
|
||||
}
|
||||
});
|
||||
};
|
||||
exports.register = register;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmMmpwZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tYW5kcy9wZGYyanBnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJCQUE0QjtBQUM1Qiw2QkFBNEI7QUFDNUIsZ0RBQTZDO0FBQzdDLDhCQUE2QjtBQUU3QixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7QUFFL0IsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUN2QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ3pCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsUUFBUSxFQUFFLGFBQWE7S0FDMUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDZixPQUFPLEVBQUUsT0FBTztRQUNoQixRQUFRLEVBQUUsK0JBQStCO0tBQzVDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQztBQUVGLElBQUksT0FBTyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFekQsS0FBSyxVQUFVLFlBQVksQ0FBQyxLQUFLO0lBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1FBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsc0dBQXNHO1FBQ3RHLE1BQU0sT0FBTyxHQUFHLGNBQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQ2pEO1lBQ0ksSUFBSSxPQUFPLENBQUMsSUFBSSxNQUFNO1lBQ3RCLGFBQWE7WUFDYixjQUFjO1lBQ2QsT0FBTztZQUNQLFVBQVU7WUFDVixnQkFBZ0I7WUFDaEIsSUFBSSxPQUFPLENBQUMsSUFBSSxPQUFPO1NBQzFCLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUMsRUFBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxtREFBbUQ7QUFDNUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUN0QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQW1CLEVBQUUsRUFBRTtRQUNyRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLFVBQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFDRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5RSxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWixVQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7U0FDbkQ7SUFDTCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQWJZLFFBQUEsUUFBUSxZQWFwQiJ9
|
||||
1
packages/bot/commands/pdf2jpg.js.map
Normal file
1
packages/bot/commands/pdf2jpg.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"pdf2jpg.js","sourceRoot":"","sources":["../src/commands/pdf2jpg.ts"],"names":[],"mappings":";;;AACA,2BAA6B;AAC7B,6BAA6B;AAC7B,gDAA8C;AAC9C,qCAAqC;AAErC,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEhC,MAAM,cAAc,GAAG,CAAC,KAAe,EAAE,EAAE;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;QACzB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,aAAa;KAC1B,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;QACf,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,+BAA+B;KAC5C,CAAC,CAAA;AACN,CAAC,CAAC;AAEF,IAAI,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAEzD,KAAK,UAAU,YAAY,CAAC,KAAK;IAC7B,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,sGAAsG;QACtG,MAAM,OAAO,GAAG,cAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EACjD;YACI,IAAI,OAAO,CAAC,IAAI,MAAM;YACtB,aAAa;YACb,cAAc;YACd,OAAO;YACP,UAAU;YACV,gBAAgB;YAChB,IAAI,OAAO,CAAC,IAAI,OAAO;SAC1B,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACnB,CAAC,EAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,mDAAmD;AAC5C,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,EAAE;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAmB,EAAE,EAAE;QACrE,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO;SAAE;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,UAAM,CAAC,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;SACjD;QACD,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,UAAM,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;SACnD;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAbW,QAAA,QAAQ,YAanB"}
|
||||
2
packages/bot/commands/resize.d.ts
vendored
Normal file
2
packages/bot/commands/resize.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
export declare const defaultOptions: (yargs: CLI.Argv) => any;
|
||||
export declare const register: (cli: CLI.Argv) => any;
|
||||
71
packages/bot/commands/resize.js
Normal file
71
packages/bot/commands/resize.js
Normal file
@ -0,0 +1,71 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.register = exports.defaultOptions = void 0;
|
||||
const index_1 = require("../index");
|
||||
const resize_1 = require("../lib/media/images/resize");
|
||||
const _cli_1 = require("../_cli");
|
||||
const defaultOptions = (yargs) => {
|
||||
return yargs.option('src', {
|
||||
describe: 'FILE|FOLDER|GLOB',
|
||||
demandOption: true
|
||||
}).option('dst', {
|
||||
describe: 'FILE|FOLDER|GLOB'
|
||||
}).option('debug', {
|
||||
default: false,
|
||||
describe: 'Enable internal debug messages',
|
||||
type: 'boolean'
|
||||
}).option('alt', {
|
||||
default: false,
|
||||
describe: 'Use alternate tokenizer, & instead of $',
|
||||
type: 'boolean'
|
||||
}).option('dry', {
|
||||
default: false,
|
||||
describe: 'Run without conversion',
|
||||
type: 'boolean'
|
||||
}).option('verbose', {
|
||||
default: false,
|
||||
describe: 'Show internal messages',
|
||||
type: 'boolean'
|
||||
}).option('percent', {
|
||||
default: false,
|
||||
describe: 'Resize image with percent',
|
||||
type: 'number'
|
||||
}).option('width', {
|
||||
describe: 'Resize image with',
|
||||
type: 'number'
|
||||
}).option('height', {
|
||||
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'
|
||||
});
|
||||
};
|
||||
exports.defaultOptions = defaultOptions;
|
||||
let options = (yargs) => (0, exports.defaultOptions)(yargs);
|
||||
const register = (cli) => {
|
||||
return cli.command('resize', 'Resizes files', options, async (argv) => {
|
||||
(0, _cli_1.defaults)();
|
||||
const options = (0, _cli_1.sanitize)(argv);
|
||||
index_1.logger.setSettings({
|
||||
minLevel: options.logLevel
|
||||
});
|
||||
index_1.logger.info("options " + argv.dst, options);
|
||||
await (0, resize_1.resize)(options);
|
||||
});
|
||||
};
|
||||
exports.register = register;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1hbmRzL3Jlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxvQ0FBaUM7QUFDakMsdURBRW1DO0FBRW5DLGtDQUdnQjtBQU1ULE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDOUMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUN2QixRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLFlBQVksRUFBRSxJQUFJO0tBQ3JCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsUUFBUSxFQUFFLGtCQUFrQjtLQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNmLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLGdDQUFnQztRQUMxQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNiLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHlDQUF5QztRQUNuRCxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNiLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNqQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSx3QkFBd0I7UUFDbEMsSUFBSSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7UUFDakIsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsMkJBQTJCO1FBQ3JDLElBQUksRUFBRSxRQUFRO0tBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QixJQUFJLEVBQUUsUUFBUTtLQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUNoQixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLElBQUksRUFBRSxRQUFRO0tBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1FBQ25CLFFBQVEsRUFBRSw2QkFBNkI7UUFDdkMsSUFBSSxFQUFFLFFBQVE7S0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDbEIsUUFBUSxFQUFFLDRCQUE0QjtRQUN0QyxJQUFJLEVBQUUsUUFBUTtLQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNqQixRQUFRLEVBQUUsMkJBQTJCO1FBQ3JDLElBQUksRUFBRSxRQUFRO0tBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ2pCLFFBQVEsRUFBRSxpQ0FBaUM7UUFDM0MsSUFBSSxFQUFFLFFBQVE7S0FDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDbEIsUUFBUSxFQUFFLHNDQUFzQztRQUNoRCxJQUFJLEVBQUUsUUFBUTtRQUNkLE9BQU8sRUFBRSxNQUFNO0tBQ2xCLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQWpEWSxRQUFBLGNBQWMsa0JBaUQxQjtBQUVELElBQUksT0FBTyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxJQUFBLHNCQUFjLEVBQUMsS0FBSyxDQUFDLENBQUE7QUFFakQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUN0QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQW1CLEVBQUUsRUFBRTtRQUNqRixJQUFBLGVBQVEsR0FBRSxDQUFBO1FBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBQSxlQUFRLEVBQUMsSUFBSSxDQUFhLENBQUE7UUFDMUMsY0FBTSxDQUFDLFdBQVcsQ0FBQztZQUNmLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBZTtTQUNwQyxDQUFDLENBQUE7UUFDRixjQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzNDLE1BQU0sSUFBQSxlQUFNLEVBQUMsT0FBTyxDQUFDLENBQUE7SUFDekIsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUFWWSxRQUFBLFFBQVEsWUFVcEIifQ==
|
||||
1
packages/bot/commands/svg2jpg.d.ts
vendored
Normal file
1
packages/bot/commands/svg2jpg.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export declare const register: (cli: CLI.Argv) => any;
|
||||
49
packages/bot/commands/svg2jpg.js
Normal file
49
packages/bot/commands/svg2jpg.js
Normal file
@ -0,0 +1,49 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.register = void 0;
|
||||
const debug_1 = require("@plastichub/core/debug");
|
||||
const path = require("path");
|
||||
const index_1 = require("../lib/process/index");
|
||||
const bluebird = require("bluebird");
|
||||
const fg = require('fast-glob');
|
||||
const defaultOptions = (yargs) => {
|
||||
return yargs.option('input', {
|
||||
default: './',
|
||||
describe: 'The sources'
|
||||
}).option('debug', {
|
||||
default: 'false',
|
||||
describe: 'Enable internal debug message'
|
||||
});
|
||||
};
|
||||
let options = (yargs) => defaultOptions(yargs);
|
||||
async function convertFiles(files) {
|
||||
return bluebird.mapSeries(files, (file) => {
|
||||
const inParts = path.parse(file);
|
||||
const promise = index_1.Helper.run(inParts.dir, 'convert', [
|
||||
`"${inParts.base}"`,
|
||||
'-quality 40',
|
||||
'-sharpen 0x1.0',
|
||||
`"${inParts.name}.jpg"`
|
||||
]);
|
||||
return promise;
|
||||
});
|
||||
}
|
||||
//node ./build/main.js svg2jpg --input=../tests/svg/
|
||||
const register = (cli) => {
|
||||
return cli.command('svg2jpg', '', options, async (argv) => {
|
||||
if (argv.help) {
|
||||
return;
|
||||
}
|
||||
const src = path.resolve('' + argv.input);
|
||||
const files = fg.sync('*.svg|*.SVG', { dot: true, cwd: src, absolute: true });
|
||||
if (argv.debug) {
|
||||
(0, debug_1.debug)(`Begin convert SVG files at ${src} ${files}`);
|
||||
}
|
||||
await convertFiles(files);
|
||||
if (argv.debug) {
|
||||
(0, debug_1.debug)(`Converted ${files.length} files`);
|
||||
}
|
||||
});
|
||||
};
|
||||
exports.register = register;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnMmpwZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tYW5kcy9zdmcyanBnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGtEQUE4QztBQUM5Qyw2QkFBNkI7QUFDN0IsZ0RBQThDO0FBQzlDLHFDQUFxQztBQUVyQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFaEMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUN2QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ3pCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsUUFBUSxFQUFFLGFBQWE7S0FDMUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDZixPQUFPLEVBQUUsT0FBTztRQUNoQixRQUFRLEVBQUUsK0JBQStCO0tBQzVDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQztBQUVGLElBQUksT0FBTyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFekQsS0FBSyxVQUFVLFlBQVksQ0FBQyxLQUFLO0lBQzdCLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLGNBQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQ2pEO1lBQ0ksSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHO1lBQ25CLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsSUFBSSxPQUFPLENBQUMsSUFBSSxPQUFPO1NBQzFCLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNELG9EQUFvRDtBQUU3QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUFFLE9BQU87U0FBRTtRQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBQSxhQUFLLEVBQUMsOEJBQThCLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBQSxhQUFLLEVBQUMsYUFBYSxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBYlcsUUFBQSxRQUFRLFlBYW5CIn0=
|
||||
1
packages/bot/commands/svg2jpg.js.map
Normal file
1
packages/bot/commands/svg2jpg.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"svg2jpg.js","sourceRoot":"","sources":["../src/commands/svg2jpg.ts"],"names":[],"mappings":";;;AACA,kDAA8C;AAC9C,6BAA6B;AAC7B,gDAA8C;AAC9C,qCAAqC;AAErC,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEhC,MAAM,cAAc,GAAG,CAAC,KAAe,EAAE,EAAE;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;QACzB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,aAAa;KAC1B,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;QACf,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,+BAA+B;KAC5C,CAAC,CAAA;AACN,CAAC,CAAC;AAEF,IAAI,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAEzD,KAAK,UAAU,YAAY,CAAC,KAAK;IAC7B,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,cAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EACjD;YACI,IAAI,OAAO,CAAC,IAAI,GAAG;YACnB,aAAa;YACb,gBAAgB;YAChB,IAAI,OAAO,CAAC,IAAI,OAAO;SAC1B,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACnB,CAAC,CAAC,CAAC;AACP,CAAC;AACD,oDAAoD;AAE7C,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,EAAE;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAmB,EAAE,EAAE;QACrE,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO;SAAE;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAA,aAAK,EAAC,8BAA8B,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;SACvD;QACD,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAA,aAAK,EAAC,aAAa,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;SAC5C;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAbW,QAAA,QAAQ,YAanB"}
|
||||
2
packages/bot/commands/video.d.ts
vendored
Normal file
2
packages/bot/commands/video.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
export declare const defaultOptions: (yargs: CLI.Argv) => any;
|
||||
export declare const register: (cli: CLI.Argv) => any;
|
||||
39
packages/bot/commands/video.js
Normal file
39
packages/bot/commands/video.js
Normal file
@ -0,0 +1,39 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.register = exports.defaultOptions = void 0;
|
||||
const __1 = require("../");
|
||||
const video_1 = require("../lib/media/video");
|
||||
const _cli_1 = require("../_cli");
|
||||
const defaultOptions = (yargs) => {
|
||||
return yargs.option('src', {
|
||||
describe: 'FILE|FOLDER|GLOB',
|
||||
demandOption: true
|
||||
}).option('dst', {
|
||||
describe: 'FILE|FOLDER|GLOB'
|
||||
}).option('debug', {
|
||||
default: false,
|
||||
describe: 'Enable internal debug messages',
|
||||
type: 'boolean'
|
||||
}).option('alt', {
|
||||
default: false,
|
||||
describe: 'Use alternate tokenizer, & instead of $',
|
||||
type: 'boolean'
|
||||
});
|
||||
};
|
||||
exports.defaultOptions = defaultOptions;
|
||||
let options = (yargs) => (0, exports.defaultOptions)(yargs);
|
||||
const register = (cli) => {
|
||||
return cli.command('video <verb>', 'Convert video', options, async (argv) => {
|
||||
(0, _cli_1.defaults)();
|
||||
const options = (0, _cli_1.sanitizeVideo)(argv);
|
||||
__1.logger.info("options " + argv.dst, options);
|
||||
if (options.verb == 'convert') {
|
||||
return (0, video_1.convert)(options);
|
||||
}
|
||||
if (options.verb == 'merge') {
|
||||
return (0, video_1.merge)(options);
|
||||
}
|
||||
});
|
||||
};
|
||||
exports.register = register;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29tbWFuZHMvdmlkZW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkJBQTRCO0FBQzVCLDhDQUFtRDtBQUNuRCxrQ0FBaUQ7QUFHMUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM5QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDYixRQUFRLEVBQUUsa0JBQWtCO0tBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2IsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQWZZLFFBQUEsY0FBYyxrQkFlMUI7QUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsSUFBQSxzQkFBYyxFQUFDLEtBQUssQ0FBQyxDQUFBO0FBRWpELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFtQixFQUFFLEVBQUU7UUFDdkYsSUFBQSxlQUFRLEdBQUUsQ0FBQTtRQUNWLE1BQU0sT0FBTyxHQUFHLElBQUEsb0JBQWEsRUFBQyxJQUFJLENBQXlCLENBQUE7UUFDM0QsVUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMzQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFO1lBQzNCLE9BQU8sSUFBQSxlQUFPLEVBQUMsT0FBTyxDQUFDLENBQUE7U0FDMUI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFO1lBQ3pCLE9BQU8sSUFBQSxhQUFLLEVBQUMsT0FBTyxDQUFRLENBQUE7U0FDL0I7SUFDTCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQVpZLFFBQUEsUUFBUSxZQVlwQiJ9
|
||||
2
packages/bot/commands/watermark.d.ts
vendored
Normal file
2
packages/bot/commands/watermark.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
export declare const defaultOptions: (yargs: CLI.Argv) => any;
|
||||
export declare const register: (cli: CLI.Argv) => any;
|
||||
75
packages/bot/commands/watermark.js
Normal file
75
packages/bot/commands/watermark.js
Normal file
@ -0,0 +1,75 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.register = exports.defaultOptions = void 0;
|
||||
const commons_1 = require("@polymech/commons");
|
||||
const index_1 = require("../index");
|
||||
const images_1 = require("../lib/media/images");
|
||||
const _cli_1 = require("../_cli");
|
||||
const defaultOptions = (yargs) => {
|
||||
return yargs.option('src', {
|
||||
describe: 'FILE|FOLDER|GLOB',
|
||||
demandOption: true
|
||||
}).option('dst', {
|
||||
describe: 'FILE|FOLDER|GLOB'
|
||||
}).option('debug', {
|
||||
default: false,
|
||||
describe: 'Enable internal debug messages',
|
||||
type: 'boolean'
|
||||
}).option('alt', {
|
||||
default: false,
|
||||
describe: 'Use alternate tokenizer, & instead of $',
|
||||
type: 'boolean'
|
||||
}).option('dry', {
|
||||
default: false,
|
||||
describe: 'Run without conversion',
|
||||
type: 'boolean'
|
||||
}).option('verbose', {
|
||||
default: false,
|
||||
describe: 'Show internal messages',
|
||||
type: 'boolean'
|
||||
}).option('percent', {
|
||||
default: false,
|
||||
describe: 'Resize image with percent',
|
||||
type: 'number'
|
||||
}).option('width', {
|
||||
default: false,
|
||||
describe: 'Resize image with',
|
||||
type: 'number'
|
||||
}).option('height', {
|
||||
default: false,
|
||||
describe: 'Resize image height',
|
||||
type: 'number'
|
||||
}).option('minHeight', {
|
||||
describe: 'Resize image minimum height',
|
||||
type: 'number'
|
||||
}).option('minWidth', {
|
||||
describe: 'Resize image minimum width',
|
||||
type: 'number'
|
||||
}).option('minSize', {
|
||||
describe: 'Resize image size (bytes)',
|
||||
type: 'number'
|
||||
}).option('percent', {
|
||||
describe: 'Resize image in percent (width)',
|
||||
type: 'number'
|
||||
}).option('key', {
|
||||
describe: 'API Key',
|
||||
type: 'string'
|
||||
});
|
||||
};
|
||||
exports.defaultOptions = defaultOptions;
|
||||
const options = (yargs) => (0, exports.defaultOptions)(yargs);
|
||||
const register = (cli) => {
|
||||
return cli.command('watermark', 'Remove watermark : FILE|GLOB', options, async (argv) => {
|
||||
(0, _cli_1.defaults)();
|
||||
const options = (0, _cli_1.sanitize)(argv);
|
||||
const config = (0, commons_1.CONFIG_DEFAULT)();
|
||||
if (!config.novita) {
|
||||
index_1.logger.error("Novita key not found");
|
||||
return;
|
||||
}
|
||||
options.debug && index_1.logger.info("Watermark Options " + argv.dst, options);
|
||||
return (0, images_1.watermark)({ ...options, key: config.novita.key });
|
||||
});
|
||||
};
|
||||
exports.register = register;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0ZXJtYXJrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1hbmRzL3dhdGVybWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBa0Q7QUFFbEQsb0NBQWlDO0FBQ2pDLGdEQUU0QjtBQUU1QixrQ0FHZ0I7QUFNVCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFO0lBQ2hELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDekIsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNmLFFBQVEsRUFBRSxrQkFBa0I7S0FDN0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7UUFDakIsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUseUNBQXlDO1FBQ25ELElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ25CLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNuQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSwyQkFBMkI7UUFDckMsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNqQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUNsQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxxQkFBcUI7UUFDL0IsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtRQUNyQixRQUFRLEVBQUUsNkJBQTZCO1FBQ3ZDLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDcEIsUUFBUSxFQUFFLDRCQUE0QjtRQUN0QyxJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1FBQ25CLFFBQVEsRUFBRSwyQkFBMkI7UUFDckMsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUNuQixRQUFRLEVBQUUsaUNBQWlDO1FBQzNDLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDZixRQUFRLEVBQUUsU0FBUztRQUNuQixJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQWxEWSxRQUFBLGNBQWMsa0JBa0QxQjtBQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxJQUFBLHNCQUFjLEVBQUMsS0FBSyxDQUFDLENBQUE7QUFFbkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUN4QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLDhCQUE4QixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBbUIsRUFBRSxFQUFFO1FBQ3JHLElBQUEsZUFBUSxHQUFFLENBQUE7UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFBLGVBQVEsRUFBQyxJQUFJLENBQWEsQ0FBQTtRQUMxQyxNQUFNLE1BQU0sR0FBUSxJQUFBLHdCQUFjLEdBQUUsQ0FBQTtRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNsQixjQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDckMsT0FBTTtTQUNQO1FBQ0QsT0FBTyxDQUFDLEtBQUssSUFBSSxjQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdEUsT0FBTyxJQUFBLGtCQUFTLEVBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQzFELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBWlksUUFBQSxRQUFRLFlBWXBCIn0=
|
||||
1
packages/bot/dist-in/_cli.d.ts
vendored
Normal file
1
packages/bot/dist-in/_cli.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export declare const defaults: () => void;
|
||||
10
packages/bot/dist-in/_cli.js
Normal file
10
packages/bot/dist-in/_cli.js
Normal file
@ -0,0 +1,10 @@
|
||||
export const defaults = () => {
|
||||
const DefaultCommand = 'info';
|
||||
if (process.argv.length === 2) {
|
||||
process.argv.push(DefaultCommand);
|
||||
}
|
||||
process.on('unhandledRejection', (reason) => {
|
||||
console.error('Unhandled rejection, reason: ', reason);
|
||||
});
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9fY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7SUFDekIsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0lBQzlCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELE9BQU8sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNoRCxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzFELENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBIn0=
|
||||
1
packages/bot/dist-in/cli.d.ts
vendored
Normal file
1
packages/bot/dist-in/cli.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export declare const cli: any;
|
||||
4
packages/bot/dist-in/cli.js
Normal file
4
packages/bot/dist-in/cli.js
Normal file
@ -0,0 +1,4 @@
|
||||
import yargs from 'yargs';
|
||||
import { hideBin } from 'yargs/helpers';
|
||||
export const cli = yargs(hideBin(process.argv));
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV2QyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSJ9
|
||||
1
packages/bot/dist-in/commands/bazar/crawlerBazar.d.ts
vendored
Normal file
1
packages/bot/dist-in/commands/bazar/crawlerBazar.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export declare function crawler(url: string, dst: any, prefix: any, options?: any): Promise<void>;
|
||||
271
packages/bot/dist-in/commands/bazar/crawlerBazar.js
Normal file
271
packages/bot/dist-in/commands/bazar/crawlerBazar.js
Normal file
File diff suppressed because one or more lines are too long
2
packages/bot/dist-in/commands/bazar/downloadBazar.d.ts
vendored
Normal file
2
packages/bot/dist-in/commands/bazar/downloadBazar.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
import * as CLI from 'yargs';
|
||||
export declare const register: (cli: CLI.Argv) => any;
|
||||
194
packages/bot/dist-in/commands/bazar/downloadBazar.js
Normal file
194
packages/bot/dist-in/commands/bazar/downloadBazar.js
Normal file
File diff suppressed because one or more lines are too long
6
packages/bot/dist-in/commands/bazar/lib.d.ts
vendored
Normal file
6
packages/bot/dist-in/commands/bazar/lib.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
export declare const bazar_root = "${OSR_ROOT}/pp-bazar/${YYYY}/${MM}";
|
||||
export declare const bazar_root_path: (file?: string) => string;
|
||||
export declare const regexEx: RegExp;
|
||||
export declare const remo: (f: any) => any;
|
||||
export declare const removeEmojis: (string: any) => any;
|
||||
export declare const removeEmojisEx: (str: string) => string;
|
||||
16
packages/bot/dist-in/commands/bazar/lib.js
Normal file
16
packages/bot/dist-in/commands/bazar/lib.js
Normal file
File diff suppressed because one or more lines are too long
5
packages/bot/dist-in/constants.d.ts
vendored
Normal file
5
packages/bot/dist-in/constants.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
export declare const GIT_REPO = "https://git.osr-plastic.org/osr-plastic/";
|
||||
export declare const MODULE_NAME = "OSR-MEDIA";
|
||||
export declare const PACKAGE_NAME = "osr-media";
|
||||
export declare const ERR_PERM_RETRY_DELAY = 500;
|
||||
export declare const ERR_PERM_RETRY_MAX = 5;
|
||||
6
packages/bot/dist-in/constants.js
Normal file
6
packages/bot/dist-in/constants.js
Normal file
@ -0,0 +1,6 @@
|
||||
export const GIT_REPO = 'https://git.osr-plastic.org/osr-plastic/';
|
||||
export const MODULE_NAME = `OSR-MEDIA`;
|
||||
export const PACKAGE_NAME = 'osr-media';
|
||||
export const ERR_PERM_RETRY_DELAY = 500;
|
||||
export const ERR_PERM_RETRY_MAX = 5;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsMENBQTBDLENBQUE7QUFDbEUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQTtBQUN2QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUEifQ==
|
||||
4
packages/bot/dist-in/index.d.ts
vendored
Normal file
4
packages/bot/dist-in/index.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
export * from './constants.js';
|
||||
export * from './types.js';
|
||||
import { Logger, ILogObj } from 'tslog';
|
||||
export declare const logger: Logger<ILogObj>;
|
||||
6
packages/bot/dist-in/index.js
Normal file
6
packages/bot/dist-in/index.js
Normal file
@ -0,0 +1,6 @@
|
||||
export * from './constants.js';
|
||||
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
|
||||
2
packages/bot/dist-in/main.d.ts
vendored
Normal file
2
packages/bot/dist-in/main.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env node
|
||||
export {};
|
||||
15
packages/bot/dist-in/main.js
Normal file
15
packages/bot/dist-in/main.js
Normal file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env node
|
||||
import { defaults } from './_cli.js';
|
||||
defaults();
|
||||
import { cli } from './cli.js';
|
||||
import { register as registerBazarDownload } from './commands/bazar/downloadBazar.js';
|
||||
registerBazarDownload(cli);
|
||||
const argv = cli.argv;
|
||||
if (argv.h || argv.help) {
|
||||
cli.showHelp();
|
||||
process.exit();
|
||||
}
|
||||
else if (argv.v || argv.version) {
|
||||
process.exit();
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQUMsUUFBUSxFQUFFLENBQUE7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUM5QixPQUFPLEVBQUUsUUFBUSxJQUFJLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDckYscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUE7QUFFMUIsTUFBTSxJQUFJLEdBQVEsR0FBRyxDQUFDLElBQUksQ0FBQztBQUUzQixJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNmLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuQixDQUFDO0tBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkIsQ0FBQyJ9
|
||||
20
packages/bot/dist-in/types.d.ts
vendored
Normal file
20
packages/bot/dist-in/types.d.ts
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
import { PATH_INFO } from '@polymech/commons';
|
||||
export type IOptions = {
|
||||
alt?: boolean;
|
||||
config?: any;
|
||||
cwd?: string;
|
||||
root?: string;
|
||||
debug?: boolean;
|
||||
verbose?: boolean;
|
||||
dry?: boolean;
|
||||
dst: string;
|
||||
dstInfo?: PATH_INFO;
|
||||
env?: string;
|
||||
cache?: boolean;
|
||||
src: string;
|
||||
srcInfo?: PATH_INFO;
|
||||
stdout?: boolean;
|
||||
variables?: Record<string, string>;
|
||||
key?: string;
|
||||
logLevel?: string;
|
||||
};
|
||||
2
packages/bot/dist-in/types.js
Normal file
2
packages/bot/dist-in/types.js
Normal file
@ -0,0 +1,2 @@
|
||||
export {};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
||||
1
packages/bot/fs_err
Normal file
1
packages/bot/fs_err
Normal file
@ -0,0 +1 @@
|
||||
mock-png-data
|
||||
23
packages/bot/integration/salamand/custom_menu_sample.reg
Normal file
23
packages/bot/integration/salamand/custom_menu_sample.reg
Normal file
@ -0,0 +1,23 @@
|
||||
[HKEY_CURRENT_USER\Software\Altap\Altap Salamander 4.0\User Menu\26]
|
||||
"Item Name"="OSR-Media"
|
||||
"Command"=""
|
||||
"Arguments"=""
|
||||
"Initial Directory"=""
|
||||
"Execute Through Shell"=dword:00000000
|
||||
"Close Shell Window"=dword:00000000
|
||||
"Open Shell Window"=dword:00000000
|
||||
"Icon"=""
|
||||
"Type"=dword:00000001
|
||||
"Show In Toolbar"=dword:00000001
|
||||
|
||||
[HKEY_CURRENT_USER\Software\Altap\Altap Salamander 4.0\User Menu\27]
|
||||
"Item Name"="Resize-Images-1980"
|
||||
"Command"="osr-media"
|
||||
"Arguments"="resize --minWidth=1900 --width=1980 --alt=true --verbose=true --debug=true --src=\"$(FullName)/**/*.+(&{IMAGES})\""
|
||||
"Initial Directory"="$(FullPath)"
|
||||
"Execute Through Shell"=dword:00000001
|
||||
"Close Shell Window"=dword:00000000
|
||||
"Open Shell Window"=dword:00000001
|
||||
"Icon"=""
|
||||
"Type"=dword:00000000
|
||||
"Show In Toolbar"=dword:00000001
|
||||
14
packages/bot/lib/common/array.d.ts
vendored
Normal file
14
packages/bot/lib/common/array.d.ts
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Return last element
|
||||
* @private
|
||||
* @param {(Array<any>)} array
|
||||
* @returns object | undefined
|
||||
*/
|
||||
export declare const lastOf: (array: Array<any>) => any;
|
||||
/**
|
||||
* Return first element
|
||||
* @private
|
||||
* @param {(Array<any>)} array
|
||||
* @returns object | undefined
|
||||
*/
|
||||
export declare const firstOf: (array: Array<any>) => any;
|
||||
20
packages/bot/lib/common/array.js
Normal file
20
packages/bot/lib/common/array.js
Normal file
@ -0,0 +1,20 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.firstOf = exports.lastOf = void 0;
|
||||
/**
|
||||
* Return last element
|
||||
* @private
|
||||
* @param {(Array<any>)} array
|
||||
* @returns object | undefined
|
||||
*/
|
||||
const lastOf = (array) => array[array.length - 1];
|
||||
exports.lastOf = lastOf;
|
||||
/**
|
||||
* Return first element
|
||||
* @private
|
||||
* @param {(Array<any>)} array
|
||||
* @returns object | undefined
|
||||
*/
|
||||
const firstOf = (array) => array[0];
|
||||
exports.firstOf = firstOf;
|
||||
//# sourceMappingURL=array.js.map
|
||||
1
packages/bot/lib/common/array.js.map
Normal file
1
packages/bot/lib/common/array.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/lib/common/array.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAAxD,QAAA,MAAM,UAAkD;AAErE;;;;;GAKG;AACI,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAA1C,QAAA,OAAO,WAAmC"}
|
||||
50
packages/bot/lib/common/enums.d.ts
vendored
Normal file
50
packages/bot/lib/common/enums.d.ts
vendored
Normal file
@ -0,0 +1,50 @@
|
||||
export declare const EVENTS: {};
|
||||
export declare enum COMMANDS {
|
||||
RUN_FILE = "Run_File",
|
||||
RUN_CLASS = "Run_Class",
|
||||
RUN_APP_SERVER_CLASS = "Run_App_Server_Class",
|
||||
RUN_APP_SERVER_CLASS_METHOD = "Run_App_Server_Class_Method",
|
||||
RUN_APP_SERVER_COMPONENT_METHOD = "Run_App_Server_Component_Method",
|
||||
CANCEL_APP_SERVER_COMPONENT_METHOD = "Cancel_App_Server_Component_Method",
|
||||
ANSWER_APP_SERVER_COMPONENT_METHOD_INTERRUPT = "Answer_App_Server_Component_Method_Interrupt"
|
||||
}
|
||||
export declare enum LOGGING_SIGNAL {
|
||||
}
|
||||
export declare enum LOGGING_FLAGS {
|
||||
/**
|
||||
* No logging
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
NONE = 0,
|
||||
/**
|
||||
* Log in the IDE's global console
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
GLOBAL_CONSOLE = 1,
|
||||
/**
|
||||
* Log in the IDE's status bar
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
STATUS_BAR = 2,
|
||||
/**
|
||||
* Create notification popup in the IDE
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
POPUP = 4,
|
||||
/**
|
||||
* Log to file
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
FILE = 8,
|
||||
/**
|
||||
* Log into the IDE's dev tool's console
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
DEV_CONSOLE = 16
|
||||
}
|
||||
59
packages/bot/lib/common/enums.js
Normal file
59
packages/bot/lib/common/enums.js
Normal file
@ -0,0 +1,59 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.LOGGING_FLAGS = exports.LOGGING_SIGNAL = exports.COMMANDS = exports.EVENTS = void 0;
|
||||
exports.EVENTS = {};
|
||||
var COMMANDS;
|
||||
(function (COMMANDS) {
|
||||
COMMANDS["RUN_FILE"] = "Run_File";
|
||||
COMMANDS["RUN_CLASS"] = "Run_Class";
|
||||
COMMANDS["RUN_APP_SERVER_CLASS"] = "Run_App_Server_Class";
|
||||
COMMANDS["RUN_APP_SERVER_CLASS_METHOD"] = "Run_App_Server_Class_Method";
|
||||
COMMANDS["RUN_APP_SERVER_COMPONENT_METHOD"] = "Run_App_Server_Component_Method";
|
||||
COMMANDS["CANCEL_APP_SERVER_COMPONENT_METHOD"] = "Cancel_App_Server_Component_Method";
|
||||
COMMANDS["ANSWER_APP_SERVER_COMPONENT_METHOD_INTERRUPT"] = "Answer_App_Server_Component_Method_Interrupt";
|
||||
})(COMMANDS = exports.COMMANDS || (exports.COMMANDS = {}));
|
||||
var LOGGING_SIGNAL;
|
||||
(function (LOGGING_SIGNAL) {
|
||||
})(LOGGING_SIGNAL = exports.LOGGING_SIGNAL || (exports.LOGGING_SIGNAL = {}));
|
||||
;
|
||||
var LOGGING_FLAGS;
|
||||
(function (LOGGING_FLAGS) {
|
||||
/**
|
||||
* No logging
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
LOGGING_FLAGS[LOGGING_FLAGS["NONE"] = 0] = "NONE";
|
||||
/**
|
||||
* Log in the IDE's global console
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
LOGGING_FLAGS[LOGGING_FLAGS["GLOBAL_CONSOLE"] = 1] = "GLOBAL_CONSOLE";
|
||||
/**
|
||||
* Log in the IDE's status bar
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
LOGGING_FLAGS[LOGGING_FLAGS["STATUS_BAR"] = 2] = "STATUS_BAR";
|
||||
/**
|
||||
* Create notification popup in the IDE
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
LOGGING_FLAGS[LOGGING_FLAGS["POPUP"] = 4] = "POPUP";
|
||||
/**
|
||||
* Log to file
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
LOGGING_FLAGS[LOGGING_FLAGS["FILE"] = 8] = "FILE";
|
||||
/**
|
||||
* Log into the IDE's dev tool's console
|
||||
* @constant
|
||||
* @type int
|
||||
*/
|
||||
LOGGING_FLAGS[LOGGING_FLAGS["DEV_CONSOLE"] = 16] = "DEV_CONSOLE";
|
||||
})(LOGGING_FLAGS = exports.LOGGING_FLAGS || (exports.LOGGING_FLAGS = {}));
|
||||
;
|
||||
//# sourceMappingURL=enums.js.map
|
||||
1
packages/bot/lib/common/enums.js.map
Normal file
1
packages/bot/lib/common/enums.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/lib/common/enums.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,EAErB,CAAC;AAEF,IAAY,QAQX;AARD,WAAY,QAAQ;IAChB,iCAAqB,CAAA;IACrB,mCAAuB,CAAA;IACvB,yDAA6C,CAAA;IAC7C,uEAA2D,CAAA;IAC3D,+EAAmE,CAAA;IACnE,qFAAyE,CAAA;IACzE,yGAA6F,CAAA;AACjG,CAAC,EARW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAQnB;AAED,IAAY,cACX;AADD,WAAY,cAAc;AAC1B,CAAC,EADW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QACzB;AAAA,CAAC;AAEF,IAAY,aAqCX;AArCD,WAAY,aAAa;IACrB;;;;OAIG;IACH,iDAAiB,CAAA;IACjB;;;;OAIG;IACH,qEAA2B,CAAA;IAC3B;;;;OAIG;IACH,6DAAuB,CAAA;IACvB;;;;OAIG;IACH,mDAAkB,CAAA;IAClB;;;;OAIG;IACH,iDAAiB,CAAA;IACjB;;;;OAIG;IACH,gEAAwB,CAAA;AAC5B,CAAC,EArCW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAqCxB;AAAA,CAAC"}
|
||||
1
packages/bot/lib/common/platform.d.ts
vendored
Normal file
1
packages/bot/lib/common/platform.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export declare const os: () => "linux" | "windows" | "osx" | "arm";
|
||||
18
packages/bot/lib/common/platform.js
Normal file
18
packages/bot/lib/common/platform.js
Normal file
@ -0,0 +1,18 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.os = void 0;
|
||||
const os_1 = require("os");
|
||||
const os = () => {
|
||||
if ((0, os_1.platform)() === 'win32') {
|
||||
return 'windows';
|
||||
}
|
||||
else if ((0, os_1.platform)() === 'darwin') {
|
||||
return 'osx';
|
||||
}
|
||||
else if ((0, os_1.arch)() === 'arm') {
|
||||
return 'arm';
|
||||
}
|
||||
return 'linux';
|
||||
};
|
||||
exports.os = os;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2NvbW1vbi9wbGF0Zm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQkFBb0M7QUFFN0IsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFO0lBQ3JCLElBQUksSUFBQSxhQUFRLEdBQUUsS0FBSyxPQUFPLEVBQUU7UUFDMUIsT0FBTyxTQUFTLENBQUM7S0FDbEI7U0FBTSxJQUFJLElBQUEsYUFBUSxHQUFFLEtBQUssUUFBUSxFQUFFO1FBQ2xDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7U0FBTSxJQUFJLElBQUEsU0FBSSxHQUFFLEtBQUssS0FBSyxFQUFFO1FBQzNCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUE7QUFUWSxRQUFBLEVBQUUsTUFTZCJ9
|
||||
1
packages/bot/lib/common/platform.js.map
Normal file
1
packages/bot/lib/common/platform.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/lib/common/platform.ts"],"names":[],"mappings":";;;AAAA,2BAAoC;AAE7B,MAAM,EAAE,GAAG,GAAG,EAAE;IACrB,IAAI,IAAA,aAAQ,GAAE,KAAK,OAAO,EAAE;QAC1B,OAAO,SAAS,CAAC;KAClB;SAAM,IAAI,IAAA,aAAQ,GAAE,KAAK,QAAQ,EAAE;QAClC,OAAO,KAAK,CAAC;KACd;SAAM,IAAI,IAAA,SAAI,GAAE,KAAK,KAAK,EAAE;QAC3B,OAAO,KAAK,CAAC;KACd;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAA;AATY,QAAA,EAAE,MASd"}
|
||||
105
packages/bot/lib/common/primitives.d.ts
vendored
Normal file
105
packages/bot/lib/common/primitives.d.ts
vendored
Normal file
@ -0,0 +1,105 @@
|
||||
/**
|
||||
* @returns whether the provided parameter is a JavaScript Array or not.
|
||||
*/
|
||||
export declare function isArray(array: any): array is any[];
|
||||
/**
|
||||
* @returns whether the provided parameter is a JavaScript String or not.
|
||||
*/
|
||||
export declare function isString(str: any): str is string;
|
||||
/**
|
||||
* @returns whether the provided parameter is a JavaScript Array and each element in the array is a string.
|
||||
*/
|
||||
export declare function isStringArray(value: any): value is string[];
|
||||
/**
|
||||
*
|
||||
* @returns whether the provided parameter is of type `object` but **not**
|
||||
* `null`, an `array`, a `regexp`, nor a `date`.
|
||||
*/
|
||||
export declare function isObject(obj: any): boolean;
|
||||
/**
|
||||
* In **contrast** to just checking `typeof` this will return `false` for `NaN`.
|
||||
* @returns whether the provided parameter is a JavaScript Number or not.
|
||||
*/
|
||||
export declare function isNumber(obj: any): obj is number;
|
||||
/**
|
||||
* @returns whether the provided parameter is a JavaScript Boolean or not.
|
||||
*/
|
||||
export declare function isBoolean(obj: any): obj is boolean;
|
||||
/**
|
||||
* @returns whether the provided parameter is undefined.
|
||||
*/
|
||||
export declare function isUndefined(obj: any): boolean;
|
||||
/**
|
||||
* @returns whether the provided parameter is undefined or null.
|
||||
*/
|
||||
export declare function isUndefinedOrNull(obj: any): boolean;
|
||||
/**
|
||||
* @returns whether the provided parameter is an empty JavaScript Object or not.
|
||||
*/
|
||||
export declare function isEmptyObject(obj: any): obj is any;
|
||||
/**
|
||||
* @returns whether the provided parameter is a JavaScript Function or not.
|
||||
*/
|
||||
export declare function isFunction(obj: any): obj is Function;
|
||||
/**
|
||||
* @returns whether the provided parameters is are JavaScript Function or not.
|
||||
*/
|
||||
export declare function areFunctions(...objects: any[]): boolean;
|
||||
export declare type TypeConstraint = string | Function;
|
||||
export declare function validateConstraints(args: any[], constraints: TypeConstraint[]): void;
|
||||
export declare function validateConstraint(arg: any, constraint: TypeConstraint): void;
|
||||
/**
|
||||
* Creates a new object of the provided class and will call the constructor with
|
||||
* any additional argument supplied.
|
||||
*/
|
||||
export declare function create(ctor: Function, ...args: any[]): any;
|
||||
export interface IFunction0<T> {
|
||||
(): T;
|
||||
}
|
||||
export interface IFunction1<A1, T> {
|
||||
(a1: A1): T;
|
||||
}
|
||||
export interface IFunction2<A1, A2, T> {
|
||||
(a1: A1, a2: A2): T;
|
||||
}
|
||||
export interface IFunction3<A1, A2, A3, T> {
|
||||
(a1: A1, a2: A2, a3: A3): T;
|
||||
}
|
||||
export interface IFunction4<A1, A2, A3, A4, T> {
|
||||
(a1: A1, a2: A2, a3: A3, a4: A4): T;
|
||||
}
|
||||
export interface IFunction5<A1, A2, A3, A4, A5, T> {
|
||||
(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): T;
|
||||
}
|
||||
export interface IFunction6<A1, A2, A3, A4, A5, A6, T> {
|
||||
(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): T;
|
||||
}
|
||||
export interface IFunction7<A1, A2, A3, A4, A5, A6, A7, T> {
|
||||
(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): T;
|
||||
}
|
||||
export interface IFunction8<A1, A2, A3, A4, A5, A6, A7, A8, T> {
|
||||
(a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): T;
|
||||
}
|
||||
export interface IAction0 extends IFunction0<void> {
|
||||
}
|
||||
export interface IAction1<A1> extends IFunction1<A1, void> {
|
||||
}
|
||||
export interface IAction2<A1, A2> extends IFunction2<A1, A2, void> {
|
||||
}
|
||||
export interface IAction3<A1, A2, A3> extends IFunction3<A1, A2, A3, void> {
|
||||
}
|
||||
export interface IAction4<A1, A2, A3, A4> extends IFunction4<A1, A2, A3, A4, void> {
|
||||
}
|
||||
export interface IAction5<A1, A2, A3, A4, A5> extends IFunction5<A1, A2, A3, A4, A5, void> {
|
||||
}
|
||||
export interface IAction6<A1, A2, A3, A4, A5, A6> extends IFunction6<A1, A2, A3, A4, A5, A6, void> {
|
||||
}
|
||||
export interface IAction7<A1, A2, A3, A4, A5, A6, A7> extends IFunction7<A1, A2, A3, A4, A5, A6, A7, void> {
|
||||
}
|
||||
export interface IAction8<A1, A2, A3, A4, A5, A6, A7, A8> extends IFunction8<A1, A2, A3, A4, A5, A6, A7, A8, void> {
|
||||
}
|
||||
export declare type NumberCallback = (index: number) => void;
|
||||
export declare function count(to: number, callback: NumberCallback): void;
|
||||
export declare function count(from: number, to: number, callback: NumberCallback): void;
|
||||
export declare function countToArray(to: number): number[];
|
||||
export declare function countToArray(from: number, to: number): number[];
|
||||
190
packages/bot/lib/common/primitives.js
Normal file
190
packages/bot/lib/common/primitives.js
Normal file
@ -0,0 +1,190 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.countToArray = exports.count = exports.create = exports.validateConstraint = exports.validateConstraints = exports.areFunctions = exports.isFunction = exports.isEmptyObject = exports.isUndefinedOrNull = exports.isUndefined = exports.isBoolean = exports.isNumber = exports.isObject = exports.isStringArray = exports.isString = exports.isArray = void 0;
|
||||
const _typeof = {
|
||||
number: 'number',
|
||||
string: 'string',
|
||||
undefined: 'undefined',
|
||||
object: 'object',
|
||||
function: 'function'
|
||||
};
|
||||
/**
|
||||
* @returns whether the provided parameter is a JavaScript Array or not.
|
||||
*/
|
||||
function isArray(array) {
|
||||
if (Array.isArray) {
|
||||
return Array.isArray(array);
|
||||
}
|
||||
if (array && typeof (array.length) === _typeof.number && array.constructor === Array) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
exports.isArray = isArray;
|
||||
/**
|
||||
* @returns whether the provided parameter is a JavaScript String or not.
|
||||
*/
|
||||
function isString(str) {
|
||||
if (typeof (str) === _typeof.string || str instanceof String) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
exports.isString = isString;
|
||||
/**
|
||||
* @returns whether the provided parameter is a JavaScript Array and each element in the array is a string.
|
||||
*/
|
||||
function isStringArray(value) {
|
||||
return isArray(value) && value.every(elem => isString(elem));
|
||||
}
|
||||
exports.isStringArray = isStringArray;
|
||||
/**
|
||||
*
|
||||
* @returns whether the provided parameter is of type `object` but **not**
|
||||
* `null`, an `array`, a `regexp`, nor a `date`.
|
||||
*/
|
||||
function isObject(obj) {
|
||||
// The method can't do a type cast since there are type (like strings) which
|
||||
// are subclasses of any put not positvely matched by the function. Hence type
|
||||
// narrowing results in wrong results.
|
||||
return typeof obj === _typeof.object
|
||||
&& obj !== null
|
||||
&& !Array.isArray(obj)
|
||||
&& !(obj instanceof RegExp)
|
||||
&& !(obj instanceof Date);
|
||||
}
|
||||
exports.isObject = isObject;
|
||||
/**
|
||||
* In **contrast** to just checking `typeof` this will return `false` for `NaN`.
|
||||
* @returns whether the provided parameter is a JavaScript Number or not.
|
||||
*/
|
||||
function isNumber(obj) {
|
||||
if ((typeof (obj) === _typeof.number || obj instanceof Number) && !isNaN(obj)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
exports.isNumber = isNumber;
|
||||
/**
|
||||
* @returns whether the provided parameter is a JavaScript Boolean or not.
|
||||
*/
|
||||
function isBoolean(obj) {
|
||||
return obj === true || obj === false;
|
||||
}
|
||||
exports.isBoolean = isBoolean;
|
||||
/**
|
||||
* @returns whether the provided parameter is undefined.
|
||||
*/
|
||||
function isUndefined(obj) {
|
||||
return typeof (obj) === _typeof.undefined;
|
||||
}
|
||||
exports.isUndefined = isUndefined;
|
||||
/**
|
||||
* @returns whether the provided parameter is undefined or null.
|
||||
*/
|
||||
function isUndefinedOrNull(obj) {
|
||||
return isUndefined(obj) || obj === null;
|
||||
}
|
||||
exports.isUndefinedOrNull = isUndefinedOrNull;
|
||||
const hasOwnProperty = Object.prototype.hasOwnProperty;
|
||||
/**
|
||||
* @returns whether the provided parameter is an empty JavaScript Object or not.
|
||||
*/
|
||||
function isEmptyObject(obj) {
|
||||
if (!isObject(obj)) {
|
||||
return false;
|
||||
}
|
||||
for (let key in obj) {
|
||||
if (hasOwnProperty.call(obj, key)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
exports.isEmptyObject = isEmptyObject;
|
||||
/**
|
||||
* @returns whether the provided parameter is a JavaScript Function or not.
|
||||
*/
|
||||
function isFunction(obj) {
|
||||
return typeof obj === _typeof.function;
|
||||
}
|
||||
exports.isFunction = isFunction;
|
||||
/**
|
||||
* @returns whether the provided parameters is are JavaScript Function or not.
|
||||
*/
|
||||
function areFunctions(...objects) {
|
||||
return objects && objects.length > 0 && objects.every(isFunction);
|
||||
}
|
||||
exports.areFunctions = areFunctions;
|
||||
function validateConstraints(args, constraints) {
|
||||
const len = Math.min(args.length, constraints.length);
|
||||
for (let i = 0; i < len; i++) {
|
||||
validateConstraint(args[i], constraints[i]);
|
||||
}
|
||||
}
|
||||
exports.validateConstraints = validateConstraints;
|
||||
function validateConstraint(arg, constraint) {
|
||||
if (isString(constraint)) {
|
||||
if (typeof arg !== constraint) {
|
||||
throw new Error(`argument does not match constraint: typeof ${constraint}`);
|
||||
}
|
||||
}
|
||||
else if (isFunction(constraint)) {
|
||||
if (arg instanceof constraint) {
|
||||
return;
|
||||
}
|
||||
if (arg && arg.constructor === constraint) {
|
||||
return;
|
||||
}
|
||||
if (constraint.length === 1 && constraint.call(undefined, arg) === true) {
|
||||
return;
|
||||
}
|
||||
throw new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`);
|
||||
}
|
||||
}
|
||||
exports.validateConstraint = validateConstraint;
|
||||
/**
|
||||
* Creates a new object of the provided class and will call the constructor with
|
||||
* any additional argument supplied.
|
||||
*/
|
||||
function create(ctor, ...args) {
|
||||
let obj = Object.create(ctor.prototype);
|
||||
ctor.apply(obj, args);
|
||||
return obj;
|
||||
}
|
||||
exports.create = create;
|
||||
function count(fromOrTo, toOrCallback, callback) {
|
||||
var from, to;
|
||||
if (isNumber(toOrCallback)) {
|
||||
from = fromOrTo;
|
||||
to = toOrCallback;
|
||||
}
|
||||
else {
|
||||
from = 0;
|
||||
to = fromOrTo;
|
||||
callback = toOrCallback;
|
||||
}
|
||||
var op = from <= to ? (i) => i + 1 : (i) => i - 1;
|
||||
var cmp = from <= to ? (a, b) => a < b : (a, b) => a > b;
|
||||
for (var i = from; cmp(i, to); i = op(i)) {
|
||||
callback(i);
|
||||
}
|
||||
}
|
||||
exports.count = count;
|
||||
function countToArray(fromOrTo, to) {
|
||||
var result = [];
|
||||
var fn = (i) => result.push(i);
|
||||
if (isUndefined(to)) {
|
||||
count(fromOrTo, fn);
|
||||
}
|
||||
else {
|
||||
count(fromOrTo, to, fn);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
exports.countToArray = countToArray;
|
||||
//# sourceMappingURL=primitives.js.map
|
||||
1
packages/bot/lib/common/primitives.js.map
Normal file
1
packages/bot/lib/common/primitives.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/lib/common/primitives.ts"],"names":[],"mappings":"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"}
|
||||
76
packages/bot/lib/common/strings.d.ts
vendored
Normal file
76
packages/bot/lib/common/strings.d.ts
vendored
Normal file
@ -0,0 +1,76 @@
|
||||
/// <reference types="node" />
|
||||
export declare const DefaultDelimiter: {
|
||||
begin: string;
|
||||
end: string;
|
||||
};
|
||||
export declare const hasFlag: (field: any, enumValue: any) => boolean;
|
||||
export declare const hasFlagHex: (field: any, enumValue: any) => boolean;
|
||||
export declare const disableFlag: (enumValue: any, field: any) => any;
|
||||
/**
|
||||
* The minimum location of high surrogates
|
||||
*/
|
||||
export declare const HIGH_SURROGATE_MIN = 55296;
|
||||
/**
|
||||
* The maximum location of high surrogates
|
||||
*/
|
||||
export declare const HIGH_SURROGATE_MAX = 56319;
|
||||
/**
|
||||
* The minimum location of low surrogates
|
||||
*/
|
||||
export declare const LOW_SURROGATE_MIN = 56320;
|
||||
/**
|
||||
* The maximum location of low surrogates
|
||||
*/
|
||||
export declare const LOW_SURROGATE_MAX = 57343;
|
||||
export declare const capitalize: (word: any) => any;
|
||||
export declare const getJson: (inData: any, validOnly: any, ommit: any) => any;
|
||||
/**
|
||||
* Escapes a string so that it can safely be passed to the RegExp constructor.
|
||||
* @param text The string to be escaped
|
||||
* @return The escaped string
|
||||
*/
|
||||
export declare function escapeRegExpEx(text: string): string;
|
||||
/**
|
||||
* Sanitizes a string to protect against tag injection.
|
||||
* @param xml The string to be escaped
|
||||
* @param forAttribute Whether to also escape ', ", and > in addition to < and &
|
||||
* @return The escaped string
|
||||
*/
|
||||
export declare function escapeXml(xml: string, forAttribute?: boolean): string;
|
||||
export declare function createUUID(): string;
|
||||
export declare function escapeRegExp(str: string): string;
|
||||
export declare function findOcurrences(expression: string, delimiters: IDelimiter): Array<string>;
|
||||
export declare function multipleReplace(str: string, hash: any): string;
|
||||
export declare function replaceAll(find: string, replace: string, str: string): string;
|
||||
export interface IDelimiter {
|
||||
begin: string;
|
||||
end: string;
|
||||
}
|
||||
export declare function replace(str: string, needle: any | null, what: string | any, delimiters: IDelimiter): string;
|
||||
export declare const substitute: (template: any, map: any) => any;
|
||||
export declare type ByteBuffer = Uint16Array | Uint8Array | Buffer | number[];
|
||||
export interface Codec {
|
||||
encode(data: string): number[];
|
||||
decode(data: ByteBuffer): string;
|
||||
}
|
||||
/**
|
||||
* Provides facilities for encoding a string into an ASCII-encoded byte buffer and
|
||||
* decoding an ASCII-encoded byte buffer into a string.
|
||||
*/
|
||||
export declare const ascii: Codec;
|
||||
/**
|
||||
* Provides facilities for encoding a string into a Base64-encoded byte buffer and
|
||||
* decoding a Base64-encoded byte buffer into a string.
|
||||
*/
|
||||
export declare const base64: Codec;
|
||||
/**
|
||||
* Provides facilities for encoding a string into a hex-encoded byte buffer and
|
||||
* decoding a hex-encoded byte buffer into a string.
|
||||
*/
|
||||
export declare const hex: Codec;
|
||||
/**
|
||||
* Provides facilities for encoding a string into a UTF-8-encoded byte buffer and
|
||||
* decoding a UTF-8-encoded byte buffer into a string.
|
||||
* Inspired by the work of: https://github.com/mathiasbynens/utf8.js
|
||||
*/
|
||||
export declare const utf8: Codec;
|
||||
443
packages/bot/lib/common/strings.js
Normal file
443
packages/bot/lib/common/strings.js
Normal file
@ -0,0 +1,443 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.utf8 = exports.hex = exports.base64 = exports.ascii = exports.substitute = exports.replace = exports.replaceAll = exports.multipleReplace = exports.findOcurrences = exports.escapeRegExp = exports.createUUID = exports.escapeXml = exports.escapeRegExpEx = exports.getJson = exports.capitalize = exports.LOW_SURROGATE_MAX = exports.LOW_SURROGATE_MIN = exports.HIGH_SURROGATE_MAX = exports.HIGH_SURROGATE_MIN = exports.disableFlag = exports.hasFlagHex = exports.hasFlag = exports.DefaultDelimiter = void 0;
|
||||
const primitives_1 = require("./primitives");
|
||||
const lodash_1 = require("lodash");
|
||||
const escapeRegExpPattern = /[[\]{}()|\/\\^$.*+?]/g;
|
||||
const escapeXmlPattern = /[&<]/g;
|
||||
const escapeXmlForPattern = /[&<>'"]/g;
|
||||
const escapeXmlMap = {
|
||||
'&': '&',
|
||||
'<': '<',
|
||||
'>': '>',
|
||||
'"': '"',
|
||||
'\'': '''
|
||||
};
|
||||
exports.DefaultDelimiter = {
|
||||
begin: '<%',
|
||||
end: '%>'
|
||||
};
|
||||
const hasFlag = (field, enumValue) => {
|
||||
//noinspection JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage
|
||||
// tslint:disable-next-line:no-bitwise
|
||||
return ((1 << enumValue) & field) ? true : false;
|
||||
};
|
||||
exports.hasFlag = hasFlag;
|
||||
const hasFlagHex = (field, enumValue) => {
|
||||
//noinspection JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage
|
||||
// tslint:disable-next-line:no-bitwise
|
||||
return enumValue & field ? true : false;
|
||||
};
|
||||
exports.hasFlagHex = hasFlagHex;
|
||||
const disableFlag = (enumValue, field) => {
|
||||
enumValue &= ~(1 << field);
|
||||
return enumValue;
|
||||
};
|
||||
exports.disableFlag = disableFlag;
|
||||
/**
|
||||
* The minimum location of high surrogates
|
||||
*/
|
||||
exports.HIGH_SURROGATE_MIN = 0xD800;
|
||||
/**
|
||||
* The maximum location of high surrogates
|
||||
*/
|
||||
exports.HIGH_SURROGATE_MAX = 0xDBFF;
|
||||
/**
|
||||
* The minimum location of low surrogates
|
||||
*/
|
||||
exports.LOW_SURROGATE_MIN = 0xDC00;
|
||||
/**
|
||||
* The maximum location of low surrogates
|
||||
*/
|
||||
exports.LOW_SURROGATE_MAX = 0xDFFF;
|
||||
const BASE64_KEYSTR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
||||
const capitalize = (word) => {
|
||||
return word.substring(0, 1).toUpperCase() + word.substring(1);
|
||||
};
|
||||
exports.capitalize = capitalize;
|
||||
const getJson = (inData, validOnly, ommit) => {
|
||||
try {
|
||||
return (0, lodash_1.isString)(inData) ? JSON.parse(inData) : validOnly === true ? null : inData;
|
||||
}
|
||||
catch (e) {
|
||||
ommit !== false && console.error('error parsing json data ' + inData + ' error = ' + e);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
exports.getJson = getJson;
|
||||
/**
|
||||
* Escapes a string so that it can safely be passed to the RegExp constructor.
|
||||
* @param text The string to be escaped
|
||||
* @return The escaped string
|
||||
*/
|
||||
function escapeRegExpEx(text) {
|
||||
return !text ? text : text.replace(escapeRegExpPattern, '\\$&');
|
||||
}
|
||||
exports.escapeRegExpEx = escapeRegExpEx;
|
||||
/**
|
||||
* Sanitizes a string to protect against tag injection.
|
||||
* @param xml The string to be escaped
|
||||
* @param forAttribute Whether to also escape ', ", and > in addition to < and &
|
||||
* @return The escaped string
|
||||
*/
|
||||
function escapeXml(xml, forAttribute = true) {
|
||||
if (!xml) {
|
||||
return xml;
|
||||
}
|
||||
const pattern = forAttribute ? escapeXmlForPattern : escapeXmlPattern;
|
||||
return xml.replace(pattern, function (character) {
|
||||
return escapeXmlMap[character];
|
||||
});
|
||||
}
|
||||
exports.escapeXml = escapeXml;
|
||||
function createUUID() {
|
||||
const S4 = function () {
|
||||
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
|
||||
};
|
||||
return (S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4());
|
||||
}
|
||||
exports.createUUID = createUUID;
|
||||
function escapeRegExp(str) {
|
||||
const special = ['[', ']', '(', ')', '{', '}', '*', '+', '.', '|', '||'];
|
||||
for (let n = 0; n < special.length; n++) {
|
||||
str = str.replace(special[n], '\\' + special[n]);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
exports.escapeRegExp = escapeRegExp;
|
||||
;
|
||||
function findOcurrences(expression, delimiters) {
|
||||
// tslint:disable-next-line:no-object-literal-type-assertion
|
||||
const d = {
|
||||
begin: escapeRegExp(delimiters.begin),
|
||||
end: escapeRegExp(delimiters.end)
|
||||
};
|
||||
return expression.match(new RegExp(d.begin + '([^' + d.end + ']*)' + d.end, 'g'));
|
||||
}
|
||||
exports.findOcurrences = findOcurrences;
|
||||
;
|
||||
function multipleReplace(str, hash) {
|
||||
// to array
|
||||
const a = [];
|
||||
// tslint:disable-next-line:forin
|
||||
for (let key in hash) {
|
||||
a[a.length] = key;
|
||||
}
|
||||
return str.replace(new RegExp(a.join('\\b|\\b'), 'g'), function (m) {
|
||||
return hash[m] || hash['\\' + m];
|
||||
});
|
||||
}
|
||||
exports.multipleReplace = multipleReplace;
|
||||
;
|
||||
function replaceAll(find, replace, str) {
|
||||
return str ? str.split(find).join(replace) : '';
|
||||
}
|
||||
exports.replaceAll = replaceAll;
|
||||
;
|
||||
function replace(str, needle, what, delimiters) {
|
||||
if (!str) {
|
||||
return '';
|
||||
}
|
||||
if (what && (0, primitives_1.isObject)(what) || (0, primitives_1.isArray)(what)) {
|
||||
what = what;
|
||||
if (!delimiters) {
|
||||
// fast case
|
||||
return multipleReplace(str, what);
|
||||
}
|
||||
const occurrence = findOcurrences(str, delimiters);
|
||||
if (!occurrence) {
|
||||
return str;
|
||||
}
|
||||
else {
|
||||
for (let i = 0, j = occurrence.length; i < j; i++) {
|
||||
const el = occurrence[i];
|
||||
// strip off delimiters
|
||||
let _variableName = replaceAll(delimiters.begin, '', el);
|
||||
_variableName = replaceAll(delimiters.end, '', _variableName);
|
||||
str = replaceAll(el, (what[_variableName]), str);
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
// fast case
|
||||
return replaceAll(needle, what, str);
|
||||
}
|
||||
exports.replace = replace;
|
||||
;
|
||||
const substitute = (template, map) => {
|
||||
const transform = (k) => k || '';
|
||||
return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, (match, key, format) => transform(map[key]).toString());
|
||||
};
|
||||
exports.substitute = substitute;
|
||||
function decodeUtf8EncodedCodePoint(codePoint, validationRange = [0, Infinity], checkSurrogate) {
|
||||
if (codePoint < validationRange[0] || codePoint > validationRange[1]) {
|
||||
throw Error('Invalid continuation byte');
|
||||
}
|
||||
if (checkSurrogate && codePoint >= exports.HIGH_SURROGATE_MIN && codePoint <= exports.LOW_SURROGATE_MAX) {
|
||||
throw Error('Surrogate is not a scalar value');
|
||||
}
|
||||
let encoded = '';
|
||||
if (codePoint > 0xFFFF) {
|
||||
codePoint -= 0x010000;
|
||||
encoded += String.fromCharCode(codePoint >>> 0x10 & 0x03FF | exports.HIGH_SURROGATE_MIN);
|
||||
codePoint = exports.LOW_SURROGATE_MIN | codePoint & 0x03FF;
|
||||
}
|
||||
encoded += String.fromCharCode(codePoint);
|
||||
return encoded;
|
||||
}
|
||||
function validateUtf8EncodedCodePoint(codePoint) {
|
||||
if ((codePoint & 0xC0) !== 0x80) {
|
||||
throw Error('Invalid continuation byte');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Provides facilities for encoding a string into an ASCII-encoded byte buffer and
|
||||
* decoding an ASCII-encoded byte buffer into a string.
|
||||
*/
|
||||
exports.ascii = {
|
||||
/**
|
||||
* Encodes a string into an ASCII-encoded byte buffer.
|
||||
*
|
||||
* @param data The text string to encode
|
||||
*/
|
||||
encode(data) {
|
||||
if (data == null) {
|
||||
return [];
|
||||
}
|
||||
const buffer = [];
|
||||
for (let i = 0, length = data.length; i < length; i++) {
|
||||
buffer[i] = data.charCodeAt(i);
|
||||
}
|
||||
return buffer;
|
||||
},
|
||||
/**
|
||||
* Decodes an ASCII-encoded byte buffer into a string.
|
||||
*
|
||||
* @param data The byte buffer to decode
|
||||
*/
|
||||
decode(data) {
|
||||
if (data == null) {
|
||||
return '';
|
||||
}
|
||||
let decoded = '';
|
||||
for (let i = 0, length = data.length; i < length; i++) {
|
||||
decoded += String.fromCharCode(data[i]);
|
||||
}
|
||||
return decoded;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Provides facilities for encoding a string into a Base64-encoded byte buffer and
|
||||
* decoding a Base64-encoded byte buffer into a string.
|
||||
*/
|
||||
exports.base64 = {
|
||||
/**
|
||||
* Encodes a Base64-encoded string into a Base64 byte buffer.
|
||||
*
|
||||
* @param data The Base64-encoded string to encode
|
||||
*/
|
||||
encode(data) {
|
||||
if (data == null) {
|
||||
return [];
|
||||
}
|
||||
const buffer = [];
|
||||
let i = 0;
|
||||
let length = data.length;
|
||||
while (data[--length] === '=') { }
|
||||
while (i < length) {
|
||||
let encoded = BASE64_KEYSTR.indexOf(data[i++]) << 18;
|
||||
if (i <= length) {
|
||||
encoded |= BASE64_KEYSTR.indexOf(data[i++]) << 12;
|
||||
}
|
||||
if (i <= length) {
|
||||
encoded |= BASE64_KEYSTR.indexOf(data[i++]) << 6;
|
||||
}
|
||||
if (i <= length) {
|
||||
encoded |= BASE64_KEYSTR.indexOf(data[i++]);
|
||||
}
|
||||
buffer.push((encoded >>> 16) & 0xff);
|
||||
buffer.push((encoded >>> 8) & 0xff);
|
||||
buffer.push(encoded & 0xff);
|
||||
}
|
||||
while (buffer[buffer.length - 1] === 0) {
|
||||
buffer.pop();
|
||||
}
|
||||
return buffer;
|
||||
},
|
||||
/**
|
||||
* Decodes a Base64-encoded byte buffer into a Base64-encoded string.
|
||||
*
|
||||
* @param data The byte buffer to decode
|
||||
*/
|
||||
decode(data) {
|
||||
if (data == null) {
|
||||
return '';
|
||||
}
|
||||
let decoded = '';
|
||||
let i = 0;
|
||||
for (let length = data.length - (data.length % 3); i < length;) {
|
||||
let encoded = data[i++] << 16 | data[i++] << 8 | data[i++];
|
||||
decoded += BASE64_KEYSTR.charAt((encoded >>> 18) & 0x3F);
|
||||
decoded += BASE64_KEYSTR.charAt((encoded >>> 12) & 0x3F);
|
||||
decoded += BASE64_KEYSTR.charAt((encoded >>> 6) & 0x3F);
|
||||
decoded += BASE64_KEYSTR.charAt(encoded & 0x3F);
|
||||
}
|
||||
if (data.length % 3 === 1) {
|
||||
let encoded = data[i++] << 16;
|
||||
decoded += BASE64_KEYSTR.charAt((encoded >>> 18) & 0x3f);
|
||||
decoded += BASE64_KEYSTR.charAt((encoded >>> 12) & 0x3f);
|
||||
decoded += '==';
|
||||
}
|
||||
else if (data.length % 3 === 2) {
|
||||
let encoded = data[i++] << 16 | data[i++] << 8;
|
||||
decoded += BASE64_KEYSTR.charAt((encoded >>> 18) & 0x3f);
|
||||
decoded += BASE64_KEYSTR.charAt((encoded >>> 12) & 0x3f);
|
||||
decoded += BASE64_KEYSTR.charAt((encoded >>> 6) & 0x3f);
|
||||
decoded += '=';
|
||||
}
|
||||
return decoded;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Provides facilities for encoding a string into a hex-encoded byte buffer and
|
||||
* decoding a hex-encoded byte buffer into a string.
|
||||
*/
|
||||
exports.hex = {
|
||||
/**
|
||||
* Encodes a string into a hex-encoded byte buffer.
|
||||
*
|
||||
* @param data The hex-encoded string to encode
|
||||
*/
|
||||
encode(data) {
|
||||
if (data == null) {
|
||||
return [];
|
||||
}
|
||||
const buffer = [];
|
||||
for (let i = 0, length = data.length; i < length; i += 2) {
|
||||
let encodedChar = parseInt(data.substr(i, 2), 16);
|
||||
buffer.push(encodedChar);
|
||||
}
|
||||
return buffer;
|
||||
},
|
||||
/**
|
||||
* Decodes a hex-encoded byte buffer into a hex-encoded string.
|
||||
*
|
||||
* @param data The byte buffer to decode
|
||||
*/
|
||||
decode(data) {
|
||||
if (data == null) {
|
||||
return '';
|
||||
}
|
||||
let decoded = '';
|
||||
for (let i = 0, length = data.length; i < length; i++) {
|
||||
decoded += data[i].toString(16).toUpperCase();
|
||||
}
|
||||
return decoded;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Provides facilities for encoding a string into a UTF-8-encoded byte buffer and
|
||||
* decoding a UTF-8-encoded byte buffer into a string.
|
||||
* Inspired by the work of: https://github.com/mathiasbynens/utf8.js
|
||||
*/
|
||||
exports.utf8 = {
|
||||
/**
|
||||
* Encodes a string into a UTF-8-encoded byte buffer.
|
||||
*
|
||||
* @param data The text string to encode
|
||||
*/
|
||||
encode(data) {
|
||||
if (data == null) {
|
||||
return [];
|
||||
}
|
||||
const buffer = [];
|
||||
for (let i = 0, length = data.length; i < length; i++) {
|
||||
let encodedChar = data.charCodeAt(i);
|
||||
/**
|
||||
* Surrogates
|
||||
* http://en.wikipedia.org/wiki/Universal_Character_Set_characters
|
||||
*/
|
||||
if (encodedChar >= exports.HIGH_SURROGATE_MIN && encodedChar <= exports.HIGH_SURROGATE_MAX) {
|
||||
let lowSurrogate = data.charCodeAt(i + 1);
|
||||
if (lowSurrogate >= exports.LOW_SURROGATE_MIN && lowSurrogate <= exports.LOW_SURROGATE_MAX) {
|
||||
encodedChar = 0x010000 + (encodedChar - exports.HIGH_SURROGATE_MIN) * 0x0400 + (lowSurrogate - exports.LOW_SURROGATE_MIN);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if (encodedChar < 0x80) {
|
||||
buffer.push(encodedChar);
|
||||
}
|
||||
else {
|
||||
if (encodedChar < 0x800) {
|
||||
buffer.push(((encodedChar >> 0x06) & 0x1F) | 0xC0);
|
||||
}
|
||||
else if (encodedChar < 0x010000) {
|
||||
if (encodedChar >= exports.HIGH_SURROGATE_MIN && encodedChar <= exports.LOW_SURROGATE_MAX) {
|
||||
throw Error('Surrogate is not a scalar value');
|
||||
}
|
||||
buffer.push(((encodedChar >> 0x0C) & 0x0F) | 0xE0);
|
||||
buffer.push(((encodedChar >> 0x06) & 0x3F) | 0x80);
|
||||
}
|
||||
else if (encodedChar < 0x200000) {
|
||||
buffer.push(((encodedChar >> 0x12) & 0x07) | 0xF0);
|
||||
buffer.push(((encodedChar >> 0x0C) & 0x3F) | 0x80);
|
||||
buffer.push(((encodedChar >> 0x06) & 0x3F) | 0x80);
|
||||
}
|
||||
buffer.push((encodedChar & 0x3F) | 0x80);
|
||||
}
|
||||
}
|
||||
return buffer;
|
||||
},
|
||||
/**
|
||||
* Decodes a UTF-8-encoded byte buffer into a string.
|
||||
*
|
||||
* @param data The byte buffer to decode
|
||||
*/
|
||||
decode(data) {
|
||||
if (data == null) {
|
||||
return '';
|
||||
}
|
||||
let decoded = '';
|
||||
for (let i = 0, length = data.length; i < length; i++) {
|
||||
let byte1 = data[i] & 0xFF;
|
||||
if ((byte1 & 0x80) === 0) {
|
||||
decoded += decodeUtf8EncodedCodePoint(byte1);
|
||||
}
|
||||
else if ((byte1 & 0xE0) === 0xC0) {
|
||||
let byte2 = data[++i] & 0xFF;
|
||||
validateUtf8EncodedCodePoint(byte2);
|
||||
byte2 = byte2 & 0x3F;
|
||||
let encodedByte = ((byte1 & 0x1F) << 0x06) | byte2;
|
||||
decoded += decodeUtf8EncodedCodePoint(encodedByte, [0x80, Infinity]);
|
||||
}
|
||||
else if ((byte1 & 0xF0) === 0xE0) {
|
||||
let byte2 = data[++i] & 0xFF;
|
||||
validateUtf8EncodedCodePoint(byte2);
|
||||
byte2 = byte2 & 0x3F;
|
||||
let byte3 = data[++i] & 0xFF;
|
||||
validateUtf8EncodedCodePoint(byte3);
|
||||
byte3 = byte3 & 0x3F;
|
||||
let encodedByte = ((byte1 & 0x1F) << 0x0C) | (byte2 << 0x06) | byte3;
|
||||
decoded += decodeUtf8EncodedCodePoint(encodedByte, [0x0800, Infinity], true);
|
||||
}
|
||||
else if ((byte1 & 0xF8) === 0xF0) {
|
||||
let byte2 = data[++i] & 0xFF;
|
||||
validateUtf8EncodedCodePoint(byte2);
|
||||
byte2 = byte2 & 0x3F;
|
||||
let byte3 = data[++i] & 0xFF;
|
||||
validateUtf8EncodedCodePoint(byte3);
|
||||
byte3 = byte3 & 0x3F;
|
||||
let byte4 = data[++i] & 0xFF;
|
||||
validateUtf8EncodedCodePoint(byte4);
|
||||
byte4 = byte4 & 0x3F;
|
||||
let encodedByte = ((byte1 & 0x1F) << 0x0C) | (byte2 << 0x0C) | (byte3 << 0x06) | byte4;
|
||||
decoded += decodeUtf8EncodedCodePoint(encodedByte, [0x010000, 0x10FFFF]);
|
||||
}
|
||||
else {
|
||||
validateUtf8EncodedCodePoint(byte1);
|
||||
}
|
||||
}
|
||||
return decoded;
|
||||
}
|
||||
};
|
||||
//# sourceMappingURL=strings.js.map
|
||||
1
packages/bot/lib/common/strings.js.map
Normal file
1
packages/bot/lib/common/strings.js.map
Normal file
File diff suppressed because one or more lines are too long
31
packages/bot/lib/common/types.d.ts
vendored
Normal file
31
packages/bot/lib/common/types.d.ts
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
export * from './enums';
|
||||
export interface Hash<T> {
|
||||
[id: string]: T;
|
||||
}
|
||||
export interface List<T> {
|
||||
[index: number]: T;
|
||||
length: number;
|
||||
}
|
||||
/**
|
||||
* Interface of the simple literal object with any string keys.
|
||||
*/
|
||||
export interface IObjectLiteral {
|
||||
[key: string]: any;
|
||||
}
|
||||
/**
|
||||
* Represents some Type of the Object.
|
||||
*/
|
||||
export declare type ObjectType<T> = {
|
||||
new (): T;
|
||||
} | (Function);
|
||||
/**
|
||||
* Same as Partial<T> but goes deeper and makes Partial<T> all its properties and sub-properties.
|
||||
*/
|
||||
export declare type DeepPartial<T> = {
|
||||
[P in keyof T]?: DeepPartial<T[P]>;
|
||||
};
|
||||
export interface IDelimitter {
|
||||
begin: string;
|
||||
end: string;
|
||||
}
|
||||
export declare type JSONPathExpression = string;
|
||||
18
packages/bot/lib/common/types.js
Normal file
18
packages/bot/lib/common/types.js
Normal file
@ -0,0 +1,18 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
||||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
__exportStar(require("./enums"), exports);
|
||||
//# sourceMappingURL=types.js.map
|
||||
1
packages/bot/lib/common/types.js.map
Normal file
1
packages/bot/lib/common/types.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/common/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB"}
|
||||
8
packages/bot/lib/fs/index.d.ts
vendored
Normal file
8
packages/bot/lib/fs/index.d.ts
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
export { sync as read } from '@plastichub/fs/read';
|
||||
export { sync as exists } from '@plastichub/fs/exists';
|
||||
export { sync as dir } from '@plastichub/fs/dir';
|
||||
export { sync as write } from '@plastichub/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>;
|
||||
57
packages/bot/lib/fs/index.js
Normal file
57
packages/bot/lib/fs/index.js
Normal file
@ -0,0 +1,57 @@
|
||||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.resize_images = exports.forward_slash = exports.images = exports.files = exports.write = exports.dir = exports.exists = exports.read = void 0;
|
||||
const fg = require('fast-glob');
|
||||
const path = require("path");
|
||||
const bluebird = require("bluebird");
|
||||
var read_1 = require("@plastichub/fs/read");
|
||||
Object.defineProperty(exports, "read", { enumerable: true, get: function () { return read_1.sync; } });
|
||||
var exists_1 = require("@plastichub/fs/exists");
|
||||
Object.defineProperty(exports, "exists", { enumerable: true, get: function () { return exists_1.sync; } });
|
||||
var dir_1 = require("@plastichub/fs/dir");
|
||||
Object.defineProperty(exports, "dir", { enumerable: true, get: function () { return dir_1.sync; } });
|
||||
var write_1 = require("@plastichub/fs/write");
|
||||
Object.defineProperty(exports, "write", { enumerable: true, get: function () { return write_1.sync; } });
|
||||
const index_1 = require("../process/index");
|
||||
const IMAGES_GLOB = '*.+(JPG|jpg|png|PNG|gif)';
|
||||
const files = (dir, glob) => fg.sync(glob, { dot: true, cwd: dir, absolute: true });
|
||||
exports.files = files;
|
||||
const images = (source) => (0, exports.files)(source, IMAGES_GLOB);
|
||||
exports.images = images;
|
||||
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, '/');
|
||||
};
|
||||
exports.forward_slash = forward_slash;
|
||||
function resize_images(files) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return bluebird.mapSeries(files, (file) => {
|
||||
const inParts = path.parse(file);
|
||||
const promise = index_1.Helper.run(inParts.dir, 'convert', [
|
||||
`"${inParts.base}"`,
|
||||
'-quality 70',
|
||||
'-resize 1980',
|
||||
'-sharpen 0x1.0',
|
||||
`"${inParts.name}${inParts.ext}"`
|
||||
]);
|
||||
return promise;
|
||||
});
|
||||
});
|
||||
}
|
||||
exports.resize_images = resize_images;
|
||||
const jekyllNop = "---\n#jekyll\n---\n";
|
||||
const frontMatter = /^---[.\r\n]*---/;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
packages/bot/lib/fs/index.js.map
Normal file
1
packages/bot/lib/fs/index.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/fs/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEhC,6BAA6B;AAC7B,qCAAqC;AAErC,4CAAmD;AAA1C,4FAAA,IAAI,OAAQ;AACrB,gDAAuD;AAA9C,gGAAA,IAAI,OAAU;AACvB,0CAAiD;AAAxC,0FAAA,IAAI,OAAO;AACpB,8CAAqD;AAA5C,8FAAA,IAAI,OAAS;AAGtB,4CAA0C;AAE1C,MAAM,WAAW,GAAG,0BAA0B,CAAC;AAExC,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAO,CAAC;AAApF,QAAA,KAAK,SAA+E;AAC1F,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,aAAK,EAAC,MAAM,EAAE,WAAW,CAAU,CAAC;AAAzD,QAAA,MAAM,UAAmD;AAG/D,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,EAAE;IACrC,MAAM,oBAAoB,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,uCAAuC;IAE3F,IAAI,oBAAoB,IAAI,WAAW,EAAE;QACxC,OAAO,IAAI,CAAC;KACZ;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC,CAAC;AATW,QAAA,aAAa,iBASxB;AAEF,SAAsB,aAAa,CAAC,KAAK;;QACrC,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,cAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAC7C;gBACI,IAAI,OAAO,CAAC,IAAI,GAAG;gBACnB,aAAa;gBACb,cAAc;gBACd,gBAAgB;gBAChB,IAAI,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,GAAG;aACpC,CAAC,CAAC;YACP,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC;CAAA;AAbD,sCAaC;AAED,MAAM,SAAS,GAAG,qBAAqB,CAAC;AACxC,MAAM,WAAW,GAAG,iBAAiB,CAAC"}
|
||||
5
packages/bot/lib/index.d.ts
vendored
Normal file
5
packages/bot/lib/index.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
/// <reference types="node" />
|
||||
import { IResizeOptions } from '../types';
|
||||
export declare const fileAsBuffer: (path: string) => Buffer;
|
||||
export declare const targets: (f: string, options: IResizeOptions) => string[];
|
||||
export declare const targetsNext: (f: string, options: IResizeOptions) => string[];
|
||||
140
packages/bot/lib/index.js
Normal file
140
packages/bot/lib/index.js
Normal file
File diff suppressed because one or more lines are too long
1
packages/bot/lib/index.js.map
Normal file
1
packages/bot/lib/index.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":";;;AAAa,QAAA,CAAC,GAAG,CAAC,CAAC"}
|
||||
13
packages/bot/lib/media/audio/convert.d.ts
vendored
Normal file
13
packages/bot/lib/media/audio/convert.d.ts
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
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>;
|
||||
95
packages/bot/lib/media/audio/convert.js
Normal file
95
packages/bot/lib/media/audio/convert.js
Normal file
@ -0,0 +1,95 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.convert = exports._convert = exports.convertFile = exports.converter = exports.CONVERTERS = exports.split = void 0;
|
||||
const path = require("path");
|
||||
const pMap = require("p-map");
|
||||
const commons_1 = require("@polymech/commons");
|
||||
const exists_1 = require("@polymech/fs/exists");
|
||||
const dir_1 = require("@polymech/fs/dir");
|
||||
const lib_1 = require("@polymech/cache/lib");
|
||||
const __1 = require("../../");
|
||||
const __2 = require("../../..");
|
||||
const constants_1 = require("../../../constants");
|
||||
const ffmpeg_1 = require("../ffmpeg");
|
||||
const FfmpegCommand = require('fluent-ffmpeg');
|
||||
const extension = (file) => path.parse(file).ext;
|
||||
const split = async (src, dst, onNode, options) => {
|
||||
try {
|
||||
const metadata = await (0, ffmpeg_1.meta)(src);
|
||||
const duration = metadata.format.duration;
|
||||
if (!duration) {
|
||||
__2.logger.error('Unable to determine duration of the audio file.');
|
||||
return;
|
||||
}
|
||||
let startTime = 0;
|
||||
let segmentIndex = 1;
|
||||
while (startTime < duration) {
|
||||
const outputFile = `${dst}/segment_${segmentIndex}.mp3`;
|
||||
await new Promise((resolve, reject) => {
|
||||
const ff = new FfmpegCommand(src)
|
||||
.setStartTime(startTime)
|
||||
.setDuration(options.interval)
|
||||
.output(outputFile)
|
||||
.on('end', () => {
|
||||
__2.logger.info(`Segment ${segmentIndex} finished.`);
|
||||
resolve();
|
||||
})
|
||||
.on('error', (error) => {
|
||||
__2.logger.error(`Error while processing segment ${segmentIndex}:`, error.message);
|
||||
reject(error);
|
||||
})
|
||||
.run();
|
||||
});
|
||||
startTime += options.interval;
|
||||
segmentIndex++;
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
__2.logger.error('Error splitting audio file:', error);
|
||||
}
|
||||
};
|
||||
exports.split = split;
|
||||
exports.CONVERTERS = {
|
||||
'.mp3': exports.split
|
||||
};
|
||||
const converter = (file) => exports.CONVERTERS[extension(file)];
|
||||
exports.converter = converter;
|
||||
const convertFile = async (file, target, onNode = () => { }, options) => {
|
||||
const osr_cache = (0, commons_1.OSR_CACHE)();
|
||||
const ca_options = JSON.parse(JSON.stringify({ ...options, target, skip: null }));
|
||||
const cached = await (0, lib_1.get_cached)(file, ca_options, constants_1.MODULE_NAME);
|
||||
const conv = (0, exports.converter)(target);
|
||||
if (!conv) {
|
||||
__2.logger.error(`No converter found for ${file}`);
|
||||
return;
|
||||
}
|
||||
const dstParts = path.parse(target);
|
||||
if (!(0, exists_1.sync)(dstParts.dir)) {
|
||||
(0, dir_1.sync)(dstParts.dir);
|
||||
}
|
||||
const ret = await conv(file, target, onNode, options);
|
||||
return ret;
|
||||
};
|
||||
exports.convertFile = convertFile;
|
||||
async function _convert(file, targets, onNode = () => { }, options) {
|
||||
return pMap(targets, (target) => {
|
||||
options.verbose && __2.logger.debug(`Convert ${file} to ${target}`);
|
||||
if (options.dry) {
|
||||
return;
|
||||
}
|
||||
return (0, exports.convertFile)(file, target, onNode, options);
|
||||
}, { concurrency: 1 });
|
||||
}
|
||||
exports._convert = _convert;
|
||||
const convert = async (options) => {
|
||||
let reports = [];
|
||||
const onNode = (data) => { reports.push(data); };
|
||||
options.verbose && __2.logger.info(`Convert ${options.srcInfo.FILES.length} files `);
|
||||
await pMap(options.srcInfo.FILES, (f) => {
|
||||
const outputs = (0, __1.targets)(f, options);
|
||||
options.verbose && __2.logger.info(`Convert ${f} to `, outputs);
|
||||
return _convert(f, outputs, onNode, options);
|
||||
}, { concurrency: 1 });
|
||||
};
|
||||
exports.convert = convert;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWVkaWEvYXVkaW8vY29udmVydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNEI7QUFDNUIsOEJBQTZCO0FBQzdCLCtDQUE2QztBQUM3QyxnREFBb0Q7QUFDcEQsMENBQThDO0FBQzlDLDZDQUFnRDtBQUNoRCw4QkFBZ0M7QUFDaEMsZ0NBQWlDO0FBQ2pDLGtEQUFnRDtBQUdoRCxzQ0FBZ0M7QUFJaEMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBRTlDLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQTtBQUVqRCxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBNkIsRUFBaUIsRUFBRTtJQUMxRyxJQUFJO1FBQ0EsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLGFBQUksRUFBQyxHQUFHLENBQUMsQ0FBQTtRQUNoQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQTtRQUN6QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsVUFBTSxDQUFDLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ2hFLE9BQU87U0FDVjtRQUVELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQTtRQUNqQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUE7UUFFcEIsT0FBTyxTQUFTLEdBQUcsUUFBUSxFQUFFO1lBQ3pCLE1BQU0sVUFBVSxHQUFHLEdBQUcsR0FBRyxZQUFZLFlBQVksTUFBTSxDQUFDO1lBRXhELE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3hDLE1BQU0sRUFBRSxHQUFHLElBQUks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
|
||||
2
packages/bot/lib/media/ffmpeg.d.ts
vendored
Normal file
2
packages/bot/lib/media/ffmpeg.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
import { FfprobeData } from 'fluent-ffmpeg';
|
||||
export declare const meta: (src: string) => Promise<FfprobeData>;
|
||||
21
packages/bot/lib/media/ffmpeg.js
Normal file
21
packages/bot/lib/media/ffmpeg.js
Normal file
@ -0,0 +1,21 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.meta = void 0;
|
||||
const FfmpegCommand = require('fluent-ffmpeg');
|
||||
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);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
exports.meta = meta;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmZtcGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tZWRpYS9mZm1wZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBRXZDLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQXdCLEVBQUU7SUFDNUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEVBQUUsR0FBRyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNqQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNoQyxJQUFJLEdBQUcsRUFBRTtnQkFDUCxpREFBaUQ7Z0JBQ2pELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNiO2lCQUFNO2dCQUNMLGtEQUFrRDtnQkFDbEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO2FBQ2xCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQWJVLFFBQUEsSUFBSSxRQWFkIn0=
|
||||
5
packages/bot/lib/media/images/convert.d.ts
vendored
Normal file
5
packages/bot/lib/media/images/convert.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
import * as sharp from 'sharp';
|
||||
import { IOptions, IResizeOptions } from '../../../types';
|
||||
export declare const convertFile: (file: any, target: any, onNode: (data: any) => void, options: IResizeOptions) => Promise<sharp.OutputInfo>;
|
||||
export declare function _convert(file: any, targets: string[], onNode: (data: any) => void, options: IOptions): Promise<any[]>;
|
||||
export declare const convert: (options: IOptions) => Promise<void>;
|
||||
50
packages/bot/lib/media/images/convert.js
Normal file
50
packages/bot/lib/media/images/convert.js
Normal file
@ -0,0 +1,50 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.convert = exports._convert = exports.convertFile = void 0;
|
||||
const path = require("path");
|
||||
const bluebird = require("bluebird");
|
||||
const pMap = require("p-map");
|
||||
const sharp = require("sharp");
|
||||
const index_1 = require("../../../index");
|
||||
const commons_1 = require("@polymech/commons");
|
||||
const exists_1 = require("@polymech/fs/exists");
|
||||
const dir_1 = require("@polymech/fs/dir");
|
||||
const lib_1 = require("@polymech/cache/lib");
|
||||
const __1 = require("../../");
|
||||
const constants_1 = require("../../../constants");
|
||||
const convertFile = async (file, target, onNode = () => { }, options) => {
|
||||
const osr_cache = (0, commons_1.OSR_CACHE)();
|
||||
const ca_options = JSON.parse(JSON.stringify({ ...options, target, skip: null }));
|
||||
const cached = await (0, lib_1.get_cached)(file, ca_options, constants_1.MODULE_NAME);
|
||||
let image = sharp(file);
|
||||
const srcParts = path.parse(file);
|
||||
const dstParts = path.parse(target);
|
||||
if (!(0, exists_1.sync)(dstParts.dir)) {
|
||||
(0, dir_1.sync)(dstParts.dir);
|
||||
}
|
||||
let ret = await image.withMetadata().toFile(target);
|
||||
return ret;
|
||||
};
|
||||
exports.convertFile = convertFile;
|
||||
async function _convert(file, targets, onNode = () => { }, options) {
|
||||
return pMap(targets, async (target) => {
|
||||
index_1.logger.debug(`Convert ${file} to ${target}`);
|
||||
if (options.dry) {
|
||||
return bluebird.resolve();
|
||||
}
|
||||
return (0, exports.convertFile)(file, target, onNode, options);
|
||||
}, { concurrency: 1 });
|
||||
}
|
||||
exports._convert = _convert;
|
||||
const convert = async (options) => {
|
||||
let reports = [];
|
||||
const onNode = (data) => { reports.push(data); };
|
||||
index_1.logger.info(`Convert ${options.srcInfo.FILES.length} files `);
|
||||
await pMap(options.srcInfo.FILES, (f) => {
|
||||
const outputs = (0, __1.targets)(f, options);
|
||||
options.verbose && index_1.logger.info(`Convert ${f} to `, outputs);
|
||||
return _convert(f, outputs, onNode, options);
|
||||
}, { concurrency: 1 });
|
||||
};
|
||||
exports.convert = convert;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWVkaWEvaW1hZ2VzL2NvbnZlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTRCO0FBQzVCLHFDQUFvQztBQUNwQyw4QkFBNkI7QUFDN0IsK0JBQThCO0FBQzlCLDBDQUF1QztBQUV2QywrQ0FBNkM7QUFDN0MsZ0RBQW9EO0FBQ3BELDBDQUE4QztBQUM5Qyw2Q0FFNEI7QUFFNUIsOEJBRWU7QUFFZixrREFFMkI7QUFFcEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBOEIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQXVCLEVBQUUsRUFBRTtJQUNoSCxNQUFNLFNBQVMsR0FBRyxJQUFBLG1CQUFTLEdBQUUsQ0FBQTtJQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNqRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsZ0JBQVUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLHVCQUFXLENBQUMsQ0FBQTtJQUM5RCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ25DLElBQUcsQ0FBQyxJQUFBLGFBQU0sRUFBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUM7UUFDckIsSUFBQSxVQUFHLEVBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0tBQ3BCO0lBQ0QsSUFBSSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ25ELE9BQU8sR0FBRyxDQUFBO0FBQ2QsQ0FBQyxDQUFBO0FBWlksUUFBQSxXQUFXLGVBWXZCO0FBQ00sS0FBSyxVQUFVLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBaUIsRUFBRSxTQUE4QixHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBaUI7SUFDOUcsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNsQyxjQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxPQUFPLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2IsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDN0I7UUFDRCxPQUFPLElBQUEsbUJBQVcsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBUkQsNEJBUUM7QUFFTSxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsT0FBaUIsRUFBRSxFQUFFO0lBQy9DLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQTtJQUNoQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQTtJQUMvQyxjQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxTQUFTLENBQUMsQ0FBQTtJQUM3RCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUEsV0FBTyxFQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNuQyxPQUFPLENBQUMsT0FBTyxJQUFJLGNBQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMzRCxPQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoRCxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUMxQixDQUFDLENBQUE7QUFUWSxRQUFBLE9BQU8sV0FTbkIifQ==
|
||||
33
packages/bot/lib/media/images/index.d.ts
vendored
Normal file
33
packages/bot/lib/media/images/index.d.ts
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
export * from './resize';
|
||||
export * from './convert';
|
||||
export * from './watermark';
|
||||
import * as sharp from 'sharp';
|
||||
import { IResizeOptions } from '../../..';
|
||||
export declare const GLOB_BASIC = "png|jpg|tiff|jpeg|webp";
|
||||
export declare const GLOB_MIN = "*.{png,jpg,jpeg,PNG,JPG,JPEG}";
|
||||
export declare const files: (dir: any, glob: any) => any;
|
||||
export declare const getFormats: (src: any, folder: any) => {
|
||||
src: string;
|
||||
dist: string;
|
||||
format: string;
|
||||
}[];
|
||||
export declare const getThumbnailOptions: (src: any, format: any) => {
|
||||
src: string;
|
||||
dist: string;
|
||||
format: any;
|
||||
}[];
|
||||
export declare const thumbnails: (options: IResizeOptions) => Promise<any>;
|
||||
export declare const meta: (file: any) => Promise<sharp.Metadata>;
|
||||
export declare const format: (formats: any, options?: {
|
||||
cache: boolean;
|
||||
png: boolean;
|
||||
}) => Promise<sharp.Metadata[][]>;
|
||||
export declare const getResizePatterns: (product: any, folder: any, percent?: number) => {
|
||||
src: string;
|
||||
dist: string;
|
||||
percent: number;
|
||||
}[];
|
||||
export declare const resize: (patterns: any, options?: {
|
||||
cache: boolean;
|
||||
}) => Promise<void[][]>;
|
||||
export declare const resizeSharp: (patterns: any) => Promise<sharp.Metadata[][]>;
|
||||
169
packages/bot/lib/media/images/index.js
Normal file
169
packages/bot/lib/media/images/index.js
Normal file
File diff suppressed because one or more lines are too long
6
packages/bot/lib/media/images/lib.d.ts
vendored
Normal file
6
packages/bot/lib/media/images/lib.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
/// <reference types="node" />
|
||||
import * as sharp from 'sharp';
|
||||
export declare const fileAsBuffer: (path: string) => Buffer;
|
||||
export declare const base64ToBuffer: (b64string: string) => Promise<Buffer>;
|
||||
export declare const imageToBase64: (imagePath: string) => Promise<string>;
|
||||
export declare const meta: (file: any, image: sharp.Sharp) => Promise<sharp.Metadata | null>;
|
||||
36
packages/bot/lib/media/images/lib.js
Normal file
36
packages/bot/lib/media/images/lib.js
Normal file
@ -0,0 +1,36 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.meta = exports.imageToBase64 = exports.base64ToBuffer = exports.fileAsBuffer = void 0;
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const fs_1 = require("@polymech/fs");
|
||||
const __1 = require("../../..");
|
||||
const fileAsBuffer = (path) => (0, fs_1.sync)(path, 'buffer') || Buffer.from("-");
|
||||
exports.fileAsBuffer = fileAsBuffer;
|
||||
const base64ToBuffer = async (b64string) => Buffer.from(b64string, 'base64');
|
||||
exports.base64ToBuffer = base64ToBuffer;
|
||||
const imageToBase64 = async (imagePath) => {
|
||||
try {
|
||||
const imageBuffer = await fs.promises.readFile(imagePath);
|
||||
const imageBase64 = imageBuffer.toString('base64');
|
||||
const mimeType = path.extname(imagePath).slice(1);
|
||||
const dataUri = `data:image/${mimeType};base64,${imageBase64}`;
|
||||
return dataUri;
|
||||
}
|
||||
catch (error) {
|
||||
throw new Error(`Failed to convert image to base64: ${error}`);
|
||||
}
|
||||
};
|
||||
exports.imageToBase64 = imageToBase64;
|
||||
const meta = (file, image) => {
|
||||
return new Promise((resolve) => {
|
||||
image.metadata().then((meta) => {
|
||||
resolve(meta);
|
||||
}).catch((e) => {
|
||||
__1.logger.error(`Error creating meta data ${file}`);
|
||||
resolve(null);
|
||||
});
|
||||
});
|
||||
};
|
||||
exports.meta = meta;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZWRpYS9pbWFnZXMvbGliLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE0QjtBQUM1Qix5QkFBd0I7QUFFeEIscUNBQTJDO0FBQzNDLGdDQUFpQztBQUUxQixNQUFNLFlBQVksR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBQSxTQUFJLEVBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFBbkYsUUFBQSxZQUFZLGdCQUF1RTtBQUV6RixNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQUUsU0FBaUIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFBOUUsUUFBQSxjQUFjLGtCQUFnRTtBQUVwRixNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsU0FBaUIsRUFBbUIsRUFBRTtJQUN0RSxJQUFJO1FBQ0EsTUFBTSxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLGNBQWMsUUFBUSxXQUFXLFdBQVcsRUFBRSxDQUFDO1FBQy9ELE9BQU8sT0FBTyxDQUFDO0tBQ2xCO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ2xFO0FBQ0wsQ0FBQyxDQUFBO0FBVlksUUFBQSxhQUFhLGlCQVV6QjtBQUVNLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQWtCLEVBQWtDLEVBQUU7SUFDN0UsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzNCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDWCxVQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQ2hELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBO0FBVFksUUFBQSxJQUFJLFFBU2hCIn0=
|
||||
5
packages/bot/lib/media/images/resize.d.ts
vendored
Normal file
5
packages/bot/lib/media/images/resize.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
import * as sharp from 'sharp';
|
||||
import { IOptions, IResizeOptions } from '../../../index';
|
||||
export declare const resizeFile: (source: string, target: string, onNode: (data: sharp.Sharp) => void, options: IResizeOptions) => Promise<sharp.Sharp | undefined>;
|
||||
export declare const _resize: (file: any, targets: string[], onNode: (data: any) => void, options: IOptions) => Promise<(void | sharp.Sharp)[]>;
|
||||
export declare const resize: (options: IResizeOptions) => Promise<any>;
|
||||
154
packages/bot/lib/media/images/resize.js
Normal file
154
packages/bot/lib/media/images/resize.js
Normal file
File diff suppressed because one or more lines are too long
2
packages/bot/lib/media/images/watermark.d.ts
vendored
Normal file
2
packages/bot/lib/media/images/watermark.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
import { IOptions } from '../../../types';
|
||||
export declare const watermark: (options: IOptions) => Promise<any>;
|
||||
52
packages/bot/lib/media/images/watermark.js
Normal file
52
packages/bot/lib/media/images/watermark.js
Normal file
@ -0,0 +1,52 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.watermark = void 0;
|
||||
const bluebird = require("bluebird");
|
||||
const bluebird_1 = require("bluebird");
|
||||
const write_1 = require("@polymech/fs/write");
|
||||
const index_1 = require("../../../index");
|
||||
const lib_1 = require("./lib");
|
||||
const novita_sdk_1 = require("novita-sdk");
|
||||
const __1 = require("../../");
|
||||
const removeWatermark = async (file, target, onNode = () => { }, options) => {
|
||||
const novitaClient = new novita_sdk_1.NovitaSDK(options.key);
|
||||
const params = {
|
||||
image_file: await (0, lib_1.imageToBase64)(file)
|
||||
//"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD",
|
||||
};
|
||||
try {
|
||||
const wMark = await novitaClient.removeWatermark(params);
|
||||
index_1.logger.info(`Watermark removed: ${file} to ${target}`);
|
||||
(0, write_1.async)(target, (0, lib_1.base64ToBuffer)(wMark.image_file));
|
||||
}
|
||||
catch (error) {
|
||||
index_1.logger.error(`Failed to remove watermark: ${error.msg}`);
|
||||
}
|
||||
};
|
||||
const _watermark = async (file, targets, onNode = () => { }, options) => {
|
||||
return bluebird_1.Promise.resolve(targets).map((target) => {
|
||||
options.verbose && index_1.logger.debug(`Removing Watermark ${file} to ${target}`);
|
||||
if (options.dry) {
|
||||
return bluebird.resolve();
|
||||
}
|
||||
return removeWatermark(file, target, onNode, options);
|
||||
}, { concurrency: 1 });
|
||||
};
|
||||
const watermark = async (options) => {
|
||||
// reporting, stub
|
||||
let reports = [];
|
||||
const onNode = (data) => reports.push(data);
|
||||
if (options.srcInfo) {
|
||||
options.verbose && index_1.logger.info(`Convert ${options.srcInfo.FILES.length} files`);
|
||||
return await bluebird_1.Promise.resolve(options.srcInfo.FILES).map((f) => {
|
||||
const outputs = (0, __1.targets)(f, options);
|
||||
options.verbose && index_1.logger.info(`Convert ${f} to `, outputs);
|
||||
return _watermark(f, outputs, onNode, options);
|
||||
}, { concurrency: 1 });
|
||||
}
|
||||
else {
|
||||
options.debug && index_1.logger.error(`Invalid source info`);
|
||||
}
|
||||
};
|
||||
exports.watermark = watermark;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0ZXJtYXJrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZWRpYS9pbWFnZXMvd2F0ZXJtYXJrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLHFDQUFvQztBQUNwQyx1Q0FBOEM7QUFLOUMsOENBQW1EO0FBS25ELDBDQUV1QjtBQU92QiwrQkFHYztBQU1kLDJDQUFzQztBQUN0Qyw4QkFBOEM7QUFFOUMsTUFBTSxlQUFlLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBOEIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQXVCLEVBQUUsRUFBRTtJQUM3RyxNQUFNLFlBQVksR0FBRyxJQUFJLHNCQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9DLE1BQU0sTUFBTSxHQUFHO1FBQ1gsVUFBVSxFQUFFLE1BQU0sSUFBQSxtQkFBYSxFQUFDLElBQUksQ0FBQztRQUNyQyx1REFBdUQ7S0FDMUQsQ0FBQTtJQUNELElBQUk7UUFDQSxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEQsY0FBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxPQUFPLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDdEQsSUFBQSxhQUFLLEVBQUMsTUFBTSxFQUFDLElBQUEsb0JBQWMsRUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtLQUNqRDtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ1osY0FBTSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7S0FDM0Q7QUFDTCxDQUFDLENBQUE7QUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQWlCLEVBQUUsU0FBOEIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQWlCLEVBQUUsRUFBRTtJQUM3RyxPQUFPLGtCQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQzVDLE9BQU8sQ0FBQyxPQUFPLElBQUksY0FBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxPQUFPLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDMUUsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2IsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUE7U0FDNUI7UUFDRCxPQUFPLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUMxQixDQUFDLENBQUE7QUFFTSxNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQUUsT0FBaUIsRUFBRSxFQUFFO0lBRWpELGtCQUFrQjtJQUNsQixJQUFJLE9BQU8sR0FBUSxFQUFFLENBQUE7SUFDckIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDaEQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQ2pCLE9BQU8sQ0FBQyxPQUFPLElBQUksY0FBTSxDQUFDLElBQUksQ0FBQyxXQUFXLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUE7UUFDL0UsT0FBTyxNQUFNLGtCQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBQSxXQUFPLEVBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ25DLE9BQU8sQ0FBQyxPQUFPLElBQUksY0FBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzNELE9BQU8sVUFBVSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2xELENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0tBQ3pCO1NBQU07UUFDSCxPQUFPLENBQUMsS0FBSyxJQUFJLGNBQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQTtLQUN2RDtBQUNMLENBQUMsQ0FBQTtBQWZZLFFBQUEsU0FBUyxhQWVyQiJ9
|
||||
23
packages/bot/lib/media/video/convert.d.ts
vendored
Normal file
23
packages/bot/lib/media/video/convert.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
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>;
|
||||
130
packages/bot/lib/media/video/convert.js
Normal file
130
packages/bot/lib/media/video/convert.js
Normal file
File diff suppressed because one or more lines are too long
133
packages/bot/lib/media/video/index.d.ts
vendored
Normal file
133
packages/bot/lib/media/video/index.d.ts
vendored
Normal file
@ -0,0 +1,133 @@
|
||||
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;
|
||||
format?: "mp3" | "wav" | "mp4" | "mkv" | "mov" | "avi" | "flv" | "wmv" | "webm" | "ogg";
|
||||
preset?: string;
|
||||
duration?: string;
|
||||
output?: string;
|
||||
audioCodec?: "aac" | "mp3" | "vorbis" | "flac" | "opus" | "wav";
|
||||
codec?: "copy" | "libx264" | "libx265" | "libvpx-vp9" | "libaom-av1" | "libtheora" | "mpeg2video";
|
||||
bitrate?: string;
|
||||
framerate?: number;
|
||||
resolution?: string;
|
||||
audioBitrate?: string;
|
||||
audioChannels?: number;
|
||||
crf?: number;
|
||||
startTime?: string;
|
||||
overwrite?: boolean;
|
||||
loglevel?: "error" | "warning" | "info" | "debug" | "verbose" | "quiet" | "panic" | "fatal" | "trace";
|
||||
}, {
|
||||
input?: string;
|
||||
format?: "mp3" | "wav" | "mp4" | "mkv" | "mov" | "avi" | "flv" | "wmv" | "webm" | "ogg";
|
||||
preset?: string;
|
||||
duration?: string;
|
||||
output?: string;
|
||||
audioCodec?: "aac" | "mp3" | "vorbis" | "flac" | "opus" | "wav";
|
||||
codec?: "copy" | "libx264" | "libx265" | "libvpx-vp9" | "libaom-av1" | "libtheora" | "mpeg2video";
|
||||
bitrate?: string;
|
||||
framerate?: number;
|
||||
resolution?: string;
|
||||
audioBitrate?: string;
|
||||
audioChannels?: number;
|
||||
crf?: number;
|
||||
startTime?: string;
|
||||
overwrite?: boolean;
|
||||
loglevel?: "error" | "warning" | "info" | "debug" | "verbose" | "quiet" | "panic" | "fatal" | "trace";
|
||||
}>;
|
||||
export type FFmpegOptions = z.infer<typeof ffmpegOptionsSchema>;
|
||||
85
packages/bot/lib/media/video/index.js
Normal file
85
packages/bot/lib/media/video/index.js
Normal file
@ -0,0 +1,85 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
||||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.E_Codec = exports.E_AudioCodec = exports.E_LogLevel = exports.E_Format = exports.GLOB_BASIC = void 0;
|
||||
const zod_1 = require("zod");
|
||||
const FfmpegCommand = require('fluent-ffmpeg');
|
||||
exports.GLOB_BASIC = 'png|jpg|tiff|jpeg|webp';
|
||||
__exportStar(require("./resize"), exports);
|
||||
__exportStar(require("./convert"), exports);
|
||||
exports.E_Format = {
|
||||
MP4: 'mp4',
|
||||
MKV: 'mkv',
|
||||
MOV: 'mov',
|
||||
AVI: 'avi',
|
||||
FLV: 'flv',
|
||||
WMV: 'wmv',
|
||||
WEBM: 'webm',
|
||||
MP3: 'mp3',
|
||||
OGG: 'ogg',
|
||||
WAV: 'wav'
|
||||
};
|
||||
exports.E_LogLevel = {
|
||||
QUIET: 'quiet',
|
||||
PANIC: 'panic',
|
||||
FATAL: 'fatal',
|
||||
ERROR: 'error',
|
||||
WARNING: 'warning',
|
||||
INFO: 'info',
|
||||
VERBOSE: 'verbose',
|
||||
DEBUG: 'debug',
|
||||
TRACE: 'trace'
|
||||
};
|
||||
exports.E_AudioCodec = {
|
||||
AAC: 'aac',
|
||||
MP3: 'mp3',
|
||||
VORBIS: 'vorbis',
|
||||
FLAC: 'flac',
|
||||
OPUS: 'opus',
|
||||
WAV: 'wav'
|
||||
};
|
||||
exports.E_Codec = {
|
||||
LIBX264: 'libx264',
|
||||
LIBX265: 'libx265',
|
||||
LIBVP9: 'libvpx-vp9',
|
||||
LIBAOM: 'libaom-av1',
|
||||
LIBTHEORA: 'libtheora',
|
||||
MPEG2VIDEO: 'mpeg2video',
|
||||
COPY: 'copy'
|
||||
};
|
||||
const formatEnum = zod_1.z.nativeEnum(exports.E_Format);
|
||||
const loglevelEnum = zod_1.z.nativeEnum(exports.E_LogLevel);
|
||||
const audioCodecEnum = zod_1.z.nativeEnum(exports.E_AudioCodec);
|
||||
const codecEnum = zod_1.z.nativeEnum(exports.E_Codec);
|
||||
const ffmpegOptionsSchema = zod_1.z.object({
|
||||
input: zod_1.z.string().describe("Path to the input file"),
|
||||
output: zod_1.z.string().describe("Path to the output file"),
|
||||
codec: codecEnum.optional().describe("Codec to be used for encoding (e.g., 'libx264', 'aac')").default(exports.E_Codec.LIBX264),
|
||||
bitrate: zod_1.z.string().optional().describe("Bitrate for encoding (e.g., '500k', '2M')"),
|
||||
framerate: zod_1.z.number().optional().describe("Frames per second (e.g., 30, 60)").default(30),
|
||||
resolution: zod_1.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(exports.E_AudioCodec.AAC),
|
||||
audioBitrate: zod_1.z.string().optional().describe("Bitrate for audio encoding (e.g., '128k', '256k')"),
|
||||
audioChannels: zod_1.z.number().optional().describe("Number of audio channels (e.g., 1 for mono, 2 for stereo)").default(2),
|
||||
preset: zod_1.z.string().optional().describe("Encoding preset to use for balancing speed and quality (e.g., 'ultrafast', 'medium', 'slow')").default('medium'),
|
||||
crf: zod_1.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(exports.E_Format.MP4),
|
||||
startTime: zod_1.z.string().optional().describe("Start time of the input file (e.g., '00:01:30' for 1 minute 30 seconds)"),
|
||||
duration: zod_1.z.string().optional().describe("Duration of the output (e.g., '00:05:00' for 5 minutes)"),
|
||||
overwrite: zod_1.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(exports.E_LogLevel.INFO),
|
||||
});
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lZGlhL3ZpZGVvL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsNkJBQXVCO0FBRXZCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQTtBQUVqQyxRQUFBLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQTtBQUNsRCwyQ0FBd0I7QUFDeEIsNENBQXlCO0FBRVosUUFBQSxRQUFRLEdBQUc7SUFDcEIsR0FBRyxFQUFFLEtBQUs7SUFDVixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsR0FBRyxFQUFFLEtBQUs7SUFDVixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsR0FBRyxFQUFFLEtBQUs7Q0FDRixDQUFDO0FBRUUsUUFBQSxVQUFVLEdBQUc7SUFDeEIsS0FBSyxFQUFFLE9BQU87SUFDZCxLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87SUFDZCxPQUFPLEVBQUUsU0FBUztJQUNsQixJQUFJLEVBQUUsTUFBTTtJQUNaLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87Q0FDTixDQUFDO0FBRUUsUUFBQSxZQUFZLEdBQUc7SUFDMUIsR0FBRyxFQUFFLEtBQUs7SUFDVixHQUFHLEVBQUUsS0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsS0FBSztDQUNGLENBQUM7QUFFRSxRQUFBLE9BQU8sR0FBRztJQUNyQixPQUFPLEVBQUUsU0FBUztJQUNsQixP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
|
||||
1
packages/bot/lib/media/video/lib.d.ts
vendored
Normal file
1
packages/bot/lib/media/video/lib.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export {};
|
||||
3
packages/bot/lib/media/video/lib.js
Normal file
3
packages/bot/lib/media/video/lib.js
Normal file
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZWRpYS92aWRlby9saWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
||||
6
packages/bot/lib/media/video/resize.d.ts
vendored
Normal file
6
packages/bot/lib/media/video/resize.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
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>;
|
||||
160
packages/bot/lib/media/video/resize.js
Normal file
160
packages/bot/lib/media/video/resize.js
Normal file
File diff suppressed because one or more lines are too long
18
packages/bot/lib/process/index.d.ts
vendored
Normal file
18
packages/bot/lib/process/index.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
export declare enum STATUS {
|
||||
OK = 0,
|
||||
ERROR = 1,
|
||||
PENDING = 2
|
||||
}
|
||||
export declare class Process {
|
||||
binary: string;
|
||||
cwd: string;
|
||||
args: string;
|
||||
constructor(options?: any);
|
||||
optionsToString(options: any): string;
|
||||
optionsToArray(options: any): string[];
|
||||
exec(command: string, options?: any, args?: any[]): Promise<any>;
|
||||
}
|
||||
export declare class Helper {
|
||||
static run(cwd: any, command: string, gitArgs: string[]): Promise<any>;
|
||||
static runBin(cwd: any, bin: any, command: string, gitArgs: string[]): Promise<any>;
|
||||
}
|
||||
149
packages/bot/lib/process/index.js
Normal file
149
packages/bot/lib/process/index.js
Normal file
File diff suppressed because one or more lines are too long
1
packages/bot/lib/process/index.js.map
Normal file
1
packages/bot/lib/process/index.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/process/index.ts"],"names":[],"mappings":"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"}
|
||||
14562
packages/bot/package-lock.json
generated
Normal file
14562
packages/bot/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
70
packages/bot/package.json
Normal file
70
packages/bot/package.json
Normal file
@ -0,0 +1,70 @@
|
||||
{
|
||||
"name": "@polymech/media",
|
||||
"version": "0.3.0",
|
||||
"typings": "index.d.ts",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"bin": {
|
||||
"pm-media": "dist-in/main.js"
|
||||
},
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./dist-in/index.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@polymech/cache": "file:../cache",
|
||||
"@polymech/commons": "file:../commons",
|
||||
"@polymech/core": "file:../core",
|
||||
"@polymech/fs": "file:../fs",
|
||||
"@polymech/log": "file:../log",
|
||||
"@types/fluent-ffmpeg": "^2.1.27",
|
||||
"@types/node": "^24.0.10",
|
||||
"apify": "^3.4.4",
|
||||
"bluebird": "^3.7.2",
|
||||
"crawlee": "^3.14.1",
|
||||
"download": "^8.0.0",
|
||||
"fast-glob": "^3.3.2",
|
||||
"fluent-ffmpeg": "^2.1.3",
|
||||
"glob": "^11.0.0",
|
||||
"js-beautify": "^1.14.6",
|
||||
"mupdf": "^1.3.3",
|
||||
"normalize-url": "^8.0.2",
|
||||
"p-map": "^7.0.3",
|
||||
"puppeteer": "^24.16.0",
|
||||
"slugify": "^1.6.6",
|
||||
"ts-md5": "^2.0.1",
|
||||
"tslog": "^4.9.3",
|
||||
"typescript": "^5.8.3",
|
||||
"yargs": "^18.0.0",
|
||||
"zod": "^3.25.74"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/glob": "^8.1.0",
|
||||
"@types/showdown": "^2.0.6",
|
||||
"vitest": "^3.1.1"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "tsc; mocha --full-trace mocha \"spec/**/*.spec.js\"",
|
||||
"test:pdf": "vitest run tests/pdf",
|
||||
"test-with-coverage": "istanbul cover node_modules/.bin/_mocha -- 'spec/**/*.spec.js'",
|
||||
"lint": "tslint --project=./tsconfig.json",
|
||||
"build": "tsc -p .",
|
||||
"dev": "tsc -p . --declaration -w",
|
||||
"typings": "tsc --declaration",
|
||||
"docs": "npx typedoc src/index.ts",
|
||||
"dev-test-watch": "mocha-typescript-watch"
|
||||
},
|
||||
"homepage": "https://git.osr-plastic.org/osr-plastic/osr-media",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "://git.osr-plastic.org/osr-plastic/osr-media.git"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.0.0"
|
||||
},
|
||||
"license": "BSD-3-Clause",
|
||||
"keywords": [
|
||||
"typescript"
|
||||
]
|
||||
}
|
||||
BIN
packages/bot/scripts/1.jpg
Normal file
BIN
packages/bot/scripts/1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
BIN
packages/bot/scripts/2.jpg
Normal file
BIN
packages/bot/scripts/2.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 679 KiB |
1
packages/bot/scripts/combine-pics.sh
Normal file
1
packages/bot/scripts/combine-pics.sh
Normal file
@ -0,0 +1 @@
|
||||
convert 1.jpg 2.jpg -append result-sprite.jpg
|
||||
85
packages/bot/scripts/createVideoPreview.sh
Normal file
85
packages/bot/scripts/createVideoPreview.sh
Normal file
@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
# Bash script that generates film strip video preview using ffmpeg
|
||||
# You can see live demo: http://jsfiddle.net/r6wz0nz6/2/
|
||||
# Tutorial on Binpress.com: http://www.binpress.com/tutorial/generating-nice-movie-previews-with-ffmpeg/138
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "usage: ./movie_preview.sh VIDEO [HEIGHT=120] [COLS=100] [ROWS=1] [OUTPUT]"
|
||||
exit
|
||||
fi
|
||||
|
||||
MOVIE=$1
|
||||
# get video name without the path and extension
|
||||
MOVIE_NAME=`basename $MOVIE`
|
||||
OUT_DIR=`pwd`
|
||||
|
||||
HEIGHT=$2
|
||||
COLS=$3
|
||||
ROWS=$4
|
||||
OUT_FILENAME=$5
|
||||
|
||||
if [ -z "$HEIGHT" ]; then
|
||||
HEIGHT=120
|
||||
fi
|
||||
if [ -z "$COLS" ]; then
|
||||
COLS=100
|
||||
fi
|
||||
if [ -z "$ROWS" ]; then
|
||||
ROWS=1
|
||||
fi
|
||||
if [ -z "$OUT_FILENAME" ]; then
|
||||
OUT_FILENAME=`echo ${MOVIE_NAME%.*}_preview.jpg`
|
||||
fi
|
||||
|
||||
OUT_FILEPATH=`echo $OUT_DIR/$OUT_FILENAME`
|
||||
|
||||
TOTAL_IMAGES=`echo "$COLS*$ROWS" | bc`
|
||||
|
||||
# get total number of frames in the video
|
||||
# ffprobe is fast but not 100% reliable. It might not detect number of frames correctly!
|
||||
NB_FRAMES=`ffprobe -show_streams "$MOVIE" 2> /dev/null | grep nb_frames | head -n1 | sed 's/.*=//'`
|
||||
# `-show-streams` Show all streams found in the video. Each video has usualy two streams (video and audio).
|
||||
# `head -n1` We care only about the video stream which comes first.
|
||||
# `sed 's/.*=//'` Grab everything after `=`.
|
||||
|
||||
if [ "$NB_FRAMES" = "N/A" ]; then
|
||||
# as a fallback we'll use ffmpeg. This command basically copies this video to /dev/null and it counts
|
||||
# frames in the process. It's slower (few seconds usually) than ffprobe but works everytime.
|
||||
NB_FRAMES=`ffmpeg -nostats -i "$MOVIE" -vcodec copy -f rawvideo -y /dev/null 2>&1 | grep frame | awk '{split($0,a,"fps")}END{print a[1]}' | sed 's/.*= *//'`
|
||||
# I know, that `awk` and `sed` parts look crazy but it has to be like this because ffmpeg can
|
||||
# `-nostats` By default, `ffmpeg` prints progress information but that would be immediately caught by `grep`
|
||||
# because it would contain word `frame` and therefore output of this entire command would be totally
|
||||
# random. `-nostats` forces `ffmpeg` to print just the final result.
|
||||
# `-i "$MOVIE"` Input file
|
||||
# `-vcodec copy -f rawvideo` We don't want to do any reformating. Force `ffmpeg` to read and write the video as is.
|
||||
# `-y /dev/null` Dump read video data. We just want it to count frames we don't care about the data.
|
||||
# `awk ...` The line we're interested in has format might look like `frame= 42` or `frame=325`. Because of that
|
||||
# extra space we can't just use `awk` to print the first column and we have to cut everything from the
|
||||
# beggining of the line to the term `fps` (eg. `frame= 152`).
|
||||
# `sed ...` Grab everything after `=` and ignore any spaces
|
||||
fi
|
||||
|
||||
# calculate offset between two screenshots, drop the floating point part
|
||||
NTH_FRAME=`echo "$NB_FRAMES/$TOTAL_IMAGES" | bc`
|
||||
echo "capture every ${NTH_FRAME}th frame out of $NB_FRAMES frames"
|
||||
|
||||
# make sure output dir exists
|
||||
mkdir -p $OUT_DIR
|
||||
|
||||
FFMPEG_CMD="ffmpeg -loglevel panic -i \"$MOVIE\" -y -frames 1 -q:v 1 -vf \"select=not(mod(n\,$NTH_FRAME)),scale=-1:${HEIGHT},tile=${COLS}x${ROWS}\" \"$OUT_FILEPATH\""
|
||||
# `-loglevel panic` We don’t want to see any output. You can remove this option if you’re having any problem to see what went wrong
|
||||
# `-i "$MOVIE"` Input file
|
||||
# `-y` Override any existing output file
|
||||
# `-frames 1` Tell `ffmpeg` that output from this command is just a single image (one frame).
|
||||
# `-q:v 3` Output quality where `0` is the best.
|
||||
# `-vf \"select=` That's where all the magic happens. Selector function for [video filter](https://trac.ffmpeg.org/wiki/FilteringGuide).
|
||||
# # `not(mod(n\,58))` Select one frame every `58` frames [see the documentation](https://www.ffmpeg.org/ffmpeg-filters.html#Examples-34).
|
||||
# # `scale=-1:120` Resize to fit `120px` height, width is adjusted automatically to keep correct aspect ration.
|
||||
# # `tile=${COLS}x${ROWS}` Layout captured frames into this grid
|
||||
|
||||
# print enire command for debugging purposes
|
||||
# echo $FFMPEG_CMD
|
||||
|
||||
echo $OUT_FILEPATH
|
||||
|
||||
eval $FFMPEG_CMD
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user