@scalar/cli 2.0.1 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -24
- package/chunks/action-37EV4UHW.js +125 -0
- package/chunks/action-4XI7XJR4.js +204 -0
- package/chunks/action-5IU77OII.js +60 -0
- package/chunks/action-B3KKREWQ.js +64 -0
- package/chunks/action-CH24QGTE.js +86 -0
- package/chunks/action-F3UX5E3M.js +522 -0
- package/chunks/action-FDB7NEOK.js +81 -0
- package/chunks/action-FIXBOJEW.js +244 -0
- package/chunks/action-G26LSVZ7.js +40 -0
- package/chunks/action-H3RTILLM.js +46 -0
- package/chunks/action-HGBBV353.js +86 -0
- package/chunks/action-IUE4IOWO.js +2142 -0
- package/chunks/action-JZLZ7ZAD.js +110 -0
- package/chunks/action-LA6KVAXQ.js +374 -0
- package/chunks/action-M7RQKBSB.js +169 -0
- package/chunks/action-MSLBC2SO.js +92 -0
- package/chunks/action-NVSZT2ZD.js +37 -0
- package/chunks/action-OGQSTRMX.js +37 -0
- package/chunks/action-PAGJ5PWC.js +60 -0
- package/chunks/action-QE2ZQQX7.js +250 -0
- package/chunks/action-QPUSPD5M.js +54 -0
- package/chunks/action-R7IMFHQ5.js +147 -0
- package/chunks/action-SH4UUXPL.js +60 -0
- package/chunks/action-SNLCIBQC.js +84 -0
- package/chunks/action-SQG3JAII.js +150 -0
- package/chunks/action-UZQJNYK4.js +18 -0
- package/chunks/action-VC4DCVST.js +68 -0
- package/chunks/action-VTVFY2MP.js +181 -0
- package/chunks/action-WFWYGY7O.js +67 -0
- package/chunks/action-XMNX5ZYT.js +197 -0
- package/chunks/agent-HCQRMHQ5.js +132 -0
- package/chunks/asyncapi-QM76O55R.js +105 -0
- package/chunks/build.action-P7FCIMYU.js +108 -0
- package/chunks/chunk-24WAOKGG.js +105 -0
- package/chunks/chunk-3L6DLIXJ.js +25530 -0
- package/chunks/chunk-3MZYUBJ6.js +49 -0
- package/chunks/chunk-3ZJYGGAA.js +30 -0
- package/chunks/chunk-4NHMAG6F.js +21 -0
- package/chunks/chunk-4ORL4MST.js +16 -0
- package/chunks/chunk-4ZDQXWBT.js +26 -0
- package/chunks/chunk-6ZMT63IV.js +19 -0
- package/chunks/chunk-7AGLC7WV.js +107 -0
- package/chunks/chunk-AEFPCC4U.js +16 -0
- package/chunks/chunk-AO3F5XWR.js +3147 -0
- package/chunks/chunk-B2MHTD3R.js +90 -0
- package/chunks/chunk-CISTON3A.js +153 -0
- package/chunks/chunk-COBPBRQF.js +25 -0
- package/chunks/chunk-F467BYYR.js +568 -0
- package/chunks/chunk-GSGZHE26.js +352 -0
- package/chunks/chunk-HCPN3KNF.js +637 -0
- package/chunks/chunk-HPL3ZZ2P.js +1726 -0
- package/chunks/chunk-IKT5F47M.js +17344 -0
- package/chunks/chunk-JFIXNSPP.js +26 -0
- package/chunks/chunk-K4DTP5TV.js +32 -0
- package/chunks/chunk-K74E42RV.js +7311 -0
- package/chunks/chunk-KHDYYVYF.js +16 -0
- package/chunks/chunk-LFU5ZUAP.js +350 -0
- package/chunks/chunk-M37TP6U2.js +445 -0
- package/chunks/chunk-OQKDBLOZ.js +741 -0
- package/chunks/chunk-P7H7GY5A.js +14 -0
- package/chunks/chunk-PBXZN65A.js +63911 -0
- package/chunks/chunk-PT5TI77I.js +34 -0
- package/chunks/chunk-Q7DOQHZN.js +404 -0
- package/chunks/chunk-T5HJUAWB.js +242 -0
- package/chunks/chunk-T7B6WNZC.js +18 -0
- package/chunks/chunk-UGGNHILG.js +38 -0
- package/chunks/chunk-VNYE4R7N.js +499 -0
- package/chunks/chunk-X5T526CE.js +23 -0
- package/chunks/chunk-XCSR4RIT.js +210 -0
- package/chunks/chunk-Z2KMGFE6.js +295 -0
- package/chunks/create.action-HDD2WUON.js +108 -0
- package/chunks/delete.action-7GOZY7ID.js +88 -0
- package/chunks/delete.action-VE66JFDS.js +96 -0
- package/chunks/get.action-2745EB4N.js +86 -0
- package/chunks/list.action-3VTXQJRA.js +116 -0
- package/chunks/list.action-4QDCZLSZ.js +95 -0
- package/chunks/publish.action-ULQLZKWU.js +190 -0
- package/chunks/update.action-6QEFP7NA.js +95 -0
- package/chunks/update.action-OROQSP2S.js +101 -0
- package/docs.html +352 -250
- package/index.js +664 -99064
- package/package.json +17 -11
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { createRequire as $$cR } from "node:module"; const require = $$cR(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
apiService
|
|
4
|
+
} from "./chunk-AO3F5XWR.js";
|
|
5
|
+
import {
|
|
6
|
+
BaseCollections
|
|
7
|
+
} from "./chunk-F467BYYR.js";
|
|
8
|
+
import {
|
|
9
|
+
getDatabaseClient
|
|
10
|
+
} from "./chunk-Z2KMGFE6.js";
|
|
11
|
+
import "./chunk-HCPN3KNF.js";
|
|
12
|
+
import "./chunk-B2MHTD3R.js";
|
|
13
|
+
import {
|
|
14
|
+
sdkSchema
|
|
15
|
+
} from "./chunk-3L6DLIXJ.js";
|
|
16
|
+
import "./chunk-P7H7GY5A.js";
|
|
17
|
+
import "./chunk-HPL3ZZ2P.js";
|
|
18
|
+
import {
|
|
19
|
+
getAuthData
|
|
20
|
+
} from "./chunk-M37TP6U2.js";
|
|
21
|
+
import "./chunk-4ZDQXWBT.js";
|
|
22
|
+
import {
|
|
23
|
+
teamSchema
|
|
24
|
+
} from "./chunk-VNYE4R7N.js";
|
|
25
|
+
import "./chunk-OQKDBLOZ.js";
|
|
26
|
+
import "./chunk-K74E42RV.js";
|
|
27
|
+
import "./chunk-CISTON3A.js";
|
|
28
|
+
import "./chunk-Q7DOQHZN.js";
|
|
29
|
+
import "./chunk-4ORL4MST.js";
|
|
30
|
+
import {
|
|
31
|
+
output
|
|
32
|
+
} from "./chunk-T5HJUAWB.js";
|
|
33
|
+
import "./chunk-GSGZHE26.js";
|
|
34
|
+
import {
|
|
35
|
+
external_exports,
|
|
36
|
+
namespaceSchema,
|
|
37
|
+
slugSchema
|
|
38
|
+
} from "./chunk-IKT5F47M.js";
|
|
39
|
+
import "./chunk-3MZYUBJ6.js";
|
|
40
|
+
|
|
41
|
+
// src/domains/sdk/delete.action.ts
|
|
42
|
+
import { select } from "@clack/prompts";
|
|
43
|
+
async function deleteAction(opts) {
|
|
44
|
+
const { error, data } = external_exports.object({
|
|
45
|
+
slug: slugSchema.optional(),
|
|
46
|
+
namespace: namespaceSchema.optional()
|
|
47
|
+
}).safeParse(opts);
|
|
48
|
+
if (error)
|
|
49
|
+
return output.error().title("Invalid input").message(error.issues[0].message).exit("error");
|
|
50
|
+
const auth = await getAuthData();
|
|
51
|
+
auth.addEventListener((state) => Object.assign(auth, state));
|
|
52
|
+
const db = await getDatabaseClient();
|
|
53
|
+
const client = await apiService();
|
|
54
|
+
const team = await db.getOne({
|
|
55
|
+
collectionPath: BaseCollections.Teams,
|
|
56
|
+
query: {
|
|
57
|
+
uid: auth.teamUid
|
|
58
|
+
},
|
|
59
|
+
schema: teamSchema
|
|
60
|
+
});
|
|
61
|
+
if (team.error)
|
|
62
|
+
return output.error().title("An error occurred when fetching your team.").message(team.message).exit("error");
|
|
63
|
+
const namespace = data.namespace || team.data.namespaces.at(0);
|
|
64
|
+
if (!namespace) {
|
|
65
|
+
return output.error().title("Missing namespace").message(
|
|
66
|
+
"Could not find a valid namespace for your SDK. Please specify a namespace or contact support."
|
|
67
|
+
).exit("error");
|
|
68
|
+
}
|
|
69
|
+
const sdks = await db.getMany({
|
|
70
|
+
collectionPath: BaseCollections.Sdks(team.data.uid),
|
|
71
|
+
query: {
|
|
72
|
+
namespace
|
|
73
|
+
},
|
|
74
|
+
schema: sdkSchema.array()
|
|
75
|
+
});
|
|
76
|
+
if (sdks.error) return output.error().title(sdks.message).exit("error");
|
|
77
|
+
const sdkUid = sdks.data.find((sdk) => sdk.slug === data.slug)?.uid || await select({
|
|
78
|
+
message: "Please select an SDK to delete",
|
|
79
|
+
options: sdks.data.map((sdk) => ({
|
|
80
|
+
value: sdk.uid,
|
|
81
|
+
label: sdk.slug
|
|
82
|
+
}))
|
|
83
|
+
});
|
|
84
|
+
if (!sdkUid) {
|
|
85
|
+
return output.error().title("No SDK found").message("Please provide a valid SDK slug").exit("error");
|
|
86
|
+
}
|
|
87
|
+
const logger = output.info().loader("Deleting the SDK");
|
|
88
|
+
const response = await client.sdks.delete(sdkUid);
|
|
89
|
+
if (response.error) {
|
|
90
|
+
return output.error().title("Something went wrong").message(response.message).exit("error");
|
|
91
|
+
}
|
|
92
|
+
logger.update("loader", 0, { content: "SDK deleted successfully!" }).exit("success");
|
|
93
|
+
}
|
|
94
|
+
export {
|
|
95
|
+
deleteAction
|
|
96
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { createRequire as $$cR } from "node:module"; const require = $$cR(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
fetchFromRegistry
|
|
4
|
+
} from "./chunk-UGGNHILG.js";
|
|
5
|
+
import "./chunk-COBPBRQF.js";
|
|
6
|
+
import {
|
|
7
|
+
registry
|
|
8
|
+
} from "./chunk-XCSR4RIT.js";
|
|
9
|
+
import {
|
|
10
|
+
getAuthData
|
|
11
|
+
} from "./chunk-M37TP6U2.js";
|
|
12
|
+
import "./chunk-4ZDQXWBT.js";
|
|
13
|
+
import "./chunk-VNYE4R7N.js";
|
|
14
|
+
import "./chunk-OQKDBLOZ.js";
|
|
15
|
+
import "./chunk-CISTON3A.js";
|
|
16
|
+
import "./chunk-Q7DOQHZN.js";
|
|
17
|
+
import "./chunk-4ORL4MST.js";
|
|
18
|
+
import {
|
|
19
|
+
output
|
|
20
|
+
} from "./chunk-T5HJUAWB.js";
|
|
21
|
+
import "./chunk-GSGZHE26.js";
|
|
22
|
+
import {
|
|
23
|
+
docVersionSchema,
|
|
24
|
+
external_exports
|
|
25
|
+
} from "./chunk-IKT5F47M.js";
|
|
26
|
+
import "./chunk-3MZYUBJ6.js";
|
|
27
|
+
|
|
28
|
+
// src/domains/schema/get.action.ts
|
|
29
|
+
import fs from "node:fs/promises";
|
|
30
|
+
var versionSchema = external_exports.union([docVersionSchema, external_exports.literal("latest")]);
|
|
31
|
+
async function getAction(namespace, slug, args) {
|
|
32
|
+
if (!namespace) {
|
|
33
|
+
output.error().title("Invalid input").message("Please provide namespace of the schema").exit("error");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (!slug) {
|
|
37
|
+
output.error().title("Invalid input").message("Please provide slug of the schema").exit("error");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const result = external_exports.object({
|
|
41
|
+
version: versionSchema,
|
|
42
|
+
format: external_exports.enum(["json", "yaml"]),
|
|
43
|
+
output: external_exports.string().min(1).optional()
|
|
44
|
+
}).safeParse({
|
|
45
|
+
version: args.version ?? "latest",
|
|
46
|
+
format: args.format,
|
|
47
|
+
output: args.output
|
|
48
|
+
});
|
|
49
|
+
if (result.error) {
|
|
50
|
+
output.error().title("Invalid input").message(result.error.issues[0].message).exit("error");
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const auth = await getAuthData();
|
|
54
|
+
auth.addEventListener((state) => Object.assign(auth, state));
|
|
55
|
+
const fetchResult = await fetchFromRegistry(
|
|
56
|
+
registry(namespace).schemas(slug).url({
|
|
57
|
+
version: result.data.version,
|
|
58
|
+
format: result.data.format
|
|
59
|
+
}),
|
|
60
|
+
auth.accessToken
|
|
61
|
+
);
|
|
62
|
+
if (fetchResult.error) {
|
|
63
|
+
output.error().title("Unable to download schema").message(fetchResult.message).exit("error");
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const document = fetchResult.data;
|
|
67
|
+
const withTrailingNewline = document.endsWith("\n") ? document : `${document}
|
|
68
|
+
`;
|
|
69
|
+
if (result.data.output) {
|
|
70
|
+
try {
|
|
71
|
+
await fs.writeFile(result.data.output, withTrailingNewline, "utf8");
|
|
72
|
+
} catch (error) {
|
|
73
|
+
const message = error instanceof Error && error.message.length > 0 ? error.message : `Could not write to ${result.data.output}.`;
|
|
74
|
+
output.error().title("Unable to write schema to file").message(message).exit("error");
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
output.info().line(
|
|
78
|
+
`Downloaded ${namespace}/${slug}@${result.data.version} (${result.data.format})`
|
|
79
|
+
).line(`Written to ${result.data.output}`).print();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
process.stdout.write(withTrailingNewline);
|
|
83
|
+
}
|
|
84
|
+
export {
|
|
85
|
+
getAction
|
|
86
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { createRequire as $$cR } from "node:module"; const require = $$cR(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
formatAbsoluteTime
|
|
4
|
+
} from "./chunk-AEFPCC4U.js";
|
|
5
|
+
import {
|
|
6
|
+
BaseCollections
|
|
7
|
+
} from "./chunk-F467BYYR.js";
|
|
8
|
+
import {
|
|
9
|
+
getDatabaseClient
|
|
10
|
+
} from "./chunk-Z2KMGFE6.js";
|
|
11
|
+
import "./chunk-HCPN3KNF.js";
|
|
12
|
+
import "./chunk-B2MHTD3R.js";
|
|
13
|
+
import {
|
|
14
|
+
sdkBuildSchema,
|
|
15
|
+
sdkSchema
|
|
16
|
+
} from "./chunk-3L6DLIXJ.js";
|
|
17
|
+
import "./chunk-P7H7GY5A.js";
|
|
18
|
+
import {
|
|
19
|
+
getAuthData
|
|
20
|
+
} from "./chunk-M37TP6U2.js";
|
|
21
|
+
import "./chunk-4ZDQXWBT.js";
|
|
22
|
+
import {
|
|
23
|
+
teamSchema
|
|
24
|
+
} from "./chunk-VNYE4R7N.js";
|
|
25
|
+
import "./chunk-OQKDBLOZ.js";
|
|
26
|
+
import "./chunk-K74E42RV.js";
|
|
27
|
+
import "./chunk-CISTON3A.js";
|
|
28
|
+
import "./chunk-Q7DOQHZN.js";
|
|
29
|
+
import "./chunk-4ORL4MST.js";
|
|
30
|
+
import {
|
|
31
|
+
output,
|
|
32
|
+
printTable
|
|
33
|
+
} from "./chunk-T5HJUAWB.js";
|
|
34
|
+
import "./chunk-GSGZHE26.js";
|
|
35
|
+
import {
|
|
36
|
+
external_exports,
|
|
37
|
+
namespaceSchema
|
|
38
|
+
} from "./chunk-IKT5F47M.js";
|
|
39
|
+
import "./chunk-3MZYUBJ6.js";
|
|
40
|
+
|
|
41
|
+
// src/domains/sdk/list.action.ts
|
|
42
|
+
import as from "ansis";
|
|
43
|
+
async function listAction(args) {
|
|
44
|
+
const { error, data } = external_exports.object({
|
|
45
|
+
namespace: namespaceSchema.optional()
|
|
46
|
+
}).safeParse({
|
|
47
|
+
namespace: args.namespace
|
|
48
|
+
});
|
|
49
|
+
if (error)
|
|
50
|
+
return output.error().title("Invalid input").message(error.issues[0].message).exit("error");
|
|
51
|
+
const auth = await getAuthData();
|
|
52
|
+
auth.addEventListener((state) => Object.assign(auth, state));
|
|
53
|
+
const client = await getDatabaseClient();
|
|
54
|
+
const team = await client.getOne({
|
|
55
|
+
collectionPath: BaseCollections.Teams,
|
|
56
|
+
query: {
|
|
57
|
+
uid: auth.teamUid
|
|
58
|
+
},
|
|
59
|
+
schema: teamSchema
|
|
60
|
+
});
|
|
61
|
+
if (team.error)
|
|
62
|
+
return output.error().title("An error occurred when fetching your team.").message(team.message).exit("error");
|
|
63
|
+
const namespace = data.namespace || team.data.namespaces.at(0);
|
|
64
|
+
if (!namespace) {
|
|
65
|
+
return output.error().title("Missing namespace").message(
|
|
66
|
+
"Could not find a valid namespace for your API. Please specify a namespace or contact support."
|
|
67
|
+
).exit("error");
|
|
68
|
+
}
|
|
69
|
+
const sdks = await client.getMany({
|
|
70
|
+
collectionPath: BaseCollections.Sdks(team.data.uid),
|
|
71
|
+
query: {
|
|
72
|
+
namespace
|
|
73
|
+
},
|
|
74
|
+
schema: sdkSchema.array()
|
|
75
|
+
});
|
|
76
|
+
if (sdks.error) return output.error().title(sdks.message).exit("error");
|
|
77
|
+
if (sdks.data.length === 0) {
|
|
78
|
+
output.info().title(`No SDKs found for namespace "${namespace}".`).print();
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const builds = await client.getMany({
|
|
82
|
+
collectionPath: BaseCollections.SdkBuilds(team.data.uid),
|
|
83
|
+
query: {},
|
|
84
|
+
schema: sdkBuildSchema.array()
|
|
85
|
+
});
|
|
86
|
+
const lastBuiltAt = /* @__PURE__ */ new Map();
|
|
87
|
+
if (!builds.error) {
|
|
88
|
+
for (const build of builds.data) {
|
|
89
|
+
if (build.createdAt > (lastBuiltAt.get(build.sdk.uid) ?? 0)) {
|
|
90
|
+
lastBuiltAt.set(build.sdk.uid, build.createdAt);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
printTable(
|
|
95
|
+
[
|
|
96
|
+
{ name: "title", title: "Title", alignment: "left", maxLen: 40 },
|
|
97
|
+
{ name: "name", title: "Name", alignment: "left", color: "blue" },
|
|
98
|
+
{ name: "version", title: "Version", alignment: "left" },
|
|
99
|
+
{ name: "access", title: "Access", alignment: "left" },
|
|
100
|
+
{ name: "lastBuild", title: "Last Build", alignment: "left" }
|
|
101
|
+
],
|
|
102
|
+
sdks.data.map((sdk) => {
|
|
103
|
+
const builtAt = lastBuiltAt.get(sdk.uid);
|
|
104
|
+
return {
|
|
105
|
+
title: sdk.title || as.dim("\u2014"),
|
|
106
|
+
name: `@${sdk.namespace}/${sdk.slug}`,
|
|
107
|
+
version: sdk.currentVersion,
|
|
108
|
+
access: sdk.isPrivate ? as.green("Private") : as.yellow("Public"),
|
|
109
|
+
lastBuild: builtAt ? as.dim(formatAbsoluteTime(builtAt * 1e3)) : as.dim("Never")
|
|
110
|
+
};
|
|
111
|
+
})
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
listAction
|
|
116
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { createRequire as $$cR } from "node:module"; const require = $$cR(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
apiService
|
|
4
|
+
} from "./chunk-AO3F5XWR.js";
|
|
5
|
+
import {
|
|
6
|
+
BaseCollections
|
|
7
|
+
} from "./chunk-F467BYYR.js";
|
|
8
|
+
import {
|
|
9
|
+
getDatabaseClient
|
|
10
|
+
} from "./chunk-Z2KMGFE6.js";
|
|
11
|
+
import "./chunk-HCPN3KNF.js";
|
|
12
|
+
import "./chunk-B2MHTD3R.js";
|
|
13
|
+
import "./chunk-3L6DLIXJ.js";
|
|
14
|
+
import "./chunk-P7H7GY5A.js";
|
|
15
|
+
import "./chunk-HPL3ZZ2P.js";
|
|
16
|
+
import {
|
|
17
|
+
getAuthData
|
|
18
|
+
} from "./chunk-M37TP6U2.js";
|
|
19
|
+
import "./chunk-4ZDQXWBT.js";
|
|
20
|
+
import {
|
|
21
|
+
teamSchema
|
|
22
|
+
} from "./chunk-VNYE4R7N.js";
|
|
23
|
+
import "./chunk-OQKDBLOZ.js";
|
|
24
|
+
import "./chunk-K74E42RV.js";
|
|
25
|
+
import "./chunk-CISTON3A.js";
|
|
26
|
+
import "./chunk-Q7DOQHZN.js";
|
|
27
|
+
import "./chunk-4ORL4MST.js";
|
|
28
|
+
import {
|
|
29
|
+
output,
|
|
30
|
+
printTable
|
|
31
|
+
} from "./chunk-T5HJUAWB.js";
|
|
32
|
+
import "./chunk-GSGZHE26.js";
|
|
33
|
+
import {
|
|
34
|
+
compareVersionsDesc,
|
|
35
|
+
external_exports,
|
|
36
|
+
namespaceSchema
|
|
37
|
+
} from "./chunk-IKT5F47M.js";
|
|
38
|
+
import "./chunk-3MZYUBJ6.js";
|
|
39
|
+
|
|
40
|
+
// src/domains/schema/list.action.ts
|
|
41
|
+
import as from "ansis";
|
|
42
|
+
async function listAction(args) {
|
|
43
|
+
const { error, data } = external_exports.object({
|
|
44
|
+
namespace: namespaceSchema.optional()
|
|
45
|
+
}).safeParse({
|
|
46
|
+
namespace: args.namespace
|
|
47
|
+
});
|
|
48
|
+
if (error)
|
|
49
|
+
return output.error().title("Invalid input").message(error.issues[0].message).exit("error");
|
|
50
|
+
const auth = await getAuthData();
|
|
51
|
+
auth.addEventListener((state) => Object.assign(auth, state));
|
|
52
|
+
const client = await getDatabaseClient();
|
|
53
|
+
const team = await client.getOne({
|
|
54
|
+
collectionPath: BaseCollections.Teams,
|
|
55
|
+
query: {
|
|
56
|
+
uid: auth.teamUid
|
|
57
|
+
},
|
|
58
|
+
schema: teamSchema
|
|
59
|
+
});
|
|
60
|
+
if (team.error)
|
|
61
|
+
return output.error().title("An error occurred when fetching your team.").message(team.message).exit("error");
|
|
62
|
+
const namespace = data.namespace || team.data.namespaces.at(0);
|
|
63
|
+
if (!namespace) {
|
|
64
|
+
return output.error().title("Missing namespace").message(
|
|
65
|
+
"Could not find a valid namespace for your API. Please specify a namespace or contact support."
|
|
66
|
+
).exit("error");
|
|
67
|
+
}
|
|
68
|
+
const apiClient = await apiService();
|
|
69
|
+
const schemas = await apiClient.managedSchemas.getSchemas(namespace);
|
|
70
|
+
if (schemas.error) return output.error().title(schemas.message).exit("error");
|
|
71
|
+
if (schemas.data.length === 0) {
|
|
72
|
+
output.info().title(`No schemas found for namespace "${namespace}".`).print();
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
printTable(
|
|
76
|
+
[
|
|
77
|
+
{ name: "title", title: "Title", alignment: "left", maxLen: 40 },
|
|
78
|
+
{ name: "name", title: "Name", alignment: "left", color: "blue" },
|
|
79
|
+
{ name: "version", title: "Version", alignment: "left" },
|
|
80
|
+
{ name: "access", title: "Access", alignment: "left" }
|
|
81
|
+
],
|
|
82
|
+
schemas.data.map((schema) => {
|
|
83
|
+
const latestVersion = [...schema.versions].sort((a, b) => compareVersionsDesc(a.version, b.version)).at(0);
|
|
84
|
+
return {
|
|
85
|
+
title: schema.title || as.dim("\u2014"),
|
|
86
|
+
name: `@${schema.namespace}/${schema.slug}`,
|
|
87
|
+
version: latestVersion?.version ?? as.dim("\u2014"),
|
|
88
|
+
access: schema.isPrivate ? as.green("Private") : as.yellow("Public")
|
|
89
|
+
};
|
|
90
|
+
})
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
export {
|
|
94
|
+
listAction
|
|
95
|
+
};
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { createRequire as $$cR } from "node:module"; const require = $$cR(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
dashboardUrl,
|
|
4
|
+
registryUrl
|
|
5
|
+
} from "./chunk-COBPBRQF.js";
|
|
6
|
+
import {
|
|
7
|
+
registry
|
|
8
|
+
} from "./chunk-XCSR4RIT.js";
|
|
9
|
+
import {
|
|
10
|
+
getFileOrUrl,
|
|
11
|
+
isDocument,
|
|
12
|
+
safeNormalize
|
|
13
|
+
} from "./chunk-24WAOKGG.js";
|
|
14
|
+
import {
|
|
15
|
+
DEFAULT_FETCH_CONCURRENCY
|
|
16
|
+
} from "./chunk-K4DTP5TV.js";
|
|
17
|
+
import {
|
|
18
|
+
apiService
|
|
19
|
+
} from "./chunk-AO3F5XWR.js";
|
|
20
|
+
import {
|
|
21
|
+
BaseCollections
|
|
22
|
+
} from "./chunk-F467BYYR.js";
|
|
23
|
+
import {
|
|
24
|
+
getDatabaseClient
|
|
25
|
+
} from "./chunk-Z2KMGFE6.js";
|
|
26
|
+
import "./chunk-HCPN3KNF.js";
|
|
27
|
+
import "./chunk-B2MHTD3R.js";
|
|
28
|
+
import "./chunk-3L6DLIXJ.js";
|
|
29
|
+
import "./chunk-P7H7GY5A.js";
|
|
30
|
+
import "./chunk-HPL3ZZ2P.js";
|
|
31
|
+
import {
|
|
32
|
+
getAuthData
|
|
33
|
+
} from "./chunk-M37TP6U2.js";
|
|
34
|
+
import "./chunk-4ZDQXWBT.js";
|
|
35
|
+
import {
|
|
36
|
+
teamSchema
|
|
37
|
+
} from "./chunk-VNYE4R7N.js";
|
|
38
|
+
import "./chunk-OQKDBLOZ.js";
|
|
39
|
+
import "./chunk-K74E42RV.js";
|
|
40
|
+
import {
|
|
41
|
+
RegistryAsset
|
|
42
|
+
} from "./chunk-CISTON3A.js";
|
|
43
|
+
import "./chunk-Q7DOQHZN.js";
|
|
44
|
+
import {
|
|
45
|
+
isUrl
|
|
46
|
+
} from "./chunk-4ORL4MST.js";
|
|
47
|
+
import {
|
|
48
|
+
output
|
|
49
|
+
} from "./chunk-T5HJUAWB.js";
|
|
50
|
+
import "./chunk-GSGZHE26.js";
|
|
51
|
+
import {
|
|
52
|
+
docVersionSchema,
|
|
53
|
+
external_exports,
|
|
54
|
+
namespaceSchema,
|
|
55
|
+
slugSchema
|
|
56
|
+
} from "./chunk-IKT5F47M.js";
|
|
57
|
+
import "./chunk-3MZYUBJ6.js";
|
|
58
|
+
|
|
59
|
+
// src/domains/schema/publish.action.ts
|
|
60
|
+
import { text } from "@clack/prompts";
|
|
61
|
+
import as from "ansis";
|
|
62
|
+
import { bundle } from "@scalar/json-magic/bundle";
|
|
63
|
+
import { fetchUrls, readFiles } from "@scalar/json-magic/bundle/plugins/node";
|
|
64
|
+
async function publishAction(file, args) {
|
|
65
|
+
const { error, data } = external_exports.object({
|
|
66
|
+
slug: slugSchema.optional(),
|
|
67
|
+
file: external_exports.string().min(1, "Please provide a valid file path or URL for your document.").optional(),
|
|
68
|
+
title: external_exports.string().max(50).optional(),
|
|
69
|
+
namespace: namespaceSchema.optional(),
|
|
70
|
+
private: external_exports.boolean().optional(),
|
|
71
|
+
version: docVersionSchema.optional(),
|
|
72
|
+
force: external_exports.coerce.boolean(),
|
|
73
|
+
bundle: external_exports.coerce.boolean().optional(),
|
|
74
|
+
fetchLimit: external_exports.coerce.number().optional(),
|
|
75
|
+
urlMap: external_exports.coerce.boolean().default(false),
|
|
76
|
+
treeShake: external_exports.coerce.boolean().default(false)
|
|
77
|
+
}).safeParse({
|
|
78
|
+
file,
|
|
79
|
+
title: args.title,
|
|
80
|
+
slug: args.slug,
|
|
81
|
+
namespace: args.namespace,
|
|
82
|
+
private: args.private,
|
|
83
|
+
version: args.version,
|
|
84
|
+
force: args.force
|
|
85
|
+
});
|
|
86
|
+
if (error)
|
|
87
|
+
return output.error().title("Invalid input").message(error.issues[0].message).exit("error");
|
|
88
|
+
const auth = await getAuthData();
|
|
89
|
+
auth.addEventListener((state) => Object.assign(auth, state));
|
|
90
|
+
const db = await getDatabaseClient();
|
|
91
|
+
const team = await db.getOne({
|
|
92
|
+
collectionPath: BaseCollections.Teams,
|
|
93
|
+
query: {
|
|
94
|
+
uid: auth.teamUid
|
|
95
|
+
},
|
|
96
|
+
schema: teamSchema
|
|
97
|
+
});
|
|
98
|
+
if (team.error)
|
|
99
|
+
return output.error().title("An error occurred when fetching your team.").message(team.message).exit("error");
|
|
100
|
+
const namespace = data.namespace || team.data.namespaces.at(0);
|
|
101
|
+
if (!namespace) {
|
|
102
|
+
return output.error().title("Missing namespace").message(
|
|
103
|
+
"Could not find a valid namespace for your API. Please specify a namespace or contact support."
|
|
104
|
+
).exit("error");
|
|
105
|
+
}
|
|
106
|
+
const client = await apiService();
|
|
107
|
+
const namespaceSchemaRes = await client.managedSchemas.getSchemas(namespace);
|
|
108
|
+
if (namespaceSchemaRes.error)
|
|
109
|
+
return output.error().title(namespaceSchemaRes.message).exit("error");
|
|
110
|
+
const apiFile = data.file || (await text({
|
|
111
|
+
message: "Please enter a file path or URL for your document",
|
|
112
|
+
placeholder: "./api.yaml",
|
|
113
|
+
validate(value) {
|
|
114
|
+
if (value.length === 0) return "File path or URL is required!";
|
|
115
|
+
}
|
|
116
|
+
})).toString();
|
|
117
|
+
const content = await getFileOrUrl(apiFile);
|
|
118
|
+
const result = safeNormalize(content);
|
|
119
|
+
if (!isDocument(result)) {
|
|
120
|
+
return output.error().title("Invalid file").message(
|
|
121
|
+
isUrl(apiFile) ? "Could not fetch or parse the document from the URL." : "Could not read or parse the document file."
|
|
122
|
+
).exit("error");
|
|
123
|
+
}
|
|
124
|
+
const slug = data.slug || (await text({
|
|
125
|
+
message: "Please provide a slug identifier for your schema",
|
|
126
|
+
validate(value) {
|
|
127
|
+
if (value.length === 0) return "Slug is required.";
|
|
128
|
+
if (slugSchema.safeParse(value)?.error)
|
|
129
|
+
return "Please enter a valid slug (e.g. my-schema)";
|
|
130
|
+
}
|
|
131
|
+
})).toString();
|
|
132
|
+
const matchingSchema = namespaceSchemaRes.data.find(
|
|
133
|
+
(schema2) => schema2.slug === slug
|
|
134
|
+
);
|
|
135
|
+
const documentTitle = result?.info?.title;
|
|
136
|
+
const providedTitle = data.title ?? documentTitle;
|
|
137
|
+
const title = matchingSchema || providedTitle ? providedTitle : (await text({
|
|
138
|
+
message: "Please provide a title for your schema",
|
|
139
|
+
validate(value) {
|
|
140
|
+
if (value.length === 0) return "Title is required.";
|
|
141
|
+
}
|
|
142
|
+
})).toString();
|
|
143
|
+
const version = data.version || (await text({
|
|
144
|
+
message: "What is the version of your document (e.g. 0.1.0)?",
|
|
145
|
+
validate(value) {
|
|
146
|
+
if (value.length === 0) return "Version is required.";
|
|
147
|
+
if (docVersionSchema.safeParse(value)?.error)
|
|
148
|
+
return "Version must be a non-empty string";
|
|
149
|
+
}
|
|
150
|
+
})).toString();
|
|
151
|
+
const logger = output.info().line().loader(`Publishing ${slug} to Scalar registry...`);
|
|
152
|
+
const bundlingPlugins = [readFiles()];
|
|
153
|
+
if (data.bundle) {
|
|
154
|
+
bundlingPlugins.push(
|
|
155
|
+
fetchUrls({
|
|
156
|
+
limit: data.fetchLimit ?? DEFAULT_FETCH_CONCURRENCY
|
|
157
|
+
})
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
const bundledDocument = await bundle(result, {
|
|
161
|
+
plugins: bundlingPlugins,
|
|
162
|
+
treeShake: data.treeShake,
|
|
163
|
+
urlMap: data.urlMap
|
|
164
|
+
});
|
|
165
|
+
const document = JSON.stringify(bundledDocument);
|
|
166
|
+
const publishRes = matchingSchema ? await client.managedSchemas.createVersion(namespace, slug, {
|
|
167
|
+
document,
|
|
168
|
+
version,
|
|
169
|
+
force: data.force
|
|
170
|
+
}) : await client.managedSchemas.create(namespace, {
|
|
171
|
+
title: title || "Untitled",
|
|
172
|
+
version,
|
|
173
|
+
slug,
|
|
174
|
+
isPrivate: data.private,
|
|
175
|
+
document
|
|
176
|
+
});
|
|
177
|
+
if (publishRes.error)
|
|
178
|
+
return output.error().title(publishRes.message).exit("error");
|
|
179
|
+
const schema = registry(namespace).schemas(slug);
|
|
180
|
+
const schemaUrl = dashboardUrl(
|
|
181
|
+
RegistryAsset.Schemas,
|
|
182
|
+
matchingSchema?.uid ?? publishRes.data.uid
|
|
183
|
+
);
|
|
184
|
+
logger.update("loader", 0, {
|
|
185
|
+
content: `Successfully published v${version} for ${slug}.`
|
|
186
|
+
}).line().line(`${as.green("\u279C")} ${as.white.bold("View in dashboard:")}`).line(as.cyan(schemaUrl)).line().line(`${as.green("\u279C")} ${as.white.bold("Registry Preview:")}`).line(as.cyan(registryUrl(schema.url({ version })))).line().line(`${as.green("\u279C")} ${as.white.bold("Registry YAML:")}`).line(as.cyan(registryUrl(schema.url({ version, format: "yaml" })))).line().line(`${as.green("\u279C")} ${as.white.bold("Registry JSON:")}`).line(as.cyan(registryUrl(schema.url({ version, format: "json" })))).print();
|
|
187
|
+
}
|
|
188
|
+
export {
|
|
189
|
+
publishAction
|
|
190
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { createRequire as $$cR } from "node:module"; const require = $$cR(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
apiService
|
|
4
|
+
} from "./chunk-AO3F5XWR.js";
|
|
5
|
+
import {
|
|
6
|
+
BaseCollections
|
|
7
|
+
} from "./chunk-F467BYYR.js";
|
|
8
|
+
import {
|
|
9
|
+
getDatabaseClient
|
|
10
|
+
} from "./chunk-Z2KMGFE6.js";
|
|
11
|
+
import "./chunk-HCPN3KNF.js";
|
|
12
|
+
import "./chunk-B2MHTD3R.js";
|
|
13
|
+
import "./chunk-3L6DLIXJ.js";
|
|
14
|
+
import "./chunk-P7H7GY5A.js";
|
|
15
|
+
import "./chunk-HPL3ZZ2P.js";
|
|
16
|
+
import {
|
|
17
|
+
getAuthData
|
|
18
|
+
} from "./chunk-M37TP6U2.js";
|
|
19
|
+
import "./chunk-4ZDQXWBT.js";
|
|
20
|
+
import {
|
|
21
|
+
teamSchema
|
|
22
|
+
} from "./chunk-VNYE4R7N.js";
|
|
23
|
+
import "./chunk-OQKDBLOZ.js";
|
|
24
|
+
import "./chunk-K74E42RV.js";
|
|
25
|
+
import "./chunk-CISTON3A.js";
|
|
26
|
+
import "./chunk-Q7DOQHZN.js";
|
|
27
|
+
import "./chunk-4ORL4MST.js";
|
|
28
|
+
import {
|
|
29
|
+
output
|
|
30
|
+
} from "./chunk-T5HJUAWB.js";
|
|
31
|
+
import "./chunk-GSGZHE26.js";
|
|
32
|
+
import {
|
|
33
|
+
external_exports,
|
|
34
|
+
namespaceSchema,
|
|
35
|
+
slugSchema
|
|
36
|
+
} from "./chunk-IKT5F47M.js";
|
|
37
|
+
import "./chunk-3MZYUBJ6.js";
|
|
38
|
+
|
|
39
|
+
// src/domains/schema/update.action.ts
|
|
40
|
+
import { select } from "@clack/prompts";
|
|
41
|
+
async function updateAction(opts) {
|
|
42
|
+
const { error, data } = external_exports.object({
|
|
43
|
+
slug: slugSchema.optional(),
|
|
44
|
+
namespace: namespaceSchema.optional(),
|
|
45
|
+
title: external_exports.string().max(50).optional(),
|
|
46
|
+
description: external_exports.string().optional(),
|
|
47
|
+
isPrivate: external_exports.boolean().optional()
|
|
48
|
+
}).safeParse(opts);
|
|
49
|
+
if (error)
|
|
50
|
+
return output.error().title("Invalid input").message(error.issues[0].message).exit("error");
|
|
51
|
+
const auth = await getAuthData();
|
|
52
|
+
auth.addEventListener((state) => Object.assign(auth, state));
|
|
53
|
+
const db = await getDatabaseClient();
|
|
54
|
+
const client = await apiService();
|
|
55
|
+
const team = await db.getOne({
|
|
56
|
+
collectionPath: BaseCollections.Teams,
|
|
57
|
+
query: {
|
|
58
|
+
uid: auth.teamUid
|
|
59
|
+
},
|
|
60
|
+
schema: teamSchema
|
|
61
|
+
});
|
|
62
|
+
if (team.error)
|
|
63
|
+
return output.error().title("An error occurred when fetching your team.").message(team.message).exit("error");
|
|
64
|
+
const namespace = data.namespace || team.data.namespaces.at(0);
|
|
65
|
+
if (!namespace) {
|
|
66
|
+
return output.error().title("Missing namespace").message(
|
|
67
|
+
"Could not find a valid namespace for your schema. Please specify a namespace or contact support."
|
|
68
|
+
).exit("error");
|
|
69
|
+
}
|
|
70
|
+
const schemas = await client.managedSchemas.getSchemas(namespace);
|
|
71
|
+
if (schemas.error) return output.error().title(schemas.message).exit("error");
|
|
72
|
+
const schemaSlug = schemas.data.find((schema) => schema.slug === data.slug)?.slug || await select({
|
|
73
|
+
message: "Please select a schema to update",
|
|
74
|
+
options: schemas.data.map((schema) => ({
|
|
75
|
+
value: schema.slug,
|
|
76
|
+
label: schema.slug
|
|
77
|
+
}))
|
|
78
|
+
});
|
|
79
|
+
if (!schemaSlug) {
|
|
80
|
+
return output.error().title("No schema found").message("Please provide a valid schema slug").exit("error");
|
|
81
|
+
}
|
|
82
|
+
const logger = output.info().loader("Updating the schema");
|
|
83
|
+
const response = await client.managedSchemas.update(namespace, schemaSlug, {
|
|
84
|
+
title: data.title,
|
|
85
|
+
description: data.description,
|
|
86
|
+
isPrivate: data.isPrivate
|
|
87
|
+
});
|
|
88
|
+
if (response.error) {
|
|
89
|
+
return output.error().title("Something went wrong").message(response.message).exit("error");
|
|
90
|
+
}
|
|
91
|
+
logger.update("loader", 0, { content: "Schema updated successfully!" }).exit("success");
|
|
92
|
+
}
|
|
93
|
+
export {
|
|
94
|
+
updateAction
|
|
95
|
+
};
|