@rsdk/cli.common 4.3.0-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.
- package/CHANGELOG.md +6 -0
- package/README.MD +9 -0
- package/dist/cmd.core.js +43 -4
- package/dist/cmd.core.js.map +1 -1
- package/dist/decorators.d.ts +1 -1
- package/dist/decorators.js +2 -1
- package/dist/decorators.js.map +1 -1
- package/dist/env.provider.d.ts +3 -4
- package/dist/env.provider.js +10 -19
- package/dist/env.provider.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/cmd.core.ts +64 -12
- package/src/decorators.ts +2 -0
- package/src/env.provider.ts +13 -19
- package/src/index.ts +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
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
|
+
|
|
6
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)
|
|
7
13
|
|
|
8
14
|
### Features
|
package/README.MD
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Cli.common
|
|
2
|
+
|
|
3
|
+
Пакет аггрегирующий в себе все основные интерфейсы касающиеся системы "плагинизации" в cli
|
|
4
|
+
|
|
5
|
+
## Основные концепции
|
|
6
|
+
|
|
7
|
+
Здесь должны быть:
|
|
8
|
+
- все интерфейсы для взаимодействия лаунчера и пакетов, которые обеспечивают обработку команд
|
|
9
|
+
- стандартные и стандартизированные способы обработки типичных случаев
|
package/dist/cmd.core.js
CHANGED
|
@@ -4,9 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getCommanderCommand = void 0;
|
|
7
|
+
const logging_1 = require("@rsdk/logging");
|
|
7
8
|
const commander_1 = require("commander");
|
|
8
9
|
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
+
const env_provider_1 = require("./env.provider");
|
|
9
11
|
const types_1 = require("./types");
|
|
12
|
+
const cliLogger = logging_1.LoggerFactory.create('@rsdk/cli.common');
|
|
10
13
|
function getRootCommand(globalMetadata) {
|
|
11
14
|
const v = globalMetadata?.get(types_1.MetaKeys.Core);
|
|
12
15
|
if (!v) {
|
|
@@ -14,15 +17,51 @@ function getRootCommand(globalMetadata) {
|
|
|
14
17
|
}
|
|
15
18
|
return new commander_1.Command(v.name).description(v.description);
|
|
16
19
|
}
|
|
20
|
+
function createEnvKey(optionMetadata) {
|
|
21
|
+
return lodash_1.default.snakeCase(`${optionMetadata.name}${optionMetadata.strategy === Boolean ? '_enabled' : ''}`).toUpperCase();
|
|
22
|
+
}
|
|
17
23
|
function createCommandHandler(argMap, handler) {
|
|
18
24
|
return (__, cmd) => {
|
|
19
25
|
const opts = cmd.opts();
|
|
20
|
-
const normalizedArgList = [...argMap].map(([index,
|
|
26
|
+
const normalizedArgList = [...argMap].map(([index, optionMetadata]) => ({
|
|
21
27
|
index,
|
|
22
|
-
|
|
28
|
+
optionMetadata,
|
|
23
29
|
}));
|
|
24
30
|
const sortedArgList = lodash_1.default.sortBy(normalizedArgList, ['index']);
|
|
25
|
-
const args = sortedArgList.map(({
|
|
31
|
+
const args = sortedArgList.map(({ optionMetadata }) => {
|
|
32
|
+
cliLogger.trace('handle arg', {
|
|
33
|
+
optionMetadata,
|
|
34
|
+
});
|
|
35
|
+
const key = lodash_1.default.camelCase(optionMetadata.name);
|
|
36
|
+
const v = opts[key];
|
|
37
|
+
const isNotProvided = Object.hasOwn(opts, key);
|
|
38
|
+
const isNotDefaultValue = optionMetadata.defaultValue !== undefined &&
|
|
39
|
+
v !== optionMetadata.defaultValue;
|
|
40
|
+
const envKey = createEnvKey(optionMetadata);
|
|
41
|
+
cliLogger.trace('use env key for option', {
|
|
42
|
+
envKey,
|
|
43
|
+
});
|
|
44
|
+
const envValue = isNotProvided ? env_provider_1.Env.get(envKey) : undefined;
|
|
45
|
+
cliLogger.trace('option value state', {
|
|
46
|
+
isNotProvided,
|
|
47
|
+
isNotDefaultValue,
|
|
48
|
+
envKey,
|
|
49
|
+
envValue,
|
|
50
|
+
optionMetadata,
|
|
51
|
+
});
|
|
52
|
+
if (envValue !== undefined && envValue !== v) {
|
|
53
|
+
cliLogger.warn('Flag value override env value', {
|
|
54
|
+
optionMetadata,
|
|
55
|
+
envKey,
|
|
56
|
+
envValue,
|
|
57
|
+
flagValue: v,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (isNotDefaultValue && optionMetadata.parser) {
|
|
61
|
+
return optionMetadata.parser(v ?? envValue);
|
|
62
|
+
}
|
|
63
|
+
return v;
|
|
64
|
+
});
|
|
26
65
|
handler(...args);
|
|
27
66
|
};
|
|
28
67
|
}
|
|
@@ -64,7 +103,7 @@ const getCommanderCommand = (cmd) => {
|
|
|
64
103
|
const command = new commander_1.Command(subCmdValue.name).description(subCmdValue.description);
|
|
65
104
|
const argMap = createArgMap(metadata);
|
|
66
105
|
for (const option of argMap.values()) {
|
|
67
|
-
command.option(`--${option.name}${option.strategy === String ? ' <value>' : ''}`, option.description
|
|
106
|
+
command.option(`--${option.name}${option.strategy === String ? ' <value>' : ''}`, `${option.description} [eq ${createEnvKey(option)} in env]`, option.defaultValue);
|
|
68
107
|
}
|
|
69
108
|
command.action(createCommandHandler(argMap,
|
|
70
109
|
// @ts-expect-error потому что не понимает что инстанс это объект у которого есть этот метод
|
package/dist/cmd.core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd.core.js","sourceRoot":"","sources":["../src/cmd.core.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,oDAAuB;
|
|
1
|
+
{"version":3,"file":"cmd.core.js","sourceRoot":"","sources":["../src/cmd.core.ts"],"names":[],"mappings":"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"}
|
package/dist/decorators.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const SubCmd: (name: string, description: string) => MethodDecorator;
|
|
2
2
|
export declare const Cmd: (name: string, description: string) => ClassDecorator;
|
|
3
|
-
export declare const Option: (name: string, description: string, strategy: typeof Boolean | typeof String) => ParameterDecorator;
|
|
3
|
+
export declare const Option: (name: string, description: string, strategy: typeof Boolean | typeof String, parser?: ((v: any) => any) | undefined) => ParameterDecorator;
|
|
4
4
|
export declare const Alias: (alias: string) => ParameterDecorator;
|
|
5
5
|
export declare const Default: (v: any) => ParameterDecorator;
|
package/dist/decorators.js
CHANGED
|
@@ -22,7 +22,7 @@ const Cmd = (name, description) => {
|
|
|
22
22
|
};
|
|
23
23
|
};
|
|
24
24
|
exports.Cmd = Cmd;
|
|
25
|
-
const Option = (name, description, strategy) => {
|
|
25
|
+
const Option = (name, description, strategy, parser) => {
|
|
26
26
|
return (target, propertyKey, parameterIndex) => {
|
|
27
27
|
(0, utils_1.assertString)(propertyKey);
|
|
28
28
|
(0, utils_1.defineMetadata)(target, propertyKey, types_1.MetaKeys.Option, {
|
|
@@ -30,6 +30,7 @@ const Option = (name, description, strategy) => {
|
|
|
30
30
|
description,
|
|
31
31
|
strategy,
|
|
32
32
|
parameterIndex,
|
|
33
|
+
parser,
|
|
33
34
|
});
|
|
34
35
|
};
|
|
35
36
|
};
|
package/dist/decorators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACnC,mCAA2E;AAEpE,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAmB,EAAE;IAC3E,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QAC7B,IAAA,oBAAY,EAAC,WAAW,CAAC,CAAC;QAC1B,IAAA,sBAAc,EAAC,MAAM,EAAE,WAAW,EAAE,gBAAQ,CAAC,MAAM,EAAE;YACnD,IAAI;YACJ,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,MAAM,UAQjB;AACK,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAkB,EAAE;IACvE,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IAAA,0BAAkB,EAAC,MAAM,EAAE,gBAAQ,CAAC,IAAI,EAAE;YACxC,IAAI;YACJ,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,GAAG,OAOd;AAEK,MAAM,MAAM,GAAG,CACpB,IAAY,EACZ,WAAmB,EACnB,QAAwC,
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACnC,mCAA2E;AAEpE,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAmB,EAAE;IAC3E,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QAC7B,IAAA,oBAAY,EAAC,WAAW,CAAC,CAAC;QAC1B,IAAA,sBAAc,EAAC,MAAM,EAAE,WAAW,EAAE,gBAAQ,CAAC,MAAM,EAAE;YACnD,IAAI;YACJ,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,MAAM,UAQjB;AACK,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAkB,EAAE;IACvE,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IAAA,0BAAkB,EAAC,MAAM,EAAE,gBAAQ,CAAC,IAAI,EAAE;YACxC,IAAI;YACJ,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,GAAG,OAOd;AAEK,MAAM,MAAM,GAAG,CACpB,IAAY,EACZ,WAAmB,EACnB,QAAwC,EACxC,MAAwB,EACJ,EAAE;IACtB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;QAC7C,IAAA,oBAAY,EAAC,WAAW,CAAC,CAAC;QAC1B,IAAA,sBAAc,EAAC,MAAM,EAAE,WAAW,EAAE,gBAAQ,CAAC,MAAM,EAAE;YACnD,IAAI;YACJ,WAAW;YACX,QAAQ;YACR,cAAc;YACd,MAAM;SACP,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,MAAM,UAgBjB;AACK,MAAM,KAAK,GAAG,CAAC,KAAa,EAAsB,EAAE;IACzD,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;QAC7C,IAAA,oBAAY,EAAC,WAAW,CAAC,CAAC;QAC1B,IAAA,sBAAc,EAAC,MAAM,EAAE,WAAW,EAAE,gBAAQ,CAAC,KAAK,EAAE;YAClD,KAAK;YACL,cAAc;SACf,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,KAAK,SAQhB;AACK,MAAM,OAAO,GAAG,CAAC,CAAM,EAAsB,EAAE;IACpD,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;QAC7C,IAAA,oBAAY,EAAC,WAAW,CAAC,CAAC;QAC1B,IAAA,sBAAc,EAAC,MAAM,EAAE,WAAW,EAAE,gBAAQ,CAAC,YAAY,EAAE;YACzD,YAAY,EAAE,CAAC;YACf,cAAc;SACf,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,OAAO,WAQlB"}
|
package/dist/env.provider.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export declare class
|
|
2
|
-
static
|
|
3
|
-
|
|
4
|
-
private static parseEnv;
|
|
1
|
+
export declare class Env {
|
|
2
|
+
static get(key: string): string | undefined;
|
|
3
|
+
static get<V = string>(key: string, parser: (v: string | undefined) => V): V;
|
|
5
4
|
}
|
package/dist/env.provider.js
CHANGED
|
@@ -3,26 +3,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
const
|
|
8
|
-
class
|
|
9
|
-
static
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (EnvProvider.parsed) {
|
|
15
|
-
return EnvProvider.parsed;
|
|
16
|
-
}
|
|
17
|
-
const parsed = dotenv_1.default.config();
|
|
18
|
-
if (parsed.error) {
|
|
19
|
-
throw new Error('Error read config', {
|
|
20
|
-
cause: parsed.error,
|
|
21
|
-
});
|
|
6
|
+
exports.Env = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
class Env {
|
|
9
|
+
static get(key, parser) {
|
|
10
|
+
const preparedKey = lodash_1.default.snakeCase(key).toUpperCase();
|
|
11
|
+
const v = process.env[preparedKey];
|
|
12
|
+
if (parser) {
|
|
13
|
+
return parser(v);
|
|
22
14
|
}
|
|
23
|
-
|
|
24
|
-
return EnvProvider.parsed;
|
|
15
|
+
return v;
|
|
25
16
|
}
|
|
26
17
|
}
|
|
27
|
-
exports.
|
|
18
|
+
exports.Env = Env;
|
|
28
19
|
//# sourceMappingURL=env.provider.js.map
|
package/dist/env.provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.provider.js","sourceRoot":"","sources":["../src/env.provider.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"env.provider.js","sourceRoot":"","sources":["../src/env.provider.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AAEvB,MAAa,GAAG;IAGd,MAAM,CAAC,GAAG,CACR,GAAW,EACX,MAAqC;QAErC,MAAM,WAAW,GAAG,gBAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAdD,kBAcC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import 'reflect-metadata';
|
|
|
3
3
|
export { getMetadataByPredict } from './rsdk/metadata.aggregator';
|
|
4
4
|
export { RsdkJson } from './types';
|
|
5
5
|
export { RsdkJsonParser } from './rsdk-json.parser';
|
|
6
|
-
export { EnvProvider } from './env.provider';
|
|
7
6
|
export { getCommanderCommand } from './cmd.core';
|
|
8
7
|
export interface RsdkCliCommand {
|
|
9
8
|
getCommands(): Command[];
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Cmd = exports.SubCmd = exports.Option = exports.Alias = exports.Default = exports.getCommanderCommand = exports.
|
|
3
|
+
exports.Cmd = exports.SubCmd = exports.Option = exports.Alias = exports.Default = exports.getCommanderCommand = exports.RsdkJsonParser = exports.getMetadataByPredict = void 0;
|
|
4
4
|
require("reflect-metadata");
|
|
5
5
|
var metadata_aggregator_1 = require("./rsdk/metadata.aggregator");
|
|
6
6
|
Object.defineProperty(exports, "getMetadataByPredict", { enumerable: true, get: function () { return metadata_aggregator_1.getMetadataByPredict; } });
|
|
7
7
|
var rsdk_json_parser_1 = require("./rsdk-json.parser");
|
|
8
8
|
Object.defineProperty(exports, "RsdkJsonParser", { enumerable: true, get: function () { return rsdk_json_parser_1.RsdkJsonParser; } });
|
|
9
|
-
var env_provider_1 = require("./env.provider");
|
|
10
|
-
Object.defineProperty(exports, "EnvProvider", { enumerable: true, get: function () { return env_provider_1.EnvProvider; } });
|
|
11
9
|
var cmd_core_1 = require("./cmd.core");
|
|
12
10
|
Object.defineProperty(exports, "getCommanderCommand", { enumerable: true, get: function () { return cmd_core_1.getCommanderCommand; } });
|
|
13
11
|
var decorators_1 = require("./decorators");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,4BAA0B;AAE1B,kEAAkE;AAAzD,2HAAA,oBAAoB,OAAA;AAI7B,uDAAoD;AAA3C,kHAAA,cAAc,OAAA;AAEvB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,4BAA0B;AAE1B,kEAAkE;AAAzD,2HAAA,oBAAoB,OAAA;AAI7B,uDAAoD;AAA3C,kHAAA,cAAc,OAAA;AAEvB,uCAAiD;AAAxC,+GAAA,mBAAmB,OAAA;AAM5B,2CAAuC;AAA9B,qGAAA,OAAO,OAAA;AAChB,2CAAqC;AAA5B,mGAAA,KAAK,OAAA;AACd,2CAAsC;AAA7B,oGAAA,MAAM,OAAA;AACf,2CAAsC;AAA7B,oGAAA,MAAM,OAAA;AACf,2CAAmC;AAA1B,iGAAA,GAAG,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdk/cli.common",
|
|
3
|
-
"version": "4.3.0-next.
|
|
3
|
+
"version": "4.3.0-next.1",
|
|
4
4
|
"description": "Shared types and helpers for build work with cli",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
],
|
|
16
16
|
"license": "Apache License 2.0",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@rsdk/common": "^4.3.0-next.
|
|
19
|
-
"@rsdk/logging": "^4.3.0-next.
|
|
18
|
+
"@rsdk/common": "^4.3.0-next.1",
|
|
19
|
+
"@rsdk/logging": "^4.3.0-next.1",
|
|
20
20
|
"@sinclair/typebox": "^0.32.13",
|
|
21
21
|
"commander": "^12.0.0",
|
|
22
22
|
"dotenv": "^16.3.1",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"yaml": "^2.3.1"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
|
-
"@rsdk/core": "^4.3.0-next.
|
|
29
|
+
"@rsdk/core": "^4.3.0-next.1",
|
|
30
30
|
"reflect-metadata": "^0.1.12 || ^0.2.0"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "da58041323f3145aa436e02774d36d44606c1217"
|
|
33
33
|
}
|
package/src/cmd.core.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { LoggerFactory } from '@rsdk/logging';
|
|
1
2
|
import { Command } from 'commander';
|
|
2
3
|
import _ from 'lodash';
|
|
3
4
|
|
|
5
|
+
import { Env } from './env.provider';
|
|
4
6
|
import type { CoreMetadataMap } from './types';
|
|
5
7
|
import { MetaKeys } from './types';
|
|
6
8
|
|
|
9
|
+
const cliLogger = LoggerFactory.create('@rsdk/cli.common');
|
|
10
|
+
|
|
7
11
|
type ParameterIndex = number;
|
|
8
12
|
function getRootCommand(globalMetadata: any): Command | undefined {
|
|
9
13
|
const v = globalMetadata?.get(MetaKeys.Core);
|
|
@@ -14,6 +18,12 @@ function getRootCommand(globalMetadata: any): Command | undefined {
|
|
|
14
18
|
return new Command(v.name).description(v.description);
|
|
15
19
|
}
|
|
16
20
|
|
|
21
|
+
function createEnvKey(optionMetadata: OptionMetadata): string {
|
|
22
|
+
return _.snakeCase(
|
|
23
|
+
`${optionMetadata.name}${optionMetadata.strategy === Boolean ? '_enabled' : ''}`,
|
|
24
|
+
).toUpperCase();
|
|
25
|
+
}
|
|
26
|
+
|
|
17
27
|
function createCommandHandler(
|
|
18
28
|
argMap: Map<ParameterIndex, OptionMetadata>,
|
|
19
29
|
handler: (...args: any[]) => any,
|
|
@@ -21,19 +31,60 @@ function createCommandHandler(
|
|
|
21
31
|
return (__, cmd: Command) => {
|
|
22
32
|
const opts = cmd.opts();
|
|
23
33
|
|
|
24
|
-
const normalizedArgList: {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
['index']
|
|
33
|
-
);
|
|
34
|
+
const normalizedArgList: {
|
|
35
|
+
index: number;
|
|
36
|
+
optionMetadata: OptionMetadata;
|
|
37
|
+
}[] = [...argMap].map(([index, optionMetadata]) => ({
|
|
38
|
+
index,
|
|
39
|
+
optionMetadata,
|
|
40
|
+
}));
|
|
41
|
+
const sortedArgList: { index: any; optionMetadata: OptionMetadata }[] =
|
|
42
|
+
_.sortBy(normalizedArgList, ['index']);
|
|
34
43
|
|
|
35
44
|
const args: (string | undefined)[] = sortedArgList.map(
|
|
36
|
-
({
|
|
45
|
+
({ optionMetadata }) => {
|
|
46
|
+
cliLogger.trace('handle arg', {
|
|
47
|
+
optionMetadata,
|
|
48
|
+
});
|
|
49
|
+
const key = _.camelCase(optionMetadata.name);
|
|
50
|
+
const v = opts[key];
|
|
51
|
+
|
|
52
|
+
const isNotProvided = Object.hasOwn(opts, key);
|
|
53
|
+
|
|
54
|
+
const isNotDefaultValue =
|
|
55
|
+
optionMetadata.defaultValue !== undefined &&
|
|
56
|
+
v !== optionMetadata.defaultValue;
|
|
57
|
+
|
|
58
|
+
const envKey = createEnvKey(optionMetadata);
|
|
59
|
+
|
|
60
|
+
cliLogger.trace('use env key for option', {
|
|
61
|
+
envKey,
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
const envValue = isNotProvided ? Env.get(envKey) : undefined;
|
|
65
|
+
|
|
66
|
+
cliLogger.trace('option value state', {
|
|
67
|
+
isNotProvided,
|
|
68
|
+
isNotDefaultValue,
|
|
69
|
+
envKey,
|
|
70
|
+
envValue,
|
|
71
|
+
optionMetadata,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
if (envValue !== undefined && envValue !== v) {
|
|
75
|
+
cliLogger.warn('Flag value override env value', {
|
|
76
|
+
optionMetadata,
|
|
77
|
+
envKey,
|
|
78
|
+
envValue,
|
|
79
|
+
flagValue: v,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (isNotDefaultValue && optionMetadata.parser) {
|
|
84
|
+
return optionMetadata.parser(v ?? envValue);
|
|
85
|
+
}
|
|
86
|
+
return v;
|
|
87
|
+
},
|
|
37
88
|
);
|
|
38
89
|
|
|
39
90
|
handler(...args);
|
|
@@ -45,6 +96,7 @@ type OptionMetadata = {
|
|
|
45
96
|
description: string;
|
|
46
97
|
alias?: string;
|
|
47
98
|
defaultValue?: string | boolean;
|
|
99
|
+
parser?: (v: any) => any;
|
|
48
100
|
strategy: BooleanConstructor | StringConstructor;
|
|
49
101
|
};
|
|
50
102
|
|
|
@@ -104,7 +156,7 @@ export const getCommanderCommand = (cmd: any): Command[] => {
|
|
|
104
156
|
for (const option of argMap.values()) {
|
|
105
157
|
command.option(
|
|
106
158
|
`--${option.name}${option.strategy === String ? ' <value>' : ''}`,
|
|
107
|
-
option.description
|
|
159
|
+
`${option.description} [eq ${createEnvKey(option)} in env]`,
|
|
108
160
|
option.defaultValue,
|
|
109
161
|
);
|
|
110
162
|
}
|
package/src/decorators.ts
CHANGED
|
@@ -23,6 +23,7 @@ export const Option = (
|
|
|
23
23
|
name: string,
|
|
24
24
|
description: string,
|
|
25
25
|
strategy: typeof Boolean | typeof String,
|
|
26
|
+
parser?: (v: any) => any,
|
|
26
27
|
): ParameterDecorator => {
|
|
27
28
|
return (target, propertyKey, parameterIndex) => {
|
|
28
29
|
assertString(propertyKey);
|
|
@@ -31,6 +32,7 @@ export const Option = (
|
|
|
31
32
|
description,
|
|
32
33
|
strategy,
|
|
33
34
|
parameterIndex,
|
|
35
|
+
parser,
|
|
34
36
|
});
|
|
35
37
|
};
|
|
36
38
|
};
|
package/src/env.provider.ts
CHANGED
|
@@ -1,23 +1,17 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _ from 'lodash';
|
|
2
2
|
|
|
3
|
-
export class
|
|
4
|
-
static
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const parsed = dotenv.config();
|
|
15
|
-
if (parsed.error) {
|
|
16
|
-
throw new Error('Error read config', {
|
|
17
|
-
cause: parsed.error,
|
|
18
|
-
});
|
|
3
|
+
export class Env {
|
|
4
|
+
static get(key: string): string | undefined;
|
|
5
|
+
static get<V = string>(key: string, parser: (v: string | undefined) => V): V;
|
|
6
|
+
static get<V = string>(
|
|
7
|
+
key: string,
|
|
8
|
+
parser?: (v: string | undefined) => V,
|
|
9
|
+
): V | undefined | string {
|
|
10
|
+
const preparedKey = _.snakeCase(key).toUpperCase();
|
|
11
|
+
const v = process.env[preparedKey];
|
|
12
|
+
if (parser) {
|
|
13
|
+
return parser(v);
|
|
19
14
|
}
|
|
20
|
-
|
|
21
|
-
return EnvProvider.parsed;
|
|
15
|
+
return v;
|
|
22
16
|
}
|
|
23
17
|
}
|
package/src/index.ts
CHANGED