@spec0/cli 0.1.0 → 0.1.2
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/dist/index.js +0 -0
- package/package.json +9 -1
- package/dist/commands/mock.d.ts +0 -6
- package/dist/commands/mock.d.ts.map +0 -1
- package/dist/commands/mock.js +0 -116
- package/dist/commands/mock.js.map +0 -1
- package/dist/commands/register.d.ts +0 -6
- package/dist/commands/register.d.ts.map +0 -1
- package/dist/commands/register.js +0 -213
- package/dist/commands/register.js.map +0 -1
- package/dist/commands/team.d.ts +0 -6
- package/dist/commands/team.d.ts.map +0 -1
- package/dist/commands/team.js +0 -30
- package/dist/commands/team.js.map +0 -1
- package/dist/lib/winspect-yaml.d.ts +0 -14
- package/dist/lib/winspect-yaml.d.ts.map +0 -1
- package/dist/lib/winspect-yaml.js +0 -28
- package/dist/lib/winspect-yaml.js.map +0 -1
package/dist/index.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spec0/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Spec0 CLI — publish API specs, create mock servers, lint, and interact with the Spec0 platform",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -46,6 +46,14 @@
|
|
|
46
46
|
],
|
|
47
47
|
"type": "module",
|
|
48
48
|
"license": "MIT",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "git+https://github.com/spec-0/CLI.git"
|
|
52
|
+
},
|
|
53
|
+
"bugs": {
|
|
54
|
+
"url": "https://github.com/spec-0/CLI/issues"
|
|
55
|
+
},
|
|
56
|
+
"homepage": "https://github.com/spec-0/CLI#readme",
|
|
49
57
|
"dependencies": {
|
|
50
58
|
"@inquirer/prompts": "^7.2.0",
|
|
51
59
|
"@stoplight/spectral-core": "^1.22.0",
|
package/dist/commands/mock.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/commands/mock.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QA2GpD"}
|
package/dist/commands/mock.js
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* spec0 mock create | list | url | delete | regenerate-key | logs
|
|
3
|
-
*/
|
|
4
|
-
import chalk from "chalk";
|
|
5
|
-
import { createOrgApiClient, is401 } from "../lib/api-client.js";
|
|
6
|
-
import { requireOrgContext } from "../lib/auth-context.js";
|
|
7
|
-
import { ExitCode, exit } from "../lib/exit-codes.js";
|
|
8
|
-
import { emit, resolveOutputContext } from "../lib/output/index.js";
|
|
9
|
-
import { renderTable } from "../lib/output/table.js";
|
|
10
|
-
export function registerMockCommands(program) {
|
|
11
|
-
const mock = program.command("mock").description("Mock server management");
|
|
12
|
-
mock
|
|
13
|
-
.command("create")
|
|
14
|
-
.description("Create mock server, print URL and key")
|
|
15
|
-
.option("--api <name>", "API name (required unless --api-id is set)")
|
|
16
|
-
.option("--api-id <uuid>", "API id")
|
|
17
|
-
.option("--org <uuid>", "Org id override")
|
|
18
|
-
.action(async (opts) => {
|
|
19
|
-
let ctx;
|
|
20
|
-
try {
|
|
21
|
-
ctx = requireOrgContext(opts.org);
|
|
22
|
-
}
|
|
23
|
-
catch (e) {
|
|
24
|
-
console.error(chalk.red(e.message));
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
|
-
if (!opts.api && !opts.apiId) {
|
|
28
|
-
console.error(chalk.red("Provide --api <name> or --api-id <uuid>"));
|
|
29
|
-
process.exit(1);
|
|
30
|
-
}
|
|
31
|
-
const client = createOrgApiClient(ctx);
|
|
32
|
-
const body = {
|
|
33
|
-
apiName: opts.api,
|
|
34
|
-
apiId: opts.apiId,
|
|
35
|
-
};
|
|
36
|
-
try {
|
|
37
|
-
const res = (await client.postJson("/api-management/cli/v1/mocks", body));
|
|
38
|
-
const base = ctx.apiUrl;
|
|
39
|
-
const fullUrl = `${base}${res.mockBaseUrl ?? ""}`;
|
|
40
|
-
console.log(chalk.green("Mock server:"));
|
|
41
|
-
console.log(` Mock URL: ${fullUrl}`);
|
|
42
|
-
if (res.apiKey) {
|
|
43
|
-
console.log(` API Key: ${res.apiKey} (copy and keep safe — shown once)`);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
console.log(chalk.yellow(" (Existing mock — API key was issued at creation.)"));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch (err) {
|
|
50
|
-
if (is401(err)) {
|
|
51
|
-
console.error(chalk.red("Token invalid. Run 'spec0 auth login'."));
|
|
52
|
-
process.exit(1);
|
|
53
|
-
}
|
|
54
|
-
console.error(chalk.red(err.message));
|
|
55
|
-
process.exit(1);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
mock
|
|
59
|
-
.command("list")
|
|
60
|
-
.description("List all mock servers")
|
|
61
|
-
.option("--org <uuid>", "Org id override")
|
|
62
|
-
.option("--output <format>", "Output format: text, json, or yaml (default: text)")
|
|
63
|
-
.action(async (opts) => {
|
|
64
|
-
const outCtx = resolveOutputContext(opts);
|
|
65
|
-
let authCtx;
|
|
66
|
-
try {
|
|
67
|
-
authCtx = requireOrgContext(opts.org);
|
|
68
|
-
}
|
|
69
|
-
catch (e) {
|
|
70
|
-
exit(ExitCode.AUTH_MISSING, e.message);
|
|
71
|
-
}
|
|
72
|
-
const client = createOrgApiClient(authCtx);
|
|
73
|
-
try {
|
|
74
|
-
const rows = (await client.getJson("/api-management/cli/v1/mocks"));
|
|
75
|
-
const enriched = rows.map((m) => ({
|
|
76
|
-
api: m.apiName ?? m.apiId ?? "—",
|
|
77
|
-
name: m.name ?? "—",
|
|
78
|
-
mockUrl: `${authCtx.apiUrl}${m.mockBaseUrl ?? ""}`,
|
|
79
|
-
}));
|
|
80
|
-
emit(outCtx, enriched, (data) => renderTable(data, [
|
|
81
|
-
{ key: "api", header: "API" },
|
|
82
|
-
{ key: "name", header: "Name" },
|
|
83
|
-
{ key: "mockUrl", header: "Mock URL" },
|
|
84
|
-
]));
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
if (is401(err)) {
|
|
88
|
-
exit(ExitCode.AUTH_MISSING, "Token invalid or expired. Run 'spec0 auth login'.");
|
|
89
|
-
}
|
|
90
|
-
exit(ExitCode.GENERIC, err.message);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
mock
|
|
94
|
-
.command("url <api-name>")
|
|
95
|
-
.description("Print mock base URL for API")
|
|
96
|
-
.option("--org <uuid>", "Org id override")
|
|
97
|
-
.action(async (apiName, opts) => {
|
|
98
|
-
let ctx;
|
|
99
|
-
try {
|
|
100
|
-
ctx = requireOrgContext(opts.org);
|
|
101
|
-
}
|
|
102
|
-
catch (e) {
|
|
103
|
-
console.error(chalk.red(e.message));
|
|
104
|
-
process.exit(1);
|
|
105
|
-
}
|
|
106
|
-
const client = createOrgApiClient(ctx);
|
|
107
|
-
const rows = (await client.getJson("/api-management/cli/v1/mocks"));
|
|
108
|
-
const hit = rows.find((r) => (r.apiName ?? "").toLowerCase() === apiName.toLowerCase());
|
|
109
|
-
if (!hit) {
|
|
110
|
-
console.error(chalk.red(`No mock found for API name '${apiName}'.`));
|
|
111
|
-
process.exit(1);
|
|
112
|
-
}
|
|
113
|
-
console.log(`${ctx.apiUrl}${hit.mockBaseUrl ?? ""}`);
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=mock.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/commands/mock.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAsB,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AASrD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAE3E,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,cAAc,EAAE,4CAA4C,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC;SACnC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,IAAoD,EAAE,EAAE;QACrE,IAAI,GAAG,CAAC;QACR,IAAI,CAAC;YACH,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,IAAI,GAAsB;YAC9B,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;QACF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAChC,8BAA8B,EAC9B,IAAI,CACL,CAAuB,CAAC;YACzB,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;YACxB,MAAM,OAAO,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;YACvC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,MAAM,oCAAoC,CAAC,CAAC;YAC9E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,oDAAoD,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,IAAsC,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAc,CAAC;YACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChC,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG;gBAChC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG;gBACnB,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE;aACnD,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAC9B,WAAW,CAAC,IAA4C,EAAE;gBACxD,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;gBAC7B,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;gBAC/B,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;aACvC,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,mDAAmD,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,IAAsB,EAAE,EAAE;QACxD,IAAI,GAAG,CAAC;QACR,IAAI,CAAC;YACH,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAc,CAAC;QACjF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,OAAO,IAAI,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgDpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAuNvD"}
|
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* spec0 register — upload OpenAPI spec (lint gate + CLI publish API + mock URL hint)
|
|
3
|
-
*/
|
|
4
|
-
import chalk from "chalk";
|
|
5
|
-
import ora from "ora";
|
|
6
|
-
import { existsSync, readFileSync } from "fs";
|
|
7
|
-
import { runSpectral } from "../lib/lint.js";
|
|
8
|
-
import { formatLintText, formatPublishText, formatGitHubAnnotation } from "../lib/output.js";
|
|
9
|
-
import { createOrgApiClient, is401 } from "../lib/api-client.js";
|
|
10
|
-
import { requireOrgContext } from "../lib/auth-context.js";
|
|
11
|
-
import { resolveCliSpecPathFromFlags } from "../lib/cli-spec-path.js";
|
|
12
|
-
import { resolvedPlatformAppUrl } from "../lib/platform-defaults.js";
|
|
13
|
-
const TEAM_SLUG_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
|
|
14
|
-
function isUuid(v) {
|
|
15
|
-
return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(v);
|
|
16
|
-
}
|
|
17
|
-
function validateTeamArg(team) {
|
|
18
|
-
const t = team.trim();
|
|
19
|
-
if (!t) {
|
|
20
|
-
return "Missing --team value.";
|
|
21
|
-
}
|
|
22
|
-
if (isUuid(t)) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
if (!TEAM_SLUG_PATTERN.test(t)) {
|
|
26
|
-
return `Invalid --team '${team}'. Use a team UUID or a slug like 'platform-team' (lowercase letters, numbers, hyphens; no spaces).`;
|
|
27
|
-
}
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
function registerUsageExamples() {
|
|
31
|
-
return [
|
|
32
|
-
"Examples:",
|
|
33
|
-
" spec0 register --spec-file ./openapi.yaml --name order-api --team platform-team --version 1.0.0",
|
|
34
|
-
" spec0 --spec-file /abs/path/openapi.yaml register --name order-api --team platform-team --version 1.0.0",
|
|
35
|
-
" spec0 register ./openapi.yaml --name order-api --team platform-team --version 1.0.0",
|
|
36
|
-
" spec0 register --spec-file ./openapi.yaml --api-id 123e4567-e89b-12d3-a456-426614174000 --version 1.0.1",
|
|
37
|
-
].join("\n");
|
|
38
|
-
}
|
|
39
|
-
export function registerRegisterCommand(program) {
|
|
40
|
-
program
|
|
41
|
-
.command("register")
|
|
42
|
-
.description("Register or update an API spec on Spec0 (explicit args only)")
|
|
43
|
-
.argument("[spec-file]", "Path to OpenAPI spec (or use --spec-file / global --spec-file)")
|
|
44
|
-
.option("--spec-file <path>", "Path to OpenAPI spec file")
|
|
45
|
-
.option("--api-id <id>", "Existing API ID to update")
|
|
46
|
-
.option("--name <name>", "API name (required when --api-id is not provided)")
|
|
47
|
-
.option("--team <team>", "Team UUID or slug (required when --api-id is not provided)")
|
|
48
|
-
.requiredOption("--version <version>", "API version tag (for example 1.2.0)")
|
|
49
|
-
.option("--strict", "Fail on any Spectral lint warning")
|
|
50
|
-
.option("--dry-run", "Validate only, do not call the API")
|
|
51
|
-
.option("--verbose", "Print verbose request/response logs")
|
|
52
|
-
.option("--format <fmt>", "Output format: text, json, github", "text")
|
|
53
|
-
.option("--org <org>", "Override default org (UUID)")
|
|
54
|
-
.option("--skip-lint", "Skip lint gate")
|
|
55
|
-
.option("--git-sha <sha>", "Git commit SHA for provenance")
|
|
56
|
-
.option("--github-repo <repo>", "GitHub repository URL for provenance")
|
|
57
|
-
.option("--github-branch <branch>", "GitHub branch for provenance")
|
|
58
|
-
.action(async (specArg, opts, command) => {
|
|
59
|
-
const cwd = process.cwd();
|
|
60
|
-
const specPath = resolveCliSpecPathFromFlags(command, cwd, opts.specFile, specArg);
|
|
61
|
-
if (!specPath || !existsSync(specPath)) {
|
|
62
|
-
console.error(chalk.red("Spec file not found. Pass a path via --spec-file, global spec0 --spec-file, or positional [spec-file].\n"));
|
|
63
|
-
console.error(chalk.yellow(registerUsageExamples()));
|
|
64
|
-
process.exit(1);
|
|
65
|
-
}
|
|
66
|
-
const apiId = opts["apiId"];
|
|
67
|
-
const name = opts.name;
|
|
68
|
-
const team = opts.team;
|
|
69
|
-
const version = opts.version;
|
|
70
|
-
const strict = !!opts.strict;
|
|
71
|
-
const skipLint = !!opts.skipLint;
|
|
72
|
-
const verbose = !!opts.verbose;
|
|
73
|
-
const format = opts.format ?? "text";
|
|
74
|
-
const gitSha = opts["gitSha"] ?? "";
|
|
75
|
-
const githubRepo = opts["githubRepo"] ?? "";
|
|
76
|
-
const githubBranch = opts["githubBranch"] ?? "";
|
|
77
|
-
const vLog = (msg) => {
|
|
78
|
-
if (verbose) {
|
|
79
|
-
console.error(chalk.gray(`[verbose] ${msg}`));
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
if (!apiId && (!name || !team)) {
|
|
83
|
-
console.error(chalk.red("For new APIs, provide both --name and --team (or pass --api-id).\n"));
|
|
84
|
-
console.error(chalk.yellow(registerUsageExamples()));
|
|
85
|
-
process.exit(1);
|
|
86
|
-
}
|
|
87
|
-
if (team) {
|
|
88
|
-
const teamErr = validateTeamArg(team);
|
|
89
|
-
if (teamErr) {
|
|
90
|
-
console.error(chalk.red(`${teamErr}\n`));
|
|
91
|
-
console.error(chalk.yellow(registerUsageExamples()));
|
|
92
|
-
process.exit(1);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
const spinner = ora("Registering...").start();
|
|
96
|
-
if (!skipLint) {
|
|
97
|
-
try {
|
|
98
|
-
const lintResult = await runSpectral(specPath);
|
|
99
|
-
spinner.succeed("Lint passed");
|
|
100
|
-
if (format === "github") {
|
|
101
|
-
for (const e of lintResult.errors) {
|
|
102
|
-
console.log(formatGitHubAnnotation(specPath, e.line ?? 0, "error", e.message));
|
|
103
|
-
}
|
|
104
|
-
for (const w of lintResult.warnings) {
|
|
105
|
-
console.log(formatGitHubAnnotation(specPath, w.line ?? 0, "warning", w.message));
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
else if (format !== "json")
|
|
109
|
-
console.log(formatLintText(lintResult));
|
|
110
|
-
if (lintResult.errors.length > 0) {
|
|
111
|
-
console.error(chalk.red("Lint errors block register. Fix them or use --skip-lint."));
|
|
112
|
-
process.exit(1);
|
|
113
|
-
}
|
|
114
|
-
if (strict && lintResult.warnings.length > 0) {
|
|
115
|
-
console.error(chalk.red("Strict mode: warnings block register."));
|
|
116
|
-
process.exit(1);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
catch (e) {
|
|
120
|
-
spinner.fail("Lint failed");
|
|
121
|
-
console.error(e);
|
|
122
|
-
process.exit(1);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
spinner.succeed("Lint skipped");
|
|
127
|
-
}
|
|
128
|
-
let ctx;
|
|
129
|
-
try {
|
|
130
|
-
ctx = requireOrgContext(opts.org);
|
|
131
|
-
}
|
|
132
|
-
catch (e) {
|
|
133
|
-
console.error(chalk.red(e.message));
|
|
134
|
-
process.exit(1);
|
|
135
|
-
}
|
|
136
|
-
const openapiSpec = readFileSync(specPath, "utf-8");
|
|
137
|
-
if (opts.dryRun) {
|
|
138
|
-
console.log(chalk.green(`Dry run — would register apiId=${apiId ?? "new"} name=${name ?? "-"} team=${team ?? "-"} version=${version}`));
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
const client = createOrgApiClient(ctx);
|
|
142
|
-
const body = {
|
|
143
|
-
apiId,
|
|
144
|
-
name,
|
|
145
|
-
team,
|
|
146
|
-
version,
|
|
147
|
-
openapiSpec,
|
|
148
|
-
gitSha,
|
|
149
|
-
githubRepo,
|
|
150
|
-
githubBranch,
|
|
151
|
-
specFilePath: specPath.replace(cwd + "/", ""),
|
|
152
|
-
semver: false,
|
|
153
|
-
};
|
|
154
|
-
vLog(`POST ${ctx.apiUrl}/api-management/cli/v1/publish`);
|
|
155
|
-
vLog(`register payload: apiId=${apiId ?? "<new>"} name=${name ?? "-"} team=${team ?? "-"} version=${version} specFilePath=${body.specFilePath ?? "-"}`);
|
|
156
|
-
try {
|
|
157
|
-
const reg = (await client.postJson("/api-management/cli/v1/publish", body));
|
|
158
|
-
vLog(`register response: apiId=${reg.apiId ?? "-"} created=${String(reg.created ?? false)} versionCreated=${String(reg.versionCreated ?? false)}`);
|
|
159
|
-
const resolvedApiId = reg.apiId ?? "";
|
|
160
|
-
const appBase = resolvedPlatformAppUrl();
|
|
161
|
-
const specUrl = `${appBase}/apis/${resolvedApiId}`;
|
|
162
|
-
let mockUrl;
|
|
163
|
-
try {
|
|
164
|
-
const mocks = (await client.getJson("/api-management/cli/v1/mocks"));
|
|
165
|
-
const hit = mocks.find((m) => m.apiId === resolvedApiId);
|
|
166
|
-
if (hit?.mockBaseUrl) {
|
|
167
|
-
mockUrl = `${ctx.apiUrl}${hit.mockBaseUrl}`;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
catch {
|
|
171
|
-
/* optional */
|
|
172
|
-
}
|
|
173
|
-
if (format === "json") {
|
|
174
|
-
console.log(JSON.stringify({
|
|
175
|
-
apiId: resolvedApiId,
|
|
176
|
-
version,
|
|
177
|
-
created: reg.created ?? false,
|
|
178
|
-
versionCreated: reg.versionCreated ?? false,
|
|
179
|
-
specUrl,
|
|
180
|
-
mockUrl: mockUrl ?? null,
|
|
181
|
-
breakingChanges: [],
|
|
182
|
-
lintScore: null,
|
|
183
|
-
}, null, 2));
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
console.log(formatPublishText({
|
|
187
|
-
apiId: resolvedApiId,
|
|
188
|
-
version,
|
|
189
|
-
specUrl,
|
|
190
|
-
mockUrl,
|
|
191
|
-
}));
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
catch (err) {
|
|
195
|
-
const statusCode = err?.response?.statusCode;
|
|
196
|
-
if (statusCode) {
|
|
197
|
-
vLog(`register failed with HTTP ${statusCode}`);
|
|
198
|
-
}
|
|
199
|
-
if (is401(err)) {
|
|
200
|
-
console.error(chalk.red("Token invalid. Run 'spec0 auth login' to re-authenticate."));
|
|
201
|
-
process.exit(1);
|
|
202
|
-
}
|
|
203
|
-
const msg = err?.response?.body
|
|
204
|
-
?.detail ??
|
|
205
|
-
err.message ??
|
|
206
|
-
String(err);
|
|
207
|
-
console.error(chalk.red(`Register failed: ${msg}\n`));
|
|
208
|
-
console.error(chalk.yellow(registerUsageExamples()));
|
|
209
|
-
process.exit(1);
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
//# sourceMappingURL=register.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/team.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"team.d.ts","sourceRoot":"","sources":["../../src/commands/team.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QA4BpD"}
|
package/dist/commands/team.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* spec0 team list | create | invite | members
|
|
3
|
-
*/
|
|
4
|
-
import chalk from "chalk";
|
|
5
|
-
export function registerTeamCommands(program) {
|
|
6
|
-
const team = program.command("team").description("Team management");
|
|
7
|
-
team.command("list").description("List teams").action(async () => {
|
|
8
|
-
console.log(chalk.yellow("Team list not yet implemented."));
|
|
9
|
-
});
|
|
10
|
-
team
|
|
11
|
-
.command("create <name>")
|
|
12
|
-
.description("Create team")
|
|
13
|
-
.action(async (name) => {
|
|
14
|
-
console.log(chalk.yellow(`Team create ${name} not yet implemented.`));
|
|
15
|
-
});
|
|
16
|
-
team
|
|
17
|
-
.command("invite <email>")
|
|
18
|
-
.description("Invite user to team")
|
|
19
|
-
.option("--team <name>", "Team name")
|
|
20
|
-
.action(async (email, opts) => {
|
|
21
|
-
console.log(chalk.yellow("Team invite not yet implemented."));
|
|
22
|
-
});
|
|
23
|
-
team
|
|
24
|
-
.command("members <name>")
|
|
25
|
-
.description("List team members")
|
|
26
|
-
.action(async (name) => {
|
|
27
|
-
console.log(chalk.yellow(`Team members ${name} not yet implemented.`));
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=team.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/commands/team.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAEpE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,IAAI;SACD,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,IAAI,uBAAuB,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,IAAuB,EAAE,EAAE;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,IAAI,uBAAuB,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface WinspectYaml {
|
|
2
|
-
spec?: string;
|
|
3
|
-
name?: string;
|
|
4
|
-
owner?: string;
|
|
5
|
-
namespace?: string;
|
|
6
|
-
strict?: boolean;
|
|
7
|
-
checkBreaking?: boolean;
|
|
8
|
-
"auto-create-team"?: boolean;
|
|
9
|
-
"check-breaking"?: boolean;
|
|
10
|
-
}
|
|
11
|
-
export declare function loadWinspectYaml(cwd: string): WinspectYaml | null;
|
|
12
|
-
export declare function checkBreakingFromYaml(y: WinspectYaml | null): boolean;
|
|
13
|
-
export declare function strictFromYaml(y: WinspectYaml | null): boolean;
|
|
14
|
-
//# sourceMappingURL=winspect-yaml.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"winspect-yaml.d.ts","sourceRoot":"","sources":["../../src/lib/winspect-yaml.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAOjE;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAKrE;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAG9D"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import YAML from "yaml";
|
|
4
|
-
export function loadWinspectYaml(cwd) {
|
|
5
|
-
const path = join(cwd, ".winspect.yaml");
|
|
6
|
-
if (!existsSync(path))
|
|
7
|
-
return null;
|
|
8
|
-
const content = readFileSync(path, "utf-8");
|
|
9
|
-
const doc = YAML.parse(content);
|
|
10
|
-
if (!doc || typeof doc !== "object")
|
|
11
|
-
return null;
|
|
12
|
-
return doc;
|
|
13
|
-
}
|
|
14
|
-
export function checkBreakingFromYaml(y) {
|
|
15
|
-
if (!y)
|
|
16
|
-
return false;
|
|
17
|
-
if (typeof y.checkBreaking === "boolean")
|
|
18
|
-
return y.checkBreaking;
|
|
19
|
-
if (typeof y["check-breaking"] === "boolean")
|
|
20
|
-
return y["check-breaking"];
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
export function strictFromYaml(y) {
|
|
24
|
-
if (!y)
|
|
25
|
-
return false;
|
|
26
|
-
return !!y.strict;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=winspect-yaml.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"winspect-yaml.js","sourceRoot":"","sources":["../../src/lib/winspect-yaml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AAaxB,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,GAAmB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,CAAsB;IAC1D,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,IAAI,OAAO,CAAC,CAAC,aAAa,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,aAAa,CAAC;IACjE,IAAI,OAAO,CAAC,CAAC,gBAAgB,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAsB;IACnD,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACpB,CAAC"}
|