@rsdk/cli.core 5.7.0-next.2 → 6.0.0-next.0

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.
Files changed (49) hide show
  1. package/README.MD +1 -1
  2. package/dist/cli.d.ts +17 -19
  3. package/dist/cli.js +37 -29
  4. package/dist/cli.js.map +1 -1
  5. package/dist/index.d.ts +4 -2
  6. package/dist/index.js +8 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/loaders/implementations/index.d.ts +2 -0
  9. package/dist/loaders/implementations/index.js +19 -0
  10. package/dist/loaders/implementations/index.js.map +1 -0
  11. package/dist/loaders/implementations/local-path.loader.d.ts +9 -0
  12. package/dist/loaders/implementations/local-path.loader.js +49 -0
  13. package/dist/loaders/implementations/local-path.loader.js.map +1 -0
  14. package/dist/loaders/implementations/pkg.loader.d.ts +11 -0
  15. package/dist/loaders/implementations/pkg.loader.js +31 -0
  16. package/dist/loaders/implementations/pkg.loader.js.map +1 -0
  17. package/dist/loaders/index.d.ts +1 -0
  18. package/dist/loaders/index.js +18 -0
  19. package/dist/loaders/index.js.map +1 -0
  20. package/dist/loaders/loader.interface.d.ts +5 -0
  21. package/dist/loaders/loader.interface.js +3 -0
  22. package/dist/loaders/loader.interface.js.map +1 -0
  23. package/dist/resolvers/command.resolver.d.ts +27 -0
  24. package/dist/resolvers/command.resolver.js +81 -0
  25. package/dist/resolvers/command.resolver.js.map +1 -0
  26. package/dist/resolvers/options.resolver.d.ts +35 -0
  27. package/dist/resolvers/options.resolver.js +80 -0
  28. package/dist/resolvers/options.resolver.js.map +1 -0
  29. package/jest.config.js +1 -0
  30. package/jest.config.unit.js +1 -0
  31. package/package.json +19 -6
  32. package/src/cli.ts +52 -38
  33. package/src/index.ts +11 -3
  34. package/src/loaders/implementations/index.ts +2 -0
  35. package/src/loaders/implementations/local-path.loader.ts +53 -0
  36. package/src/loaders/implementations/pkg.loader.ts +33 -0
  37. package/src/loaders/index.ts +1 -0
  38. package/src/loaders/loader.interface.ts +6 -0
  39. package/src/resolvers/command.resolver.ts +103 -0
  40. package/src/resolvers/options.resolver.ts +92 -0
  41. package/test/cli.spec.ts +131 -0
  42. package/test/commands/command.single.ts +30 -0
  43. package/test/commands/command.with-all.ts +93 -0
  44. package/test/commands/command.with-subcommands.ts +55 -0
  45. package/test/commands/command.with-variations.ts +55 -0
  46. package/test/commands/js/command.single.js +47 -0
  47. package/test/commands-resolver.spec.ts +125 -0
  48. package/test/loaders.spec.ts +61 -0
  49. package/test/options-resolver.spec.ts +119 -0
package/README.MD CHANGED
@@ -12,4 +12,4 @@
12
12
 
13
13
  ## Интерфейс взаимодействия
14
14
 
15
- Основной интерфейс взаимодействия с пакетом команды обеспечивается через `RsdkCliCommand` из пакета `@rsdk/cli.common`
15
+ Основной интерфейс взаимодействия с пакетом команды обеспечивается через `IRunnable` из пакета `@rsdk/cli.common`
package/dist/cli.d.ts CHANGED
@@ -1,21 +1,19 @@
1
- import type { RsdkCliCommand } from '@rsdk/cli.common';
1
+ import type { ILogger } from '@rsdk/logging';
2
+ import type { Command } from 'commander';
3
+ export interface CliOptions {
4
+ plugins?: (string | {
5
+ command: any;
6
+ cmd: string;
7
+ })[];
8
+ discoverPlugins?: boolean;
9
+ cliPackageName: string;
10
+ }
2
11
  export declare class Cli {
3
- readonly opts?: {
4
- plugins?: (string | {
5
- command: RsdkCliCommand;
6
- cmd: string;
7
- })[];
8
- discoverPlugins?: boolean;
9
- cliPackageName: string;
10
- } | undefined;
11
- constructor(opts?: {
12
- plugins?: (string | {
13
- command: RsdkCliCommand;
14
- cmd: string;
15
- })[];
16
- discoverPlugins?: boolean;
17
- cliPackageName: string;
18
- } | undefined);
19
- handle(argv: string[]): Promise<void>;
20
- private getCmdPackageName;
12
+ private readonly program;
13
+ private readonly logger;
14
+ private readonly opts?;
15
+ constructor(program: Command, logger: ILogger, opts?: CliOptions | undefined);
16
+ handle(arg: string | undefined): Promise<void>;
17
+ private loadCommand;
18
+ private isLocalPath;
21
19
  }
package/dist/cli.js CHANGED
@@ -1,44 +1,52 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Cli = void 0;
4
- const commander_1 = require("commander");
4
+ const cli_common_1 = require("@rsdk/cli.common");
5
+ const common_1 = require("@rsdk/common");
6
+ const env_1 = require("@rsdk/env");
7
+ const command_resolver_1 = require("./resolvers/command.resolver");
8
+ const options_resolver_1 = require("./resolvers/options.resolver");
9
+ const loaders_1 = require("./loaders");
5
10
  class Cli {
11
+ program;
12
+ logger;
6
13
  opts;
7
- constructor(opts) {
14
+ constructor(program, logger, opts) {
15
+ this.program = program;
16
+ this.logger = logger;
8
17
  this.opts = opts;
9
18
  }
10
- async handle(argv) {
11
- const rsdkCommand = argv.slice(2)[0];
12
- if (!rsdkCommand || rsdkCommand.startsWith('-')) {
13
- commander_1.program.parse();
14
- return;
15
- }
16
- const cmd = rsdkCommand.split(':')[0];
17
- const rsdkCliCommandName = this.getCmdPackageName(cmd);
18
- let rsdkCliCommand;
19
+ async handle(arg) {
19
20
  try {
20
- // eslint-disable-next-line @typescript-eslint/no-var-requires
21
- rsdkCliCommand = require(rsdkCliCommandName);
21
+ if (!arg || arg.startsWith('-')) {
22
+ await this.program.parseAsync();
23
+ return;
24
+ }
25
+ const env = new env_1.Env();
26
+ const optionsResolver = new options_resolver_1.OptionsResolver(env, this.logger);
27
+ const commandResolver = new command_resolver_1.CommandResolver(optionsResolver, this.logger);
28
+ const command = await this.loadCommand(arg);
29
+ const { subcommands, variations } = cli_common_1.MetadataRegistry.getCommand(command);
30
+ this.program.addCommand(commandResolver.resolve(command, subcommands));
31
+ for (const command of variations || []) {
32
+ this.program.addCommand(commandResolver.resolve(command));
33
+ }
34
+ await this.program.parseAsync();
22
35
  }
23
36
  catch (error) {
24
- throw new Error('Error on require module, try install it `yarn add -D ' +
25
- rsdkCliCommandName, {
26
- cause: error,
27
- });
28
- }
29
- if (!('Cmd' in rsdkCliCommand)) {
30
- throw new Error('Invalid cli cmd package', {
31
- cause: { rsdkCliCommand, rsdkCliCommandName },
32
- });
37
+ common_1.Assert.isError(error);
38
+ this.logger.error(error);
33
39
  }
34
- const cmds = rsdkCliCommand.Cmd.getCommands();
35
- for (const cmd of cmds) {
36
- commander_1.program.addCommand(cmd);
37
- }
38
- commander_1.program.parse();
39
40
  }
40
- getCmdPackageName(cmd) {
41
- return [this.opts?.cliPackageName, 'cmd', cmd].join('.');
41
+ async loadCommand(rsdkCommand) {
42
+ const [cmd] = rsdkCommand.split(':');
43
+ const loader = this.isLocalPath(cmd)
44
+ ? new loaders_1.LocalPathLoader()
45
+ : new loaders_1.PkgLoader(this.opts?.cliPackageName);
46
+ return await loader.load(cmd);
47
+ }
48
+ isLocalPath(cmd) {
49
+ return cmd.startsWith('./') || cmd.startsWith('/') || cmd.includes('\\');
42
50
  }
43
51
  }
44
52
  exports.Cli = Cli;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AAEpC,MAAa,GAAG;IAEH;IADX,YACW,IAIR;QAJQ,SAAI,GAAJ,IAAI,CAIZ;IACA,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,IAAc;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAErC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,mBAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvD,IAAI,cAAc,CAAC;QAEnB,IAAI,CAAC;YACH,8DAA8D;YAC9D,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,uDAAuD;gBACrD,kBAAkB,EACpB;gBACE,KAAK,EAAE,KAAK;aACb,CACF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,IAAI,cAAc,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE;gBACzC,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAC9C,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAE9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,mBAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,mBAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAEO,iBAAiB,CAAC,GAAW;QACnC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;CACF;AAlDD,kBAkDC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AACA,iDAAoD;AACpD,yCAAwD;AACxD,mCAAgC;AAIhC,mEAA+D;AAC/D,mEAA+D;AAC/D,uCAAuD;AAQvD,MAAa,GAAG;IAEK;IACA;IACA;IAHnB,YACmB,OAAgB,EAChB,MAAe,EACf,IAAiB;QAFjB,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAS;QACf,SAAI,GAAJ,IAAI,CAAa;IACjC,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,GAAuB;QAClC,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,SAAG,EAAE,CAAC;YACtB,MAAM,eAAe,GAAG,IAAI,kCAAe,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9D,MAAM,eAAe,GAAG,IAAI,kCAAe,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAE1E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAE5C,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,6BAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAEzE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;YAEvE,KAAK,MAAM,OAAO,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,WAAmB;QAEnB,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YAClC,CAAC,CAAC,IAAI,yBAAe,EAAE;YACvB,CAAC,CAAC,IAAI,mBAAS,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAE7C,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAEO,WAAW,CAAC,GAAW;QAC7B,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;CACF;AAlDD,kBAkDC"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
- import type { RsdkCliCommand } from '@rsdk/cli.common';
2
1
  import './reconfigure-logger';
2
+ /**
3
+ * Выполняет команду
4
+ */
3
5
  export declare const execute: (opts?: {
4
6
  plugins?: (string | {
5
- command: RsdkCliCommand;
7
+ command: any;
6
8
  cmd: string;
7
9
  })[];
8
10
  discoverPlugins?: boolean;
package/dist/index.js CHANGED
@@ -4,6 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.execute = void 0;
7
+ const logging_1 = require("@rsdk/logging");
8
+ const commander_1 = require("commander");
7
9
  const node_path_1 = __importDefault(require("node:path"));
8
10
  require("./reconfigure-logger");
9
11
  const cli_1 = require("./cli");
@@ -13,10 +15,15 @@ const getCliPackageName = () => {
13
15
  // eslint-disable-next-line @typescript-eslint/no-var-requires
14
16
  return require(node_path_1.default.join(node_path_1.default.dirname(require.main.filename), 'package.json')).name;
15
17
  };
18
+ /**
19
+ * Выполняет команду
20
+ */
16
21
  const execute = async (opts) => {
17
22
  const cliPackageName = opts?.scope ?? getCliPackageName();
18
23
  process.title = cliPackageName.split('/')[0].slice(1);
19
- await new cli_1.Cli({ ...opts, cliPackageName }).handle(process.argv);
24
+ const logger = logging_1.LoggerFactory.create(cliPackageName);
25
+ const cli = new cli_1.Cli(commander_1.program, logger, { ...opts, cliPackageName });
26
+ await cli.handle(process.argv.at(2));
20
27
  };
21
28
  exports.execute = execute;
22
29
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,0DAA6B;AAE7B,gCAA8B;AAE9B,+BAA4B;AAE5B,+EAA+E;AAC/E,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;AACnC,MAAM,iBAAiB,GAAG,GAAW,EAAE;IACrC,8DAA8D;IAC9D,OAAO,OAAO,CACZ,mBAAI,CAAC,IAAI,CAAC,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAK,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAChE,CAAC,IAAI,CAAC;AACT,CAAC,CAAC;AAEK,MAAM,OAAO,GAAG,KAAK,EAAE,IAI7B,EAAiB,EAAE;IAClB,MAAM,cAAc,GAAG,IAAI,EAAE,KAAK,IAAI,iBAAiB,EAAE,CAAC;IAE1D,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,IAAI,SAAG,CAAC,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC,CAAC;AATW,QAAA,OAAO,WASlB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,2CAA8C;AAC9C,yCAAoC;AACpC,0DAA6B;AAE7B,gCAA8B;AAE9B,+BAA4B;AAE5B,+EAA+E;AAC/E,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;AACnC,MAAM,iBAAiB,GAAG,GAAW,EAAE;IACrC,8DAA8D;IAC9D,OAAO,OAAO,CACZ,mBAAI,CAAC,IAAI,CAAC,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAK,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAChE,CAAC,IAAI,CAAC;AACT,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,OAAO,GAAG,KAAK,EAAE,IAI7B,EAAiB,EAAE;IAClB,MAAM,cAAc,GAAG,IAAI,EAAE,KAAK,IAAI,iBAAiB,EAAE,CAAC;IAE1D,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,uBAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,mBAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IAElE,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC;AAbW,QAAA,OAAO,WAalB"}
@@ -0,0 +1,2 @@
1
+ export * from './local-path.loader';
2
+ export * from './pkg.loader';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./local-path.loader"), exports);
18
+ __exportStar(require("./pkg.loader"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/loaders/implementations/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,+CAA6B"}
@@ -0,0 +1,9 @@
1
+ import type { Constructor } from '@rsdk/common';
2
+ import type { ICommandLoader } from '../loader.interface';
3
+ /**
4
+ * Загружает команды из файла
5
+ */
6
+ export declare class LocalPathLoader implements ICommandLoader {
7
+ load(filename: string): Promise<Constructor>;
8
+ private registerTsNode;
9
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LocalPathLoader = void 0;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ /**
9
+ * Загружает команды из файла
10
+ */
11
+ class LocalPathLoader {
12
+ async load(filename) {
13
+ const resolvedPath = node_path_1.default.isAbsolute(filename)
14
+ ? filename
15
+ : node_path_1.default.resolve(process.cwd(), filename);
16
+ try {
17
+ // Регистрируем ts-node до импорта файла
18
+ if (resolvedPath.endsWith('.ts')) {
19
+ this.registerTsNode(resolvedPath);
20
+ }
21
+ const { default: command } = await require(resolvedPath);
22
+ return command;
23
+ }
24
+ catch (error) {
25
+ throw new Error(`Error loading command from file: ${resolvedPath}`, {
26
+ cause: error,
27
+ });
28
+ }
29
+ }
30
+ registerTsNode(resolvedPath) {
31
+ /* eslint-disable @typescript-eslint/no-var-requires */
32
+ const tsnode = require('ts-node');
33
+ const typescript = require('typescript');
34
+ /* eslint-enable @typescript-eslint/no-var-requires */
35
+ // Ищем ближайший tsconfig.json
36
+ const tsconfigPath = typescript.findConfigFile(node_path_1.default.dirname(resolvedPath), typescript.sys.fileExists);
37
+ tsnode.register({
38
+ transpileOnly: true, // Для более быстрой компиляции
39
+ project: tsconfigPath || undefined, // Используем найденный tsconfig или undefined
40
+ compilerOptions: {
41
+ // Базовые опции, которые будут перезаписаны настройками из tsconfig
42
+ module: 'commonjs',
43
+ target: 'es2017',
44
+ },
45
+ });
46
+ }
47
+ }
48
+ exports.LocalPathLoader = LocalPathLoader;
49
+ //# sourceMappingURL=local-path.loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-path.loader.js","sourceRoot":"","sources":["../../../src/loaders/implementations/local-path.loader.ts"],"names":[],"mappings":";;;;;;AACA,0DAA6B;AAI7B;;GAEG;AACH,MAAa,eAAe;IAC1B,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,MAAM,YAAY,GAAG,mBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC5C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,wCAAwC;YACxC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YACpC,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;YAEzD,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,YAAY,EAAE,EAAE;gBAClE,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,YAAoB;QACzC,uDAAuD;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACzC,sDAAsD;QAEtD,+BAA+B;QAC/B,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc,CAC5C,mBAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAC1B,UAAU,CAAC,GAAG,CAAC,UAAU,CAC1B,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC;YACd,aAAa,EAAE,IAAI,EAAE,+BAA+B;YACpD,OAAO,EAAE,YAAY,IAAI,SAAS,EAAE,8CAA8C;YAClF,eAAe,EAAE;gBACf,oEAAoE;gBACpE,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,QAAQ;aACjB;SACF,CAAC,CAAC;IACL,CAAC;CACF;AA5CD,0CA4CC"}
@@ -0,0 +1,11 @@
1
+ import type { IRunnable } from '@rsdk/cli.common';
2
+ import type { Constructor } from '@rsdk/common';
3
+ import type { ICommandLoader } from '../loader.interface';
4
+ /**
5
+ * Загружает команды из пакета
6
+ */
7
+ export declare class PkgLoader implements ICommandLoader {
8
+ private readonly cliPackageName?;
9
+ constructor(cliPackageName?: string | undefined);
10
+ load(cmd: string): Promise<Constructor<IRunnable>>;
11
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PkgLoader = void 0;
4
+ /**
5
+ * Загружает команды из пакета
6
+ */
7
+ class PkgLoader {
8
+ cliPackageName;
9
+ constructor(cliPackageName) {
10
+ this.cliPackageName = cliPackageName;
11
+ }
12
+ async load(cmd) {
13
+ /* Пример вызова из консоли:
14
+ * $ rsdk init
15
+ * где:
16
+ * cliPackageName = '@rsdk/cli'
17
+ * cmd = 'init'
18
+ * pkg = '@rsdk/cli.cmd.init'
19
+ */
20
+ const pkg = [this.cliPackageName, 'cmd', cmd].join('.');
21
+ try {
22
+ const { default: command } = await require(pkg);
23
+ return command;
24
+ }
25
+ catch (error) {
26
+ throw new Error(`Error loading package, try install it: yarn add -D ${pkg}`, { cause: error });
27
+ }
28
+ }
29
+ }
30
+ exports.PkgLoader = PkgLoader;
31
+ //# sourceMappingURL=pkg.loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkg.loader.js","sourceRoot":"","sources":["../../../src/loaders/implementations/pkg.loader.ts"],"names":[],"mappings":";;;AAKA;;GAEG;AACH,MAAa,SAAS;IACS;IAA7B,YAA6B,cAAuB;QAAvB,mBAAc,GAAd,cAAc,CAAS;IAAG,CAAC;IAExD,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB;;;;;;WAMG;QACH,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAExD,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YAEhD,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,sDAAsD,GAAG,EAAE,EAC3D,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAxBD,8BAwBC"}
@@ -0,0 +1 @@
1
+ export * from './implementations';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./implementations"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loaders/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC"}
@@ -0,0 +1,5 @@
1
+ import type { IRunnable } from '@rsdk/cli.common';
2
+ import type { Constructor } from '@rsdk/common';
3
+ export interface ICommandLoader {
4
+ load(cmd: string): Promise<Constructor<IRunnable>>;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=loader.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.interface.js","sourceRoot":"","sources":["../../src/loaders/loader.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import type { IRunnable } from '@rsdk/cli.common';
2
+ import type { Constructor } from '@rsdk/common';
3
+ import type { ILogger } from '@rsdk/logging';
4
+ import { Command } from 'commander';
5
+ import type { OptionsResolver } from './options.resolver';
6
+ /**
7
+ * Класс для преобразования классов команд в стиле rsdk в объекты Commander.Command.
8
+ * Обрабатывает метаданные команд, опций и подкоманд,
9
+ * создавая соответствующую структуру.
10
+ */
11
+ export declare class CommandResolver {
12
+ private readonly optionsResolver;
13
+ private readonly logger;
14
+ constructor(optionsResolver: OptionsResolver, logger: ILogger);
15
+ /**
16
+ * Преобразует класс с декоратором @Cmd в объект Commander.Command.
17
+ * Создает команду с опциями и подкомандами на основе метаданных класса.
18
+ *
19
+ * @param {Type} ctor - Конструктор класса команды
20
+ * @returns {Command} Объект Commander.Command с настроенными опциями и подкомандами
21
+ * @throws {Error} Если не найдены метаданные команды (отсутствует декоратор @Cmd)
22
+ */
23
+ resolve(ctor: Constructor<IRunnable>, subcommands?: Constructor<IRunnable>[]): Command;
24
+ private createCommand;
25
+ private createHandler;
26
+ private assertNoParams;
27
+ }
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CommandResolver = void 0;
7
+ const cli_common_1 = require("@rsdk/cli.common");
8
+ const commander_1 = require("commander");
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ /**
11
+ * Класс для преобразования классов команд в стиле rsdk в объекты Commander.Command.
12
+ * Обрабатывает метаданные команд, опций и подкоманд,
13
+ * создавая соответствующую структуру.
14
+ */
15
+ class CommandResolver {
16
+ optionsResolver;
17
+ logger;
18
+ constructor(optionsResolver, logger) {
19
+ this.optionsResolver = optionsResolver;
20
+ this.logger = logger;
21
+ }
22
+ /**
23
+ * Преобразует класс с декоратором @Cmd в объект Commander.Command.
24
+ * Создает команду с опциями и подкомандами на основе метаданных класса.
25
+ *
26
+ * @param {Type} ctor - Конструктор класса команды
27
+ * @returns {Command} Объект Commander.Command с настроенными опциями и подкомандами
28
+ * @throws {Error} Если не найдены метаданные команды (отсутствует декоратор @Cmd)
29
+ */
30
+ resolve(ctor, subcommands = []) {
31
+ this.logger.trace('resolving command', { ctor });
32
+ this.assertNoParams(ctor);
33
+ const command = this.createCommand(ctor);
34
+ for (const subcommand of subcommands) {
35
+ command.addCommand(this.createCommand(subcommand));
36
+ }
37
+ return command;
38
+ }
39
+ createCommand(ctor) {
40
+ // Duplication
41
+ const commandMetadata = cli_common_1.MetadataRegistry.getRunnable(ctor);
42
+ const instance = Reflect.construct(ctor, []);
43
+ if (typeof instance['run'] !== 'function') {
44
+ throw new TypeError('Command must implement "run" method');
45
+ }
46
+ const { name, description } = commandMetadata;
47
+ const command = new commander_1.Command(name).description(description);
48
+ const options = cli_common_1.MetadataRegistry.getOptions(ctor);
49
+ for (const option of options.values()) {
50
+ const envKey = this.optionsResolver.createEnvKey(option);
51
+ const optionName = `--${option.name}${option.parser ? ' <value>' : ''}`;
52
+ const optionDescription = `${option.description} [eq ${envKey} in env]`;
53
+ command.option(optionName, optionDescription, option.defaultValue);
54
+ }
55
+ command.action(this.createHandler(options, instance['run'].bind(instance)));
56
+ return command;
57
+ }
58
+ createHandler(optionsByIndex, method) {
59
+ return (__, cmd) => {
60
+ /* Преобразуем опции в массив аргументов для вызова метода:
61
+ * 1. Конвертируем Map в массив пар [индекс, метаданные]
62
+ * 2. Получаем значения опций через OptionsResolver
63
+ * (с учетом приоритета источников)
64
+ * 3. Сортируем по индексу для правильного порядка аргументов
65
+ */
66
+ const args = (0, lodash_1.default)([...optionsByIndex])
67
+ .map(([index, metadata]) => ({ index, metadata }))
68
+ .sortBy((x) => x.index)
69
+ .map((x) => this.optionsResolver.resolve(x.metadata, cmd.opts()));
70
+ return method(...args.value());
71
+ };
72
+ }
73
+ assertNoParams(ctor) {
74
+ const paramTypes = Reflect.getMetadata('design:paramtypes', ctor);
75
+ if (paramTypes?.length > 0) {
76
+ throw new Error('Command constructor must have no parameters');
77
+ }
78
+ }
79
+ }
80
+ exports.CommandResolver = CommandResolver;
81
+ //# sourceMappingURL=command.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.resolver.js","sourceRoot":"","sources":["../../src/resolvers/command.resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { OptionMetadata } from '@rsdk/cli.common';
2
+ import type { Env } from '@rsdk/env';
3
+ import type { ILogger } from '@rsdk/logging';
4
+ import type { OptionValues } from 'commander';
5
+ /**
6
+ * Класс для разрешения значений опций командной строки.
7
+ * Обрабатывает значения из трех источников: переменные окружения, флаги командной строки и значения по умолчанию.
8
+ */
9
+ export declare class OptionsResolver {
10
+ private readonly env;
11
+ private readonly logger;
12
+ constructor(env: Env, logger: ILogger);
13
+ /**
14
+ * Разрешает значение опции командной строки на основе метаданных и переданных параметров.
15
+ * Проверяет три источника значений в порядке приоритета:
16
+ * 1. Переменные окружения
17
+ * 2. Флаги командной строки
18
+ * 3. Значения по умолчанию
19
+ *
20
+ * Такой приоритет выбран для удобства конфигурирования в разных окружениях:
21
+ * - В локальной разработке проблем с ENV обычно не возникает
22
+ * - В Kubernetes удобнее редактировать ConfigMap, чем Deployment
23
+ * @param {OptionMetadata} optionMetadata - Метаданные опции, содержащие имя, парсер и значение по умолчанию
24
+ * @param {OptionValues} passedOptions - Объект с переданными опциями командной строки
25
+ * @returns {any} Разрешенное значение опции
26
+ */
27
+ resolve(optionMetadata: OptionMetadata, passedOptions: OptionValues): any;
28
+ /**
29
+ * Создает ключ переменной окружения на основе метаданных опции.
30
+ *
31
+ * @param {OptionMetadata} optionMetadata - Метаданные опции, содержащие имя и стратегию.
32
+ * @returns {string} Ключ переменной окружения в формате верхнего регистра с подчеркиванием.
33
+ */
34
+ createEnvKey(optionMetadata: OptionMetadata): string;
35
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OptionsResolver = void 0;
7
+ const common_1 = require("@rsdk/common");
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ /**
10
+ * Класс для разрешения значений опций командной строки.
11
+ * Обрабатывает значения из трех источников: переменные окружения, флаги командной строки и значения по умолчанию.
12
+ */
13
+ class OptionsResolver {
14
+ env;
15
+ logger;
16
+ constructor(env, logger) {
17
+ this.env = env;
18
+ this.logger = logger;
19
+ }
20
+ /**
21
+ * Разрешает значение опции командной строки на основе метаданных и переданных параметров.
22
+ * Проверяет три источника значений в порядке приоритета:
23
+ * 1. Переменные окружения
24
+ * 2. Флаги командной строки
25
+ * 3. Значения по умолчанию
26
+ *
27
+ * Такой приоритет выбран для удобства конфигурирования в разных окружениях:
28
+ * - В локальной разработке проблем с ENV обычно не возникает
29
+ * - В Kubernetes удобнее редактировать ConfigMap, чем Deployment
30
+ * @param {OptionMetadata} optionMetadata - Метаданные опции, содержащие имя, парсер и значение по умолчанию
31
+ * @param {OptionValues} passedOptions - Объект с переданными опциями командной строки
32
+ * @returns {any} Разрешенное значение опции
33
+ */
34
+ resolve(optionMetadata, passedOptions) {
35
+ this.logger.trace('handle arg', { optionMetadata });
36
+ const parser = optionMetadata.parser ?? new common_1.BoolParser();
37
+ // Находим значение переменной окружения
38
+ const envKey = this.createEnvKey(optionMetadata);
39
+ const variable = this.env.optional(envKey, parser);
40
+ // Находим значение переданное в виде флага
41
+ const optsKey = lodash_1.default.camelCase(optionMetadata.name);
42
+ const isPassed = Object.hasOwn(passedOptions, optsKey);
43
+ const valueFromFlag = passedOptions[optsKey];
44
+ if (variable) {
45
+ if (isPassed) {
46
+ this.logger.warn(`Environment variable ${envKey} overrides command flags`);
47
+ }
48
+ // Возвращаем значение переменной окружения
49
+ return variable.value;
50
+ }
51
+ this.logger.trace(`Environment variable ${envKey} not provided`);
52
+ if (isPassed) {
53
+ this.logger.trace(`Use flag value: ${valueFromFlag}`, {
54
+ key: optsKey,
55
+ opts: passedOptions,
56
+ });
57
+ return parser.parse(valueFromFlag);
58
+ }
59
+ const defaultValue = optionMetadata.defaultValue;
60
+ this.logger.trace(`Use default value: ${defaultValue}`, {
61
+ key: optsKey,
62
+ opts: passedOptions,
63
+ });
64
+ /**
65
+ * undefined - вполне нормально значение по умолчанию
66
+ */
67
+ return defaultValue === undefined ? undefined : parser.parse(defaultValue);
68
+ }
69
+ /**
70
+ * Создает ключ переменной окружения на основе метаданных опции.
71
+ *
72
+ * @param {OptionMetadata} optionMetadata - Метаданные опции, содержащие имя и стратегию.
73
+ * @returns {string} Ключ переменной окружения в формате верхнего регистра с подчеркиванием.
74
+ */
75
+ createEnvKey(optionMetadata) {
76
+ return common_1.Case.toUpperSnake(`${optionMetadata.name}${optionMetadata.parser ? '' : '_enabled'}`);
77
+ }
78
+ }
79
+ exports.OptionsResolver = OptionsResolver;
80
+ //# sourceMappingURL=options.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.resolver.js","sourceRoot":"","sources":["../../src/resolvers/options.resolver.ts"],"names":[],"mappings":";;;;;;AACA,yCAAgD;AAIhD,oDAAuB;AAEvB;;;GAGG;AACH,MAAa,eAAe;IAEP;IACA;IAFnB,YACmB,GAAQ,EACR,MAAe;QADf,QAAG,GAAH,GAAG,CAAK;QACR,WAAM,GAAN,MAAM,CAAS;IAC/B,CAAC;IAEJ;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,cAA8B,EAAE,aAA2B;QACjE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,IAAI,IAAI,mBAAU,EAAE,CAAC;QAEzD,wCAAwC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEnD,2CAA2C;QAC3C,MAAM,OAAO,GAAG,gBAAC,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,wBAAwB,MAAM,0BAA0B,CACzD,CAAC;YACJ,CAAC;YAED,2CAA2C;YAC3C,OAAO,QAAQ,CAAC,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,MAAM,eAAe,CAAC,CAAC;QAEjE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,aAAa,EAAE,EAAE;gBACpD,GAAG,EAAE,OAAO;gBACZ,IAAI,EAAE,aAAa;aACpB,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,YAAY,EAAE,EAAE;YACtD,GAAG,EAAE,OAAO;YACZ,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QAEH;;WAEG;QACH,OAAO,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,cAA8B;QACzC,OAAO,aAAI,CAAC,YAAY,CACtB,GAAG,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CACnE,CAAC;IACJ,CAAC;CACF;AAhFD,0CAgFC"}
package/jest.config.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('@rsdk/jest/jest.config');
@@ -0,0 +1 @@
1
+ module.exports = require('@rsdk/jest/jest.config.unit');