@rezless/vitest 0.1.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/LICENSE +202 -0
- package/NOTICE +32 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +140 -0
- package/dist/cli.js.map +1 -0
- package/dist/coverage-aggregate.d.ts +22 -0
- package/dist/coverage-aggregate.d.ts.map +1 -0
- package/dist/coverage-aggregate.js +65 -0
- package/dist/coverage-aggregate.js.map +1 -0
- package/dist/coverage-config.d.ts +10 -0
- package/dist/coverage-config.d.ts.map +1 -0
- package/dist/coverage-config.js +12 -0
- package/dist/coverage-config.js.map +1 -0
- package/dist/coverage-registry.d.ts +13 -0
- package/dist/coverage-registry.d.ts.map +1 -0
- package/dist/coverage-registry.js +111 -0
- package/dist/coverage-registry.js.map +1 -0
- package/dist/coverage-setup.d.ts +25 -0
- package/dist/coverage-setup.d.ts.map +1 -0
- package/dist/coverage-setup.js +42 -0
- package/dist/coverage-setup.js.map +1 -0
- package/dist/format/console.d.ts +7 -0
- package/dist/format/console.d.ts.map +1 -0
- package/dist/format/console.js +93 -0
- package/dist/format/console.js.map +1 -0
- package/dist/format/html.d.ts +11 -0
- package/dist/format/html.d.ts.map +1 -0
- package/dist/format/html.js +291 -0
- package/dist/format/html.js.map +1 -0
- package/dist/format/istanbul.d.ts +47 -0
- package/dist/format/istanbul.d.ts.map +1 -0
- package/dist/format/istanbul.js +50 -0
- package/dist/format/istanbul.js.map +1 -0
- package/dist/format/lcov.d.ts +19 -0
- package/dist/format/lcov.d.ts.map +1 -0
- package/dist/format/lcov.js +74 -0
- package/dist/format/lcov.js.map +1 -0
- package/dist/format/summary.d.ts +25 -0
- package/dist/format/summary.d.ts.map +1 -0
- package/dist/format/summary.js +48 -0
- package/dist/format/summary.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/loadLinkset.d.ts +38 -0
- package/dist/loadLinkset.d.ts.map +1 -0
- package/dist/loadLinkset.js +77 -0
- package/dist/loadLinkset.js.map +1 -0
- package/dist/loadScript.d.ts +24 -0
- package/dist/loadScript.d.ts.map +1 -0
- package/dist/loadScript.js +45 -0
- package/dist/loadScript.js.map +1 -0
- package/dist/matchers.d.ts +34 -0
- package/dist/matchers.d.ts.map +1 -0
- package/dist/matchers.js +120 -0
- package/dist/matchers.js.map +1 -0
- package/dist/reporter.d.ts +82 -0
- package/dist/reporter.d.ts.map +1 -0
- package/dist/reporter.js +166 -0
- package/dist/reporter.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/** When the reporter should activate. */
|
|
2
|
+
export type ReporterMode = 'auto' | 'always' | 'never';
|
|
3
|
+
export interface LslCoverageReporterOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Activation policy:
|
|
6
|
+
* - 'auto' (default): activate when Vitest's own coverage flag is on
|
|
7
|
+
* (i.e. `vitest run --coverage` or `coverage.enabled: true` in
|
|
8
|
+
* `vitest.config.ts`), or when `LSL_COVERAGE=1` is in the env.
|
|
9
|
+
* - 'always': activate every run regardless of the coverage flag.
|
|
10
|
+
* - 'never': stay dormant. Useful for conditional config.
|
|
11
|
+
*/
|
|
12
|
+
readonly mode?: ReporterMode;
|
|
13
|
+
/** Output directory; defaults to `<vitest reportsDirectory>/lsl` (or `coverage/lsl`). */
|
|
14
|
+
readonly outputDir?: string;
|
|
15
|
+
/** Skip the per-file `lcov.info` write. */
|
|
16
|
+
readonly disableLcov?: boolean;
|
|
17
|
+
/** Skip the `coverage-final.json` write. */
|
|
18
|
+
readonly disableIstanbul?: boolean;
|
|
19
|
+
/** Skip the `coverage-summary.json` write. */
|
|
20
|
+
readonly disableSummary?: boolean;
|
|
21
|
+
/** Skip the browseable `html/` directory. */
|
|
22
|
+
readonly disableHtml?: boolean;
|
|
23
|
+
/** Skip the end-of-run console table. */
|
|
24
|
+
readonly disableConsole?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Include reports for synthetic filenames — `<inline>`, names without a
|
|
27
|
+
* path separator, or paths that don't exist on disk. Defaults to false
|
|
28
|
+
* since these are almost always throwaway test fixtures.
|
|
29
|
+
*/
|
|
30
|
+
readonly includeFixtures?: boolean;
|
|
31
|
+
}
|
|
32
|
+
interface VitestLike {
|
|
33
|
+
config?: {
|
|
34
|
+
coverage?: {
|
|
35
|
+
enabled?: boolean;
|
|
36
|
+
reportsDirectory?: string;
|
|
37
|
+
};
|
|
38
|
+
setupFiles?: string[] | string;
|
|
39
|
+
};
|
|
40
|
+
/** Vitest 4 exposes per-project resolved configs here. */
|
|
41
|
+
projects?: ReadonlyArray<{
|
|
42
|
+
config?: {
|
|
43
|
+
setupFiles?: string[] | string;
|
|
44
|
+
};
|
|
45
|
+
vitenode?: unknown;
|
|
46
|
+
}>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Vitest custom reporter for LSL script coverage.
|
|
50
|
+
*
|
|
51
|
+
* In its default `mode: 'auto'`, the reporter is dormant unless Vitest's
|
|
52
|
+
* `--coverage` flag is set. When active, it enables collection in test
|
|
53
|
+
* workers (via `LSL_COVERAGE=1`), reads per-worker coverage dumps at
|
|
54
|
+
* end-of-run, and writes:
|
|
55
|
+
* - `<outputDir>/lcov.info` (LCOV)
|
|
56
|
+
* - `<outputDir>/coverage-final.json` (Istanbul)
|
|
57
|
+
* - a console summary table
|
|
58
|
+
*
|
|
59
|
+
* Wire it up once in your `vitest.config.ts`:
|
|
60
|
+
*
|
|
61
|
+
* import { LslCoverageReporter } from '@rezless/vitest/reporter'
|
|
62
|
+
* export default defineConfig({
|
|
63
|
+
* test: {
|
|
64
|
+
* reporters: ['default', new LslCoverageReporter()],
|
|
65
|
+
* },
|
|
66
|
+
* })
|
|
67
|
+
*
|
|
68
|
+
* Then `vitest run --coverage` triggers both the JS and LSL coverage
|
|
69
|
+
* pipelines; plain `vitest run` stays free of coverage overhead.
|
|
70
|
+
*/
|
|
71
|
+
export declare class LslCoverageReporter {
|
|
72
|
+
private readonly opts;
|
|
73
|
+
private outputDir;
|
|
74
|
+
private active;
|
|
75
|
+
constructor(opts?: LslCoverageReporterOptions);
|
|
76
|
+
onInit(vitest?: VitestLike): void;
|
|
77
|
+
private injectSetupFile;
|
|
78
|
+
onTestRunEnd(): void;
|
|
79
|
+
private shouldActivate;
|
|
80
|
+
}
|
|
81
|
+
export {};
|
|
82
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAWA,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEtD,MAAM,WAAW,0BAA0B;IACzC;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAA;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CACnC;AAED,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC3D,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;KAC/B,CAAA;IACD,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;SAAE,CAAA;QAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAC,CAAA;CACH;AAUD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,MAAM,CAAQ;gBAEV,IAAI,GAAE,0BAA+B;IAKjD,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;IAyBjC,OAAO,CAAC,eAAe;IAsBvB,YAAY,IAAI,IAAI;IAoEpB,OAAO,CAAC,cAAc;CASvB"}
|
package/dist/reporter.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { renderLcov } from './format/lcov.js';
|
|
5
|
+
import { renderIstanbul } from './format/istanbul.js';
|
|
6
|
+
import { renderConsoleSummary } from './format/console.js';
|
|
7
|
+
import { renderHtml } from './format/html.js';
|
|
8
|
+
import { renderSummary } from './format/summary.js';
|
|
9
|
+
import { readWorkerDumps, clearWorkerDumps } from './coverage-registry.js';
|
|
10
|
+
import { aggregateReports } from './coverage-aggregate.js';
|
|
11
|
+
/** Resolves to the absolute file path of `coverage-setup.js` next to this file. */
|
|
12
|
+
function coverageSetupFilePath() {
|
|
13
|
+
// import.meta.url points to dist/reporter.js once compiled; the setup
|
|
14
|
+
// file lives next to it. fileURLToPath handles cross-platform quirks
|
|
15
|
+
// (Windows drive letters, percent-encoded paths) that URL.pathname mangles.
|
|
16
|
+
return fileURLToPath(new URL('./coverage-setup.js', import.meta.url));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Vitest custom reporter for LSL script coverage.
|
|
20
|
+
*
|
|
21
|
+
* In its default `mode: 'auto'`, the reporter is dormant unless Vitest's
|
|
22
|
+
* `--coverage` flag is set. When active, it enables collection in test
|
|
23
|
+
* workers (via `LSL_COVERAGE=1`), reads per-worker coverage dumps at
|
|
24
|
+
* end-of-run, and writes:
|
|
25
|
+
* - `<outputDir>/lcov.info` (LCOV)
|
|
26
|
+
* - `<outputDir>/coverage-final.json` (Istanbul)
|
|
27
|
+
* - a console summary table
|
|
28
|
+
*
|
|
29
|
+
* Wire it up once in your `vitest.config.ts`:
|
|
30
|
+
*
|
|
31
|
+
* import { LslCoverageReporter } from '@rezless/vitest/reporter'
|
|
32
|
+
* export default defineConfig({
|
|
33
|
+
* test: {
|
|
34
|
+
* reporters: ['default', new LslCoverageReporter()],
|
|
35
|
+
* },
|
|
36
|
+
* })
|
|
37
|
+
*
|
|
38
|
+
* Then `vitest run --coverage` triggers both the JS and LSL coverage
|
|
39
|
+
* pipelines; plain `vitest run` stays free of coverage overhead.
|
|
40
|
+
*/
|
|
41
|
+
export class LslCoverageReporter {
|
|
42
|
+
opts;
|
|
43
|
+
outputDir;
|
|
44
|
+
active = false;
|
|
45
|
+
constructor(opts = {}) {
|
|
46
|
+
this.opts = opts;
|
|
47
|
+
this.outputDir = opts.outputDir;
|
|
48
|
+
}
|
|
49
|
+
onInit(vitest) {
|
|
50
|
+
this.active = this.shouldActivate(vitest);
|
|
51
|
+
if (!this.active)
|
|
52
|
+
return;
|
|
53
|
+
// Resolve output dir: explicit option > Vitest's reportsDirectory + /lsl > coverage/lsl.
|
|
54
|
+
const fallback = path.join(process.cwd(), 'coverage', 'lsl');
|
|
55
|
+
if (!this.outputDir) {
|
|
56
|
+
const reportsDir = vitest?.config?.coverage?.reportsDirectory;
|
|
57
|
+
this.outputDir = reportsDir ? path.join(reportsDir, 'lsl') : fallback;
|
|
58
|
+
}
|
|
59
|
+
// Tell workers to collect (env var is read by loadScript / loadLinkset).
|
|
60
|
+
process.env['LSL_COVERAGE'] = '1';
|
|
61
|
+
// Inject our coverage-setup.js into vitest's setupFiles so each worker
|
|
62
|
+
// drains its registry to disk after every test file. Without this, the
|
|
63
|
+
// worker-thread's `process.on('exit')` doesn't fire until after the
|
|
64
|
+
// reporter's onTestRunEnd has already run.
|
|
65
|
+
this.injectSetupFile(vitest);
|
|
66
|
+
// Best-effort: clear stale per-worker dumps from a previous run so we
|
|
67
|
+
// don't merge old coverage into the new report.
|
|
68
|
+
clearWorkerDumps();
|
|
69
|
+
}
|
|
70
|
+
injectSetupFile(vitest) {
|
|
71
|
+
if (!vitest)
|
|
72
|
+
return;
|
|
73
|
+
const setupPath = coverageSetupFilePath();
|
|
74
|
+
const addTo = (target) => {
|
|
75
|
+
if (!target)
|
|
76
|
+
return;
|
|
77
|
+
const current = target.setupFiles;
|
|
78
|
+
if (!current) {
|
|
79
|
+
target.setupFiles = [setupPath];
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (Array.isArray(current)) {
|
|
83
|
+
if (!current.includes(setupPath))
|
|
84
|
+
current.push(setupPath);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (current !== setupPath)
|
|
88
|
+
target.setupFiles = [current, setupPath];
|
|
89
|
+
};
|
|
90
|
+
addTo(vitest.config);
|
|
91
|
+
if (vitest.projects) {
|
|
92
|
+
for (const p of vitest.projects)
|
|
93
|
+
addTo(p.config);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
onTestRunEnd() {
|
|
97
|
+
if (!this.active)
|
|
98
|
+
return;
|
|
99
|
+
const dumps = readWorkerDumps();
|
|
100
|
+
if (dumps.length === 0) {
|
|
101
|
+
if (!this.opts.disableConsole) {
|
|
102
|
+
process.stdout.write('No LSL coverage collected.\n');
|
|
103
|
+
}
|
|
104
|
+
// Clear any malformed dump files so a future run with valid data
|
|
105
|
+
// starts from a clean slate without manual intervention.
|
|
106
|
+
clearWorkerDumps();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const aggregateOpts = this.opts.includeFixtures !== undefined
|
|
110
|
+
? { includeFixtures: this.opts.includeFixtures }
|
|
111
|
+
: {};
|
|
112
|
+
const merged = aggregateReports(dumps, aggregateOpts);
|
|
113
|
+
if (merged.length === 0) {
|
|
114
|
+
if (!this.opts.disableConsole) {
|
|
115
|
+
process.stdout.write('No coverable LSL scripts after filtering — pass `includeFixtures: true` to keep test fixtures.\n');
|
|
116
|
+
}
|
|
117
|
+
clearWorkerDumps();
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const outputDir = this.outputDir ?? path.join(process.cwd(), 'coverage', 'lsl');
|
|
121
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
122
|
+
if (!this.opts.disableLcov) {
|
|
123
|
+
const lcovPath = path.join(outputDir, 'lcov.info');
|
|
124
|
+
fs.writeFileSync(lcovPath, renderLcov(merged));
|
|
125
|
+
}
|
|
126
|
+
if (!this.opts.disableIstanbul) {
|
|
127
|
+
const istanbulPath = path.join(outputDir, 'coverage-final.json');
|
|
128
|
+
fs.writeFileSync(istanbulPath, JSON.stringify(renderIstanbul(merged), null, 2));
|
|
129
|
+
}
|
|
130
|
+
// Summary is its own toggle so CI tooling that only consumes the
|
|
131
|
+
// summary can still get it when the heavier per-file Istanbul detail
|
|
132
|
+
// is turned off.
|
|
133
|
+
if (!this.opts.disableSummary) {
|
|
134
|
+
const summaryPath = path.join(outputDir, 'coverage-summary.json');
|
|
135
|
+
fs.writeFileSync(summaryPath, JSON.stringify(renderSummary(merged), null, 2));
|
|
136
|
+
}
|
|
137
|
+
if (!this.opts.disableHtml) {
|
|
138
|
+
const htmlDir = path.join(outputDir, 'html');
|
|
139
|
+
fs.mkdirSync(htmlDir, { recursive: true });
|
|
140
|
+
for (const [name, content] of renderHtml(merged)) {
|
|
141
|
+
fs.writeFileSync(path.join(htmlDir, name), content);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (!this.opts.disableConsole) {
|
|
145
|
+
process.stdout.write('\n' + renderConsoleSummary(merged));
|
|
146
|
+
if (!this.opts.disableHtml) {
|
|
147
|
+
process.stdout.write(`\nLSL HTML report: ${path.join(outputDir, 'html', 'index.html')}\n`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
clearWorkerDumps();
|
|
151
|
+
}
|
|
152
|
+
shouldActivate(vitest) {
|
|
153
|
+
const mode = this.opts.mode ?? 'auto';
|
|
154
|
+
if (mode === 'always')
|
|
155
|
+
return true;
|
|
156
|
+
if (mode === 'never')
|
|
157
|
+
return false;
|
|
158
|
+
// auto: track Vitest's coverage flag, with LSL_COVERAGE=1 as a manual override.
|
|
159
|
+
if (vitest?.config?.coverage?.enabled)
|
|
160
|
+
return true;
|
|
161
|
+
if (process.env['LSL_COVERAGE'] === '1')
|
|
162
|
+
return true;
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rezless/vitest",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Vitest-style DSL for testing Linden Scripting Language (LSL) scripts.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"author": "i-doll",
|
|
7
|
+
"homepage": "https://github.com/i-doll/rezless#readme",
|
|
8
|
+
"bugs": {
|
|
9
|
+
"url": "https://github.com/i-doll/rezless/issues"
|
|
10
|
+
},
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/i-doll/rezless.git",
|
|
14
|
+
"directory": "packages/vitest"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"lsl",
|
|
18
|
+
"linden-scripting-language",
|
|
19
|
+
"second-life",
|
|
20
|
+
"vitest",
|
|
21
|
+
"testing",
|
|
22
|
+
"test-framework",
|
|
23
|
+
"rezless"
|
|
24
|
+
],
|
|
25
|
+
"type": "module",
|
|
26
|
+
"main": "./dist/index.js",
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"import": "./dist/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./reporter": {
|
|
34
|
+
"types": "./dist/reporter.d.ts",
|
|
35
|
+
"import": "./dist/reporter.js"
|
|
36
|
+
},
|
|
37
|
+
"./coverage-setup": {
|
|
38
|
+
"types": "./dist/coverage-setup.d.ts",
|
|
39
|
+
"import": "./dist/coverage-setup.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"bin": {
|
|
43
|
+
"rezless-coverage": "./dist/cli.js"
|
|
44
|
+
},
|
|
45
|
+
"files": [
|
|
46
|
+
"dist",
|
|
47
|
+
"LICENSE",
|
|
48
|
+
"NOTICE",
|
|
49
|
+
"README.md"
|
|
50
|
+
],
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@rezless/parser": "0.1.0",
|
|
56
|
+
"@rezless/vm": "0.1.0"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"vitest": "^4.1.5"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"typescript": "^5.7.0",
|
|
63
|
+
"vitest": "^4.1.5"
|
|
64
|
+
},
|
|
65
|
+
"scripts": {
|
|
66
|
+
"build": "tsc -p tsconfig.json",
|
|
67
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
68
|
+
}
|
|
69
|
+
}
|