@contractkit/plugin-bruno 1.0.0 → 1.2.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 +7 -7
- package/.turbo/turbo-test$colon$ci.log +14 -14
- package/CHANGELOG.md +29 -0
- package/README.md +30 -0
- package/coverage/clover.xml +297 -280
- package/coverage/coverage-final.json +2 -2
- package/coverage/index.html +19 -19
- package/coverage/src/codegen-bruno.ts.html +273 -126
- package/coverage/src/index.html +19 -19
- package/coverage/tests/helpers.ts.html +9 -9
- package/coverage/tests/index.html +1 -1
- package/dist/codegen-bruno.d.ts +11 -0
- package/dist/codegen-bruno.d.ts.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +71 -30
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/codegen-bruno.ts +68 -19
- package/src/index.ts +11 -0
- package/tests/codegen-bruno.test.ts +97 -0
package/coverage/src/index.html
CHANGED
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">87.27% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>288/330</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">76.
|
|
33
|
+
<span class="strong">76.29% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>206/270</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">92.15% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>47/51</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">88.
|
|
47
|
+
<span class="strong">88.54% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>255/288</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
82
|
<td class="file high" data-value="codegen-bruno.ts"><a href="codegen-bruno.ts.html">codegen-bruno.ts</a></td>
|
|
83
|
-
<td data-value="
|
|
84
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
83
|
+
<td data-value="87.27" class="pic high">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="
|
|
87
|
-
<td data-value="
|
|
88
|
-
<td data-value="76.
|
|
89
|
-
<td data-value="
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="
|
|
92
|
-
<td data-value="88.
|
|
93
|
-
<td data-value="
|
|
86
|
+
<td data-value="87.27" class="pct high">87.27%</td>
|
|
87
|
+
<td data-value="330" class="abs high">288/330</td>
|
|
88
|
+
<td data-value="76.29" class="pct medium">76.29%</td>
|
|
89
|
+
<td data-value="270" class="abs medium">206/270</td>
|
|
90
|
+
<td data-value="92.15" class="pct high">92.15%</td>
|
|
91
|
+
<td data-value="51" class="abs high">47/51</td>
|
|
92
|
+
<td data-value="88.54" class="pct high">88.54%</td>
|
|
93
|
+
<td data-value="288" class="abs high">255/288</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
</tbody>
|
|
@@ -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-
|
|
104
|
+
at 2026-05-01T19:55:27.966Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -266,7 +266,7 @@
|
|
|
266
266
|
<span class="cline-any cline-neutral"> </span>
|
|
267
267
|
<span class="cline-any cline-neutral"> </span>
|
|
268
268
|
<span class="cline-any cline-neutral"> </span>
|
|
269
|
-
<span class="cline-any cline-yes">
|
|
269
|
+
<span class="cline-any cline-yes">258x</span>
|
|
270
270
|
<span class="cline-any cline-neutral"> </span>
|
|
271
271
|
<span class="cline-any cline-neutral"> </span>
|
|
272
272
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -384,10 +384,10 @@
|
|
|
384
384
|
<span class="cline-any cline-neutral"> </span>
|
|
385
385
|
<span class="cline-any cline-neutral"> </span>
|
|
386
386
|
<span class="cline-any cline-neutral"> </span>
|
|
387
|
-
<span class="cline-any cline-yes">
|
|
388
|
-
<span class="cline-any cline-yes">
|
|
389
|
-
<span class="cline-any cline-yes">
|
|
390
|
-
<span class="cline-any cline-yes">
|
|
387
|
+
<span class="cline-any cline-yes">99x</span>
|
|
388
|
+
<span class="cline-any cline-yes">99x</span>
|
|
389
|
+
<span class="cline-any cline-yes">99x</span>
|
|
390
|
+
<span class="cline-any cline-yes">99x</span>
|
|
391
391
|
<span class="cline-any cline-neutral"> </span>
|
|
392
392
|
<span class="cline-any cline-neutral"> </span>
|
|
393
393
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -402,12 +402,12 @@
|
|
|
402
402
|
<span class="cline-any cline-neutral"> </span>
|
|
403
403
|
<span class="cline-any cline-neutral"> </span>
|
|
404
404
|
<span class="cline-any cline-neutral"> </span>
|
|
405
|
-
<span class="cline-any cline-yes">
|
|
406
|
-
<span class="cline-any cline-yes">
|
|
405
|
+
<span class="cline-any cline-yes">95x</span>
|
|
406
|
+
<span class="cline-any cline-yes">95x</span>
|
|
407
407
|
<span class="cline-any cline-neutral"> </span>
|
|
408
408
|
<span class="cline-any cline-neutral"> </span>
|
|
409
409
|
<span class="cline-any cline-neutral"> </span>
|
|
410
|
-
<span class="cline-any cline-yes">
|
|
410
|
+
<span class="cline-any cline-yes">92x</span>
|
|
411
411
|
<span class="cline-any cline-neutral"> </span>
|
|
412
412
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type {
|
|
413
413
|
ContractRootNode,
|
|
@@ -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-
|
|
592
|
+
at 2026-05-01T19:55:27.966Z
|
|
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-
|
|
104
|
+
at 2026-05-01T19:55:27.966Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../prettify.js"></script>
|
|
107
107
|
<script>
|
package/dist/codegen-bruno.d.ts
CHANGED
|
@@ -37,6 +37,17 @@ export interface OpenCollectionOptions {
|
|
|
37
37
|
* benefit from full coverage. Set to `false` to omit internal ops.
|
|
38
38
|
*/
|
|
39
39
|
includeInternal?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Map of environment name → variables. Each entry produces a
|
|
42
|
+
* `environments/<name>.yml` file with the variables in declaration order.
|
|
43
|
+
* Values are coerced to strings.
|
|
44
|
+
*
|
|
45
|
+
* When omitted, a default `environments/local.yml` is emitted with
|
|
46
|
+
* `baseUrl=http://localhost:3000` plus any auth env-var placeholders the
|
|
47
|
+
* default scheme requires. When provided, the default is replaced entirely
|
|
48
|
+
* — auth vars are not auto-injected, so include them explicitly if needed.
|
|
49
|
+
*/
|
|
50
|
+
environments?: Record<string, Record<string, unknown>>;
|
|
40
51
|
}
|
|
41
52
|
/**
|
|
42
53
|
* Generates an OpenCollection (https://spec.opencollection.com/) API collection
|
|
@@ -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,EAGnB,MAAM,mBAAmB,CAAC;AAK3B,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,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;
|
|
1
|
+
{"version":3,"file":"codegen-bruno.d.ts","sourceRoot":"","sources":["../src/codegen-bruno.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,UAAU,EAMV,gBAAgB,EAGnB,MAAM,mBAAmB,CAAC;AAK3B,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,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;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,kBAAkB,EAAE,CAuEhH;AAED,sLAAsL;AACtL,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAUvD;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
CHANGED
|
@@ -17,6 +17,14 @@ export interface BrunoPluginConfig {
|
|
|
17
17
|
* benefit from full coverage. Set to `false` to omit internal ops.
|
|
18
18
|
*/
|
|
19
19
|
includeInternal?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Map of environment name → variables. Each entry produces a
|
|
22
|
+
* `environments/<name>.yml` file. When omitted, a default `local.yml` is
|
|
23
|
+
* emitted with `baseUrl=http://localhost:3000` and any auth env-var
|
|
24
|
+
* placeholders. When provided, the default is replaced entirely; include
|
|
25
|
+
* auth variables (e.g. `token`) explicitly if you need them.
|
|
26
|
+
*/
|
|
27
|
+
environments?: Record<string, Record<string, unknown>>;
|
|
20
28
|
}
|
|
21
29
|
/** Full plugin options shape read from `ctx.options` — extends {@link BrunoPluginConfig} with the `auth` block. */
|
|
22
30
|
export interface BrunoPluginOptions extends BrunoPluginConfig {
|
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;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,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,QAAA,MAAM,MAAM,EAAE,iBAuBb,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,CAwBnB"}
|
package/dist/index.js
CHANGED
|
@@ -21,12 +21,20 @@ function generateOpenCollection(roots, options) {
|
|
|
21
21
|
relativePath: "opencollection.yml",
|
|
22
22
|
content: generateCollectionRoot(options.collectionName, defaultScheme)
|
|
23
23
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
for (const envFile of generateEnvFiles(options.environments, defaultScheme)) {
|
|
25
|
+
files.push(envFile);
|
|
26
|
+
}
|
|
27
|
+
const sortedRoots = [
|
|
28
|
+
...roots
|
|
29
|
+
].sort((a, b) => {
|
|
30
|
+
const aArea = a.meta["area"] ?? deriveFolderName(a.file);
|
|
31
|
+
const bArea = b.meta["area"] ?? deriveFolderName(b.file);
|
|
32
|
+
const cmp = aArea.localeCompare(bArea);
|
|
33
|
+
if (cmp !== 0) return cmp;
|
|
34
|
+
return (a.meta["subarea"] ?? "").localeCompare(b.meta["subarea"] ?? "");
|
|
27
35
|
});
|
|
28
|
-
for (let rootIdx = 0; rootIdx <
|
|
29
|
-
const root =
|
|
36
|
+
for (let rootIdx = 0; rootIdx < sortedRoots.length; rootIdx++) {
|
|
37
|
+
const root = sortedRoots[rootIdx];
|
|
30
38
|
const folder = root.meta["area"] ? slugifyName(root.meta["area"]) : deriveFolderName(root.file);
|
|
31
39
|
const displayName = (root.meta["area"] ?? folder).charAt(0).toUpperCase() + (root.meta["area"] ?? folder).slice(1);
|
|
32
40
|
files.push({
|
|
@@ -43,24 +51,32 @@ function generateOpenCollection(roots, options) {
|
|
|
43
51
|
content: generateFolderFile(subareaDisplayName, 1)
|
|
44
52
|
});
|
|
45
53
|
}
|
|
46
|
-
|
|
54
|
+
const requests = [];
|
|
47
55
|
for (const route of root.routes) {
|
|
48
56
|
for (const op of route.operations) {
|
|
49
57
|
if (!includeInternal && resolveModifiers(route, op).includes("internal")) continue;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (pluginOverride !== void 0) {
|
|
55
|
-
content = mergePluginFile(content, pluginOverride);
|
|
56
|
-
}
|
|
57
|
-
files.push({
|
|
58
|
-
relativePath: `${requestDir}/${fileName}`,
|
|
59
|
-
content
|
|
58
|
+
requests.push({
|
|
59
|
+
route,
|
|
60
|
+
op,
|
|
61
|
+
requestName: op.name ?? route.path
|
|
60
62
|
});
|
|
61
|
-
seq++;
|
|
62
63
|
}
|
|
63
64
|
}
|
|
65
|
+
requests.sort((a, b) => a.requestName.localeCompare(b.requestName));
|
|
66
|
+
let seq = 1;
|
|
67
|
+
for (const { route, op, requestName } of requests) {
|
|
68
|
+
const fileName = op.name ? `${slugifyName(op.name)}.yml` : `${op.method}-${sanitizePath(route.path)}.yml`;
|
|
69
|
+
let content = generateRequestFile(route, op, requestName, seq, modelMap, root, defaultScheme, randomExamples);
|
|
70
|
+
const pluginOverride = op.pluginFiles?.["bruno"];
|
|
71
|
+
if (pluginOverride !== void 0) {
|
|
72
|
+
content = mergePluginFile(content, pluginOverride);
|
|
73
|
+
}
|
|
74
|
+
files.push({
|
|
75
|
+
relativePath: `${requestDir}/${fileName}`,
|
|
76
|
+
content
|
|
77
|
+
});
|
|
78
|
+
seq++;
|
|
79
|
+
}
|
|
64
80
|
}
|
|
65
81
|
const trackedPaths = [
|
|
66
82
|
...files.map((f) => f.relativePath),
|
|
@@ -125,23 +141,45 @@ function generateCollectionRoot(name, scheme) {
|
|
|
125
141
|
return lines.join("\n");
|
|
126
142
|
}
|
|
127
143
|
__name(generateCollectionRoot, "generateCollectionRoot");
|
|
128
|
-
function
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
144
|
+
function generateEnvFiles(environments, scheme) {
|
|
145
|
+
if (environments && Object.keys(environments).length > 0) {
|
|
146
|
+
return Object.entries(environments).map(([name, variables]) => ({
|
|
147
|
+
relativePath: `environments/${name}.yml`,
|
|
148
|
+
content: renderEnvFile(displayNameFor(name), variables)
|
|
149
|
+
}));
|
|
150
|
+
}
|
|
151
|
+
const defaultVars = {
|
|
152
|
+
baseUrl: "http://localhost:3000"
|
|
153
|
+
};
|
|
135
154
|
if (scheme) {
|
|
136
|
-
for (const varName of authEnvVarNames(scheme))
|
|
137
|
-
|
|
138
|
-
|
|
155
|
+
for (const varName of authEnvVarNames(scheme)) defaultVars[varName] = "";
|
|
156
|
+
}
|
|
157
|
+
return [
|
|
158
|
+
{
|
|
159
|
+
relativePath: "environments/local.yml",
|
|
160
|
+
content: renderEnvFile("Local", defaultVars)
|
|
139
161
|
}
|
|
162
|
+
];
|
|
163
|
+
}
|
|
164
|
+
__name(generateEnvFiles, "generateEnvFiles");
|
|
165
|
+
function renderEnvFile(name, variables) {
|
|
166
|
+
const lines = [
|
|
167
|
+
`name: ${name}`,
|
|
168
|
+
`variables:`
|
|
169
|
+
];
|
|
170
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
171
|
+
const escaped = String(value).replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
172
|
+
lines.push(` - name: ${key}`);
|
|
173
|
+
lines.push(` value: "${escaped}"`);
|
|
140
174
|
}
|
|
141
175
|
lines.push(``);
|
|
142
176
|
return lines.join("\n");
|
|
143
177
|
}
|
|
144
|
-
__name(
|
|
178
|
+
__name(renderEnvFile, "renderEnvFile");
|
|
179
|
+
function displayNameFor(envKey) {
|
|
180
|
+
return envKey.charAt(0).toUpperCase() + envKey.slice(1);
|
|
181
|
+
}
|
|
182
|
+
__name(displayNameFor, "displayNameFor");
|
|
145
183
|
function generateFolderFile(name, seq) {
|
|
146
184
|
return [
|
|
147
185
|
`info:`,
|
|
@@ -586,7 +624,8 @@ var plugin = {
|
|
|
586
624
|
contractRoots,
|
|
587
625
|
auth,
|
|
588
626
|
randomExamples: config.randomExamples ?? true,
|
|
589
|
-
includeInternal: config.includeInternal
|
|
627
|
+
includeInternal: config.includeInternal,
|
|
628
|
+
environments: config.environments
|
|
590
629
|
});
|
|
591
630
|
for (const { relativePath, content } of files) {
|
|
592
631
|
ctx.emitFile(resolve(outDir, relativePath), content);
|
|
@@ -607,7 +646,9 @@ function createBrunoPlugin(config, rootDir, auth) {
|
|
|
607
646
|
collectionName,
|
|
608
647
|
contractRoots,
|
|
609
648
|
auth,
|
|
610
|
-
randomExamples: config.randomExamples ?? true
|
|
649
|
+
randomExamples: config.randomExamples ?? true,
|
|
650
|
+
includeInternal: config.includeInternal,
|
|
651
|
+
environments: config.environments
|
|
611
652
|
});
|
|
612
653
|
for (const { relativePath, content } of files) {
|
|
613
654
|
ctx.emitFile(resolve(outDir, relativePath), content);
|