@scalvert/bin-tester 0.0.5 → 0.3.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/README.md +125 -33
- package/dist/index.cjs +22 -10
- package/dist/index.d.ts +57 -12
- package/dist/index.js +22 -10
- package/package.json +10 -4
package/README.md
CHANGED
|
@@ -53,15 +53,14 @@ describe('Some tests', () => {
|
|
|
53
53
|
expect(result.stdout).toBe('Did some stuff');
|
|
54
54
|
});
|
|
55
55
|
|
|
56
|
-
// Write a file with contents to the tmp directory
|
|
57
56
|
test('another test', () => {
|
|
58
|
-
|
|
57
|
+
// Write a file with contents to the tmp directory
|
|
58
|
+
await project.writeJSON({
|
|
59
59
|
'some/file.txt': 'some content',
|
|
60
60
|
});
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
});
|
|
62
|
+
// pass some args to the bin that will be used for only this invocation
|
|
63
|
+
const result = await runBin('--path', 'some/file.txt');
|
|
65
64
|
|
|
66
65
|
expect(result.stdout).toBe('Read "some/file.txt"');
|
|
67
66
|
});
|
|
@@ -70,31 +69,124 @@ describe('Some tests', () => {
|
|
|
70
69
|
|
|
71
70
|
## API
|
|
72
71
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
72
|
+
<!--DOCS_START-->
|
|
73
|
+
## Classes
|
|
74
|
+
|
|
75
|
+
<dl>
|
|
76
|
+
<dt><a href="#BinTesterProject">BinTesterProject</a></dt>
|
|
77
|
+
<dd></dd>
|
|
78
|
+
</dl>
|
|
79
|
+
|
|
80
|
+
## Functions
|
|
81
|
+
|
|
82
|
+
<dl>
|
|
83
|
+
<dt><a href="#createBinTester">createBinTester(options)</a> ⇒ <code>CreateBinTesterResult.<TProject></code></dt>
|
|
84
|
+
<dd><p>Creates the bin tester API functions to use within tests.</p></dd>
|
|
85
|
+
</dl>
|
|
86
|
+
|
|
87
|
+
<a name="BinTesterProject"></a>
|
|
88
|
+
|
|
89
|
+
## BinTesterProject
|
|
90
|
+
**Kind**: global class
|
|
91
|
+
|
|
92
|
+
* [BinTesterProject](#BinTesterProject)
|
|
93
|
+
* [new BinTesterProject(name, version, cb)](#new_BinTesterProject_new)
|
|
94
|
+
* [.gitInit()](#BinTesterProject+gitInit) ⇒ <code>\*</code>
|
|
95
|
+
* [.chdir()](#BinTesterProject+chdir)
|
|
96
|
+
* [.writeJSON(dirJSON)](#BinTesterProject+writeJSON) ⇒ <code>\*</code>
|
|
97
|
+
* [.dispose()](#BinTesterProject+dispose) ⇒ <code>void</code>
|
|
98
|
+
|
|
99
|
+
<a name="new_BinTesterProject_new"></a>
|
|
100
|
+
|
|
101
|
+
### new BinTesterProject(name, version, cb)
|
|
102
|
+
<p>Constructs an instance of a BinTesterProject.</p>
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
| Param | Type | Default | Description |
|
|
106
|
+
| --- | --- | --- | --- |
|
|
107
|
+
| name | <code>string</code> | <code>"fake-project"</code> | <p>The name of the project. Used within the package.json as the name property.</p> |
|
|
108
|
+
| version | <code>string</code> | | <p>The version of the project. Used within the package.json as the version property.</p> |
|
|
109
|
+
| cb | <code>function</code> | | <p>An optional callback for additional setup steps after the project is constructed.</p> |
|
|
110
|
+
|
|
111
|
+
<a name="BinTesterProject+gitInit"></a>
|
|
112
|
+
|
|
113
|
+
### binTesterProject.gitInit() ⇒ <code>\*</code>
|
|
114
|
+
<p>Runs <code>git init</code> inside a project.</p>
|
|
115
|
+
|
|
116
|
+
**Kind**: instance method of [<code>BinTesterProject</code>](#BinTesterProject)
|
|
117
|
+
**Returns**: <code>\*</code> - <p>{execa.ExecaChildProcess<string>}</p>
|
|
118
|
+
<a name="BinTesterProject+chdir"></a>
|
|
119
|
+
|
|
120
|
+
### binTesterProject.chdir()
|
|
121
|
+
<p>Changes a directory from inside the project.</p>
|
|
122
|
+
|
|
123
|
+
**Kind**: instance method of [<code>BinTesterProject</code>](#BinTesterProject)
|
|
124
|
+
<a name="BinTesterProject+writeJSON"></a>
|
|
125
|
+
|
|
126
|
+
### binTesterProject.writeJSON(dirJSON) ⇒ <code>\*</code>
|
|
127
|
+
<p>Writes a directory struture in the project directory.</p>
|
|
128
|
+
|
|
129
|
+
**Kind**: instance method of [<code>BinTesterProject</code>](#BinTesterProject)
|
|
130
|
+
**Returns**: <code>\*</code> - <p>{Promise<void>}</p>
|
|
131
|
+
|
|
132
|
+
| Param | Type | Description |
|
|
133
|
+
| --- | --- | --- |
|
|
134
|
+
| dirJSON | <code>fixturify.DirJSON</code> | <p>A JSON object representing the directory structure to create.</p> |
|
|
135
|
+
|
|
136
|
+
<a name="BinTesterProject+dispose"></a>
|
|
137
|
+
|
|
138
|
+
### binTesterProject.dispose() ⇒ <code>void</code>
|
|
139
|
+
<p>Correctly disposes of the project, observing when the directory has been changed.</p>
|
|
140
|
+
|
|
141
|
+
**Kind**: instance method of [<code>BinTesterProject</code>](#BinTesterProject)
|
|
142
|
+
<a name="createBinTester"></a>
|
|
143
|
+
|
|
144
|
+
## createBinTester(options) ⇒ <code>CreateBinTesterResult.<TProject></code>
|
|
145
|
+
<p>Creates the bin tester API functions to use within tests.</p>
|
|
146
|
+
|
|
147
|
+
**Kind**: global function
|
|
148
|
+
**Returns**: <code>CreateBinTesterResult.<TProject></code> - <ul>
|
|
149
|
+
<li>A project instance.</li>
|
|
150
|
+
</ul>
|
|
151
|
+
|
|
152
|
+
| Param | Type | Description |
|
|
153
|
+
| --- | --- | --- |
|
|
154
|
+
| options | <code>BinTesterOptions.<TProject></code> | <p>An object of bin tester options</p> |
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
* [createBinTester(options)](#createBinTester) ⇒ <code>CreateBinTesterResult.<TProject></code>
|
|
158
|
+
* [~runBin(...args)](#createBinTester..runBin) ⇒ <code>execa.ExecaChildProcess.<string></code>
|
|
159
|
+
* [~setupProject()](#createBinTester..setupProject)
|
|
160
|
+
* [~setupTmpDir()](#createBinTester..setupTmpDir)
|
|
161
|
+
* [~teardownProject()](#createBinTester..teardownProject)
|
|
162
|
+
|
|
163
|
+
<a name="createBinTester..runBin"></a>
|
|
164
|
+
|
|
165
|
+
### createBinTester~runBin(...args) ⇒ <code>execa.ExecaChildProcess.<string></code>
|
|
166
|
+
**Kind**: inner method of [<code>createBinTester</code>](#createBinTester)
|
|
167
|
+
**Returns**: <code>execa.ExecaChildProcess.<string></code> - <p>An instance of execa's child process.</p>
|
|
168
|
+
|
|
169
|
+
| Param | Type | Description |
|
|
170
|
+
| --- | --- | --- |
|
|
171
|
+
| ...args | <code>RunBinArgs</code> | <p>Arguments or execa options.</p> |
|
|
172
|
+
|
|
173
|
+
<a name="createBinTester..setupProject"></a>
|
|
174
|
+
|
|
175
|
+
### createBinTester~setupProject()
|
|
176
|
+
<p>Sets up the specified project for use within tests.</p>
|
|
177
|
+
|
|
178
|
+
**Kind**: inner method of [<code>createBinTester</code>](#createBinTester)
|
|
179
|
+
<a name="createBinTester..setupTmpDir"></a>
|
|
180
|
+
|
|
181
|
+
### createBinTester~setupTmpDir()
|
|
182
|
+
<p>Sets up a tmp directory for use within tests.</p>
|
|
183
|
+
|
|
184
|
+
**Kind**: inner method of [<code>createBinTester</code>](#createBinTester)
|
|
185
|
+
<a name="createBinTester..teardownProject"></a>
|
|
186
|
+
|
|
187
|
+
### createBinTester~teardownProject()
|
|
188
|
+
<p>Tears the project down, ensuring the tmp directory is removed. Shoud be paired with setupProject.</p>
|
|
189
|
+
|
|
190
|
+
**Kind**: inner method of [<code>createBinTester</code>](#createBinTester)
|
|
191
|
+
|
|
192
|
+
<!--DOCS_END-->
|
package/dist/index.cjs
CHANGED
|
@@ -53,6 +53,7 @@ var import_execa2 = __toESM(require("execa"), 1);
|
|
|
53
53
|
// src/project.ts
|
|
54
54
|
var import_execa = __toESM(require("execa"), 1);
|
|
55
55
|
var import_fixturify_project = require("fixturify-project");
|
|
56
|
+
var import_deepmerge = __toESM(require("deepmerge"), 1);
|
|
56
57
|
var ROOT = process.cwd();
|
|
57
58
|
var BinTesterProject = class extends import_fixturify_project.Project {
|
|
58
59
|
constructor(name = "fake-project", version, cb) {
|
|
@@ -67,13 +68,14 @@ var BinTesterProject = class extends import_fixturify_project.Project {
|
|
|
67
68
|
gitInit() {
|
|
68
69
|
return (0, import_execa.default)(`git init -q ${this.baseDir}`);
|
|
69
70
|
}
|
|
70
|
-
chdir() {
|
|
71
|
+
async chdir() {
|
|
71
72
|
this._dirChanged = true;
|
|
73
|
+
await this.write();
|
|
72
74
|
process.chdir(this.baseDir);
|
|
73
75
|
}
|
|
74
76
|
writeJSON(dirJSON) {
|
|
75
|
-
this.files =
|
|
76
|
-
return
|
|
77
|
+
this.files = (0, import_deepmerge.default)(this.files, dirJSON);
|
|
78
|
+
return this.write();
|
|
77
79
|
}
|
|
78
80
|
dispose() {
|
|
79
81
|
if (this._dirChanged) {
|
|
@@ -88,22 +90,32 @@ var DEFAULT_BIN_TESTER_OPTIONS = {
|
|
|
88
90
|
staticArgs: [],
|
|
89
91
|
projectConstructor: BinTesterProject
|
|
90
92
|
};
|
|
91
|
-
|
|
92
|
-
args
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
function parseArgs(args) {
|
|
94
|
+
if (args.length > 0 && typeof args[args.length - 1] === "object") {
|
|
95
|
+
const execaOptions = args.pop();
|
|
96
|
+
return {
|
|
97
|
+
args,
|
|
98
|
+
execaOptions
|
|
99
|
+
};
|
|
100
|
+
} else {
|
|
101
|
+
return {
|
|
102
|
+
args,
|
|
103
|
+
execaOptions: {}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
95
107
|
function createBinTester(options) {
|
|
96
108
|
let project;
|
|
97
109
|
const mergedOptions = __spreadValues(__spreadValues({}, DEFAULT_BIN_TESTER_OPTIONS), options);
|
|
98
|
-
function runBin(
|
|
99
|
-
const mergedRunOptions =
|
|
110
|
+
function runBin(...args) {
|
|
111
|
+
const mergedRunOptions = parseArgs(args);
|
|
100
112
|
return (0, import_execa2.default)(process.execPath, [mergedOptions.binPath, ...mergedOptions.staticArgs, ...mergedRunOptions.args], __spreadValues({
|
|
101
113
|
reject: false,
|
|
102
114
|
cwd: project.baseDir
|
|
103
115
|
}, mergedRunOptions.execaOptions));
|
|
104
116
|
}
|
|
105
117
|
async function setupProject() {
|
|
106
|
-
project =
|
|
118
|
+
project = "createProject" in mergedOptions ? await mergedOptions.createProject() : new BinTesterProject();
|
|
107
119
|
await project.write();
|
|
108
120
|
return project;
|
|
109
121
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,39 @@
|
|
|
1
1
|
import execa from 'execa';
|
|
2
|
-
import { Constructor } from 'type-fest';
|
|
3
2
|
import fixturify from 'fixturify';
|
|
4
3
|
import { Project } from 'fixturify-project';
|
|
5
4
|
|
|
6
5
|
declare class BinTesterProject extends Project {
|
|
7
6
|
private _dirChanged;
|
|
7
|
+
/**
|
|
8
|
+
* Constructs an instance of a BinTesterProject.
|
|
9
|
+
*
|
|
10
|
+
* @param {string} name - The name of the project. Used within the package.json as the name property.
|
|
11
|
+
* @param {string} version - The version of the project. Used within the package.json as the version property.
|
|
12
|
+
* @param {Function} cb - An optional callback for additional setup steps after the project is constructed.
|
|
13
|
+
*/
|
|
8
14
|
constructor(name?: string, version?: string, cb?: (project: Project) => void);
|
|
15
|
+
/**
|
|
16
|
+
* Runs `git init` inside a project.
|
|
17
|
+
*
|
|
18
|
+
* @returns {*} {execa.ExecaChildProcess<string>}
|
|
19
|
+
*/
|
|
9
20
|
gitInit(): execa.ExecaChildProcess<string>;
|
|
10
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Changes a directory from inside the project.
|
|
23
|
+
*/
|
|
24
|
+
chdir(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Writes a directory struture in the project directory.
|
|
27
|
+
*
|
|
28
|
+
* @param {fixturify.DirJSON} dirJSON - A JSON object representing the directory structure to create.
|
|
29
|
+
* @returns {*} {Promise<void>}
|
|
30
|
+
*/
|
|
11
31
|
writeJSON(dirJSON: fixturify.DirJSON): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Correctly disposes of the project, observing when the directory has been changed.
|
|
34
|
+
*
|
|
35
|
+
* @returns {void}
|
|
36
|
+
*/
|
|
12
37
|
dispose(): void;
|
|
13
38
|
}
|
|
14
39
|
|
|
@@ -22,31 +47,51 @@ interface BinTesterOptions<TProject> {
|
|
|
22
47
|
*/
|
|
23
48
|
staticArgs?: string[];
|
|
24
49
|
/**
|
|
25
|
-
* An optional
|
|
50
|
+
* An optional function to use to create the project. Use this if you want to provide a custom implementation of a BinTesterProject.
|
|
26
51
|
*/
|
|
27
|
-
|
|
52
|
+
createProject?: () => TProject;
|
|
28
53
|
}
|
|
29
|
-
interface
|
|
54
|
+
interface RunBin {
|
|
30
55
|
/**
|
|
31
|
-
*
|
|
56
|
+
* A runBin implementation that takes no parameters.
|
|
57
|
+
*
|
|
58
|
+
* @returns {*} {execa.ExecaChildProcess<string>}
|
|
59
|
+
* @memberof RunBin
|
|
32
60
|
*/
|
|
33
|
-
|
|
61
|
+
(): execa.ExecaChildProcess<string>;
|
|
34
62
|
/**
|
|
35
|
-
*
|
|
63
|
+
* A runBin implementation that takes varargs.
|
|
64
|
+
*
|
|
65
|
+
* @param {...RunBinArgs} args
|
|
66
|
+
* @returns {*} {execa.ExecaChildProcess<string>}
|
|
67
|
+
* @memberof RunBin
|
|
36
68
|
*/
|
|
37
|
-
|
|
69
|
+
(...args: RunBinArgs): execa.ExecaChildProcess<string>;
|
|
38
70
|
}
|
|
39
71
|
interface CreateBinTesterResult<TProject extends BinTesterProject> {
|
|
40
|
-
|
|
72
|
+
/**
|
|
73
|
+
* Runs the configured bin function via execa.
|
|
74
|
+
*/
|
|
75
|
+
runBin: RunBin;
|
|
76
|
+
/**
|
|
77
|
+
* Sets up the specified project for use within tests.
|
|
78
|
+
*/
|
|
41
79
|
setupProject: () => Promise<TProject>;
|
|
80
|
+
/**
|
|
81
|
+
* Sets up a tmp directory for use within tests.
|
|
82
|
+
*/
|
|
42
83
|
setupTmpDir: () => Promise<string>;
|
|
84
|
+
/**
|
|
85
|
+
* Tears the project down, ensuring the tmp directory is removed. Shoud be paired with setupProject.
|
|
86
|
+
*/
|
|
43
87
|
teardownProject: () => void;
|
|
44
88
|
}
|
|
89
|
+
declare type RunBinArgs = [...binArgs: string[], execaOptions: execa.Options<string>];
|
|
45
90
|
/**
|
|
46
91
|
* Creates the bin tester API functions to use within tests.
|
|
47
92
|
*
|
|
48
|
-
* @param options - An object of bin tester options
|
|
49
|
-
* @returns - A project instance.
|
|
93
|
+
* @param {BinTesterOptions<TProject>} options - An object of bin tester options
|
|
94
|
+
* @returns {CreateBinTesterResult<TProject>} - A project instance.
|
|
50
95
|
*/
|
|
51
96
|
declare function createBinTester<TProject extends BinTesterProject>(options: BinTesterOptions<TProject>): CreateBinTesterResult<TProject>;
|
|
52
97
|
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,7 @@ import execa2 from "execa";
|
|
|
21
21
|
// src/project.ts
|
|
22
22
|
import execa from "execa";
|
|
23
23
|
import { Project } from "fixturify-project";
|
|
24
|
+
import deepmerge from "deepmerge";
|
|
24
25
|
var ROOT = process.cwd();
|
|
25
26
|
var BinTesterProject = class extends Project {
|
|
26
27
|
constructor(name = "fake-project", version, cb) {
|
|
@@ -35,13 +36,14 @@ var BinTesterProject = class extends Project {
|
|
|
35
36
|
gitInit() {
|
|
36
37
|
return execa(`git init -q ${this.baseDir}`);
|
|
37
38
|
}
|
|
38
|
-
chdir() {
|
|
39
|
+
async chdir() {
|
|
39
40
|
this._dirChanged = true;
|
|
41
|
+
await this.write();
|
|
40
42
|
process.chdir(this.baseDir);
|
|
41
43
|
}
|
|
42
44
|
writeJSON(dirJSON) {
|
|
43
|
-
this.files =
|
|
44
|
-
return
|
|
45
|
+
this.files = deepmerge(this.files, dirJSON);
|
|
46
|
+
return this.write();
|
|
45
47
|
}
|
|
46
48
|
dispose() {
|
|
47
49
|
if (this._dirChanged) {
|
|
@@ -56,22 +58,32 @@ var DEFAULT_BIN_TESTER_OPTIONS = {
|
|
|
56
58
|
staticArgs: [],
|
|
57
59
|
projectConstructor: BinTesterProject
|
|
58
60
|
};
|
|
59
|
-
|
|
60
|
-
args
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
function parseArgs(args) {
|
|
62
|
+
if (args.length > 0 && typeof args[args.length - 1] === "object") {
|
|
63
|
+
const execaOptions = args.pop();
|
|
64
|
+
return {
|
|
65
|
+
args,
|
|
66
|
+
execaOptions
|
|
67
|
+
};
|
|
68
|
+
} else {
|
|
69
|
+
return {
|
|
70
|
+
args,
|
|
71
|
+
execaOptions: {}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
63
75
|
function createBinTester(options) {
|
|
64
76
|
let project;
|
|
65
77
|
const mergedOptions = __spreadValues(__spreadValues({}, DEFAULT_BIN_TESTER_OPTIONS), options);
|
|
66
|
-
function runBin(
|
|
67
|
-
const mergedRunOptions =
|
|
78
|
+
function runBin(...args) {
|
|
79
|
+
const mergedRunOptions = parseArgs(args);
|
|
68
80
|
return execa2(process.execPath, [mergedOptions.binPath, ...mergedOptions.staticArgs, ...mergedRunOptions.args], __spreadValues({
|
|
69
81
|
reject: false,
|
|
70
82
|
cwd: project.baseDir
|
|
71
83
|
}, mergedRunOptions.execaOptions));
|
|
72
84
|
}
|
|
73
85
|
async function setupProject() {
|
|
74
|
-
project =
|
|
86
|
+
project = "createProject" in mergedOptions ? await mergedOptions.createProject() : new BinTesterProject();
|
|
75
87
|
await project.write();
|
|
76
88
|
return project;
|
|
77
89
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scalvert/bin-tester",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "A test harness to invoke a CLI in a tmp directory",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"types": "./dist/index.d.ts",
|
|
29
29
|
"scripts": {
|
|
30
30
|
"build": "tsup src/index.ts --format cjs,esm --dts --clean",
|
|
31
|
-
"docs:generate": "
|
|
31
|
+
"docs:generate": "readme-api-generator ./src --ts",
|
|
32
32
|
"lint": "eslint .",
|
|
33
33
|
"prepublishOnly": "npm run build",
|
|
34
34
|
"test": "npm run lint && vitest run",
|
|
@@ -39,18 +39,24 @@
|
|
|
39
39
|
"dist"
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
|
+
"deepmerge": "^4.2.2",
|
|
42
43
|
"execa": "^5.1.1",
|
|
43
44
|
"fixturify-project": "^4.1.0"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
|
-
"@
|
|
47
|
+
"@babel/plugin-proposal-class-properties": "^7.16.7",
|
|
48
|
+
"@babel/plugin-proposal-object-rest-spread": "^7.17.3",
|
|
49
|
+
"@babel/plugin-transform-typescript": "^7.16.8",
|
|
50
|
+
"@babel/preset-env": "^7.16.11",
|
|
51
|
+
"@babel/preset-typescript": "^7.16.7",
|
|
52
|
+
"@scalvert/readme-api-generator": "^0.2.0",
|
|
47
53
|
"@typescript-eslint/eslint-plugin": "^5.14.0",
|
|
48
54
|
"@typescript-eslint/parser": "^5.14.0",
|
|
49
55
|
"eslint": "^8.10.0",
|
|
50
56
|
"eslint-config-prettier": "^8.5.0",
|
|
57
|
+
"eslint-plugin-jsdoc": "^38.0.4",
|
|
51
58
|
"eslint-plugin-node": "^11.1.0",
|
|
52
59
|
"eslint-plugin-prettier": "^4.0.0",
|
|
53
|
-
"eslint-plugin-tsdoc": "^0.2.14",
|
|
54
60
|
"eslint-plugin-unicorn": "^41.0.0",
|
|
55
61
|
"fixturify": "^2.1.1",
|
|
56
62
|
"prettier": "^2.5.1",
|