@rsdk/cli 4.2.5-next.0 → 4.3.0-next.1

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 (77) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.MD +15 -0
  3. package/TODO.MD +5 -0
  4. package/bin.js +10 -0
  5. package/dist/exception.d.ts +4 -0
  6. package/dist/exception.js +23 -0
  7. package/dist/exception.js.map +1 -0
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.js +62 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/package.loader.d.ts +6 -0
  12. package/dist/package.loader.js +28 -0
  13. package/dist/package.loader.js.map +1 -0
  14. package/dist/reconfigure-logger.d.ts +5 -0
  15. package/dist/reconfigure-logger.js +12 -0
  16. package/dist/reconfigure-logger.js.map +1 -0
  17. package/package.json +11 -6
  18. package/src/exception.ts +25 -0
  19. package/src/index.ts +73 -0
  20. package/src/package.loader.ts +36 -0
  21. package/src/reconfigure-logger.ts +13 -0
  22. package/dist/bin.d.ts +0 -2
  23. package/dist/bin.js +0 -21
  24. package/dist/bin.js.map +0 -1
  25. package/dist/kafka/commands/extract/extract.command.d.ts +0 -2
  26. package/dist/kafka/commands/extract/extract.command.js +0 -17
  27. package/dist/kafka/commands/extract/extract.command.js.map +0 -1
  28. package/dist/kafka/commands/extract/kafka-config.extractor.d.ts +0 -6
  29. package/dist/kafka/commands/extract/kafka-config.extractor.js +0 -40
  30. package/dist/kafka/commands/extract/kafka-config.extractor.js.map +0 -1
  31. package/dist/kafka/commands/extract/types.d.ts +0 -85
  32. package/dist/kafka/commands/extract/types.js +0 -3
  33. package/dist/kafka/commands/extract/types.js.map +0 -1
  34. package/dist/kafka/commands/schema/print-schema.d.ts +0 -5
  35. package/dist/kafka/commands/schema/print-schema.js +0 -11
  36. package/dist/kafka/commands/schema/print-schema.js.map +0 -1
  37. package/dist/kafka/commands/schema/schema.command.d.ts +0 -2
  38. package/dist/kafka/commands/schema/schema.command.js +0 -12
  39. package/dist/kafka/commands/schema/schema.command.js.map +0 -1
  40. package/dist/kafka/commands/sync/check-exist.d.ts +0 -7
  41. package/dist/kafka/commands/sync/check-exist.js +0 -57
  42. package/dist/kafka/commands/sync/check-exist.js.map +0 -1
  43. package/dist/kafka/commands/sync/context.d.ts +0 -3
  44. package/dist/kafka/commands/sync/context.js +0 -3
  45. package/dist/kafka/commands/sync/context.js.map +0 -1
  46. package/dist/kafka/commands/sync/create-topic.task.d.ts +0 -5
  47. package/dist/kafka/commands/sync/create-topic.task.js +0 -28
  48. package/dist/kafka/commands/sync/create-topic.task.js.map +0 -1
  49. package/dist/kafka/commands/sync/get-config.d.ts +0 -5
  50. package/dist/kafka/commands/sync/get-config.js +0 -28
  51. package/dist/kafka/commands/sync/get-config.js.map +0 -1
  52. package/dist/kafka/commands/sync/kafka.creds-provider.d.ts +0 -4
  53. package/dist/kafka/commands/sync/kafka.creds-provider.js +0 -22
  54. package/dist/kafka/commands/sync/kafka.creds-provider.js.map +0 -1
  55. package/dist/kafka/commands/sync/sync.command.d.ts +0 -2
  56. package/dist/kafka/commands/sync/sync.command.js +0 -49
  57. package/dist/kafka/commands/sync/sync.command.js.map +0 -1
  58. package/dist/kafka/config.schema.d.ts +0 -34
  59. package/dist/kafka/config.schema.js +0 -26
  60. package/dist/kafka/config.schema.js.map +0 -1
  61. package/dist/kafka/schemas/string-enum.d.ts +0 -2
  62. package/dist/kafka/schemas/string-enum.js +0 -14
  63. package/dist/kafka/schemas/string-enum.js.map +0 -1
  64. package/src/bin.ts +0 -26
  65. package/src/kafka/commands/extract/extract.command.ts +0 -16
  66. package/src/kafka/commands/extract/kafka-config.extractor.ts +0 -47
  67. package/src/kafka/commands/extract/types.ts +0 -101
  68. package/src/kafka/commands/schema/print-schema.ts +0 -15
  69. package/src/kafka/commands/schema/schema.command.ts +0 -10
  70. package/src/kafka/commands/sync/check-exist.ts +0 -68
  71. package/src/kafka/commands/sync/context.ts +0 -3
  72. package/src/kafka/commands/sync/create-topic.task.ts +0 -35
  73. package/src/kafka/commands/sync/get-config.ts +0 -25
  74. package/src/kafka/commands/sync/kafka.creds-provider.ts +0 -16
  75. package/src/kafka/commands/sync/sync.command.ts +0 -66
  76. package/src/kafka/config.schema.ts +0 -31
  77. package/src/kafka/schemas/string-enum.ts +0 -15
package/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.3.0-next.1](https://github.com/R-Vision/rsdk/compare/v4.3.0-next.0...v4.3.0-next.1) (2024-03-21)
7
+
8
+ ### Features
9
+
10
+ * enchanche cli api and announce 4.3 ([#217](https://github.com/R-Vision/rsdk/issues/217)) ([65536bc](https://github.com/R-Vision/rsdk/commit/65536bcd13473790e4be901a44c07e49c2a79cff))
11
+
12
+ ## [4.3.0-next.0](https://github.com/R-Vision/rsdk/compare/v4.2.5-next.0...v4.3.0-next.0) (2024-03-19)
13
+
14
+ ### Features
15
+
16
+ * reworked cli system ([745ebf5](https://github.com/R-Vision/rsdk/commit/745ebf53635de135a4a9083f47ce833efe2d4411))
17
+
6
18
  ## [4.2.5-next.0](https://github.com/R-Vision/rsdk/compare/v4.2.4...v4.2.5-next.0) (2024-03-04)
7
19
 
8
20
  **Note:** Version bump only for package @rsdk/cli
package/README.MD ADDED
@@ -0,0 +1,15 @@
1
+ # Cli
2
+
3
+ Лаунчер для rsdk команд
4
+
5
+ ## Concepts
6
+
7
+ При вызове `rsdk <command>` лаунчер попытается найти пакет соответствующий этой команде (алгоритм поиска описан ниже) и/или предложит его установить, после чего делегирует обработку команды этому пакету.
8
+
9
+ ## Алгоритм поиска пакета
10
+
11
+ Из названия команды берется первая подстрока до двоеточия - `:`, этот фрагмент команды используется в названии команды `@rsdk/cli.cmd.<trimmed>`
12
+
13
+ ## Интерфейс взаимодействия
14
+
15
+ Основной интерфейс взаимодействия с пакетом команды обеспечивается через `RsdkCliCommand` из пакета `@rsdk/cli.common`
package/TODO.MD ADDED
@@ -0,0 +1,5 @@
1
+ # To do
2
+
3
+ [ ] list all installed commands
4
+ [ ] list all available commands (maybe over npm view + default commands from rsdk packages)
5
+ [ ] installing cmd.* packages different version, not only the same as `@rsdk/cli` package
package/bin.js ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ entrypoint для автоматической линковки в монорепе до сборки cli
5
+ */
6
+ const { execute } = require('./dist/index');
7
+
8
+ if (require.main === module) {
9
+ execute();
10
+ }
@@ -0,0 +1,4 @@
1
+ export declare class FailedToInstall extends Error {
2
+ constructor(packageName: string, rsdkCommand: string, cause?: any);
3
+ static assertError(error: Error, packageName: string, rsdkCommand: string): void;
4
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FailedToInstall = void 0;
4
+ class FailedToInstall extends Error {
5
+ constructor(packageName, rsdkCommand, cause) {
6
+ super('Failed to install ' + packageName, {
7
+ cause: {
8
+ packageName,
9
+ rsdkCommand,
10
+ cause,
11
+ },
12
+ });
13
+ this.name = this.constructor.name;
14
+ }
15
+ static assertError(error, packageName, rsdkCommand) {
16
+ const isFailedToInstall = error.message.startsWith('Failed to install');
17
+ if (isFailedToInstall) {
18
+ throw new FailedToInstall(packageName, rsdkCommand, error);
19
+ }
20
+ }
21
+ }
22
+ exports.FailedToInstall = FailedToInstall;
23
+ //# sourceMappingURL=exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exception.js","sourceRoot":"","sources":["../src/exception.ts"],"names":[],"mappings":";;;AAAA,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,WAAmB,EAAE,WAAmB,EAAE,KAAW;QAC/D,KAAK,CAAC,oBAAoB,GAAG,WAAW,EAAE;YACxC,KAAK,EAAE;gBACL,WAAW;gBACX,WAAW;gBACX,KAAK;aACN;SACF,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,KAAY,EACZ,WAAmB,EACnB,WAAmB;QAEnB,MAAM,iBAAiB,GAAI,KAAK,CAAC,OAAkB,CAAC,UAAU,CAC5D,mBAAmB,CACpB,CAAC;QACF,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,IAAI,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF;AAxBD,0CAwBC"}
@@ -0,0 +1,2 @@
1
+ import './reconfigure-logger';
2
+ export declare const execute: () => Promise<void>;
package/dist/index.js ADDED
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.execute = void 0;
4
+ const fs_1 = require("@parcel/fs");
5
+ const package_manager_1 = require("@parcel/package-manager");
6
+ const commander_1 = require("commander");
7
+ const enquirer_1 = require("enquirer");
8
+ const node_path_1 = require("node:path");
9
+ require("./reconfigure-logger");
10
+ const exception_1 = require("./exception");
11
+ const package_loader_1 = require("./package.loader");
12
+ // TODO: сделать более понятным, переиспользуемым, консистентным и контролируем
13
+ process.env.RSDK_CLI_MODE = 'true';
14
+ process.title = 'rsdk';
15
+ const execute = async () => {
16
+ const rsdkCommand = process.argv.slice(2)[0];
17
+ if (!rsdkCommand || rsdkCommand.startsWith('-')) {
18
+ commander_1.program.parse();
19
+ return;
20
+ }
21
+ const cmd = rsdkCommand.split(':')[0];
22
+ const cmdPackage = '@rsdk/cli.cmd.' + cmd;
23
+ const packageManager = new package_manager_1.NodePackageManager(new fs_1.NodeFS(), (0, node_path_1.resolve)());
24
+ const resolveResult = await packageManager
25
+ .resolve(cmdPackage, (0, node_path_1.resolve)(), null)
26
+ .catch((error) => error);
27
+ try {
28
+ const isNotResolved = resolveResult instanceof Error;
29
+ if (isNotResolved) {
30
+ console.log(`Unable to resolve ${cmdPackage} cause:`, resolveResult.message);
31
+ const response = await (0, enquirer_1.prompt)({
32
+ type: 'confirm',
33
+ name: 'isInstall',
34
+ message: 'Install ' + cmdPackage + ' package?',
35
+ initial: true,
36
+ });
37
+ if (!response.isInstall) {
38
+ console.log('Install was aborted');
39
+ return;
40
+ }
41
+ await package_loader_1.PackageLoader.installPackage(packageManager, cmdPackage);
42
+ }
43
+ const resolvedPackage = isNotResolved
44
+ ? await packageManager.resolve(cmdPackage, (0, node_path_1.resolve)(), void 0)
45
+ : resolveResult;
46
+ const rsdkCliCommand = package_loader_1.PackageLoader.getEntry(resolvedPackage.resolved);
47
+ const cmds = rsdkCliCommand.getCommands();
48
+ for (const cmd of cmds) {
49
+ commander_1.program.addCommand(cmd);
50
+ }
51
+ }
52
+ catch (error) {
53
+ if (!(error instanceof Error)) {
54
+ throw error;
55
+ }
56
+ exception_1.FailedToInstall.assertError(error, cmdPackage, rsdkCommand);
57
+ throw error;
58
+ }
59
+ commander_1.program.parse();
60
+ };
61
+ exports.execute = execute;
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AACpC,6DAA6D;AAC7D,yCAAoC;AACpC,uCAAkC;AAClC,yCAAoC;AAEpC,gCAA8B;AAE9B,2CAA8C;AAC9C,qDAAiD;AAEjD,+EAA+E;AAC/E,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;AAEnC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;AAEhB,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;IAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,mBAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,gBAAgB,GAAG,GAAG,CAAC;IAE1C,MAAM,cAAc,GAAG,IAAI,oCAAkB,CAAC,IAAI,WAAM,EAAE,EAAE,IAAA,mBAAO,GAAE,CAAC,CAAC;IAEvE,MAAM,aAAa,GAAG,MAAM,cAAc;SACvC,OAAO,CAAC,UAAU,EAAE,IAAA,mBAAO,GAAE,EAAE,IAAI,CAAC;SACpC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,aAAa,YAAY,KAAK,CAAC;QACrD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CACT,qBAAqB,UAAU,SAAS,EACxC,aAAa,CAAC,OAAO,CACtB,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAM,EAAyB;gBACpD,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW;gBAC9C,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,MAAM,8BAAa,CAAC,cAAc,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,eAAe,GAAG,aAAa;YACnC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,IAAA,mBAAO,GAAE,EAAE,KAAK,CAAC,CAAC;YAC7D,CAAC,CAAC,aAAa,CAAC;QAElB,MAAM,cAAc,GAAG,8BAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAExE,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,mBAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC;QACd,CAAC;QACD,2BAAe,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC;IACd,CAAC;IAED,mBAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC,CAAC;AAxDW,QAAA,OAAO,WAwDlB"}
@@ -0,0 +1,6 @@
1
+ import type { PackageManager } from '@parcel/package-manager';
2
+ import type { RsdkCliCommand } from '@rsdk/cli.common';
3
+ export declare class PackageLoader {
4
+ static getEntry(cmdPackageName: string): RsdkCliCommand;
5
+ static installPackage(packageManager: PackageManager, cmdPackage: string): Promise<void>;
6
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PackageLoader = void 0;
4
+ const node_path_1 = require("node:path");
5
+ class PackageLoader {
6
+ static getEntry(cmdPackageName) {
7
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
8
+ return require(cmdPackageName).Cmd;
9
+ }
10
+ static async installPackage(packageManager, cmdPackage) {
11
+ const cliPackageJsonPath = require.resolve('../package.json', {
12
+ paths: [__dirname],
13
+ });
14
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
15
+ const cliPackageJson = require(cliPackageJsonPath);
16
+ // @ts-expect-error not declared method
17
+ await packageManager.install([
18
+ {
19
+ name: cmdPackage,
20
+ semVer: cliPackageJson.version,
21
+ },
22
+ ], (0, node_path_1.resolve)(''), {
23
+ saveDev: true,
24
+ });
25
+ }
26
+ }
27
+ exports.PackageLoader = PackageLoader;
28
+ //# sourceMappingURL=package.loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.loader.js","sourceRoot":"","sources":["../src/package.loader.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AAEpC,MAAa,aAAa;IACxB,MAAM,CAAC,QAAQ,CAAC,cAAsB;QACpC,8DAA8D;QAC9D,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,cAAc,CACzB,cAA8B,EAC9B,UAAkB;QAElB,MAAM,kBAAkB,GAAW,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACpE,KAAK,EAAE,CAAC,SAAS,CAAC;SACnB,CAAC,CAAC;QAEH,8DAA8D;QAC9D,MAAM,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAEnD,uCAAuC;QACvC,MAAM,cAAc,CAAC,OAAO,CAC1B;YACE;gBACE,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,cAAc,CAAC,OAAO;aAC/B;SACF,EACD,IAAA,mBAAO,EAAC,EAAE,CAAC,EACX;YACE,OAAO,EAAE,IAAI;SACd,CACF,CAAC;IACJ,CAAC;CACF;AA/BD,sCA+BC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * TODO: написать корректную работу с логгером, с учетом того что она может (уже используется вне DI) и может аффектить tracing
3
+ */
4
+ import { LogLevel } from '@rsdk/logging';
5
+ export declare const logLevelFromEnv: LogLevel | undefined;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * TODO: написать корректную работу с логгером, с учетом того что она может (уже используется вне DI) и может аффектить tracing
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logLevelFromEnv = void 0;
7
+ const logging_1 = require("@rsdk/logging");
8
+ exports.logLevelFromEnv = logging_1.LogLevel[(process.env.LOG_LEVEL ?? 'info')];
9
+ logging_1.LoggerFactory.reconfigure({
10
+ level: exports.logLevelFromEnv ?? logging_1.LogLevel.info,
11
+ });
12
+ //# sourceMappingURL=reconfigure-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconfigure-logger.js","sourceRoot":"","sources":["../src/reconfigure-logger.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,2CAAwD;AAE3C,QAAA,eAAe,GAAG,kBAAQ,CACrC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAa,CACtB,CAAC;AAE1B,uBAAa,CAAC,WAAW,CAAC;IACxB,KAAK,EAAE,uBAAe,IAAI,kBAAQ,CAAC,IAAI;CACxC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@rsdk/cli",
3
- "version": "4.2.5-next.0",
3
+ "version": "4.3.0-next.1",
4
4
  "description": "entry package to cli functions",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
7
- "rsdk": "dist/bin.js"
7
+ "rsdk": "bin.js"
8
8
  },
9
9
  "publishConfig": {
10
10
  "access": "public"
@@ -15,15 +15,20 @@
15
15
  ],
16
16
  "license": "Apache License 2.0",
17
17
  "dependencies": {
18
- "@sinclair/typebox": "^0.30.4",
19
- "commander": "^11.0.0",
18
+ "@parcel/fs": "^2.11.0",
19
+ "@parcel/package-manager": "^2.11.0",
20
+ "@sinclair/typebox": "^0.32.13",
21
+ "commander": "^12.0.0",
20
22
  "dotenv": "^16.3.1",
23
+ "enquirer": "^2.4.1",
21
24
  "kafkajs": "^2.2.4",
22
25
  "listr2": "^6.6.1",
23
26
  "yaml": "^2.3.1"
24
27
  },
25
28
  "peerDependencies": {
26
- "@rsdk/core": "^4.2.5-next.0"
29
+ "@rsdk/cli.cmd.kafka": "^4.3.0-next.1",
30
+ "@rsdk/cli.common": "^4.3.0-next.1",
31
+ "@rsdk/logging": "^4.3.0-next.1"
27
32
  },
28
- "gitHead": "3fd1ccaa4a982d914736c13b87dc9bfe03cd229d"
33
+ "gitHead": "da58041323f3145aa436e02774d36d44606c1217"
29
34
  }
@@ -0,0 +1,25 @@
1
+ export class FailedToInstall extends Error {
2
+ constructor(packageName: string, rsdkCommand: string, cause?: any) {
3
+ super('Failed to install ' + packageName, {
4
+ cause: {
5
+ packageName,
6
+ rsdkCommand,
7
+ cause,
8
+ },
9
+ });
10
+ this.name = this.constructor.name;
11
+ }
12
+
13
+ static assertError(
14
+ error: Error,
15
+ packageName: string,
16
+ rsdkCommand: string,
17
+ ): void {
18
+ const isFailedToInstall = (error.message as string).startsWith(
19
+ 'Failed to install',
20
+ );
21
+ if (isFailedToInstall) {
22
+ throw new FailedToInstall(packageName, rsdkCommand, error);
23
+ }
24
+ }
25
+ }
package/src/index.ts ADDED
@@ -0,0 +1,73 @@
1
+ import { NodeFS } from '@parcel/fs';
2
+ import { NodePackageManager } from '@parcel/package-manager';
3
+ import { program } from 'commander';
4
+ import { prompt } from 'enquirer';
5
+ import { resolve } from 'node:path';
6
+
7
+ import './reconfigure-logger';
8
+
9
+ import { FailedToInstall } from './exception';
10
+ import { PackageLoader } from './package.loader';
11
+
12
+ // TODO: сделать более понятным, переиспользуемым, консистентным и контролируем
13
+ process.env.RSDK_CLI_MODE = 'true';
14
+
15
+ process.title = 'rsdk';
16
+
17
+ export const execute = async (): Promise<void> => {
18
+ const rsdkCommand = process.argv.slice(2)[0];
19
+
20
+ if (!rsdkCommand || rsdkCommand.startsWith('-')) {
21
+ program.parse();
22
+ return;
23
+ }
24
+ const cmd = rsdkCommand.split(':')[0];
25
+ const cmdPackage = '@rsdk/cli.cmd.' + cmd;
26
+
27
+ const packageManager = new NodePackageManager(new NodeFS(), resolve());
28
+
29
+ const resolveResult = await packageManager
30
+ .resolve(cmdPackage, resolve(), null)
31
+ .catch((error) => error);
32
+
33
+ try {
34
+ const isNotResolved = resolveResult instanceof Error;
35
+ if (isNotResolved) {
36
+ console.log(
37
+ `Unable to resolve ${cmdPackage} cause:`,
38
+ resolveResult.message,
39
+ );
40
+ const response = await prompt<{ isInstall: boolean }>({
41
+ type: 'confirm',
42
+ name: 'isInstall',
43
+ message: 'Install ' + cmdPackage + ' package?',
44
+ initial: true,
45
+ });
46
+
47
+ if (!response.isInstall) {
48
+ console.log('Install was aborted');
49
+ return;
50
+ }
51
+ await PackageLoader.installPackage(packageManager, cmdPackage);
52
+ }
53
+ const resolvedPackage = isNotResolved
54
+ ? await packageManager.resolve(cmdPackage, resolve(), void 0)
55
+ : resolveResult;
56
+
57
+ const rsdkCliCommand = PackageLoader.getEntry(resolvedPackage.resolved);
58
+
59
+ const cmds = rsdkCliCommand.getCommands();
60
+
61
+ for (const cmd of cmds) {
62
+ program.addCommand(cmd);
63
+ }
64
+ } catch (error: any) {
65
+ if (!(error instanceof Error)) {
66
+ throw error;
67
+ }
68
+ FailedToInstall.assertError(error, cmdPackage, rsdkCommand);
69
+ throw error;
70
+ }
71
+
72
+ program.parse();
73
+ };
@@ -0,0 +1,36 @@
1
+ import type { PackageManager } from '@parcel/package-manager';
2
+ import type { RsdkCliCommand } from '@rsdk/cli.common';
3
+ import { resolve } from 'node:path';
4
+
5
+ export class PackageLoader {
6
+ static getEntry(cmdPackageName: string): RsdkCliCommand {
7
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
8
+ return require(cmdPackageName).Cmd;
9
+ }
10
+
11
+ static async installPackage(
12
+ packageManager: PackageManager,
13
+ cmdPackage: string,
14
+ ): Promise<void> {
15
+ const cliPackageJsonPath: string = require.resolve('../package.json', {
16
+ paths: [__dirname],
17
+ });
18
+
19
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
20
+ const cliPackageJson = require(cliPackageJsonPath);
21
+
22
+ // @ts-expect-error not declared method
23
+ await packageManager.install(
24
+ [
25
+ {
26
+ name: cmdPackage,
27
+ semVer: cliPackageJson.version,
28
+ },
29
+ ],
30
+ resolve(''),
31
+ {
32
+ saveDev: true,
33
+ },
34
+ );
35
+ }
36
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * TODO: написать корректную работу с логгером, с учетом того что она может (уже используется вне DI) и может аффектить tracing
3
+ */
4
+
5
+ import { LoggerFactory, LogLevel } from '@rsdk/logging';
6
+
7
+ export const logLevelFromEnv = LogLevel[
8
+ (process.env.LOG_LEVEL ?? 'info') as LogLevel
9
+ ] as LogLevel | undefined;
10
+
11
+ LoggerFactory.reconfigure({
12
+ level: logLevelFromEnv ?? LogLevel.info,
13
+ });
package/dist/bin.d.ts DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
package/dist/bin.js DELETED
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const commander_1 = require("commander");
5
- const extract_command_1 = require("./kafka/commands/extract/extract.command");
6
- const schema_command_1 = require("./kafka/commands/schema/schema.command");
7
- const sync_command_1 = require("./kafka/commands/sync/sync.command");
8
- // TODO: сделать более понятным, переиспользуемым, консистентным и контролируем
9
- process.env.RSDK_CLI_MODE = 'true';
10
- const kafkaCommand = new commander_1.Command('kafka');
11
- commander_1.program.addCommand(kafkaCommand
12
- .addCommand(sync_command_1.KafkaSyncCommand)
13
- .addCommand(extract_command_1.KafkaExtractCommand)
14
- .addCommand(schema_command_1.SchemaCommand));
15
- const execute = () => {
16
- commander_1.program.parse();
17
- };
18
- if (require.main === module) {
19
- execute();
20
- }
21
- //# sourceMappingURL=bin.js.map
package/dist/bin.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;AACA,yCAA6C;AAE7C,8EAA+E;AAC/E,2EAAuE;AACvE,qEAAsE;AAEtE,+EAA+E;AAC/E,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;AAEnC,MAAM,YAAY,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC,CAAC;AAE1C,mBAAO,CAAC,UAAU,CAChB,YAAY;KACT,UAAU,CAAC,+BAAgB,CAAC;KAC5B,UAAU,CAAC,qCAAmB,CAAC;KAC/B,UAAU,CAAC,8BAAa,CAAC,CAC7B,CAAC;AAEF,MAAM,OAAO,GAAG,GAAS,EAAE;IACzB,mBAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC,CAAC;AAEF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const KafkaExtractCommand: Command;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KafkaExtractCommand = void 0;
4
- const commander_1 = require("commander");
5
- const print_schema_1 = require("../schema/print-schema");
6
- const kafka_config_extractor_1 = require("./kafka-config.extractor");
7
- exports.KafkaExtractCommand = new commander_1.Command('extract')
8
- .description('extract kafka.yml from rsdk.json')
9
- .option('--with-schema', 'print and include $schema to yaml for autocomplete')
10
- .action(async (_, cmd) => {
11
- const options = cmd.opts();
12
- if (options.withSchema) {
13
- await (0, print_schema_1.printSchema)({ outFile: print_schema_1.printDefaultOutFile, pretty: true });
14
- }
15
- await kafka_config_extractor_1.KafkaConfigExtractor.extractCommand(print_schema_1.printDefaultOutFile);
16
- });
17
- //# sourceMappingURL=extract.command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract.command.js","sourceRoot":"","sources":["../../../../src/kafka/commands/extract/extract.command.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AAEpC,yDAA0E;AAE1E,qEAAgE;AAEnD,QAAA,mBAAmB,GAAG,IAAI,mBAAO,CAAC,SAAS,CAAC;KACtD,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,oDAAoD,CAAC;KAC7E,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAY,EAAE,EAAE;IAChC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,0BAAW,EAAC,EAAE,OAAO,EAAE,kCAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,6CAAoB,CAAC,cAAc,CAAC,kCAAmB,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { Static } from '@sinclair/typebox';
2
- import type { CliKafkaConfigSchema } from '../../config.schema';
3
- export declare class KafkaConfigExtractor {
4
- static extractCommand(includeSchema?: string): Promise<void>;
5
- static extract(): Promise<Static<typeof CliKafkaConfigSchema>>;
6
- }
@@ -1,40 +0,0 @@
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.KafkaConfigExtractor = void 0;
7
- const core_1 = require("@rsdk/core");
8
- const promises_1 = require("node:fs/promises");
9
- const node_path_1 = require("node:path");
10
- const yaml_1 = __importDefault(require("yaml"));
11
- class KafkaConfigExtractor {
12
- static async extractCommand(includeSchema) {
13
- const resultKafkaConfig = await this.extract();
14
- await (0, promises_1.writeFile)((0, node_path_1.resolve)('kafka.yml'), yaml_1.default.stringify({
15
- ...(includeSchema && { $schema: includeSchema }),
16
- ...resultKafkaConfig,
17
- }));
18
- }
19
- static async extract() {
20
- const pathToRsdkJson = (0, node_path_1.resolve)('autodoc/rsdk.json');
21
- const rsdkJson = JSON.parse(await (0, promises_1.readFile)(pathToRsdkJson, 'utf8'));
22
- const kafkaMetadata = rsdkJson.rsdkMetadata
23
- .filter(({ scope }) => scope === 'kafka-topic')
24
- .map(({ value }) => value);
25
- const topics = kafkaMetadata.map((meta) => {
26
- const topicName = meta.topicName;
27
- if (!topicName) {
28
- throw new core_1.InputException('topicName must be provided', {
29
- details: meta,
30
- });
31
- }
32
- return {
33
- name: topicName,
34
- };
35
- });
36
- return { topics };
37
- }
38
- }
39
- exports.KafkaConfigExtractor = KafkaConfigExtractor;
40
- //# sourceMappingURL=kafka-config.extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kafka-config.extractor.js","sourceRoot":"","sources":["../../../../src/kafka/commands/extract/kafka-config.extractor.ts"],"names":[],"mappings":";;;;;;AAAA,qCAA4C;AAE5C,+CAAuD;AACvD,yCAAoC;AACpC,gDAAwB;AAMxB,MAAa,oBAAoB;IAC/B,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,aAAsB;QAChD,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAE/C,MAAM,IAAA,oBAAS,EACb,IAAA,mBAAO,EAAC,WAAW,CAAC,EACpB,cAAI,CAAC,SAAS,CAAC;YACb,GAAG,CAAC,aAAa,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YAChD,GAAG,iBAAiB;SACrB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO;QAClB,MAAM,cAAc,GAAG,IAAA,mBAAO,EAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAS,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QAE1E,MAAM,aAAa,GAAG,QAAQ,CAAC,YAAY;aACxC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,aAAa,CAAC;aAC9C,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAE7B,MAAM,MAAM,GACV,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,qBAAc,CAAC,4BAA4B,EAAE;oBACrD,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,SAAS;aAChB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEL,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AApCD,oDAoCC"}
@@ -1,85 +0,0 @@
1
- export interface Root {
2
- metadata: Metadata;
3
- rsdkMetadata: RsdkMetadaum[];
4
- }
5
- export interface Metadata {
6
- name: string;
7
- version: string;
8
- description: string;
9
- protocols: string[];
10
- config: Config;
11
- }
12
- export interface Config {
13
- prefix: string;
14
- sections: Section[];
15
- sources: any[];
16
- properties: any[];
17
- }
18
- export interface Section {
19
- tags?: string[];
20
- constructorName: string;
21
- properties: Property[];
22
- name?: string;
23
- }
24
- export interface Property {
25
- expectedInEnv: boolean;
26
- key: string;
27
- description: string;
28
- parser: Parser;
29
- defaultValue: any;
30
- }
31
- export interface Parser {
32
- type: string;
33
- description: string;
34
- }
35
- export interface RsdkMetadaum {
36
- scope: string;
37
- value: Value;
38
- }
39
- export interface Value {
40
- global?: boolean;
41
- imports?: Import[];
42
- providers?: Provider2[];
43
- exports?: string[];
44
- token?: string;
45
- partitionKeyField: any;
46
- topicName?: string;
47
- group?: string;
48
- type?: number;
49
- eventType?: EventType;
50
- options?: Options3;
51
- constructorName?: string;
52
- }
53
- export interface Import {
54
- providers: Provider[];
55
- exports: Export[];
56
- }
57
- export interface Provider {
58
- inject: Inject | undefined[];
59
- }
60
- export interface Inject {
61
- optional: boolean;
62
- }
63
- export interface Export {
64
- inject: Inject2 | undefined[];
65
- }
66
- export interface Inject2 {
67
- optional: boolean;
68
- }
69
- export interface Provider2 {
70
- provide: string;
71
- useValue: UseValue;
72
- }
73
- export interface UseValue {
74
- context: string;
75
- }
76
- export interface EventType {
77
- $group: string;
78
- $partitionKeyField: any;
79
- $type: string;
80
- }
81
- export interface Options3 {
82
- key: string;
83
- scope: string;
84
- description: string;
85
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/kafka/commands/extract/types.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- export declare const printDefaultOutFile = "./kafka.schema.json";
2
- export declare function printSchema(options?: {
3
- outFile?: string;
4
- pretty?: boolean;
5
- }): Promise<void>;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.printSchema = exports.printDefaultOutFile = void 0;
4
- const promises_1 = require("node:fs/promises");
5
- const config_schema_1 = require("../../config.schema");
6
- exports.printDefaultOutFile = './kafka.schema.json';
7
- async function printSchema(options) {
8
- await (0, promises_1.writeFile)(options?.outFile ?? exports.printDefaultOutFile, JSON.stringify(config_schema_1.CliKafkaConfigSchema, null, options?.pretty ? 2 : 0));
9
- }
10
- exports.printSchema = printSchema;
11
- //# sourceMappingURL=print-schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"print-schema.js","sourceRoot":"","sources":["../../../../src/kafka/commands/schema/print-schema.ts"],"names":[],"mappings":";;;AAAA,+CAA6C;AAE7C,uDAA2D;AAE9C,QAAA,mBAAmB,GAAG,qBAAqB,CAAC;AAElD,KAAK,UAAU,WAAW,CAAC,OAGjC;IACC,MAAM,IAAA,oBAAS,EACb,OAAO,EAAE,OAAO,IAAI,2BAAmB,EACvC,IAAI,CAAC,SAAS,CAAC,oCAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpE,CAAC;AACJ,CAAC;AARD,kCAQC"}
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const SchemaCommand: Command;