@prosopo/datasets-fs 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/cjs/cli/cli.cjs +55 -0
- package/dist/cjs/index.cjs +3 -1
- package/dist/cli/cli.d.ts +9 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +54 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/cliCommand.d.ts +17 -0
- package/dist/cli/cliCommand.d.ts.map +1 -0
- package/dist/cli/cliCommand.js +36 -0
- package/dist/cli/cliCommand.js.map +1 -0
- package/dist/cli/cliCommandComposite.d.ts +14 -0
- package/dist/cli/cliCommandComposite.d.ts.map +1 -0
- package/dist/cli/cliCommandComposite.js +34 -0
- package/dist/cli/cliCommandComposite.js.map +1 -0
- package/dist/cli.js +21 -35
- package/dist/cli.js.map +1 -1
- package/dist/commands/flatten.d.ts +56 -0
- package/dist/commands/flatten.d.ts.map +1 -0
- package/dist/commands/flatten.js +103 -0
- package/dist/commands/flatten.js.map +1 -0
- package/dist/commands/generate.d.ts +114 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +151 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/generateV1.d.ts +174 -0
- package/dist/commands/generateV1.d.ts.map +1 -0
- package/dist/commands/generateV1.js +178 -0
- package/dist/commands/generateV1.js.map +1 -0
- package/dist/commands/generateV2.d.ts +184 -0
- package/dist/commands/generateV2.d.ts.map +1 -0
- package/dist/commands/generateV2.js +204 -0
- package/dist/commands/generateV2.js.map +1 -0
- package/dist/commands/get.d.ts +35 -0
- package/dist/commands/get.d.ts.map +1 -0
- package/dist/commands/get.js +81 -0
- package/dist/commands/get.js.map +1 -0
- package/dist/commands/labels.d.ts +46 -0
- package/dist/commands/labels.d.ts.map +1 -0
- package/dist/commands/labels.js +43 -0
- package/dist/commands/labels.js.map +1 -0
- package/dist/commands/relocate.d.ts +68 -0
- package/dist/commands/relocate.d.ts.map +1 -0
- package/dist/commands/relocate.js +75 -0
- package/dist/commands/relocate.js.map +1 -0
- package/dist/commands/resize.d.ts +66 -0
- package/dist/commands/resize.d.ts.map +1 -0
- package/dist/commands/resize.js +118 -0
- package/dist/commands/resize.js.map +1 -0
- package/dist/{generate/distinct/dummy.d.ts.map → dummy.d.ts.map} +1 -1
- package/dist/dummy.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tests/data/flat_resized/labels.json +3 -0
- package/dist/tests/data/flat_resized/relocated_data.json +364 -0
- package/dist/tests/mocked.test.d.ts +2 -0
- package/dist/tests/mocked.test.d.ts.map +1 -0
- package/dist/tests/mocked.test.js +271 -0
- package/dist/tests/mocked.test.js.map +1 -0
- package/dist/tests/utils.d.ts +35 -0
- package/dist/tests/utils.d.ts.map +1 -0
- package/dist/tests/utils.js +120 -0
- package/dist/tests/utils.js.map +1 -0
- package/dist/utils/input.d.ts +24 -0
- package/dist/utils/input.d.ts.map +1 -0
- package/dist/utils/input.js +34 -0
- package/dist/utils/input.js.map +1 -0
- package/dist/utils/inputOutput.d.ts +20 -0
- package/dist/utils/inputOutput.d.ts.map +1 -0
- package/dist/utils/inputOutput.js +10 -0
- package/dist/utils/inputOutput.js.map +1 -0
- package/dist/utils/output.d.ts +37 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +63 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +5 -6
- package/dist/cjs/cli.cjs +0 -34
- package/dist/cjs/flatten/args.cjs +0 -9
- package/dist/cjs/flatten/cli.cjs +0 -28
- package/dist/cjs/flatten/flatten.cjs +0 -55
- package/dist/cjs/generate/args.cjs +0 -16
- package/dist/cjs/generate/cli.cjs +0 -50
- package/dist/cjs/generate/distinct/args.cjs +0 -11
- package/dist/cjs/generate/distinct/cli.cjs +0 -28
- package/dist/cjs/generate/distinct/generate.cjs +0 -174
- package/dist/cjs/generate/union/args.cjs +0 -12
- package/dist/cjs/generate/union/cli.cjs +0 -31
- package/dist/cjs/generate/union/generate.cjs +0 -151
- package/dist/cjs/generate/util.cjs +0 -21
- package/dist/cjs/get/args.cjs +0 -7
- package/dist/cjs/get/cli.cjs +0 -20
- package/dist/cjs/get/get.cjs +0 -53
- package/dist/cjs/labels/args.cjs +0 -7
- package/dist/cjs/labels/cli.cjs +0 -20
- package/dist/cjs/labels/labels.cjs +0 -21
- package/dist/cjs/relocate/args.cjs +0 -9
- package/dist/cjs/relocate/cli.cjs +0 -27
- package/dist/cjs/relocate/relocate.cjs +0 -36
- package/dist/cjs/scale/args.cjs +0 -11
- package/dist/cjs/scale/cli.cjs +0 -34
- package/dist/cjs/scale/scale.cjs +0 -55
- package/dist/flatten/args.d.ts +0 -16
- package/dist/flatten/args.d.ts.map +0 -1
- package/dist/flatten/args.js +0 -8
- package/dist/flatten/args.js.map +0 -1
- package/dist/flatten/cli.d.ts +0 -18
- package/dist/flatten/cli.d.ts.map +0 -1
- package/dist/flatten/cli.js +0 -30
- package/dist/flatten/cli.js.map +0 -1
- package/dist/flatten/flatten.d.ts +0 -5
- package/dist/flatten/flatten.d.ts.map +0 -1
- package/dist/flatten/flatten.js +0 -65
- package/dist/flatten/flatten.js.map +0 -1
- package/dist/flatten/index.d.ts +0 -4
- package/dist/flatten/index.d.ts.map +0 -1
- package/dist/flatten/index.js +0 -4
- package/dist/flatten/index.js.map +0 -1
- package/dist/generate/args.d.ts +0 -37
- package/dist/generate/args.d.ts.map +0 -1
- package/dist/generate/args.js +0 -15
- package/dist/generate/args.js.map +0 -1
- package/dist/generate/cli.d.ts +0 -32
- package/dist/generate/cli.d.ts.map +0 -1
- package/dist/generate/cli.js +0 -62
- package/dist/generate/cli.js.map +0 -1
- package/dist/generate/distinct/args.d.ts +0 -49
- package/dist/generate/distinct/args.d.ts.map +0 -1
- package/dist/generate/distinct/args.js +0 -10
- package/dist/generate/distinct/args.js.map +0 -1
- package/dist/generate/distinct/cli.d.ts +0 -20
- package/dist/generate/distinct/cli.d.ts.map +0 -1
- package/dist/generate/distinct/cli.js +0 -31
- package/dist/generate/distinct/cli.js.map +0 -1
- package/dist/generate/distinct/dummy.js.map +0 -1
- package/dist/generate/distinct/generate.d.ts +0 -5
- package/dist/generate/distinct/generate.d.ts.map +0 -1
- package/dist/generate/distinct/generate.js +0 -186
- package/dist/generate/distinct/generate.js.map +0 -1
- package/dist/generate/distinct/index.d.ts +0 -4
- package/dist/generate/distinct/index.d.ts.map +0 -1
- package/dist/generate/distinct/index.js +0 -4
- package/dist/generate/distinct/index.js.map +0 -1
- package/dist/generate/index.d.ts +0 -5
- package/dist/generate/index.d.ts.map +0 -1
- package/dist/generate/index.js +0 -5
- package/dist/generate/index.js.map +0 -1
- package/dist/generate/union/args.d.ts +0 -52
- package/dist/generate/union/args.d.ts.map +0 -1
- package/dist/generate/union/args.js +0 -11
- package/dist/generate/union/args.js.map +0 -1
- package/dist/generate/union/cli.d.ts +0 -22
- package/dist/generate/union/cli.d.ts.map +0 -1
- package/dist/generate/union/cli.js +0 -35
- package/dist/generate/union/cli.js.map +0 -1
- package/dist/generate/union/generate.d.ts +0 -5
- package/dist/generate/union/generate.d.ts.map +0 -1
- package/dist/generate/union/generate.js +0 -168
- package/dist/generate/union/generate.js.map +0 -1
- package/dist/generate/union/index.d.ts +0 -4
- package/dist/generate/union/index.d.ts.map +0 -1
- package/dist/generate/union/index.js +0 -4
- package/dist/generate/union/index.js.map +0 -1
- package/dist/generate/util.d.ts +0 -6
- package/dist/generate/util.d.ts.map +0 -1
- package/dist/generate/util.js +0 -20
- package/dist/generate/util.js.map +0 -1
- package/dist/get/args.d.ts +0 -10
- package/dist/get/args.d.ts.map +0 -1
- package/dist/get/args.js +0 -6
- package/dist/get/args.js.map +0 -1
- package/dist/get/cli.d.ts +0 -14
- package/dist/get/cli.d.ts.map +0 -1
- package/dist/get/cli.js +0 -19
- package/dist/get/cli.js.map +0 -1
- package/dist/get/get.d.ts +0 -5
- package/dist/get/get.d.ts.map +0 -1
- package/dist/get/get.js +0 -60
- package/dist/get/get.js.map +0 -1
- package/dist/get/index.d.ts +0 -4
- package/dist/get/index.d.ts.map +0 -1
- package/dist/get/index.js +0 -4
- package/dist/get/index.js.map +0 -1
- package/dist/labels/args.d.ts +0 -10
- package/dist/labels/args.d.ts.map +0 -1
- package/dist/labels/args.js +0 -6
- package/dist/labels/args.js.map +0 -1
- package/dist/labels/cli.d.ts +0 -14
- package/dist/labels/cli.d.ts.map +0 -1
- package/dist/labels/cli.js +0 -19
- package/dist/labels/cli.js.map +0 -1
- package/dist/labels/index.d.ts +0 -4
- package/dist/labels/index.d.ts.map +0 -1
- package/dist/labels/index.js +0 -4
- package/dist/labels/index.js.map +0 -1
- package/dist/labels/labels.d.ts +0 -5
- package/dist/labels/labels.d.ts.map +0 -1
- package/dist/labels/labels.js +0 -22
- package/dist/labels/labels.js.map +0 -1
- package/dist/relocate/args.d.ts +0 -16
- package/dist/relocate/args.d.ts.map +0 -1
- package/dist/relocate/args.js +0 -8
- package/dist/relocate/args.js.map +0 -1
- package/dist/relocate/cli.d.ts +0 -18
- package/dist/relocate/cli.d.ts.map +0 -1
- package/dist/relocate/cli.js +0 -29
- package/dist/relocate/cli.js.map +0 -1
- package/dist/relocate/relocate.d.ts +0 -5
- package/dist/relocate/relocate.d.ts.map +0 -1
- package/dist/relocate/relocate.js +0 -40
- package/dist/relocate/relocate.js.map +0 -1
- package/dist/scale/args.d.ts +0 -22
- package/dist/scale/args.d.ts.map +0 -1
- package/dist/scale/args.js +0 -10
- package/dist/scale/args.js.map +0 -1
- package/dist/scale/cli.d.ts +0 -22
- package/dist/scale/cli.d.ts.map +0 -1
- package/dist/scale/cli.js +0 -38
- package/dist/scale/cli.js.map +0 -1
- package/dist/scale/index.d.ts +0 -4
- package/dist/scale/index.d.ts.map +0 -1
- package/dist/scale/index.js +0 -4
- package/dist/scale/index.js.map +0 -1
- package/dist/scale/scale.d.ts +0 -5
- package/dist/scale/scale.d.ts.map +0 -1
- package/dist/scale/scale.js +0 -67
- package/dist/scale/scale.js.map +0 -1
- /package/dist/{generate/distinct/dummy.d.ts → dummy.d.ts} +0 -0
- /package/dist/{generate/distinct/dummy.js → dummy.js} +0 -0
package/README.md
CHANGED
|
@@ -82,3 +82,24 @@ Commands:
|
|
|
82
82
|
e.g. `npm run -w @prosopo/datasets-fs build && node packages/datasets-fs/dist/cli.js relocate --from example.com --to web.site --data ~/bench/test/flat/data2.json`
|
|
83
83
|
1. 'scale' rescales images in a flat directory structure to a given size.
|
|
84
84
|
e.g. `npm run -w @prosopo/datasets-fs build && node packages/datasets-fs/dist/cli.js scale --data ~/bench/test/flat/data.json --out ~/bench/test/flat/images2 --overwrite --size 128`
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# Generating test data
|
|
89
|
+
The test data was generated using:
|
|
90
|
+
```
|
|
91
|
+
cli generate-v1 --min-correct 1 --max-correct 6 --labelled $PWD/src/tests/data/flat_resized/data.json --unlabelled $PWD/src/tests/data/flat_resized/data.json --out $PWD/src/tests/data/flat_resized/captchas_v1.json --solved 50 --unsolved 50 --seed 0 --allowDuplicates --seed 0
|
|
92
|
+
|
|
93
|
+
cli generate-v2 --count 100 --min-correct 1 --min-incorrect 1 --min-labelled 2 --max-labelled 7 --labelled $PWD/src/tests/data/flat_resized/data.json --unlabelled $PWD/src/tests/data/flat_resized/data.json --out $PWD/src/tests/data/flat_resized/captchas_v2.json --seed 0 --allowDuplicates --seed 0
|
|
94
|
+
|
|
95
|
+
cli relocate --from '${repo}' --to newwebsite.com --input $PWD/src/tests/data/flat_resized/data.json --output $PWD/src/tests/data/flat_resized/relocated_data.json --overwrite
|
|
96
|
+
|
|
97
|
+
cli labels --input $PWD/src/tests/data/flat_resized/data.json --output $PWD/src/tests/data/flat_resized/labels.json --overwrite
|
|
98
|
+
|
|
99
|
+
cli flatten --in $PWD/src/tests/data/hierarchical --out $PWD/src/tests/data/flat --overwrite
|
|
100
|
+
|
|
101
|
+
cli resize --square --size 128 --in $PWD/src/tests/data/flat/data.json --out $PWD/src/tests/data/flat_resized --overwrite
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
`cli` is an alias to `npm run build && npm run cli --`
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const helpers = require("yargs/helpers");
|
|
5
|
+
const yargs = require("yargs");
|
|
6
|
+
const dirname = process.cwd();
|
|
7
|
+
const logger = common.getLogger(common.LogLevel.enum.info, `${dirname}`);
|
|
8
|
+
class Cli extends common.Loggable {
|
|
9
|
+
#commands;
|
|
10
|
+
constructor(commands) {
|
|
11
|
+
super();
|
|
12
|
+
this.#commands = commands;
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
}
|
|
15
|
+
config() {
|
|
16
|
+
let y = yargs(helpers.hideBin(process.argv)).option("log-level", {
|
|
17
|
+
type: "string",
|
|
18
|
+
choices: Object.values(common.LogLevel.options),
|
|
19
|
+
default: common.LogLevel.enum.info,
|
|
20
|
+
description: "The log level"
|
|
21
|
+
}).middleware((argv) => {
|
|
22
|
+
this.logger.setLogLevel(argv.logLevel);
|
|
23
|
+
}, true);
|
|
24
|
+
this.#commands.forEach((command) => {
|
|
25
|
+
y = y.command({
|
|
26
|
+
command: command.getCommandName(),
|
|
27
|
+
describe: command.getDescription(),
|
|
28
|
+
builder: command.getOptions(),
|
|
29
|
+
handler: async (argv) => {
|
|
30
|
+
this.logger.debug(`running ${command.getCommandName()}}`);
|
|
31
|
+
const args = await command.parse(argv);
|
|
32
|
+
await command.exec(args);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
if (!this.#commands.find((c) => c.getCommandName() === "$0")) {
|
|
37
|
+
y = y.command(
|
|
38
|
+
"$0",
|
|
39
|
+
"default command",
|
|
40
|
+
(y2) => y2,
|
|
41
|
+
(argv) => {
|
|
42
|
+
throw new Error(`no command specified`);
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
y = y.demandCommand().strict().showHelpOnFail(false, "Specify --help for available options");
|
|
47
|
+
return y;
|
|
48
|
+
}
|
|
49
|
+
async exec(args = process.argv.slice(2)) {
|
|
50
|
+
const config = this.config();
|
|
51
|
+
this.logger.debug("parsing", args);
|
|
52
|
+
await config.parse(args);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.Cli = Cli;
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CliCommandAny } from './cliCommand.js';
|
|
2
|
+
import { Loggable } from '@prosopo/common';
|
|
3
|
+
export declare class Cli extends Loggable {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(commands: CliCommandAny[]);
|
|
6
|
+
private config;
|
|
7
|
+
exec(args?: string[]): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAY,QAAQ,EAAa,MAAM,iBAAiB,CAAA;AAO/D,qBAAa,GAAI,SAAQ,QAAQ;;gBAGjB,QAAQ,EAAE,aAAa,EAAE;IAMrC,OAAO,CAAC,MAAM;IAsCD,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B;CAK3D"}
|
package/dist/cli/cli.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
var _Cli_commands;
|
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
+
import { LogLevel, Loggable, getLogger } from '@prosopo/common';
|
|
4
|
+
import { hideBin } from 'yargs/helpers';
|
|
5
|
+
import yargs from 'yargs';
|
|
6
|
+
const dirname = process.cwd();
|
|
7
|
+
const logger = getLogger(LogLevel.enum.info, `${dirname}`);
|
|
8
|
+
export class Cli extends Loggable {
|
|
9
|
+
constructor(commands) {
|
|
10
|
+
super();
|
|
11
|
+
_Cli_commands.set(this, void 0);
|
|
12
|
+
__classPrivateFieldSet(this, _Cli_commands, commands, "f");
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
}
|
|
15
|
+
config() {
|
|
16
|
+
let y = yargs(hideBin(process.argv))
|
|
17
|
+
.option('log-level', {
|
|
18
|
+
type: 'string',
|
|
19
|
+
choices: Object.values(LogLevel.options),
|
|
20
|
+
default: LogLevel.enum.info,
|
|
21
|
+
description: 'The log level',
|
|
22
|
+
})
|
|
23
|
+
.middleware((argv) => {
|
|
24
|
+
this.logger.setLogLevel(argv.logLevel);
|
|
25
|
+
}, true);
|
|
26
|
+
__classPrivateFieldGet(this, _Cli_commands, "f").forEach((command) => {
|
|
27
|
+
y = y.command({
|
|
28
|
+
command: command.getCommandName(),
|
|
29
|
+
describe: command.getDescription(),
|
|
30
|
+
builder: command.getOptions(),
|
|
31
|
+
handler: async (argv) => {
|
|
32
|
+
this.logger.debug(`running ${command.getCommandName()}}`);
|
|
33
|
+
const args = await command.parse(argv);
|
|
34
|
+
await command.exec(args);
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
if (!__classPrivateFieldGet(this, _Cli_commands, "f").find((c) => c.getCommandName() === '$0')) {
|
|
39
|
+
// no default command
|
|
40
|
+
y = y.command('$0', 'default command', (y) => y, (argv) => {
|
|
41
|
+
throw new Error(`no command specified`);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
y = y.demandCommand().strict().showHelpOnFail(false, 'Specify --help for available options');
|
|
45
|
+
return y;
|
|
46
|
+
}
|
|
47
|
+
async exec(args = process.argv.slice(2)) {
|
|
48
|
+
const config = this.config();
|
|
49
|
+
this.logger.debug('parsing', args);
|
|
50
|
+
await config.parse(args);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
_Cli_commands = new WeakMap();
|
|
54
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,KAAe,MAAM,OAAO,CAAA;AAEnC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;AAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;AAE1D,MAAM,OAAO,GAAI,SAAQ,QAAQ;IAG7B,YAAY,QAAyB;QACjC,KAAK,EAAE,CAAA;QAHX,gCAA0B;QAItB,uBAAA,IAAI,iBAAa,QAAQ,MAAA,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAEO,MAAM;QACV,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAC/B,MAAM,CAAC,WAAW,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;YAC3B,WAAW,EAAE,eAAe;SAC/B,CAAC;aACD,UAAU,CAAC,CAAC,IAAS,EAAE,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC1C,CAAC,EAAE,IAAI,CAAC,CAAA;QACZ,uBAAA,IAAI,qBAAU,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBACV,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE;gBACjC,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE;gBAClC,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;gBAC7B,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;oBACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;oBACzD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBACtC,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC5B,CAAC;aACJ,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,uBAAA,IAAI,qBAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,EAAE;YAC1D,qBAAqB;YACrB,CAAC,GAAG,CAAC,CAAC,OAAO,CACT,IAAI,EACJ,iBAAiB,EACjB,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,EACd,CAAC,IAAS,EAAE,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;YAC3C,CAAC,CACJ,CAAA;SACJ;QACD,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAA;QAC5F,OAAO,CAAC,CAAA;IACZ,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAClC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;CACJ"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Loggable } from '@prosopo/common';
|
|
2
|
+
import { Options } from 'yargs';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export declare abstract class CliCommand<T extends z.ZodTypeAny> extends Loggable {
|
|
5
|
+
getOptions(): {
|
|
6
|
+
[key: string]: Options;
|
|
7
|
+
};
|
|
8
|
+
abstract getArgSchema(): T;
|
|
9
|
+
parse(args: unknown): Promise<z.infer<T>>;
|
|
10
|
+
_check(args: z.infer<T>): Promise<void>;
|
|
11
|
+
_run(args: z.infer<T>): Promise<void>;
|
|
12
|
+
exec(args: z.infer<T>): Promise<void>;
|
|
13
|
+
getCommandName(): string;
|
|
14
|
+
abstract getDescription(): string;
|
|
15
|
+
}
|
|
16
|
+
export type CliCommandAny = CliCommand<z.ZodTypeAny>;
|
|
17
|
+
//# sourceMappingURL=cliCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliCommand.d.ts","sourceRoot":"","sources":["../../src/cli/cliCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,8BAAsB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,CAAE,SAAQ,QAAQ;IAE9D,UAAU,IAAI;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACzB;aAKe,YAAY,IAAI,CAAC;IAIpB,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAQzC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAKvB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAKrB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAQ3B,cAAc;aAIL,cAAc,IAAI,MAAM;CAC3C;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Loggable } from '@prosopo/common';
|
|
2
|
+
import { kebabCase } from '@prosopo/util';
|
|
3
|
+
export class CliCommand extends Loggable {
|
|
4
|
+
// get the options for the CLI
|
|
5
|
+
getOptions() {
|
|
6
|
+
return {};
|
|
7
|
+
}
|
|
8
|
+
// parse args using the schema
|
|
9
|
+
// use this when you have an args object but not sure if it's in the right format / contains the correct fields, e.g. args from cmdline
|
|
10
|
+
async parse(args) {
|
|
11
|
+
const argsSchema = this.getArgSchema();
|
|
12
|
+
const parsed = await argsSchema.parse(args);
|
|
13
|
+
this.logger.debug('parsed args:', parsed);
|
|
14
|
+
return parsed;
|
|
15
|
+
}
|
|
16
|
+
// run any checks before the main run function. This function should have no side effects, i.e. not write to disk. It's purely for conducting checks / setting up
|
|
17
|
+
async _check(args) {
|
|
18
|
+
this.logger.debug('runChecks');
|
|
19
|
+
}
|
|
20
|
+
// the main run function. This should be the function that does the work
|
|
21
|
+
async _run(args) {
|
|
22
|
+
this.logger.debug('run');
|
|
23
|
+
}
|
|
24
|
+
// exec is a public facing function that should be called by the CLI. It will run the preRun, run, and postRun functions in order
|
|
25
|
+
async exec(args) {
|
|
26
|
+
this.logger.debug('exec');
|
|
27
|
+
// run any checks
|
|
28
|
+
await this._check(args);
|
|
29
|
+
// then run the command
|
|
30
|
+
await this._run(args);
|
|
31
|
+
}
|
|
32
|
+
getCommandName() {
|
|
33
|
+
return kebabCase(this.constructor.name);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=cliCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliCommand.js","sourceRoot":"","sources":["../../src/cli/cliCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAGzC,MAAM,OAAgB,UAAmC,SAAQ,QAAQ;IACrE,8BAA8B;IACvB,UAAU;QAGb,OAAO,EAAE,CAAA;IACb,CAAC;IAKD,8BAA8B;IAC9B,uIAAuI;IAChI,KAAK,CAAC,KAAK,CAAC,IAAa;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;QACtC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;QACzC,OAAO,MAAM,CAAA;IACjB,CAAC;IAED,iKAAiK;IAC1J,KAAK,CAAC,MAAM,CAAC,IAAgB;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IAClC,CAAC;IAED,wEAAwE;IACjE,KAAK,CAAC,IAAI,CAAC,IAAgB;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,iIAAiI;IAC1H,KAAK,CAAC,IAAI,CAAC,IAAgB;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACzB,iBAAiB;QACjB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACvB,uBAAuB;QACvB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAEM,cAAc;QACjB,OAAO,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;CAGJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CliCommand, CliCommandAny } from './cliCommand.js';
|
|
2
|
+
import { Options } from 'yargs';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export declare abstract class CliCommandComposite<T extends z.ZodTypeAny> extends CliCommand<T> {
|
|
5
|
+
#private;
|
|
6
|
+
getCommands(): CliCommandAny[];
|
|
7
|
+
constructor(commands: CliCommandAny[]);
|
|
8
|
+
getOptions(): {
|
|
9
|
+
[key: string]: Options;
|
|
10
|
+
};
|
|
11
|
+
_run(args: z.TypeOf<T>): Promise<void>;
|
|
12
|
+
_check(args: z.TypeOf<T>): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=cliCommandComposite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliCommandComposite.d.ts","sourceRoot":"","sources":["../../src/cli/cliCommandComposite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,8BAAsB,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;;IAG5E,WAAW;gBAIN,QAAQ,EAAE,aAAa,EAAE;IAMrB,UAAU,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;IAOxC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
var _CliCommandComposite_commands;
|
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
+
import { CliCommand } from './cliCommand.js';
|
|
4
|
+
export class CliCommandComposite extends CliCommand {
|
|
5
|
+
getCommands() {
|
|
6
|
+
return __classPrivateFieldGet(this, _CliCommandComposite_commands, "f");
|
|
7
|
+
}
|
|
8
|
+
constructor(commands) {
|
|
9
|
+
super();
|
|
10
|
+
_CliCommandComposite_commands.set(this, []);
|
|
11
|
+
// take a copy of the array to avoid leakage
|
|
12
|
+
__classPrivateFieldSet(this, _CliCommandComposite_commands, [...commands], "f");
|
|
13
|
+
}
|
|
14
|
+
getOptions() {
|
|
15
|
+
// merge options in turn from each command. Command order matters, latter commands will overwrite earlier ones
|
|
16
|
+
return __classPrivateFieldGet(this, _CliCommandComposite_commands, "f").reduce((prev, command) => {
|
|
17
|
+
return { ...prev, ...command.getOptions() };
|
|
18
|
+
}, {});
|
|
19
|
+
}
|
|
20
|
+
_run(args) {
|
|
21
|
+
return __classPrivateFieldGet(this, _CliCommandComposite_commands, "f").reduce(async (prev, command) => {
|
|
22
|
+
await prev;
|
|
23
|
+
await command._run(args);
|
|
24
|
+
}, Promise.resolve());
|
|
25
|
+
}
|
|
26
|
+
_check(args) {
|
|
27
|
+
return __classPrivateFieldGet(this, _CliCommandComposite_commands, "f").reduce(async (prev, command) => {
|
|
28
|
+
await prev;
|
|
29
|
+
await command._check(args);
|
|
30
|
+
}, Promise.resolve());
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
_CliCommandComposite_commands = new WeakMap();
|
|
34
|
+
//# sourceMappingURL=cliCommandComposite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliCommandComposite.js","sourceRoot":"","sources":["../../src/cli/cliCommandComposite.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,iBAAiB,CAAA;AAI3D,MAAM,OAAgB,mBAA4C,SAAQ,UAAa;IAG5E,WAAW;QACd,OAAO,uBAAA,IAAI,qCAAU,CAAA;IACzB,CAAC;IAED,YAAY,QAAyB;QACjC,KAAK,EAAE,CAAA;QAPX,wCAA6B,EAAE,EAAA;QAQ3B,4CAA4C;QAC5C,uBAAA,IAAI,iCAAa,CAAC,GAAG,QAAQ,CAAC,MAAA,CAAA;IAClC,CAAC;IAEe,UAAU;QACtB,8GAA8G;QAC9G,OAAO,uBAAA,IAAI,qCAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YAC3C,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,EAAE,CAAA;QAC/C,CAAC,EAAE,EAAE,CAAC,CAAA;IACV,CAAC;IAEe,IAAI,CAAC,IAAiB;QAClC,OAAO,uBAAA,IAAI,qCAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACjD,MAAM,IAAI,CAAA;YACV,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACzB,CAAC;IAEe,MAAM,CAAC,IAAiB;QACpC,OAAO,uBAAA,IAAI,qCAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACjD,MAAM,IAAI,CAAA;YACV,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACzB,CAAC;CACJ"}
|
package/dist/cli.js
CHANGED
|
@@ -1,48 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Cli } from './index.js';
|
|
2
|
+
import { Flatten } from './commands/flatten.js';
|
|
3
|
+
import { GenerateV1 } from './commands/generateV1.js';
|
|
4
|
+
import { GenerateV2 } from './commands/generateV2.js';
|
|
5
|
+
import { Get } from './commands/get.js';
|
|
6
|
+
import { Labels } from './commands/labels.js';
|
|
7
|
+
import { Relocate } from './commands/relocate.js';
|
|
8
|
+
import { Resize } from './commands/resize.js';
|
|
3
9
|
import esMain from 'es-main';
|
|
4
|
-
import flatten from './flatten/cli.js';
|
|
5
|
-
import generate from './generate/cli.js';
|
|
6
|
-
import get from './get/cli.js';
|
|
7
|
-
import labels from './labels/cli.js';
|
|
8
|
-
import process from 'process';
|
|
9
|
-
import relocate from './relocate/cli.js';
|
|
10
|
-
import scale from './scale/cli.js';
|
|
11
|
-
import yargs from 'yargs';
|
|
12
|
-
const dirname = process.cwd();
|
|
13
|
-
const logger = getLogger(LogLevel.enum.info, `${dirname}`);
|
|
14
10
|
const main = async () => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
.command(flatten({ logger }))
|
|
28
|
-
.command(scale({ logger }))
|
|
29
|
-
.command(relocate({ logger }))
|
|
30
|
-
.command(get({ logger }))
|
|
31
|
-
.command(labels({ logger }))
|
|
32
|
-
.strictCommands()
|
|
33
|
-
.showHelpOnFail(false, 'Specify --help for available options')
|
|
34
|
-
.fail(false)
|
|
35
|
-
.parse();
|
|
11
|
+
const commands = [
|
|
12
|
+
new Flatten(),
|
|
13
|
+
new GenerateV1(),
|
|
14
|
+
new GenerateV2(),
|
|
15
|
+
new Get(),
|
|
16
|
+
new Labels(),
|
|
17
|
+
new Relocate(),
|
|
18
|
+
new Resize(),
|
|
19
|
+
];
|
|
20
|
+
const cli = new Cli(commands);
|
|
21
|
+
cli.logger.setLogLevel('debug');
|
|
22
|
+
await cli.exec();
|
|
36
23
|
};
|
|
37
24
|
//if main process
|
|
38
25
|
if (esMain(import.meta)) {
|
|
39
26
|
main()
|
|
40
27
|
.then(() => {
|
|
41
|
-
logger.debug('done');
|
|
42
28
|
process.exit(0);
|
|
43
29
|
})
|
|
44
30
|
.catch((err) => {
|
|
45
|
-
|
|
31
|
+
console.log('error', err);
|
|
46
32
|
process.exit(1);
|
|
47
33
|
});
|
|
48
34
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,MAAM,MAAM,SAAS,CAAA;AAE5B,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACpB,MAAM,QAAQ,GAAoB;QAC9B,IAAI,OAAO,EAAE;QACb,IAAI,UAAU,EAAE;QAChB,IAAI,UAAU,EAAE;QAChB,IAAI,GAAG,EAAE;QACT,IAAI,MAAM,EAAE;QACZ,IAAI,QAAQ,EAAE;QACd,IAAI,MAAM,EAAE;KACf,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7B,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IAC/B,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;AACpB,CAAC,CAAA;AAED,iBAAiB;AACjB,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;IACrB,IAAI,EAAE;SACD,IAAI,CAAC,GAAG,EAAE;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC,CAAC,CAAA;CACT"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/// <reference types="yargs" />
|
|
2
|
+
import { InputOutputCliCommand } from '../utils/inputOutput.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export declare const ArgsSchema: z.ZodObject<{
|
|
5
|
+
input: z.ZodString;
|
|
6
|
+
output: z.ZodString;
|
|
7
|
+
overwrite: z.ZodOptional<z.ZodBoolean>;
|
|
8
|
+
allowDuplicates: z.ZodOptional<z.ZodBoolean>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
input: string;
|
|
11
|
+
output: string;
|
|
12
|
+
overwrite?: boolean | undefined;
|
|
13
|
+
allowDuplicates?: boolean | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
input: string;
|
|
16
|
+
output: string;
|
|
17
|
+
overwrite?: boolean | undefined;
|
|
18
|
+
allowDuplicates?: boolean | undefined;
|
|
19
|
+
}>;
|
|
20
|
+
export type ArgsSchemaType = typeof ArgsSchema;
|
|
21
|
+
export type Args = z.infer<ArgsSchemaType>;
|
|
22
|
+
export declare class Flatten extends InputOutputCliCommand<ArgsSchemaType> {
|
|
23
|
+
getArgSchema(): z.ZodObject<{
|
|
24
|
+
input: z.ZodString;
|
|
25
|
+
output: z.ZodString;
|
|
26
|
+
overwrite: z.ZodOptional<z.ZodBoolean>;
|
|
27
|
+
allowDuplicates: z.ZodOptional<z.ZodBoolean>;
|
|
28
|
+
}, "strip", z.ZodTypeAny, {
|
|
29
|
+
input: string;
|
|
30
|
+
output: string;
|
|
31
|
+
overwrite?: boolean | undefined;
|
|
32
|
+
allowDuplicates?: boolean | undefined;
|
|
33
|
+
}, {
|
|
34
|
+
input: string;
|
|
35
|
+
output: string;
|
|
36
|
+
overwrite?: boolean | undefined;
|
|
37
|
+
allowDuplicates?: boolean | undefined;
|
|
38
|
+
}>;
|
|
39
|
+
getDescription(): string;
|
|
40
|
+
getOptions(): {
|
|
41
|
+
[key: string]: import("yargs").Options;
|
|
42
|
+
} & {
|
|
43
|
+
input: {
|
|
44
|
+
description: string;
|
|
45
|
+
};
|
|
46
|
+
output: {
|
|
47
|
+
description: string;
|
|
48
|
+
};
|
|
49
|
+
allowDuplicates: {
|
|
50
|
+
boolean: boolean;
|
|
51
|
+
description: string;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
_run(args: Args): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=flatten.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../src/commands/flatten.ts"],"names":[],"mappings":";AACA,OAAO,EAAkD,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAI/G,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;EAErB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,OAAO,UAAU,CAAA;AAC9C,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;AAE1C,qBAAa,OAAQ,SAAQ,qBAAqB,CAAC,cAAc,CAAC;IAC9C,YAAY;;;;;;;;;;;;;;;;IAIZ,cAAc,IAAI,MAAM;IAIxB,UAAU;;;;;;;;;;;;;;IAeJ,IAAI,CAAC,IAAI,EAAE,IAAI;CAgFxC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { CaptchaItemTypes, DataSchema } from '@prosopo/types';
|
|
2
|
+
import { InputOutputArgsSchema as InputOutputArgsSchema, InputOutputCliCommand } from '../utils/inputOutput.js';
|
|
3
|
+
import { at, lodash } from '@prosopo/util';
|
|
4
|
+
import { blake2b } from '@noble/hashes/blake2b';
|
|
5
|
+
import { u8aToHex } from '@polkadot/util';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import cliProgress from 'cli-progress';
|
|
8
|
+
import fs from 'fs';
|
|
9
|
+
export const ArgsSchema = InputOutputArgsSchema.extend({
|
|
10
|
+
allowDuplicates: z.boolean().optional(),
|
|
11
|
+
});
|
|
12
|
+
export class Flatten extends InputOutputCliCommand {
|
|
13
|
+
getArgSchema() {
|
|
14
|
+
return ArgsSchema;
|
|
15
|
+
}
|
|
16
|
+
getDescription() {
|
|
17
|
+
return 'Restructure a directory containing directories for each image classification into a single directory with a file containing the labels';
|
|
18
|
+
}
|
|
19
|
+
getOptions() {
|
|
20
|
+
return lodash().merge(super.getOptions(), {
|
|
21
|
+
input: {
|
|
22
|
+
description: 'Path to the data directory containing subdirectories for each image classification',
|
|
23
|
+
},
|
|
24
|
+
output: {
|
|
25
|
+
description: 'Where to put the output file containing the labels and single directory of images',
|
|
26
|
+
},
|
|
27
|
+
allowDuplicates: {
|
|
28
|
+
boolean: true,
|
|
29
|
+
description: 'If true, allow duplicates in the data',
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async _run(args) {
|
|
34
|
+
this.logger.debug('flatten run');
|
|
35
|
+
await super._run(args);
|
|
36
|
+
const dataDir = args.input;
|
|
37
|
+
const outDir = args.output;
|
|
38
|
+
// find the labels (these should be subdirectories of the data directory)
|
|
39
|
+
this.logger.info('reading data');
|
|
40
|
+
const labels = fs
|
|
41
|
+
.readdirSync(dataDir, { withFileTypes: true })
|
|
42
|
+
.filter((dirent) => dirent.isDirectory())
|
|
43
|
+
.map((dirent) => dirent.name)
|
|
44
|
+
.sort();
|
|
45
|
+
const imagesByLabel = labels.map((label) => fs.readdirSync(`${dataDir}/${label}`));
|
|
46
|
+
// create the output directory
|
|
47
|
+
const imageDir = `${outDir}/images`;
|
|
48
|
+
fs.mkdirSync(imageDir, { recursive: true });
|
|
49
|
+
const bar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);
|
|
50
|
+
// for each label
|
|
51
|
+
const items = [];
|
|
52
|
+
bar.start(imagesByLabel.reduce((acc, images) => acc + images.length, 0), 0);
|
|
53
|
+
labels.forEach((label, i) => {
|
|
54
|
+
const images = at(imagesByLabel, i);
|
|
55
|
+
// for each image
|
|
56
|
+
for (const image of images) {
|
|
57
|
+
bar.increment();
|
|
58
|
+
// this.logger.log(`flattening ${label}/${image}`)
|
|
59
|
+
// copy the image to the output directory
|
|
60
|
+
const extension = image.split('.').pop();
|
|
61
|
+
// read file to bytes
|
|
62
|
+
const content = fs.readFileSync(`${dataDir}/${label}/${image}`);
|
|
63
|
+
// hash based on the content of the image
|
|
64
|
+
const hash = blake2b(content);
|
|
65
|
+
const hex = u8aToHex(hash);
|
|
66
|
+
const name = `${hex}.${extension}`;
|
|
67
|
+
if (fs.existsSync(`${imageDir}/${name}`)) {
|
|
68
|
+
for (const item of items) {
|
|
69
|
+
if (item.hash === hex) {
|
|
70
|
+
this.logger.log(`\ndupe: ${label}/${image}`);
|
|
71
|
+
this.logger.log('item hash', item.hash);
|
|
72
|
+
this.logger.log('item label', item.label);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!args.allowDuplicates) {
|
|
76
|
+
throw new Error(`duplicate image detected`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
fs.copyFileSync(`${dataDir}/${label}/${image}`, `${imageDir}/${name}`);
|
|
80
|
+
const filePath = fs.realpathSync(`${imageDir}/${name}`);
|
|
81
|
+
// add the image to the map file
|
|
82
|
+
const entry = {
|
|
83
|
+
data: filePath,
|
|
84
|
+
type: CaptchaItemTypes.Image,
|
|
85
|
+
label,
|
|
86
|
+
hash: hex,
|
|
87
|
+
};
|
|
88
|
+
items.push(entry);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
bar.stop();
|
|
92
|
+
const data = {
|
|
93
|
+
items,
|
|
94
|
+
};
|
|
95
|
+
// verify data
|
|
96
|
+
this.logger.info('verifying data');
|
|
97
|
+
DataSchema.parse(data);
|
|
98
|
+
// write map file
|
|
99
|
+
this.logger.info('writing data');
|
|
100
|
+
fs.writeFileSync(`${outDir}/data.json`, JSON.stringify(data, null, 4));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=flatten.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten.js","sourceRoot":"","sources":["../../src/commands/flatten.ts"],"names":[],"mappings":"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"}
|