@ledgerhq/vault-cli 1.45.4 → 1.46.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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +15 -0
- package/Dockerfile +1 -1
- package/README.md +9 -3
- package/bin/__tests__/bake.test.js +57 -10
- package/bin/__tests__/bake.test.js.map +1 -1
- package/bin/commands/bake.d.ts +0 -1
- package/bin/commands/bake.d.ts.map +1 -1
- package/bin/commands/bake.js +32 -22
- package/bin/commands/bake.js.map +1 -1
- package/package.json +3 -3
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @ledgerhq/vault-cli
|
|
2
2
|
|
|
3
|
+
## 1.46.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- f2f7c40: Merge the positional manifest name and the `--manifest` filename option into a single positonal argument.
|
|
8
|
+
|
|
9
|
+
The `--manifest` parameter is now deprecated and will throw a deprecation warning if still used.
|
|
10
|
+
The `--preset` parameter which was already deprecated is now removed.
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 837151d: Ensure `pnpm` is used everywhere and with the right version
|
|
15
|
+
- Updated dependencies [837151d]
|
|
16
|
+
- @ledgerhq/vault-common@1.47.3
|
|
17
|
+
|
|
3
18
|
## 1.45.4
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
package/Dockerfile
CHANGED
package/README.md
CHANGED
|
@@ -4,19 +4,25 @@ A various utility command-line for Vault development.
|
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
+
```command
|
|
8
|
+
pnpm add --global @ledgerhq/vault-cli
|
|
7
9
|
```
|
|
10
|
+
|
|
11
|
+
or
|
|
12
|
+
|
|
13
|
+
```command
|
|
8
14
|
yarn global add @ledgerhq/vault-cli
|
|
9
15
|
```
|
|
10
16
|
|
|
11
17
|
or
|
|
12
18
|
|
|
13
|
-
```
|
|
19
|
+
```command
|
|
14
20
|
npm i -g @ledgerhq/vault-cli
|
|
15
21
|
```
|
|
16
22
|
|
|
17
23
|
## Usage
|
|
18
24
|
|
|
19
|
-
```
|
|
25
|
+
```command
|
|
20
26
|
ledger-vault <COMMAND>
|
|
21
27
|
```
|
|
22
28
|
|
|
@@ -41,7 +47,7 @@ receive Display receive address for given account
|
|
|
41
47
|
|
|
42
48
|
## bake
|
|
43
49
|
|
|
44
|
-
```
|
|
50
|
+
```command
|
|
45
51
|
ledger-vault bake <manifest.json> [options]
|
|
46
52
|
```
|
|
47
53
|
|
|
@@ -38,13 +38,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
38
38
|
const vault_common_1 = require("@ledgerhq/vault-common");
|
|
39
39
|
const chalk_1 = __importDefault(require("chalk"));
|
|
40
40
|
const fs_1 = __importDefault(require("fs"));
|
|
41
|
+
const os_1 = __importDefault(require("os"));
|
|
42
|
+
const path_1 = __importDefault(require("path"));
|
|
41
43
|
const readline_1 = __importDefault(require("readline"));
|
|
42
44
|
const bake_1 = __importDefault(require("../commands/bake"));
|
|
43
45
|
const wipe = __importStar(require("../commands/wipe"));
|
|
44
46
|
const logger_1 = __importDefault(require("../logger"));
|
|
45
47
|
const test_utils_1 = require("./test-utils");
|
|
46
48
|
const opts = {
|
|
47
|
-
positionals: [
|
|
49
|
+
positionals: [],
|
|
48
50
|
stdin: false,
|
|
49
51
|
retry: 0,
|
|
50
52
|
wipe: false,
|
|
@@ -57,10 +59,32 @@ const opts = {
|
|
|
57
59
|
};
|
|
58
60
|
describe("bake", () => {
|
|
59
61
|
const pool = (0, test_utils_1.createTestDevicesPool)();
|
|
62
|
+
const broken = path_1.default.join(os_1.default.tmpdir(), "broken.json");
|
|
63
|
+
beforeAll(() => {
|
|
64
|
+
fs_1.default.writeFileSync(broken, "{broken}");
|
|
65
|
+
});
|
|
66
|
+
afterAll(() => {
|
|
67
|
+
fs_1.default.unlinkSync(broken);
|
|
68
|
+
});
|
|
60
69
|
it("should bake using manifest flag", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
61
70
|
yield bake_1.default.run(Object.assign(Object.assign({}, opts), { manifest: "empty" }));
|
|
62
71
|
expect(vault_common_1.bakeManifest).toHaveBeenCalledWith({}, pool, { logger: logger_1.default });
|
|
63
72
|
}));
|
|
73
|
+
it("should bake using a manifest name as positional argument", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
74
|
+
yield bake_1.default.run(Object.assign(Object.assign({}, opts), { positionals: ["empty"] }));
|
|
75
|
+
expect(vault_common_1.bakeManifest).toHaveBeenCalledWith({}, pool, { logger: logger_1.default });
|
|
76
|
+
}));
|
|
77
|
+
it("should bake using a read manifest from filename if exists", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
78
|
+
const spyParse = jest.spyOn(JSON, "parse").mockImplementation();
|
|
79
|
+
const spyReadFileSync = jest.spyOn(fs_1.default, "readFileSync").mockImplementation();
|
|
80
|
+
const spyExistsSync = jest.spyOn(fs_1.default, "existsSync").mockImplementation(() => true);
|
|
81
|
+
yield bake_1.default.run(Object.assign(Object.assign({}, opts), { positionals: ["filename"] }));
|
|
82
|
+
expect(spyReadFileSync).toHaveBeenCalledWith("filename", "utf-8");
|
|
83
|
+
expect(spyParse).toHaveBeenCalledTimes(1);
|
|
84
|
+
spyParse.mockRestore();
|
|
85
|
+
spyReadFileSync.mockRestore();
|
|
86
|
+
spyExistsSync.mockRestore();
|
|
87
|
+
}));
|
|
64
88
|
it("should wipe if the wipe option is true", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
65
89
|
const spyWipe = jest.spyOn(wipe, "wipe").mockImplementation();
|
|
66
90
|
yield bake_1.default.run(Object.assign(Object.assign({}, opts), { manifest: "empty", wipe: true }));
|
|
@@ -85,20 +109,31 @@ describe("bake", () => {
|
|
|
85
109
|
expect(spyConsole).toHaveBeenCalledWith(chalk_1.default.bold("INFO"), (0, chalk_1.default) `Manifest {yellow beatles-legacy} is not existing anymore. Fallback to manifest {yellow beatles}.`);
|
|
86
110
|
spyConsole.mockRestore();
|
|
87
111
|
}));
|
|
88
|
-
it("should log about deprecated option '--preset' when it is used", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
89
|
-
const spyConsole = jest.spyOn(console, "log").mockImplementation();
|
|
90
|
-
yield bake_1.default.run(Object.assign(Object.assign({}, opts), { preset: "beatles" }));
|
|
91
|
-
expect(spyConsole).toHaveBeenCalledWith(chalk_1.default.bold("INFO"), (0, chalk_1.default) `Option {yellow --preset} is deprecated. Please use {yellow --manifest}.`);
|
|
92
|
-
spyConsole.mockRestore();
|
|
93
|
-
}));
|
|
94
112
|
it("should read manifest from filename", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
95
113
|
const spyParse = jest.spyOn(JSON, "parse").mockImplementation();
|
|
96
114
|
const spyReadFileSync = jest.spyOn(fs_1.default, "readFileSync").mockImplementation();
|
|
115
|
+
const spyExistsSync = jest.spyOn(fs_1.default, "existsSync").mockImplementation(() => true);
|
|
97
116
|
yield bake_1.default.run(Object.assign(Object.assign({}, opts), { stdin: false, manifest: undefined, positionals: ["filename"] }));
|
|
98
117
|
expect(spyReadFileSync).toHaveBeenCalledWith("filename", "utf-8");
|
|
99
118
|
expect(spyParse).toHaveBeenCalledTimes(1);
|
|
100
119
|
spyParse.mockRestore();
|
|
101
120
|
spyReadFileSync.mockRestore();
|
|
121
|
+
spyExistsSync.mockRestore();
|
|
122
|
+
}));
|
|
123
|
+
it("should log about deprecated option '--manifest' when it is used", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
124
|
+
const spyConsole = jest.spyOn(console, "log").mockImplementation();
|
|
125
|
+
yield bake_1.default.run(Object.assign(Object.assign({}, opts), { positionals: [], manifest: "beatles" }));
|
|
126
|
+
expect(spyConsole).toHaveBeenCalledWith(chalk_1.default.bold("INFO"), (0, chalk_1.default) `Option {yellow --manifest} is deprecated. Please pass it as a {yellow positional} argument.`);
|
|
127
|
+
spyConsole.mockRestore();
|
|
128
|
+
}));
|
|
129
|
+
it("should let unexpected errors bubble", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
130
|
+
const spyReadFileSync = jest.spyOn(fs_1.default, "readFileSync").mockImplementation(() => {
|
|
131
|
+
throw new Error("Aha, you don't expect me !");
|
|
132
|
+
});
|
|
133
|
+
const spyExistsSync = jest.spyOn(fs_1.default, "existsSync").mockImplementation(() => true);
|
|
134
|
+
yield expect(bake_1.default.run(Object.assign(Object.assign({}, opts), { positionals: ["filename"] }))).rejects.toThrow();
|
|
135
|
+
spyReadFileSync.mockRestore();
|
|
136
|
+
spyExistsSync.mockRestore();
|
|
102
137
|
}));
|
|
103
138
|
(0, test_utils_1.testErrorCommand)({
|
|
104
139
|
description: "should throw if no manifest name, manifest file or path to manifest is specified",
|
|
@@ -106,23 +141,35 @@ describe("bake", () => {
|
|
|
106
141
|
options: Object.assign(Object.assign({}, opts), { positionals: [], manifest: undefined, stdin: false }),
|
|
107
142
|
errorMessage: "You must either choose a manifest, pass a JSON manifest in stdin or pass a manifest file path",
|
|
108
143
|
});
|
|
144
|
+
(0, test_utils_1.testErrorCommand)({
|
|
145
|
+
description: "should throw if manifest does not exists",
|
|
146
|
+
task: bake_1.default.run,
|
|
147
|
+
options: Object.assign(Object.assign({}, opts), { positionals: ["whatever"], manifest: undefined, stdin: false }),
|
|
148
|
+
errorMessage: "The manifest whatever does not exists",
|
|
149
|
+
});
|
|
109
150
|
(0, test_utils_1.testErrorCommand)({
|
|
110
151
|
description: "should throw if more than 1 manifest file is passed",
|
|
111
152
|
task: bake_1.default.run,
|
|
112
153
|
options: Object.assign(Object.assign({}, opts), { positionals: ["<manifest_1>", "<manifest_2>"] }),
|
|
113
154
|
errorMessage: "You can pass only one manifest file",
|
|
114
155
|
});
|
|
156
|
+
(0, test_utils_1.testErrorCommand)({
|
|
157
|
+
description: "should throw if both positional and manifest are provided",
|
|
158
|
+
task: bake_1.default.run,
|
|
159
|
+
options: Object.assign(Object.assign({}, opts), { positionals: ["<manifest>"], manifest: "empty" }),
|
|
160
|
+
errorMessage: "You can't specify a positional argument and the --manifest option at the same time",
|
|
161
|
+
});
|
|
115
162
|
(0, test_utils_1.testErrorCommand)({
|
|
116
163
|
description: "should throw if manifest is invalid",
|
|
117
164
|
task: bake_1.default.run,
|
|
118
|
-
options: Object.assign(Object.assign({}, opts), {
|
|
119
|
-
errorMessage:
|
|
165
|
+
options: Object.assign(Object.assign({}, opts), { positionals: [broken] }),
|
|
166
|
+
errorMessage: `Invalid manifest ${broken}`,
|
|
120
167
|
});
|
|
121
168
|
(0, test_utils_1.testErrorCommand)({
|
|
122
169
|
description: "should throw if manifest is undefined and path to manifest is empty",
|
|
123
170
|
task: bake_1.default.run,
|
|
124
171
|
options: Object.assign(Object.assign({}, opts), { stdin: false, manifest: undefined, positionals: [""] }),
|
|
125
|
-
errorMessage: "No
|
|
172
|
+
errorMessage: "No manifest provided",
|
|
126
173
|
});
|
|
127
174
|
});
|
|
128
175
|
//# sourceMappingURL=bake.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bake.test.js","sourceRoot":"","sources":["../../src/__tests__/bake.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAsD;AACtD,kDAA0B;AAC1B,4CAAoB;AACpB,wDAAgC;AAEhC,4DAAoC;AAEpC,uDAAyC;AACzC,uDAA+B;AAC/B,6CAAuE;AAEvE,MAAM,IAAI,GAAgB;IACxB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"bake.test.js","sourceRoot":"","sources":["../../src/__tests__/bake.test.ts"],"names":[],"mappings":"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"}
|
package/bin/commands/bake.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bake.d.ts","sourceRoot":"","sources":["../../src/commands/bake.ts"],"names":[],"mappings":"AAyBA,OAAO,EAA4B,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAmC1D,MAAM,MAAM,WAAW,GAAG,WAAW,GACnC,iBAAiB,GACjB,qBAAqB,GAAG;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"bake.d.ts","sourceRoot":"","sources":["../../src/commands/bake.ts"],"names":[],"mappings":"AAyBA,OAAO,EAA4B,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAmC1D,MAAM,MAAM,WAAW,GAAG,WAAW,GACnC,iBAAiB,GACjB,qBAAqB,GAAG;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IAEf,KAAK,EAAE,MAAM,CAAC;IAGd,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA+CmB,WAAW,KAAG,QAAQ,IAAI,CAAC;;AA7ClD,wBA+IE"}
|
package/bin/commands/bake.js
CHANGED
|
@@ -81,12 +81,6 @@ exports.default = {
|
|
|
81
81
|
.join(", ")}`,
|
|
82
82
|
type: String,
|
|
83
83
|
},
|
|
84
|
-
{
|
|
85
|
-
name: "preset",
|
|
86
|
-
alias: "p",
|
|
87
|
-
description: "Deprecated, please use --manifest",
|
|
88
|
-
type: String,
|
|
89
|
-
},
|
|
90
84
|
{
|
|
91
85
|
name: "retry",
|
|
92
86
|
description: "How many times bake should be retried on error {grey (default: 0)}",
|
|
@@ -116,16 +110,32 @@ exports.default = {
|
|
|
116
110
|
run: (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
117
111
|
const { retry: retryCount, twoStepsRequest, onboardingV2 } = options;
|
|
118
112
|
const stdin = yield readSTDIN(options);
|
|
119
|
-
let manifestName = options.manifest || options.preset;
|
|
120
113
|
if (!(options.positionals && options.positionals.length) &&
|
|
121
|
-
!
|
|
114
|
+
!options.manifest &&
|
|
122
115
|
!options.stdin &&
|
|
123
116
|
!stdin) {
|
|
124
117
|
throw new Error(`You must either choose a manifest, pass a JSON manifest in stdin or pass a manifest file path`);
|
|
125
118
|
}
|
|
126
|
-
if (options.positionals && options.positionals.length
|
|
119
|
+
if (options.positionals && options.positionals.length > 1) {
|
|
127
120
|
throw new Error("You can pass only one manifest file");
|
|
128
121
|
}
|
|
122
|
+
if (options.manifest) {
|
|
123
|
+
logger_1.default.info((0, chalk_1.default) `Option {yellow --manifest} is deprecated. Please pass it as a {yellow positional} argument.`);
|
|
124
|
+
if (options.positionals && options.positionals.length) {
|
|
125
|
+
throw new Error("You can't specify a positional argument and the --manifest option at the same time");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
let manifestName = options.positionals[0] || options.manifest || undefined;
|
|
129
|
+
switch (manifestName) {
|
|
130
|
+
case "beatles-legacy": {
|
|
131
|
+
logger_1.default.info((0, chalk_1.default) `Manifest {yellow beatles-legacy} is not existing anymore. Fallback to manifest {yellow beatles}.`);
|
|
132
|
+
manifestName = "beatles";
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
case undefined: {
|
|
136
|
+
throw new Error(`No manifest provided`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
129
139
|
if (options.wipe) {
|
|
130
140
|
yield (0, wipe_1.wipe)(options);
|
|
131
141
|
}
|
|
@@ -133,24 +143,24 @@ exports.default = {
|
|
|
133
143
|
if (stdin) {
|
|
134
144
|
manifest = JSON.parse(stdin);
|
|
135
145
|
}
|
|
136
|
-
else if (manifestName) {
|
|
137
|
-
|
|
138
|
-
|
|
146
|
+
else if (fs_1.default.existsSync(manifestName)) {
|
|
147
|
+
try {
|
|
148
|
+
manifest = JSON.parse(fs_1.default.readFileSync(manifestName, "utf-8"));
|
|
139
149
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (error instanceof SyntaxError) {
|
|
152
|
+
throw new Error(`Invalid manifest ${manifestName}`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
143
157
|
}
|
|
158
|
+
}
|
|
159
|
+
else if (manifestName in MANIFESTS) {
|
|
144
160
|
manifest = MANIFESTS[manifestName];
|
|
145
|
-
if (!manifest) {
|
|
146
|
-
throw new Error(`Invalid manifest ${manifestName}`);
|
|
147
|
-
}
|
|
148
161
|
}
|
|
149
162
|
else {
|
|
150
|
-
|
|
151
|
-
if (!fileName)
|
|
152
|
-
throw new Error(`No filename given`);
|
|
153
|
-
manifest = JSON.parse(fs_1.default.readFileSync(fileName, "utf-8"));
|
|
163
|
+
throw new Error(`The manifest ${manifestName} does not exists`);
|
|
154
164
|
}
|
|
155
165
|
(0, vault_common_1.validateManifest)(manifest);
|
|
156
166
|
const pool = (0, vault_common_1.createDevicesPool)(Object.assign(Object.assign({}, options), { lamURL: options.lam, deviceAPIURL: options.deviceAPI, networkDelay: options.networkDelay }));
|
package/bin/commands/bake.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bake.js","sourceRoot":"","sources":["../../src/commands/bake.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,yDAA2F;AAE3F,kDAA0B;AAC1B,4CAAoB;AACpB,wDAAgC;AAEhC,+DAAuC;AACvC,iEAAyC;AACzC,+DAAuC;AACvC,uDAA+B;AAC/B,6EAAyD;AACzD,yEAAqD;AACrD,yEAAqD;AACrD,6FAAuE;AACvE,+FAA2E;AAC3E,+EAA2D;AAC3D,mFAAwD;AACxD,2EAAuD;AACvD,2EAAqD;AACrD,qEAAiD;AACjD,mFAA+D;AAC/D,2FAAuE;AACvE,2EAAuD;AACvD,6EAAyD;AACzD,yEAAqD;AACrD,gDAAiF;AACjF,6EAAqD;AAErD,iCAA2C;AAE3C,MAAM,SAAS,GAA6B;IAC1C,KAAK,EAAE,oBAAc;IAErB,OAAO,EAAE,sBAAgB;IAEzB,GAAG,EAAE,kBAAY;IAEjB,KAAK,EAAE,oBAAc;IAErB,KAAK,EAAE,oBAAc;IAErB,QAAQ,EAAE,uBAAiB;IAE3B,kBAAkB,EAAE,+BAAyB;IAE7C,MAAM,EAAE,qBAAe;IAEvB,gBAAgB,EAAE,6BAAuB;IAEzC,YAAY,EAAE,yBAAmB;IAEjC,OAAO,EAAE,sBAAgB;IAEzB,MAAM,EAAE,qBAAe;IAEvB,UAAU,EAAE,yBAAY;IAExB,MAAM,EAAE,qBAAa;IAErB,iBAAiB,EAAE,8BAAsB;CAC1C,CAAC;
|
|
1
|
+
{"version":3,"file":"bake.js","sourceRoot":"","sources":["../../src/commands/bake.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/vault-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.46.0",
|
|
4
4
|
"description": "A various utility command-line for Vault development",
|
|
5
5
|
"homepage": "https://github.com/LedgerHQ/vault-ts",
|
|
6
6
|
"license": "BSD-2-Clause",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"qs": "^6.11.2",
|
|
36
36
|
"@ledgerhq/coin-check": "0.4.1",
|
|
37
37
|
"@ledgerhq/live-common-stub": "1.5.1",
|
|
38
|
-
"@ledgerhq/vault-common": "1.47.
|
|
38
|
+
"@ledgerhq/vault-common": "1.47.3",
|
|
39
39
|
"@ledgerhq/vault-utils": "1.0.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"build": "tsc && chmod +x bin/index.js",
|
|
64
64
|
"build-light": "tsc --incremental && chmod +x bin/index.js",
|
|
65
65
|
"test": "jest",
|
|
66
|
-
"test:pedantic": "
|
|
66
|
+
"test:pedantic": "jest --coverage --coverageThreshold '{ \"global\": { \"branches\": 100, \"functions\": 100, \"lines\": 100, \"statements\": 100 } }'",
|
|
67
67
|
"lint": "eslint .",
|
|
68
68
|
"typecheck": "tsc --noEmit"
|
|
69
69
|
}
|