@contractkit/plugin-bruno 1.4.1 → 1.5.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$colon$ci.log +6 -6
- package/.turbo/turbo-test$colon$ci.log +8 -8
- package/CHANGELOG.md +15 -0
- package/coverage/clover.xml +360 -355
- package/coverage/coverage-final.json +2 -2
- package/coverage/index.html +15 -15
- package/coverage/src/codegen-bruno.ts.html +21 -6
- package/coverage/src/index.html +15 -15
- package/coverage/src/index.ts.html +65 -14
- package/coverage/tests/helpers.ts.html +1 -1
- package/coverage/tests/index.html +1 -1
- package/dist/codegen-bruno.d.ts +6 -1
- package/dist/codegen-bruno.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -7
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/codegen-bruno.ts +8 -3
- package/src/index.ts +23 -6
- package/tests/codegen-bruno.test.ts +8 -3
package/coverage/index.html
CHANGED
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">79.78% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>379/475</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">80.85% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>76/
|
|
42
|
+
<span class='fraction'>76/94</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">80.52% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>335/416</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line medium'></div>
|
|
65
65
|
<div class="pad1">
|
|
66
66
|
<table class="coverage-summary">
|
|
67
67
|
<thead>
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
82
|
<td class="file high" data-value="src"><a href="src/index.html">src</a></td>
|
|
83
|
-
<td data-value="80.
|
|
83
|
+
<td data-value="80.27" class="pic high">
|
|
84
84
|
<div class="chart"><div class="cover-fill" style="width: 80%"></div><div class="cover-empty" style="width: 20%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="80.
|
|
87
|
-
<td data-value="
|
|
86
|
+
<td data-value="80.27" class="pct high">80.27%</td>
|
|
87
|
+
<td data-value="431" class="abs high">346/431</td>
|
|
88
88
|
<td data-value="74.19" class="pct medium">74.19%</td>
|
|
89
89
|
<td data-value="341" class="abs medium">253/341</td>
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="
|
|
92
|
-
<td data-value="
|
|
93
|
-
<td data-value="
|
|
90
|
+
<td data-value="82.6" class="pct high">82.6%</td>
|
|
91
|
+
<td data-value="69" class="abs high">57/69</td>
|
|
92
|
+
<td data-value="80.68" class="pct high">80.68%</td>
|
|
93
|
+
<td data-value="378" class="abs high">305/378</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
117
117
|
Code coverage generated by
|
|
118
118
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
119
|
-
at 2026-05-07T11:
|
|
119
|
+
at 2026-05-07T11:38:24.021Z
|
|
120
120
|
</div>
|
|
121
121
|
<script src="prettify.js"></script>
|
|
122
122
|
<script>
|
|
@@ -958,7 +958,13 @@
|
|
|
958
958
|
<a name='L893'></a><a href='#L893'>893</a>
|
|
959
959
|
<a name='L894'></a><a href='#L894'>894</a>
|
|
960
960
|
<a name='L895'></a><a href='#L895'>895</a>
|
|
961
|
-
<a name='L896'></a><a href='#L896'>896</a
|
|
961
|
+
<a name='L896'></a><a href='#L896'>896</a>
|
|
962
|
+
<a name='L897'></a><a href='#L897'>897</a>
|
|
963
|
+
<a name='L898'></a><a href='#L898'>898</a>
|
|
964
|
+
<a name='L899'></a><a href='#L899'>899</a>
|
|
965
|
+
<a name='L900'></a><a href='#L900'>900</a>
|
|
966
|
+
<a name='L901'></a><a href='#L901'>901</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
967
|
+
<span class="cline-any cline-neutral"> </span>
|
|
962
968
|
<span class="cline-any cline-neutral"> </span>
|
|
963
969
|
<span class="cline-any cline-neutral"> </span>
|
|
964
970
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1083,6 +1089,11 @@
|
|
|
1083
1089
|
<span class="cline-any cline-neutral"> </span>
|
|
1084
1090
|
<span class="cline-any cline-neutral"> </span>
|
|
1085
1091
|
<span class="cline-any cline-neutral"> </span>
|
|
1092
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1093
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1094
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1095
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1096
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1086
1097
|
<span class="cline-any cline-yes">94x</span>
|
|
1087
1098
|
<span class="cline-any cline-yes">94x</span>
|
|
1088
1099
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1159,7 +1170,6 @@
|
|
|
1159
1170
|
<span class="cline-any cline-neutral"> </span>
|
|
1160
1171
|
<span class="cline-any cline-neutral"> </span>
|
|
1161
1172
|
<span class="cline-any cline-neutral"> </span>
|
|
1162
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1163
1173
|
<span class="cline-any cline-yes">108x</span>
|
|
1164
1174
|
<span class="cline-any cline-neutral"> </span>
|
|
1165
1175
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1875,6 +1885,7 @@ import {
|
|
|
1875
1885
|
runIncrementalCodegen,
|
|
1876
1886
|
parseIncrementalManifest,
|
|
1877
1887
|
emptyIncrementalManifest,
|
|
1888
|
+
serializeIncrementalManifest,
|
|
1878
1889
|
hashFingerprint,
|
|
1879
1890
|
INCREMENTAL_MANIFEST_VERSION,
|
|
1880
1891
|
} from '@contractkit/core';
|
|
@@ -1972,14 +1983,19 @@ export interface IncrementalResult extends Omit<IncrementalResultBase, 'skipp
|
|
|
1972
1983
|
/**
|
|
1973
1984
|
* Generates an OpenCollection (https://spec.opencollection.com/) API collection
|
|
1974
1985
|
* from a set of operation roots. Produces opencollection.yml, an environment
|
|
1975
|
-
* file,
|
|
1986
|
+
* file, one .yml request file per operation, and the tracking manifest.
|
|
1976
1987
|
*
|
|
1977
1988
|
* This is the full-regeneration entry point — every file is rebuilt from scratch.
|
|
1978
1989
|
* For cache-aware incremental builds, use {@link generateOpenCollectionIncremental}.
|
|
1990
|
+
*
|
|
1991
|
+
* The manifest appears in the returned list (under {@link MANIFEST_FILENAME}) for
|
|
1992
|
+
* convenience — single-shot callers can write the entire array as-is. The plugin's
|
|
1993
|
+
* incremental path persists the manifest separately (under the CLI cache dir), so
|
|
1994
|
+
* its `filesToWrite` does not include the manifest.
|
|
1979
1995
|
*/
|
|
1980
1996
|
export function generateOpenCollection(roots: OpRootNode[], options: OpenCollectionOptions): OpenCollectionFile[] {
|
|
1981
1997
|
const result = generateOpenCollectionIncremental(roots, options, emptyManifest());
|
|
1982
|
-
return result.filesToWrite;
|
|
1998
|
+
return [...result.filesToWrite, { relativePath: MANIFEST_FILENAME, content: serializeIncrementalManifest(result.manifest) }];
|
|
1983
1999
|
}
|
|
1984
2000
|
|
|
1985
2001
|
/**
|
|
@@ -2048,7 +2064,6 @@ export function generateOpenCollectionIncremental(
|
|
|
2048
2064
|
|
|
2049
2065
|
const result = runIncrementalCodegen({
|
|
2050
2066
|
codegenVersion: BRUNO_CODEGEN_VERSION,
|
|
2051
|
-
manifestFilename: MANIFEST_FILENAME,
|
|
2052
2067
|
prevManifest,
|
|
2053
2068
|
globalFiles,
|
|
2054
2069
|
units,
|
|
@@ -2755,7 +2770,7 @@ function yamlString(value: string): string {
|
|
|
2755
2770
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2756
2771
|
Code coverage generated by
|
|
2757
2772
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2758
|
-
at 2026-05-07T11:
|
|
2773
|
+
at 2026-05-07T11:38:24.021Z
|
|
2759
2774
|
</div>
|
|
2760
2775
|
<script src="../prettify.js"></script>
|
|
2761
2776
|
<script>
|
package/coverage/src/index.html
CHANGED
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">80.
|
|
26
|
+
<span class="strong">80.27% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>346/431</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">82.6% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>57/
|
|
42
|
+
<span class='fraction'>57/69</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">80.68% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>305/378</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -95,17 +95,17 @@
|
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
97
97
|
<td class="file low" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
|
|
98
|
-
<td data-value="
|
|
99
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
98
|
+
<td data-value="26.78" class="pic low">
|
|
99
|
+
<div class="chart"><div class="cover-fill" style="width: 26%"></div><div class="cover-empty" style="width: 74%"></div></div>
|
|
100
100
|
</td>
|
|
101
|
-
<td data-value="
|
|
102
|
-
<td data-value="
|
|
101
|
+
<td data-value="26.78" class="pct low">26.78%</td>
|
|
102
|
+
<td data-value="56" class="abs low">15/56</td>
|
|
103
103
|
<td data-value="40" class="pct low">40%</td>
|
|
104
104
|
<td data-value="35" class="abs low">14/35</td>
|
|
105
|
-
<td data-value="
|
|
106
|
-
<td data-value="
|
|
107
|
-
<td data-value="
|
|
108
|
-
<td data-value="
|
|
105
|
+
<td data-value="20" class="pct low">20%</td>
|
|
106
|
+
<td data-value="10" class="abs low">2/10</td>
|
|
107
|
+
<td data-value="25.49" class="pct low">25.49%</td>
|
|
108
|
+
<td data-value="51" class="abs low">13/51</td>
|
|
109
109
|
</tr>
|
|
110
110
|
|
|
111
111
|
</tbody>
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
117
117
|
Code coverage generated by
|
|
118
118
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
119
|
-
at 2026-05-07T11:
|
|
119
|
+
at 2026-05-07T11:38:24.021Z
|
|
120
120
|
</div>
|
|
121
121
|
<script src="../prettify.js"></script>
|
|
122
122
|
<script>
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">26.78% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>15/56</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">20% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>2/
|
|
42
|
+
<span class='fraction'>2/10</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">25.49% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>13/51</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -254,7 +254,24 @@
|
|
|
254
254
|
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
255
|
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
256
|
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
-
<a name='L192'></a><a href='#L192'>192</a
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
258
275
|
<span class="cline-any cline-neutral"> </span>
|
|
259
276
|
<span class="cline-any cline-neutral"> </span>
|
|
260
277
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -262,6 +279,10 @@
|
|
|
262
279
|
<span class="cline-any cline-neutral"> </span>
|
|
263
280
|
<span class="cline-any cline-neutral"> </span>
|
|
264
281
|
<span class="cline-any cline-neutral"> </span>
|
|
282
|
+
<span class="cline-any cline-yes">1x</span>
|
|
283
|
+
<span class="cline-any cline-neutral"> </span>
|
|
284
|
+
<span class="cline-any cline-neutral"> </span>
|
|
285
|
+
<span class="cline-any cline-neutral"> </span>
|
|
265
286
|
<span class="cline-any cline-neutral"> </span>
|
|
266
287
|
<span class="cline-any cline-neutral"> </span>
|
|
267
288
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -378,6 +399,7 @@
|
|
|
378
399
|
<span class="cline-any cline-no"> </span>
|
|
379
400
|
<span class="cline-any cline-no"> </span>
|
|
380
401
|
<span class="cline-any cline-no"> </span>
|
|
402
|
+
<span class="cline-any cline-no"> </span>
|
|
381
403
|
<span class="cline-any cline-neutral"> </span>
|
|
382
404
|
<span class="cline-any cline-no"> </span>
|
|
383
405
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -402,13 +424,23 @@
|
|
|
402
424
|
<span class="cline-any cline-neutral"> </span>
|
|
403
425
|
<span class="cline-any cline-neutral"> </span>
|
|
404
426
|
<span class="cline-any cline-neutral"> </span>
|
|
427
|
+
<span class="cline-any cline-no"> </span>
|
|
428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-neutral"> </span>
|
|
405
430
|
<span class="cline-any cline-neutral"> </span>
|
|
406
431
|
<span class="cline-any cline-neutral"> </span>
|
|
407
432
|
<span class="cline-any cline-no"> </span>
|
|
408
433
|
<span class="cline-any cline-no"> </span>
|
|
409
434
|
<span class="cline-any cline-no"> </span>
|
|
435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
410
436
|
<span class="cline-any cline-no"> </span>
|
|
411
437
|
<span class="cline-any cline-neutral"> </span>
|
|
438
|
+
<span class="cline-any cline-neutral"> </span>
|
|
439
|
+
<span class="cline-any cline-neutral"> </span>
|
|
440
|
+
<span class="cline-any cline-neutral"> </span>
|
|
441
|
+
<span class="cline-any cline-neutral"> </span>
|
|
442
|
+
<span class="cline-any cline-no"> </span>
|
|
443
|
+
<span class="cline-any cline-no"> </span>
|
|
412
444
|
<span class="cline-any cline-no"> </span>
|
|
413
445
|
<span class="cline-any cline-neutral"> </span>
|
|
414
446
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -419,6 +451,8 @@
|
|
|
419
451
|
<span class="cline-any cline-neutral"> </span>
|
|
420
452
|
<span class="cline-any cline-neutral"> </span>
|
|
421
453
|
<span class="cline-any cline-neutral"> </span>
|
|
454
|
+
<span class="cline-any cline-neutral"> </span>
|
|
455
|
+
<span class="cline-any cline-neutral"> </span>
|
|
422
456
|
<span class="cline-any cline-no"> </span>
|
|
423
457
|
<span class="cline-any cline-no"> </span>
|
|
424
458
|
<span class="cline-any cline-no"> </span>
|
|
@@ -446,11 +480,15 @@
|
|
|
446
480
|
<span class="cline-any cline-neutral"> </span>
|
|
447
481
|
<span class="cline-any cline-neutral"> </span>
|
|
448
482
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { resolve, basename, dirname } from 'node:path';
|
|
449
|
-
import { existsSync, readFileSync, rmSync, readdirSync, rmdirSync } from 'node:fs';
|
|
450
|
-
import { generateOpenCollectionIncremental,
|
|
483
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, readdirSync, rmdirSync } from 'node:fs';
|
|
484
|
+
import { generateOpenCollectionIncremental, parseManifest, emptyManifest } from './codegen-bruno.js';
|
|
451
485
|
import type { BrunoSecurityScheme } from './codegen-bruno.js';
|
|
486
|
+
import { serializeIncrementalManifest } from '@contractkit/core';
|
|
452
487
|
import type { ContractKitPlugin, PluginContext, PluginValue, OpRootNode, ContractRootNode, IncrementalManifest } from '@contractkit/core';
|
|
453
488
|
|
|
489
|
+
/** Filename for the persisted Bruno manifest under the CLI cache directory. */
|
|
490
|
+
const CACHE_MANIFEST_FILENAME = 'bruno-manifest.json';
|
|
491
|
+
|
|
454
492
|
/** Configuration accepted by the Bruno plugin, both via `contractkit.config.json` and `createBrunoPlugin`. */
|
|
455
493
|
export interface BrunoPluginConfig {
|
|
456
494
|
baseDir?: string;
|
|
@@ -569,8 +607,9 @@ async function <span class="fstat-no" title="function not covered" >runBrunoCode
|
|
|
569
607
|
const base = <span class="cstat-no" title="statement not covered" >config.baseDir ? resolve(ctx.rootDir, config.baseDir) : ctx.rootDir;</span>
|
|
570
608
|
const <span class="cstat-no" title="statement not covered" >outDir = resolve(base, config.output ?? 'bruno-collection');</span>
|
|
571
609
|
const collectionName = <span class="cstat-no" title="statement not covered" >config.collectionName ?? basename(ctx.rootDir);</span>
|
|
610
|
+
const <span class="cstat-no" title="statement not covered" >manifestPath = resolve(ctx.cacheDir, CACHE_MANIFEST_FILENAME);</span>
|
|
572
611
|
|
|
573
|
-
const prevManifest: IncrementalManifest = <span class="cstat-no" title="statement not covered" >ctx.cacheEnabled ? readManifest(
|
|
612
|
+
const prevManifest: IncrementalManifest = <span class="cstat-no" title="statement not covered" >ctx.cacheEnabled ? readManifest(manifestPath) : emptyManifest();</span>
|
|
574
613
|
|
|
575
614
|
const <span class="cstat-no" title="statement not covered" >result = generateOpenCollectionIncremental(</span>
|
|
576
615
|
opRoots,
|
|
@@ -591,11 +630,13 @@ async function <span class="fstat-no" title="function not covered" >runBrunoCode
|
|
|
591
630
|
<span class="cstat-no" title="statement not covered" > for (const { relativePath, content } of result.filesToWrite) {</span>
|
|
592
631
|
<span class="cstat-no" title="statement not covered" > ctx.emitFile(resolve(outDir, relativePath), content);</span>
|
|
593
632
|
}
|
|
633
|
+
|
|
634
|
+
// Persist the manifest under the CLI cache dir, separate from the bruno output.
|
|
635
|
+
<span class="cstat-no" title="statement not covered" > writeManifest(manifestPath, result.manifest);</span>
|
|
594
636
|
}
|
|
595
637
|
|
|
596
|
-
/** Read the previous run's manifest
|
|
597
|
-
function <span class="fstat-no" title="function not covered" >readManifest(
|
|
598
|
-
const <span class="cstat-no" title="statement not covered" >manifestPath = resolve(outDir, MANIFEST_FILENAME);</span>
|
|
638
|
+
/** Read the previous run's manifest from `manifestPath`. Returns an empty manifest when missing or unreadable. */
|
|
639
|
+
function <span class="fstat-no" title="function not covered" >readManifest(m</span>anifestPath: string): IncrementalManifest {
|
|
599
640
|
<span class="cstat-no" title="statement not covered" > if (!existsSync(manifestPath)) <span class="cstat-no" title="statement not covered" >return emptyManifest();</span></span>
|
|
600
641
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
601
642
|
<span class="cstat-no" title="statement not covered" > return parseManifest(readFileSync(manifestPath, 'utf-8'));</span>
|
|
@@ -604,6 +645,16 @@ function <span class="fstat-no" title="function not covered" >readManifest(o</sp
|
|
|
604
645
|
}
|
|
605
646
|
}
|
|
606
647
|
|
|
648
|
+
/** Write the manifest to `manifestPath`. Creates parent dirs as needed. Errors are swallowed so a broken cache never blocks the build. */
|
|
649
|
+
function <span class="fstat-no" title="function not covered" >writeManifest(m</span>anifestPath: string, manifest: IncrementalManifest): void {
|
|
650
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
651
|
+
<span class="cstat-no" title="statement not covered" > mkdirSync(dirname(manifestPath), { recursive: true });</span>
|
|
652
|
+
<span class="cstat-no" title="statement not covered" > writeFileSync(manifestPath, serializeIncrementalManifest(manifest), 'utf-8');</span>
|
|
653
|
+
} catch {
|
|
654
|
+
// best-effort
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
|
|
607
658
|
/**
|
|
608
659
|
* Delete files that the previous run tracked but the current run doesn't produce, then
|
|
609
660
|
* walk back up each affected directory and remove it if it's now empty (stopping at outDir).
|
|
@@ -643,7 +694,7 @@ function <span class="fstat-no" title="function not covered" >deleteStalePaths(o
|
|
|
643
694
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
644
695
|
Code coverage generated by
|
|
645
696
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
646
|
-
at 2026-05-07T11:
|
|
697
|
+
at 2026-05-07T11:38:24.021Z
|
|
647
698
|
</div>
|
|
648
699
|
<script src="../prettify.js"></script>
|
|
649
700
|
<script>
|
|
@@ -589,7 +589,7 @@ export function opRoot(routes: OpRouteNode[], file = 'users.op', meta: Record<
|
|
|
589
589
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
590
590
|
Code coverage generated by
|
|
591
591
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
592
|
-
at 2026-05-07T11:
|
|
592
|
+
at 2026-05-07T11:38:24.021Z
|
|
593
593
|
</div>
|
|
594
594
|
<script src="../prettify.js"></script>
|
|
595
595
|
<script>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2026-05-07T11:
|
|
104
|
+
at 2026-05-07T11:38:24.021Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../prettify.js"></script>
|
|
107
107
|
<script>
|
package/dist/codegen-bruno.d.ts
CHANGED
|
@@ -67,10 +67,15 @@ export interface IncrementalResult extends Omit<IncrementalResultBase, 'skippedU
|
|
|
67
67
|
/**
|
|
68
68
|
* Generates an OpenCollection (https://spec.opencollection.com/) API collection
|
|
69
69
|
* from a set of operation roots. Produces opencollection.yml, an environment
|
|
70
|
-
* file,
|
|
70
|
+
* file, one .yml request file per operation, and the tracking manifest.
|
|
71
71
|
*
|
|
72
72
|
* This is the full-regeneration entry point — every file is rebuilt from scratch.
|
|
73
73
|
* For cache-aware incremental builds, use {@link generateOpenCollectionIncremental}.
|
|
74
|
+
*
|
|
75
|
+
* The manifest appears in the returned list (under {@link MANIFEST_FILENAME}) for
|
|
76
|
+
* convenience — single-shot callers can write the entire array as-is. The plugin's
|
|
77
|
+
* incremental path persists the manifest separately (under the CLI cache dir), so
|
|
78
|
+
* its `filesToWrite` does not include the manifest.
|
|
74
79
|
*/
|
|
75
80
|
export declare function generateOpenCollection(roots: OpRootNode[], options: OpenCollectionOptions): OpenCollectionFile[];
|
|
76
81
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen-bruno.d.ts","sourceRoot":"","sources":["../src/codegen-bruno.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,UAAU,EAMV,gBAAgB,EAGhB,mBAAmB,EAEnB,iBAAiB,IAAI,qBAAqB,EAC7C,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"codegen-bruno.d.ts","sourceRoot":"","sources":["../src/codegen-bruno.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,UAAU,EAMV,gBAAgB,EAGhB,mBAAmB,EAEnB,iBAAiB,IAAI,qBAAqB,EAC7C,MAAM,mBAAmB,CAAC;AAgB3B,iGAAiG;AACjG,MAAM,WAAW,kBAAkB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,8JAA8J;AAC9J,eAAO,MAAM,iBAAiB,qCAAqC,CAAC;AAEpE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACf;AAED,kHAAkH;AAClH,MAAM,WAAW,gBAAgB;IAC7B,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACjD;AAED,qEAAqE;AACrE,MAAM,WAAW,qBAAqB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1D;AAiBD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAEhD,uKAAuK;AACvK,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;IACtF,iFAAiF;IACjF,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,kBAAkB,EAAE,CAGhH;AAED;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAC7C,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,EAAE,qBAAqB,EAC9B,YAAY,EAAE,mBAAmB,EACjC,UAAU,GAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAoB,GAC3D,iBAAiB,CAgEnB;AAkHD,uGAAuG;AACvG,wBAAgB,aAAa,IAAI,mBAAmB,CAEnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAmBlE;AAsBD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAOxF;AA2cD,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASjD"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAiB,WAAW,EAAqD,MAAM,mBAAmB,CAAC;AAK1I,8GAA8G;AAC9G,MAAM,WAAW,iBAAiB;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1D;AAED,mHAAmH;AACnH,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IACzD,IAAI,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;KAAE,CAAC;CACnF;AAID;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAavF;AAQD,QAAA,MAAM,MAAM,EAAE,iBAOb,CAAC;AAEF,eAAe,MAAM,CAAC;AAItB;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CAAE,GAChF,iBAAiB,CAUnB"}
|
package/dist/index.js
CHANGED
|
@@ -3,13 +3,12 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
3
3
|
|
|
4
4
|
// src/index.ts
|
|
5
5
|
import { resolve, basename as basename2, dirname } from "path";
|
|
6
|
-
import { existsSync, readFileSync, rmSync, readdirSync, rmdirSync } from "fs";
|
|
6
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, readdirSync, rmdirSync } from "fs";
|
|
7
7
|
|
|
8
8
|
// src/codegen-bruno.ts
|
|
9
|
-
import { resolveSecurity, resolveModifiers, SECURITY_NONE, collectTransitiveModelRefs, runIncrementalCodegen, parseIncrementalManifest, emptyIncrementalManifest, hashFingerprint, INCREMENTAL_MANIFEST_VERSION } from "@contractkit/core";
|
|
9
|
+
import { resolveSecurity, resolveModifiers, SECURITY_NONE, collectTransitiveModelRefs, runIncrementalCodegen, parseIncrementalManifest, emptyIncrementalManifest, serializeIncrementalManifest, hashFingerprint, INCREMENTAL_MANIFEST_VERSION } from "@contractkit/core";
|
|
10
10
|
import { basename } from "path";
|
|
11
11
|
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
12
|
-
var MANIFEST_FILENAME = ".contractkit-bruno-manifest.json";
|
|
13
12
|
var BRUNO_CODEGEN_VERSION = "1";
|
|
14
13
|
function generateOpenCollectionIncremental(roots, options, prevManifest, fileExists = () => true) {
|
|
15
14
|
const modelMap = buildModelMap(options.contractRoots ?? []);
|
|
@@ -65,7 +64,6 @@ function generateOpenCollectionIncremental(roots, options, prevManifest, fileExi
|
|
|
65
64
|
}
|
|
66
65
|
const result = runIncrementalCodegen({
|
|
67
66
|
codegenVersion: BRUNO_CODEGEN_VERSION,
|
|
68
|
-
manifestFilename: MANIFEST_FILENAME,
|
|
69
67
|
prevManifest,
|
|
70
68
|
globalFiles,
|
|
71
69
|
units,
|
|
@@ -716,6 +714,8 @@ function yamlString(value) {
|
|
|
716
714
|
__name(yamlString, "yamlString");
|
|
717
715
|
|
|
718
716
|
// src/index.ts
|
|
717
|
+
import { serializeIncrementalManifest as serializeIncrementalManifest2 } from "@contractkit/core";
|
|
718
|
+
var CACHE_MANIFEST_FILENAME = "bruno-manifest.json";
|
|
719
719
|
function validateBrunoExtension(value) {
|
|
720
720
|
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
721
721
|
return {
|
|
@@ -769,7 +769,8 @@ async function runBrunoCodegen(opRoots, contractRoots, ctx, config, auth) {
|
|
|
769
769
|
const base = config.baseDir ? resolve(ctx.rootDir, config.baseDir) : ctx.rootDir;
|
|
770
770
|
const outDir = resolve(base, config.output ?? "bruno-collection");
|
|
771
771
|
const collectionName = config.collectionName ?? basename2(ctx.rootDir);
|
|
772
|
-
const
|
|
772
|
+
const manifestPath = resolve(ctx.cacheDir, CACHE_MANIFEST_FILENAME);
|
|
773
|
+
const prevManifest = ctx.cacheEnabled ? readManifest(manifestPath) : emptyManifest();
|
|
773
774
|
const result = generateOpenCollectionIncremental(opRoots, {
|
|
774
775
|
collectionName,
|
|
775
776
|
contractRoots,
|
|
@@ -782,10 +783,10 @@ async function runBrunoCodegen(opRoots, contractRoots, ctx, config, auth) {
|
|
|
782
783
|
for (const { relativePath, content } of result.filesToWrite) {
|
|
783
784
|
ctx.emitFile(resolve(outDir, relativePath), content);
|
|
784
785
|
}
|
|
786
|
+
writeManifest(manifestPath, result.manifest);
|
|
785
787
|
}
|
|
786
788
|
__name(runBrunoCodegen, "runBrunoCodegen");
|
|
787
|
-
function readManifest(
|
|
788
|
-
const manifestPath = resolve(outDir, MANIFEST_FILENAME);
|
|
789
|
+
function readManifest(manifestPath) {
|
|
789
790
|
if (!existsSync(manifestPath)) return emptyManifest();
|
|
790
791
|
try {
|
|
791
792
|
return parseManifest(readFileSync(manifestPath, "utf-8"));
|
|
@@ -794,6 +795,16 @@ function readManifest(outDir) {
|
|
|
794
795
|
}
|
|
795
796
|
}
|
|
796
797
|
__name(readManifest, "readManifest");
|
|
798
|
+
function writeManifest(manifestPath, manifest) {
|
|
799
|
+
try {
|
|
800
|
+
mkdirSync(dirname(manifestPath), {
|
|
801
|
+
recursive: true
|
|
802
|
+
});
|
|
803
|
+
writeFileSync(manifestPath, serializeIncrementalManifest2(manifest), "utf-8");
|
|
804
|
+
} catch {
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
__name(writeManifest, "writeManifest");
|
|
797
808
|
function deleteStalePaths(outDir, relPaths) {
|
|
798
809
|
if (relPaths.length === 0) return;
|
|
799
810
|
const removedDirs = /* @__PURE__ */ new Set();
|