@chainsafe/lodestar 1.45.0-dev.d7859e978b → 1.45.0-dev.e6d38ecb03
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/.git-data.json +1 -1
- package/lib/cmds/dev/options.d.ts +1 -0
- package/lib/cmds/dev/options.d.ts.map +1 -1
- package/lib/options/beaconNodeOptions/chain.d.ts +1 -0
- package/lib/options/beaconNodeOptions/chain.d.ts.map +1 -1
- package/lib/options/beaconNodeOptions/chain.js +7 -0
- package/lib/options/beaconNodeOptions/chain.js.map +1 -1
- package/lib/options/beaconNodeOptions/index.d.ts +1 -0
- package/lib/options/beaconNodeOptions/index.d.ts.map +1 -1
- package/lib/options/globalOptions.d.ts.map +1 -1
- package/lib/options/globalOptions.js +13 -2
- package/lib/options/globalOptions.js.map +1 -1
- package/lib/util/object.d.ts +34 -0
- package/lib/util/object.d.ts.map +1 -1
- package/lib/util/object.js +72 -0
- package/lib/util/object.js.map +1 -1
- package/package.json +13 -13
- package/src/options/beaconNodeOptions/chain.ts +9 -0
- package/src/options/globalOptions.ts +14 -2
- package/src/util/object.ts +72 -1
package/.git-data.json
CHANGED
|
@@ -138,6 +138,7 @@ export declare const devOptions: {
|
|
|
138
138
|
"execution.retryDelay"?: CliOptionDefinition<any> | undefined;
|
|
139
139
|
"execution.timeout"?: CliOptionDefinition<any> | undefined;
|
|
140
140
|
"execution.urls"?: CliOptionDefinition<any> | undefined;
|
|
141
|
+
graffitiAppend?: CliOptionDefinition<any> | undefined;
|
|
141
142
|
jwtId?: CliOptionDefinition<any> | undefined;
|
|
142
143
|
jwtSecret?: CliOptionDefinition<any> | undefined;
|
|
143
144
|
listenAddress?: CliOptionDefinition<any> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/cmds/dev/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAIvE,OAAO,EAAC,UAAU,EAAgB,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAC,iBAAiB,EAAmB,MAAM,yBAAyB,CAAC;AAE5E,KAAK,WAAW,GAAG;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AA6FF,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/cmds/dev/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAIvE,OAAO,EAAC,UAAU,EAAgB,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAC,iBAAiB,EAAmB,MAAM,yBAAyB,CAAC;AAE5E,KAAK,WAAW,GAAG;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AA6FF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKtB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,iBAAiB,GAAG,WAAW,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { ArchiveMode, IBeaconNodeOptions } from "@lodestar/beacon-node";
|
|
|
2
2
|
import { CliCommandOptions } from "@lodestar/utils";
|
|
3
3
|
export type ChainArgs = {
|
|
4
4
|
suggestedFeeRecipient: string;
|
|
5
|
+
graffitiAppend?: boolean;
|
|
5
6
|
serveHistoricalState?: boolean;
|
|
6
7
|
"chain.blacklistedBlocks"?: string[];
|
|
7
8
|
"chain.blsVerifyAllMultiThread"?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAwB,kBAAkB,EAAiB,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAGlD,MAAM,MAAM,SAAS,GAAG;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrC,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAI3C,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,wCAAwC,CAAC,EAAE,OAAO,CAAC;IACnD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,0CAA0C,CAAC,EAAE,MAAM,CAAC;IACpD,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,kCAAkC,EAAE,MAAM,CAAC;IAC3C,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,mBAAmB,EAAE,WAAW,CAAC;IACjC,sCAAsC,CAAC,EAAE,OAAO,CAAC;IACjD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,8BAA8B,CAAC,EAAE,MAAM,CAAC;IAExC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAwB,kBAAkB,EAAiB,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAGlD,MAAM,MAAM,SAAS,GAAG;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrC,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAI3C,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,wCAAwC,CAAC,EAAE,OAAO,CAAC;IACnD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,0CAA0C,CAAC,EAAE,MAAM,CAAC;IACpD,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,kCAAkC,EAAE,MAAM,CAAC;IAC3C,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,mBAAmB,EAAE,WAAW,CAAC;IACjC,sCAAsC,CAAC,EAAE,OAAO,CAAC;IACjD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,8BAA8B,CAAC,EAAE,MAAM,CAAC;IAExC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAyCtE;AAED,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAmQhD,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { ensure0xPrefix } from "../../util/format.js";
|
|
|
3
3
|
export function parseArgs(args) {
|
|
4
4
|
return {
|
|
5
5
|
suggestedFeeRecipient: args.suggestedFeeRecipient,
|
|
6
|
+
graffitiAppend: args.graffitiAppend,
|
|
6
7
|
serveHistoricalState: args.serveHistoricalState,
|
|
7
8
|
blacklistedBlocks: args["chain.blacklistedBlocks"],
|
|
8
9
|
blsVerifyAllMultiThread: args["chain.blsVerifyAllMultiThread"],
|
|
@@ -52,6 +53,12 @@ export const options = {
|
|
|
52
53
|
description: "Flag to SSE emit execution `payloadAttributes` before every slot",
|
|
53
54
|
group: "chain",
|
|
54
55
|
},
|
|
56
|
+
graffitiAppend: {
|
|
57
|
+
type: "boolean",
|
|
58
|
+
description: "Append CL/EL client info to graffiti supplied by validator client when space allows",
|
|
59
|
+
default: defaultOptions.chain.graffitiAppend,
|
|
60
|
+
group: "chain",
|
|
61
|
+
},
|
|
55
62
|
serveHistoricalState: {
|
|
56
63
|
description: "Regenerate finalized beacon states on demand and serve them via the REST API (e.g. `/eth/v2/debug/beacon/states/{state_id}`). \
|
|
57
64
|
Does not backfill historical data, only states the node already has (since genesis sync or `--checkpointState`) can be regenerated. \
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,oBAAoB,EAAsB,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAE5G,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,7 @@ export declare const beaconNodeOptions: {
|
|
|
36
36
|
suggestedFeeRecipient: import("@lodestar/utils").CliOptionDefinition<string> & (Required<Pick<import("yargs").Options, "default">> | {
|
|
37
37
|
demandOption: true;
|
|
38
38
|
});
|
|
39
|
+
graffitiAppend: import("@lodestar/utils").CliOptionDefinition<boolean | undefined>;
|
|
39
40
|
serveHistoricalState: import("@lodestar/utils").CliOptionDefinition<boolean | undefined>;
|
|
40
41
|
"chain.blacklistedBlocks": import("@lodestar/utils").CliOptionDefinition<string[] | undefined>;
|
|
41
42
|
"chain.blsVerifyAllMultiThread": import("@lodestar/utils").CliOptionDefinition<boolean | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,GACtC,KAAK,CAAC,SAAS,GACf,IAAI,CAAC,QAAQ,GACb,SAAS,CAAC,mBAAmB,GAC7B,OAAO,CAAC,oBAAoB,GAC5B,OAAO,CAAC,WAAW,GACnB,UAAU,CAAC,cAAc,GACzB,OAAO,CAAC,WAAW,GACnB,IAAI,CAAC,QAAQ,CAAC;AAEhB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAa9F;AAED,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/options/beaconNodeOptions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,GACtC,KAAK,CAAC,SAAS,GACf,IAAI,CAAC,QAAQ,GACb,SAAS,CAAC,mBAAmB,GAC7B,OAAO,CAAC,oBAAoB,GAC5B,OAAO,CAAC,WAAW,GACnB,UAAU,CAAC,cAAc,GACzB,OAAO,CAAC,WAAW,GACnB,IAAI,CAAC,QAAQ,CAAC;AAEhB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAa9F;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalOptions.d.ts","sourceRoot":"","sources":["../../src/options/globalOptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAe,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAC,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AAE9D,KAAK,gBAAgB,GAAG;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"globalOptions.d.ts","sourceRoot":"","sources":["../../src/options/globalOptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAe,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAC,WAAW,EAAgB,MAAM,oBAAoB,CAAC;AAE9D,KAAK,gBAAgB,GAAG;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAAuB,CAAC;AA+DrD,eAAO,MAAM,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK5F,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,WAAW,CAAC;AAExD,eAAO,MAAM,aAAa;;;;;;;;;;;CAGzB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ACTIVE_PRESET } from "@lodestar/params";
|
|
2
2
|
import { networkNames } from "../networks/index.js";
|
|
3
|
-
import { readFile } from "../util/index.js";
|
|
3
|
+
import { flattenObject, readFile, translateEnabledKeys } from "../util/index.js";
|
|
4
4
|
import { paramsOptions } from "./paramsOptions.js";
|
|
5
5
|
export const defaultNetwork = "mainnet";
|
|
6
6
|
const globalSingleOptions = {
|
|
@@ -32,6 +32,17 @@ const globalSingleOptions = {
|
|
|
32
32
|
rcConfig: {
|
|
33
33
|
description: "RC file to supplement command line args, accepted formats: .yml, .yaml, .json",
|
|
34
34
|
type: "string",
|
|
35
|
+
example: {
|
|
36
|
+
description: `Options can be written as nested maps or dotted keys
|
|
37
|
+
|
|
38
|
+
\`\`\`yaml
|
|
39
|
+
network: hoodi
|
|
40
|
+
logLevel: debug
|
|
41
|
+
metrics:
|
|
42
|
+
enabled: true
|
|
43
|
+
port: 8008
|
|
44
|
+
\`\`\``,
|
|
45
|
+
},
|
|
35
46
|
},
|
|
36
47
|
supernode: {
|
|
37
48
|
description: "Subscribe to and custody all data column sidecar subnets",
|
|
@@ -47,7 +58,7 @@ const globalSingleOptions = {
|
|
|
47
58
|
export const rcConfigOption = [
|
|
48
59
|
"rcConfig",
|
|
49
60
|
globalSingleOptions.rcConfig.description,
|
|
50
|
-
(configPath) => readFile(configPath, ["json", "yml", "yaml"]),
|
|
61
|
+
(configPath) => translateEnabledKeys(flattenObject(readFile(configPath, ["json", "yml", "yaml"]))),
|
|
51
62
|
];
|
|
52
63
|
export const globalOptions = {
|
|
53
64
|
...globalSingleOptions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalOptions.js","sourceRoot":"","sources":["../../src/options/globalOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAc,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"globalOptions.js","sourceRoot":"","sources":["../../src/options/globalOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAc,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAE,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAc,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAa9D,MAAM,CAAC,MAAM,cAAc,GAAgB,SAAS,CAAC;AAErD,MAAM,mBAAmB,GAAwC;IAC/D,OAAO,EAAE;QACP,WAAW,EAAE,8BAA8B;QAC3C,IAAI,EAAE,QAAQ;KACf;IAED,OAAO,EAAE;QACP,WAAW,EAAE,sDAAsD;QACnE,IAAI,EAAE,QAAQ;QACd,kBAAkB,EAAE,cAAc;QAClC,OAAO,EAAE,YAAY;KACtB;IAED,UAAU,EAAE;QACV,WAAW,EAAE,4BAA4B;QACzC,IAAI,EAAE,QAAQ;KACf;IAED,uDAAuD;IACvD,MAAM,EAAE;QACN,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,aAAa;KACvB;IAED,UAAU,EAAE;QACV,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,4EAA4E;QACzF,IAAI,EAAE,QAAQ;KACf;IAED,QAAQ,EAAE;QACR,WAAW,EAAE,+EAA+E;QAC5F,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,WAAW,EAAE;;;;;;;;OAQZ;SACF;KACF;IAED,SAAS,EAAE;QACT,WAAW,EAAE,0DAA0D;QACvE,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,CAAC,eAAe,CAAC;KAC7B;IAED,aAAa,EAAE;QACb,WAAW,EACT,mNAAmN;QACrN,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,CAAC,WAAW,CAAC;KACzB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAsE;IAC/F,UAAU;IACV,mBAAmB,CAAC,QAAQ,CAAC,WAAqB;IAClD,CAAC,UAAkB,EAA2B,EAAE,CAC9C,oBAAoB,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CACrF,CAAC;AAIF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,GAAG,mBAAmB;IACtB,GAAG,aAAa;CACjB,CAAC"}
|
package/lib/util/object.d.ts
CHANGED
|
@@ -5,4 +5,38 @@ import { RecursivePartial } from "@lodestar/utils";
|
|
|
5
5
|
export declare function removeUndefinedRecursive<T extends {
|
|
6
6
|
[key: string]: any;
|
|
7
7
|
}>(obj: T): RecursivePartial<T>;
|
|
8
|
+
/**
|
|
9
|
+
* Flattens a nested object into a single-level object with dot-notation keys.
|
|
10
|
+
*
|
|
11
|
+
* Allows the rc config file to be written with either nested maps or dotted keys, e.g.
|
|
12
|
+
* `{rest: {address: "0.0.0.0"}}` and `{"rest.address": "0.0.0.0"}` both flatten to
|
|
13
|
+
* `{"rest.address": "0.0.0.0"}`, matching how CLI options are registered (`dot-notation`
|
|
14
|
+
* is disabled in yargs). Arrays are preserved as values (not flattened by index) so
|
|
15
|
+
* array options like `rest.namespace` or `bootnodes` keep working.
|
|
16
|
+
*
|
|
17
|
+
* If the same option is provided in both nested and dotted form, the value that appears
|
|
18
|
+
* last in the file wins.
|
|
19
|
+
*/
|
|
20
|
+
export declare function flattenObject(obj: Record<string, unknown>, parentKey?: string): Record<string, unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* Rewrites `{prefix}.enabled` keys to the bare `{prefix}` flag.
|
|
23
|
+
*
|
|
24
|
+
* Some options are exposed as an on/off boolean flag (`--metrics`, `--rest`, `--builder`) whose
|
|
25
|
+
* internal config shape nests the toggle under `.enabled` (e.g. `{metrics: {enabled, port}}`). This
|
|
26
|
+
* lets an rc config file be written in the natural nested form:
|
|
27
|
+
*
|
|
28
|
+
* ```yaml
|
|
29
|
+
* metrics:
|
|
30
|
+
* enabled: true
|
|
31
|
+
* port: 8008
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* which {@link flattenObject} turns into `{"metrics.enabled": true, "metrics.port": 8008}`. The CLI
|
|
35
|
+
* registers the toggle as the bare `metrics` flag (there is no `metrics.enabled` option), so rewrite
|
|
36
|
+
* `{prefix}.enabled` -> `{prefix}` to match a registered option. No CLI option is registered with an
|
|
37
|
+
* `.enabled` suffix, so this is unambiguous. If the bare `{prefix}` key is already set (e.g. mixed
|
|
38
|
+
* dotted and nested forms), the `.enabled` key is left untouched so the conflict surfaces as an
|
|
39
|
+
* "unknown argument" error rather than being silently overridden.
|
|
40
|
+
*/
|
|
41
|
+
export declare function translateEnabledKeys(flattened: Record<string, unknown>): Record<string, unknown>;
|
|
8
42
|
//# sourceMappingURL=object.d.ts.map
|
package/lib/util/object.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/util/object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/util/object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAgB,MAAM,iBAAiB,CAAC;AAEhE;;GAEG;AAGH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAOpG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBvG;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYhG"}
|
package/lib/util/object.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isPlainObject } from "@lodestar/utils";
|
|
1
2
|
/**
|
|
2
3
|
* Removes (mutates) all properties with a value === undefined, recursively
|
|
3
4
|
*/
|
|
@@ -12,4 +13,75 @@ export function removeUndefinedRecursive(obj) {
|
|
|
12
13
|
}
|
|
13
14
|
return obj;
|
|
14
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Flattens a nested object into a single-level object with dot-notation keys.
|
|
18
|
+
*
|
|
19
|
+
* Allows the rc config file to be written with either nested maps or dotted keys, e.g.
|
|
20
|
+
* `{rest: {address: "0.0.0.0"}}` and `{"rest.address": "0.0.0.0"}` both flatten to
|
|
21
|
+
* `{"rest.address": "0.0.0.0"}`, matching how CLI options are registered (`dot-notation`
|
|
22
|
+
* is disabled in yargs). Arrays are preserved as values (not flattened by index) so
|
|
23
|
+
* array options like `rest.namespace` or `bootnodes` keep working.
|
|
24
|
+
*
|
|
25
|
+
* If the same option is provided in both nested and dotted form, the value that appears
|
|
26
|
+
* last in the file wins.
|
|
27
|
+
*/
|
|
28
|
+
export function flattenObject(obj, parentKey) {
|
|
29
|
+
// Guard non-plain input: an empty or scalar rc config file makes `readFile` return `undefined`
|
|
30
|
+
// or a primitive, which would otherwise throw on `Object.entries`. `isPlainObject` also rejects
|
|
31
|
+
// arrays and class instances (Date, Buffer, typed arrays); those are handled as leaf values below.
|
|
32
|
+
if (!isPlainObject(obj)) {
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
const flattened = {};
|
|
36
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
37
|
+
// Skip prototype-polluting keys as defense-in-depth (config files can be semi-trusted).
|
|
38
|
+
if (key === "__proto__") {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const prefixedKey = parentKey ? `${parentKey}.${key}` : key;
|
|
42
|
+
// Only recurse into plain objects; arrays and class instances (e.g. Date) are kept as leaf
|
|
43
|
+
// values — recursing into them would silently drop or mis-flatten them.
|
|
44
|
+
if (isPlainObject(value)) {
|
|
45
|
+
Object.assign(flattened, flattenObject(value, prefixedKey));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
flattened[prefixedKey] = value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return flattened;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Rewrites `{prefix}.enabled` keys to the bare `{prefix}` flag.
|
|
55
|
+
*
|
|
56
|
+
* Some options are exposed as an on/off boolean flag (`--metrics`, `--rest`, `--builder`) whose
|
|
57
|
+
* internal config shape nests the toggle under `.enabled` (e.g. `{metrics: {enabled, port}}`). This
|
|
58
|
+
* lets an rc config file be written in the natural nested form:
|
|
59
|
+
*
|
|
60
|
+
* ```yaml
|
|
61
|
+
* metrics:
|
|
62
|
+
* enabled: true
|
|
63
|
+
* port: 8008
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* which {@link flattenObject} turns into `{"metrics.enabled": true, "metrics.port": 8008}`. The CLI
|
|
67
|
+
* registers the toggle as the bare `metrics` flag (there is no `metrics.enabled` option), so rewrite
|
|
68
|
+
* `{prefix}.enabled` -> `{prefix}` to match a registered option. No CLI option is registered with an
|
|
69
|
+
* `.enabled` suffix, so this is unambiguous. If the bare `{prefix}` key is already set (e.g. mixed
|
|
70
|
+
* dotted and nested forms), the `.enabled` key is left untouched so the conflict surfaces as an
|
|
71
|
+
* "unknown argument" error rather than being silently overridden.
|
|
72
|
+
*/
|
|
73
|
+
export function translateEnabledKeys(flattened) {
|
|
74
|
+
const suffix = ".enabled";
|
|
75
|
+
const translated = {};
|
|
76
|
+
for (const [key, value] of Object.entries(flattened)) {
|
|
77
|
+
const prefix = key.endsWith(suffix) ? key.slice(0, -suffix.length) : "";
|
|
78
|
+
if (prefix && !(prefix in flattened)) {
|
|
79
|
+
translated[prefix] = value;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
translated[key] = value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return translated;
|
|
86
|
+
}
|
|
15
87
|
//# sourceMappingURL=object.js.map
|
package/lib/util/object.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/util/object.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/util/object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAEhE;;GAEG;AAEH,6EAA6E;AAC7E,MAAM,UAAU,wBAAwB,CAAiC,GAAM,EAAuB;IACpG,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC;aACnE,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,GAA0B,CAAC;AAAA,CACnC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,GAA4B,EAAE,SAAkB,EAA2B;IACvG,+FAA+F;IAC/F,gGAAgG;IAChG,mGAAmG;IACnG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,wFAAwF;QACxF,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,2FAA2F;QAC3F,wEAAwE;QACxE,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,KAAgC,EAAE,WAAW,CAAC,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AAAA,CAClB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAkC,EAA2B;IAChG,MAAM,MAAM,GAAG,UAAU,CAAC;IAC1B,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,IAAI,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,EAAE,CAAC;YACrC,UAAU,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AAAA,CACnB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainsafe/lodestar",
|
|
3
|
-
"version": "1.45.0-dev.
|
|
3
|
+
"version": "1.45.0-dev.e6d38ecb03",
|
|
4
4
|
"description": "Command line interface for lodestar",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -68,16 +68,16 @@
|
|
|
68
68
|
"@libp2p/crypto": "^5.1.13",
|
|
69
69
|
"@libp2p/interface": "^3.1.0",
|
|
70
70
|
"@libp2p/peer-id": "^6.0.4",
|
|
71
|
-
"@lodestar/api": "^1.45.0-dev.
|
|
72
|
-
"@lodestar/beacon-node": "^1.45.0-dev.
|
|
73
|
-
"@lodestar/config": "^1.45.0-dev.
|
|
74
|
-
"@lodestar/db": "^1.45.0-dev.
|
|
75
|
-
"@lodestar/logger": "^1.45.0-dev.
|
|
76
|
-
"@lodestar/params": "^1.45.0-dev.
|
|
77
|
-
"@lodestar/state-transition": "^1.45.0-dev.
|
|
78
|
-
"@lodestar/types": "^1.45.0-dev.
|
|
79
|
-
"@lodestar/utils": "^1.45.0-dev.
|
|
80
|
-
"@lodestar/validator": "^1.45.0-dev.
|
|
71
|
+
"@lodestar/api": "^1.45.0-dev.e6d38ecb03",
|
|
72
|
+
"@lodestar/beacon-node": "^1.45.0-dev.e6d38ecb03",
|
|
73
|
+
"@lodestar/config": "^1.45.0-dev.e6d38ecb03",
|
|
74
|
+
"@lodestar/db": "^1.45.0-dev.e6d38ecb03",
|
|
75
|
+
"@lodestar/logger": "^1.45.0-dev.e6d38ecb03",
|
|
76
|
+
"@lodestar/params": "^1.45.0-dev.e6d38ecb03",
|
|
77
|
+
"@lodestar/state-transition": "^1.45.0-dev.e6d38ecb03",
|
|
78
|
+
"@lodestar/types": "^1.45.0-dev.e6d38ecb03",
|
|
79
|
+
"@lodestar/utils": "^1.45.0-dev.e6d38ecb03",
|
|
80
|
+
"@lodestar/validator": "^1.45.0-dev.e6d38ecb03",
|
|
81
81
|
"@multiformats/multiaddr": "^13.0.1",
|
|
82
82
|
"deepmerge": "^4.3.1",
|
|
83
83
|
"ethers": "^6.7.0",
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"devDependencies": {
|
|
94
94
|
"@chainsafe/as-sha256": "^1.2.0",
|
|
95
95
|
"@ethereumjs/rlp": "^4.0.1",
|
|
96
|
-
"@lodestar/test-utils": "^1.45.0-dev.
|
|
96
|
+
"@lodestar/test-utils": "^1.45.0-dev.e6d38ecb03",
|
|
97
97
|
"@types/debug": "^4.1.7",
|
|
98
98
|
"@types/inquirer": "^9.0.3",
|
|
99
99
|
"@types/js-yaml": "^4.0.5",
|
|
@@ -107,5 +107,5 @@
|
|
|
107
107
|
"web3": "^4.0.3",
|
|
108
108
|
"web3-eth-accounts": "^4.0.3"
|
|
109
109
|
},
|
|
110
|
-
"gitHead": "
|
|
110
|
+
"gitHead": "3cd0118cfbc79542ff858db96e6e36c3e4f65cd8"
|
|
111
111
|
}
|
|
@@ -4,6 +4,7 @@ import {ensure0xPrefix} from "../../util/format.js";
|
|
|
4
4
|
|
|
5
5
|
export type ChainArgs = {
|
|
6
6
|
suggestedFeeRecipient: string;
|
|
7
|
+
graffitiAppend?: boolean;
|
|
7
8
|
serveHistoricalState?: boolean;
|
|
8
9
|
"chain.blacklistedBlocks"?: string[];
|
|
9
10
|
"chain.blsVerifyAllMultiThread"?: boolean;
|
|
@@ -43,6 +44,7 @@ export type ChainArgs = {
|
|
|
43
44
|
export function parseArgs(args: ChainArgs): IBeaconNodeOptions["chain"] {
|
|
44
45
|
return {
|
|
45
46
|
suggestedFeeRecipient: args.suggestedFeeRecipient,
|
|
47
|
+
graffitiAppend: args.graffitiAppend,
|
|
46
48
|
serveHistoricalState: args.serveHistoricalState,
|
|
47
49
|
blacklistedBlocks: args["chain.blacklistedBlocks"],
|
|
48
50
|
blsVerifyAllMultiThread: args["chain.blsVerifyAllMultiThread"],
|
|
@@ -98,6 +100,13 @@ export const options: CliCommandOptions<ChainArgs> = {
|
|
|
98
100
|
group: "chain",
|
|
99
101
|
},
|
|
100
102
|
|
|
103
|
+
graffitiAppend: {
|
|
104
|
+
type: "boolean",
|
|
105
|
+
description: "Append CL/EL client info to graffiti supplied by validator client when space allows",
|
|
106
|
+
default: defaultOptions.chain.graffitiAppend,
|
|
107
|
+
group: "chain",
|
|
108
|
+
},
|
|
109
|
+
|
|
101
110
|
serveHistoricalState: {
|
|
102
111
|
description:
|
|
103
112
|
"Regenerate finalized beacon states on demand and serve them via the REST API (e.g. `/eth/v2/debug/beacon/states/{state_id}`). \
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {ACTIVE_PRESET} from "@lodestar/params";
|
|
2
2
|
import {CliCommandOptions} from "@lodestar/utils";
|
|
3
3
|
import {NetworkName, networkNames} from "../networks/index.js";
|
|
4
|
-
import {readFile} from "../util/index.js";
|
|
4
|
+
import {flattenObject, readFile, translateEnabledKeys} from "../util/index.js";
|
|
5
5
|
import {IParamsArgs, paramsOptions} from "./paramsOptions.js";
|
|
6
6
|
|
|
7
7
|
type GlobalSingleArgs = {
|
|
@@ -51,6 +51,17 @@ const globalSingleOptions: CliCommandOptions<GlobalSingleArgs> = {
|
|
|
51
51
|
rcConfig: {
|
|
52
52
|
description: "RC file to supplement command line args, accepted formats: .yml, .yaml, .json",
|
|
53
53
|
type: "string",
|
|
54
|
+
example: {
|
|
55
|
+
description: `Options can be written as nested maps or dotted keys
|
|
56
|
+
|
|
57
|
+
\`\`\`yaml
|
|
58
|
+
network: hoodi
|
|
59
|
+
logLevel: debug
|
|
60
|
+
metrics:
|
|
61
|
+
enabled: true
|
|
62
|
+
port: 8008
|
|
63
|
+
\`\`\``,
|
|
64
|
+
},
|
|
54
65
|
},
|
|
55
66
|
|
|
56
67
|
supernode: {
|
|
@@ -70,7 +81,8 @@ const globalSingleOptions: CliCommandOptions<GlobalSingleArgs> = {
|
|
|
70
81
|
export const rcConfigOption: [string, string, (configPath: string) => Record<string, unknown>] = [
|
|
71
82
|
"rcConfig",
|
|
72
83
|
globalSingleOptions.rcConfig.description as string,
|
|
73
|
-
(configPath: string): Record<string, unknown> =>
|
|
84
|
+
(configPath: string): Record<string, unknown> =>
|
|
85
|
+
translateEnabledKeys(flattenObject(readFile(configPath, ["json", "yml", "yaml"]))),
|
|
74
86
|
];
|
|
75
87
|
|
|
76
88
|
export type GlobalArgs = GlobalSingleArgs & IParamsArgs;
|
package/src/util/object.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {RecursivePartial} from "@lodestar/utils";
|
|
1
|
+
import {RecursivePartial, isPlainObject} from "@lodestar/utils";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Removes (mutates) all properties with a value === undefined, recursively
|
|
@@ -13,3 +13,74 @@ export function removeUndefinedRecursive<T extends {[key: string]: any}>(obj: T)
|
|
|
13
13
|
}
|
|
14
14
|
return obj as RecursivePartial<T>;
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Flattens a nested object into a single-level object with dot-notation keys.
|
|
19
|
+
*
|
|
20
|
+
* Allows the rc config file to be written with either nested maps or dotted keys, e.g.
|
|
21
|
+
* `{rest: {address: "0.0.0.0"}}` and `{"rest.address": "0.0.0.0"}` both flatten to
|
|
22
|
+
* `{"rest.address": "0.0.0.0"}`, matching how CLI options are registered (`dot-notation`
|
|
23
|
+
* is disabled in yargs). Arrays are preserved as values (not flattened by index) so
|
|
24
|
+
* array options like `rest.namespace` or `bootnodes` keep working.
|
|
25
|
+
*
|
|
26
|
+
* If the same option is provided in both nested and dotted form, the value that appears
|
|
27
|
+
* last in the file wins.
|
|
28
|
+
*/
|
|
29
|
+
export function flattenObject(obj: Record<string, unknown>, parentKey?: string): Record<string, unknown> {
|
|
30
|
+
// Guard non-plain input: an empty or scalar rc config file makes `readFile` return `undefined`
|
|
31
|
+
// or a primitive, which would otherwise throw on `Object.entries`. `isPlainObject` also rejects
|
|
32
|
+
// arrays and class instances (Date, Buffer, typed arrays); those are handled as leaf values below.
|
|
33
|
+
if (!isPlainObject(obj)) {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
const flattened: Record<string, unknown> = {};
|
|
37
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
38
|
+
// Skip prototype-polluting keys as defense-in-depth (config files can be semi-trusted).
|
|
39
|
+
if (key === "__proto__") {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const prefixedKey = parentKey ? `${parentKey}.${key}` : key;
|
|
43
|
+
// Only recurse into plain objects; arrays and class instances (e.g. Date) are kept as leaf
|
|
44
|
+
// values — recursing into them would silently drop or mis-flatten them.
|
|
45
|
+
if (isPlainObject(value)) {
|
|
46
|
+
Object.assign(flattened, flattenObject(value as Record<string, unknown>, prefixedKey));
|
|
47
|
+
} else {
|
|
48
|
+
flattened[prefixedKey] = value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return flattened;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Rewrites `{prefix}.enabled` keys to the bare `{prefix}` flag.
|
|
56
|
+
*
|
|
57
|
+
* Some options are exposed as an on/off boolean flag (`--metrics`, `--rest`, `--builder`) whose
|
|
58
|
+
* internal config shape nests the toggle under `.enabled` (e.g. `{metrics: {enabled, port}}`). This
|
|
59
|
+
* lets an rc config file be written in the natural nested form:
|
|
60
|
+
*
|
|
61
|
+
* ```yaml
|
|
62
|
+
* metrics:
|
|
63
|
+
* enabled: true
|
|
64
|
+
* port: 8008
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* which {@link flattenObject} turns into `{"metrics.enabled": true, "metrics.port": 8008}`. The CLI
|
|
68
|
+
* registers the toggle as the bare `metrics` flag (there is no `metrics.enabled` option), so rewrite
|
|
69
|
+
* `{prefix}.enabled` -> `{prefix}` to match a registered option. No CLI option is registered with an
|
|
70
|
+
* `.enabled` suffix, so this is unambiguous. If the bare `{prefix}` key is already set (e.g. mixed
|
|
71
|
+
* dotted and nested forms), the `.enabled` key is left untouched so the conflict surfaces as an
|
|
72
|
+
* "unknown argument" error rather than being silently overridden.
|
|
73
|
+
*/
|
|
74
|
+
export function translateEnabledKeys(flattened: Record<string, unknown>): Record<string, unknown> {
|
|
75
|
+
const suffix = ".enabled";
|
|
76
|
+
const translated: Record<string, unknown> = {};
|
|
77
|
+
for (const [key, value] of Object.entries(flattened)) {
|
|
78
|
+
const prefix = key.endsWith(suffix) ? key.slice(0, -suffix.length) : "";
|
|
79
|
+
if (prefix && !(prefix in flattened)) {
|
|
80
|
+
translated[prefix] = value;
|
|
81
|
+
} else {
|
|
82
|
+
translated[key] = value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return translated;
|
|
86
|
+
}
|