stratal 0.0.16 → 0.0.17
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 +4 -0
- package/dist/{application-zG8b-pol.d.mts → application-DfPtIzxF.d.mts} +65 -4
- package/dist/application-DfPtIzxF.d.mts.map +1 -0
- package/dist/{base-email.provider-Cuw4OAB0.mjs → base-email.provider-DypUAfWm.mjs} +1 -1
- package/dist/{base-email.provider-Cuw4OAB0.mjs.map → base-email.provider-DypUAfWm.mjs.map} +1 -1
- package/dist/bin/cloudflare-workers-loader.mjs +0 -0
- package/dist/bin/quarry.mjs +1 -50
- package/dist/bin/quarry.mjs.map +1 -1
- package/dist/cache/index.d.mts +1 -1
- package/dist/cache/index.mjs +10 -11
- package/dist/cache/index.mjs.map +1 -1
- package/dist/{colors-DJaRDXoS.mjs → colors-Y7WIFXs7.mjs} +1 -1
- package/dist/{colors-DJaRDXoS.mjs.map → colors-Y7WIFXs7.mjs.map} +1 -1
- package/dist/{command-BvCOD6df.mjs → command-B1CPgsrU.mjs} +6 -3
- package/dist/{command-BvCOD6df.mjs.map → command-B1CPgsrU.mjs.map} +1 -1
- package/dist/{command-B-QH-Vu3.d.mts → command-TnkPYWta.d.mts} +2 -2
- package/dist/{command-B-QH-Vu3.d.mts.map → command-TnkPYWta.d.mts.map} +1 -1
- package/dist/config/index.d.mts +2 -2
- package/dist/config/index.mjs +10 -11
- package/dist/config/index.mjs.map +1 -1
- package/dist/consumer-registry-Bymm6ff4.d.mts +142 -0
- package/dist/consumer-registry-Bymm6ff4.d.mts.map +1 -0
- package/dist/cron/index.d.mts +3 -116
- package/dist/cron/index.d.mts.map +1 -1
- package/dist/cron/index.mjs +3 -4
- package/dist/{cron-manager-DR7fiG6o.mjs → cron-manager-CFBamKKk.mjs} +3 -3
- package/dist/{cron-manager-DR7fiG6o.mjs.map → cron-manager-CFBamKKk.mjs.map} +1 -1
- package/dist/cron-manager-D7imGwUT.d.mts +117 -0
- package/dist/cron-manager-D7imGwUT.d.mts.map +1 -0
- package/dist/di/index.d.mts +1 -1
- package/dist/di/index.mjs +2 -3
- package/dist/email/index.d.mts +3 -3
- package/dist/email/index.mjs +16 -17
- package/dist/email/index.mjs.map +1 -1
- package/dist/errors/index.d.mts +1 -1
- package/dist/errors/index.mjs +2 -3
- package/dist/{errors-CtCi1wn6.mjs → errors-DSKapqD8.mjs} +4 -4
- package/dist/{errors-CtCi1wn6.mjs.map → errors-DSKapqD8.mjs.map} +1 -1
- package/dist/{errors-H3TZnVeX.mjs → errors-DuAR5Wke.mjs} +2 -2
- package/dist/{errors-H3TZnVeX.mjs.map → errors-DuAR5Wke.mjs.map} +1 -1
- package/dist/events/index.mjs +2 -3
- package/dist/{events-CXl-o1Ad.mjs → events-CvUSgEuN.mjs} +2 -3
- package/dist/{events-CXl-o1Ad.mjs.map → events-CvUSgEuN.mjs.map} +1 -1
- package/dist/{gateway-context-BkZ4UKaX.mjs → gateway-context-CNOLkLUC.mjs} +4 -4
- package/dist/{gateway-context-BkZ4UKaX.mjs.map → gateway-context-CNOLkLUC.mjs.map} +1 -1
- package/dist/guards/index.d.mts +1 -1
- package/dist/i18n/index.d.mts +3 -3
- package/dist/i18n/index.mjs +15 -15
- package/dist/i18n/validation/index.d.mts +1 -1
- package/dist/i18n/validation/index.mjs +1 -1
- package/dist/{i18n.module-W8OJxg3d.mjs → i18n.module-Dn9SrFdS.mjs} +210 -160
- package/dist/i18n.module-Dn9SrFdS.mjs.map +1 -0
- package/dist/{index-BJWm863C.d.mts → index-BFCxSp_f.d.mts} +82 -73
- package/dist/index-BFCxSp_f.d.mts.map +1 -0
- package/dist/{index-D9iYu2Yc.d.mts → index-DGRe6Yoa.d.mts} +5 -144
- package/dist/index-DGRe6Yoa.d.mts.map +1 -0
- package/dist/{index-DVhdhLvE.d.mts → index-NGxg-KP_.d.mts} +4 -4
- package/dist/{index-DVhdhLvE.d.mts.map → index-NGxg-KP_.d.mts.map} +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +19 -19
- package/dist/{is-command-BfCgWAcQ.mjs → is-command-DJVI6wEJ.mjs} +2 -2
- package/dist/{is-command-BfCgWAcQ.mjs.map → is-command-DJVI6wEJ.mjs.map} +1 -1
- package/dist/{is-seeder-CebjZCDn.mjs → is-seeder-D5MIEcdz.mjs} +1 -1
- package/dist/{is-seeder-CebjZCDn.mjs.map → is-seeder-D5MIEcdz.mjs.map} +1 -1
- package/dist/logger/index.mjs +1 -2
- package/dist/{logger-BR1-s1Um.mjs → logger-CGT91VY6.mjs} +170 -4
- package/dist/logger-CGT91VY6.mjs.map +1 -0
- package/dist/middleware/index.d.mts +1 -1
- package/dist/middleware/index.mjs +4 -5
- package/dist/{middleware-C0Ebzswy.mjs → middleware-Bl-b5pkt.mjs} +3 -3
- package/dist/{middleware-C0Ebzswy.mjs.map → middleware-Bl-b5pkt.mjs.map} +1 -1
- package/dist/module/index.d.mts +2 -117
- package/dist/module/index.d.mts.map +1 -1
- package/dist/module/index.mjs +10 -11
- package/dist/module-registry-CmjBX6ol.d.mts +121 -0
- package/dist/module-registry-CmjBX6ol.d.mts.map +1 -0
- package/dist/{module-BgdxxzBe.mjs → module-tUtyVJ5E.mjs} +9 -8
- package/dist/module-tUtyVJ5E.mjs.map +1 -0
- package/dist/openapi/index.d.mts +54 -54
- package/dist/openapi/index.d.mts.map +1 -1
- package/dist/openapi/index.mjs +15 -15
- package/dist/openapi-tools.service-B3TxYKoQ.mjs +197 -0
- package/dist/openapi-tools.service-B3TxYKoQ.mjs.map +1 -0
- package/dist/openapi.service-DGnX3Fc4.d.mts +58 -0
- package/dist/openapi.service-DGnX3Fc4.d.mts.map +1 -0
- package/dist/quarry/index.d.mts +109 -28
- package/dist/quarry/index.d.mts.map +1 -1
- package/dist/quarry/index.mjs +9 -7
- package/dist/quarry-registry-B2rkO-JS.mjs +683 -0
- package/dist/quarry-registry-B2rkO-JS.mjs.map +1 -0
- package/dist/queue/index.d.mts +2 -1
- package/dist/queue/index.mjs +11 -12
- package/dist/queue/index.mjs.map +1 -1
- package/dist/{queue.module-BZvmeAMj.mjs → queue.module-BtI8f4Jo.mjs} +4 -4
- package/dist/{queue.module-BZvmeAMj.mjs.map → queue.module-BtI8f4Jo.mjs.map} +1 -1
- package/dist/{resend.provider-BCCACQAU.mjs → resend.provider-bXMEkdRJ.mjs} +4 -5
- package/dist/{resend.provider-BCCACQAU.mjs.map → resend.provider-bXMEkdRJ.mjs.map} +1 -1
- package/dist/router/index.d.mts +1 -1
- package/dist/router/index.mjs +14 -14
- package/dist/{router-context-BEJe9HEB.mjs → router-context-D9R1v2Ac.mjs} +7 -4
- package/dist/router-context-D9R1v2Ac.mjs.map +1 -0
- package/dist/{s3-storage.provider-BLlzQYiJ.mjs → s3-storage.provider-CttzNnDR.mjs} +5 -6
- package/dist/{s3-storage.provider-BLlzQYiJ.mjs.map → s3-storage.provider-CttzNnDR.mjs.map} +1 -1
- package/dist/seeder/index.d.mts +3 -3
- package/dist/seeder/index.mjs +6 -7
- package/dist/{seeder-Cupi5jl-.mjs → seeder-R7RXJC35.mjs} +20 -17
- package/dist/seeder-R7RXJC35.mjs.map +1 -0
- package/dist/{smtp.provider-B8XtOcHU.mjs → smtp.provider-DrbHQztF.mjs} +4 -5
- package/dist/{smtp.provider-B8XtOcHU.mjs.map → smtp.provider-DrbHQztF.mjs.map} +1 -1
- package/dist/storage/index.d.mts +2 -195
- package/dist/storage/index.d.mts.map +1 -1
- package/dist/storage/index.mjs +13 -14
- package/dist/storage/providers/index.d.mts +272 -0
- package/dist/storage/providers/index.d.mts.map +1 -0
- package/dist/storage/providers/index.mjs +5 -0
- package/dist/{storage-By_ow2o_.mjs → storage-CZKHOhci.mjs} +7 -7
- package/dist/{storage-By_ow2o_.mjs.map → storage-CZKHOhci.mjs.map} +1 -1
- package/dist/storage-provider.interface-0IqcdhBf.d.mts +197 -0
- package/dist/storage-provider.interface-0IqcdhBf.d.mts.map +1 -0
- package/dist/{stratal-CE0iTz4f.mjs → stratal-D5smIU1y.mjs} +22 -12
- package/dist/stratal-D5smIU1y.mjs.map +1 -0
- package/dist/{usage-generator-C9hWziY4.mjs → usage-generator-CVIsENuE.mjs} +2 -2
- package/dist/{usage-generator-C9hWziY4.mjs.map → usage-generator-CVIsENuE.mjs.map} +1 -1
- package/dist/{validation-Bh875Lyg.mjs → validation-DQTC259A.mjs} +4 -4
- package/dist/{validation-Bh875Lyg.mjs.map → validation-DQTC259A.mjs.map} +1 -1
- package/dist/websocket/index.d.mts +1 -1
- package/dist/websocket/index.mjs +4 -5
- package/dist/workers/index.d.mts +1 -1
- package/dist/workers/index.mjs +19 -19
- package/package.json +13 -8
- package/dist/application-zG8b-pol.d.mts.map +0 -1
- package/dist/decorate-D5j-d9_z.mjs +0 -171
- package/dist/decorate-D5j-d9_z.mjs.map +0 -1
- package/dist/i18n.module-W8OJxg3d.mjs.map +0 -1
- package/dist/index-BJWm863C.d.mts.map +0 -1
- package/dist/index-D9iYu2Yc.d.mts.map +0 -1
- package/dist/logger-BR1-s1Um.mjs.map +0 -1
- package/dist/module-BgdxxzBe.mjs.map +0 -1
- package/dist/quarry-registry-DCwqVcRp.mjs +0 -310
- package/dist/quarry-registry-DCwqVcRp.mjs.map +0 -1
- package/dist/router-context-BEJe9HEB.mjs.map +0 -1
- package/dist/seeder-Cupi5jl-.mjs.map +0 -1
- package/dist/stratal-CE0iTz4f.mjs.map +0 -1
- package/dist/types-CLhOhYsQ.d.mts +0 -64
- package/dist/types-CLhOhYsQ.d.mts.map +0 -1
package/dist/openapi/index.mjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import "../errors-
|
|
2
|
-
import "../
|
|
3
|
-
import "../
|
|
4
|
-
import "../
|
|
5
|
-
import "../
|
|
6
|
-
import "../
|
|
7
|
-
import "../
|
|
8
|
-
import "../
|
|
9
|
-
import "../is-
|
|
10
|
-
import "../
|
|
11
|
-
import "../
|
|
12
|
-
import "../
|
|
13
|
-
import {
|
|
1
|
+
import "../errors-DSKapqD8.mjs";
|
|
2
|
+
import "../logger-CGT91VY6.mjs";
|
|
3
|
+
import "../module-tUtyVJ5E.mjs";
|
|
4
|
+
import "../events-CvUSgEuN.mjs";
|
|
5
|
+
import "../middleware-Bl-b5pkt.mjs";
|
|
6
|
+
import "../router-context-D9R1v2Ac.mjs";
|
|
7
|
+
import "../colors-Y7WIFXs7.mjs";
|
|
8
|
+
import "../command-B1CPgsrU.mjs";
|
|
9
|
+
import "../is-command-DJVI6wEJ.mjs";
|
|
10
|
+
import "../is-seeder-D5MIEcdz.mjs";
|
|
11
|
+
import "../validation-DQTC259A.mjs";
|
|
12
|
+
import { L as OpenAPIConfigService, _ as OpenAPIService, g as OpenAPIModule } from "../i18n.module-Dn9SrFdS.mjs";
|
|
13
|
+
import { n as OPENAPI_TOKENS, t as OpenApiToolsService } from "../openapi-tools.service-B3TxYKoQ.mjs";
|
|
14
14
|
import "../guards-DUk_Kzst.mjs";
|
|
15
|
-
import "../gateway-context-
|
|
16
|
-
export { OPENAPI_TOKENS, OpenAPIConfigService, OpenAPIModule, OpenAPIService };
|
|
15
|
+
import "../gateway-context-CNOLkLUC.mjs";
|
|
16
|
+
export { OPENAPI_TOKENS, OpenAPIConfigService, OpenAPIModule, OpenAPIService, OpenApiToolsService };
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
//#region src/openapi/openapi.tokens.ts
|
|
2
|
+
/**
|
|
3
|
+
* OpenAPI Module DI Tokens
|
|
4
|
+
*/
|
|
5
|
+
const OPENAPI_TOKENS = {
|
|
6
|
+
Options: Symbol.for("stratal:openapi:options"),
|
|
7
|
+
ConfigService: Symbol.for("stratal:openapi:config:service"),
|
|
8
|
+
OpenAPIService: Symbol.for("stratal:openapi:service")
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/openapi/services/openapi-tools.service.ts
|
|
12
|
+
/**
|
|
13
|
+
* Converts an OpenAPI 3.0 spec into callable tool definitions.
|
|
14
|
+
*
|
|
15
|
+
* Plain class (no DI) — reusable across MCP, CLI, and custom tooling.
|
|
16
|
+
*/
|
|
17
|
+
var OpenApiToolsService = class OpenApiToolsService {
|
|
18
|
+
static HTTP_METHODS = new Set([
|
|
19
|
+
"get",
|
|
20
|
+
"post",
|
|
21
|
+
"put",
|
|
22
|
+
"delete",
|
|
23
|
+
"patch",
|
|
24
|
+
"head",
|
|
25
|
+
"options",
|
|
26
|
+
"trace"
|
|
27
|
+
]);
|
|
28
|
+
tools = [];
|
|
29
|
+
toolMap = /* @__PURE__ */ new Map();
|
|
30
|
+
dispatcher;
|
|
31
|
+
spec;
|
|
32
|
+
constructor(spec, options) {
|
|
33
|
+
this.spec = spec;
|
|
34
|
+
this.dispatcher = options?.dispatcher;
|
|
35
|
+
this.tools = this.buildTools();
|
|
36
|
+
for (const tool of this.tools) this.toolMap.set(tool.name, tool);
|
|
37
|
+
}
|
|
38
|
+
getTools(filter) {
|
|
39
|
+
let tools = this.tools;
|
|
40
|
+
if (filter?.tags?.length) {
|
|
41
|
+
const tagSet = new Set(filter.tags);
|
|
42
|
+
tools = tools.filter((t) => {
|
|
43
|
+
return this.getOperation(t.method, t.path)?.tags?.some((tag) => tagSet.has(tag)) ?? false;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
if (filter?.pathPrefix) {
|
|
47
|
+
const prefix = filter.pathPrefix;
|
|
48
|
+
tools = tools.filter((t) => t.path.startsWith(prefix));
|
|
49
|
+
}
|
|
50
|
+
return tools;
|
|
51
|
+
}
|
|
52
|
+
getTool(name) {
|
|
53
|
+
return this.toolMap.get(name);
|
|
54
|
+
}
|
|
55
|
+
async executeTool(name, args) {
|
|
56
|
+
const tool = this.toolMap.get(name);
|
|
57
|
+
if (!tool) throw new Error(`Tool not found: ${name}`);
|
|
58
|
+
if (!this.dispatcher) throw new Error("No dispatcher configured");
|
|
59
|
+
let url = tool.path;
|
|
60
|
+
for (const param of tool.pathParams) {
|
|
61
|
+
const value = args[`path_${param}`];
|
|
62
|
+
if (value === void 0) throw new Error(`Missing required path parameter: ${param}`);
|
|
63
|
+
url = url.replace(`{${param}}`, encodeURIComponent(value != null && typeof value === "object" ? JSON.stringify(value) : String(value)));
|
|
64
|
+
}
|
|
65
|
+
const queryParts = [];
|
|
66
|
+
for (const key of Object.keys(args)) if (key.startsWith("query_")) {
|
|
67
|
+
const paramName = key.slice(6);
|
|
68
|
+
const value = args[key];
|
|
69
|
+
queryParts.push(`${encodeURIComponent(paramName)}=${encodeURIComponent(value != null && typeof value === "object" ? JSON.stringify(value) : String(value))}`);
|
|
70
|
+
}
|
|
71
|
+
if (queryParts.length > 0) url += `?${queryParts.join("&")}`;
|
|
72
|
+
const body = args.body;
|
|
73
|
+
const response = await this.dispatcher(tool.method.toUpperCase(), url, body !== void 0 ? { body } : void 0);
|
|
74
|
+
const responseHeaders = {};
|
|
75
|
+
response.headers.forEach((value, key) => {
|
|
76
|
+
responseHeaders[key] = value;
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
status: response.status,
|
|
80
|
+
body: await response.text(),
|
|
81
|
+
headers: responseHeaders
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
buildTools() {
|
|
85
|
+
const tools = [];
|
|
86
|
+
const paths = this.spec.paths;
|
|
87
|
+
for (const [path, pathItem] of Object.entries(paths)) for (const [method, operation] of Object.entries(pathItem)) {
|
|
88
|
+
if (!operation || typeof operation !== "object") continue;
|
|
89
|
+
if (!OpenApiToolsService.HTTP_METHODS.has(method.toLowerCase())) continue;
|
|
90
|
+
const op = operation;
|
|
91
|
+
const name = op.operationId ?? this.generateName(method, path);
|
|
92
|
+
const description = this.buildDescription(op, method, path);
|
|
93
|
+
const pathItemParams = pathItem.parameters;
|
|
94
|
+
const mergedParameters = this.mergeParameters(pathItemParams, op.parameters);
|
|
95
|
+
const { schema, pathParams } = this.buildInputSchema({
|
|
96
|
+
...op,
|
|
97
|
+
parameters: mergedParameters
|
|
98
|
+
});
|
|
99
|
+
tools.push({
|
|
100
|
+
name,
|
|
101
|
+
description,
|
|
102
|
+
inputSchema: schema,
|
|
103
|
+
method: method.toUpperCase(),
|
|
104
|
+
path,
|
|
105
|
+
pathParams
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return tools;
|
|
109
|
+
}
|
|
110
|
+
generateName(method, path) {
|
|
111
|
+
const snake = path.replace(/[{}]/g, "").replace(/[^a-zA-Z0-9]+/g, "_").replace(/^_|_$/g, "").toLowerCase();
|
|
112
|
+
return `${method.toLowerCase()}_${snake}`;
|
|
113
|
+
}
|
|
114
|
+
buildDescription(op, method, path) {
|
|
115
|
+
if (op.summary && op.description) return `${op.summary} — ${op.description}`;
|
|
116
|
+
return op.summary ?? op.description ?? `${method.toUpperCase()} ${path}`;
|
|
117
|
+
}
|
|
118
|
+
buildInputSchema(op) {
|
|
119
|
+
const properties = {};
|
|
120
|
+
const required = [];
|
|
121
|
+
const pathParams = [];
|
|
122
|
+
for (const param of op.parameters ?? []) {
|
|
123
|
+
const resolvedParam = this.resolveRef(param);
|
|
124
|
+
const paramSchema = resolvedParam.schema ? this.resolveRef(resolvedParam.schema) : { type: "string" };
|
|
125
|
+
if (resolvedParam.in === "path") {
|
|
126
|
+
pathParams.push(resolvedParam.name);
|
|
127
|
+
const key = `path_${resolvedParam.name}`;
|
|
128
|
+
properties[key] = { ...paramSchema };
|
|
129
|
+
if (resolvedParam.description) properties[key].description = resolvedParam.description;
|
|
130
|
+
required.push(key);
|
|
131
|
+
} else if (resolvedParam.in === "query") {
|
|
132
|
+
const key = `query_${resolvedParam.name}`;
|
|
133
|
+
properties[key] = { ...paramSchema };
|
|
134
|
+
if (resolvedParam.description) properties[key].description = resolvedParam.description;
|
|
135
|
+
if (resolvedParam.required) required.push(key);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const resolvedBody = op.requestBody ? this.resolveRef(op.requestBody) : void 0;
|
|
139
|
+
if (resolvedBody) {
|
|
140
|
+
const jsonContent = resolvedBody.content?.["application/json"];
|
|
141
|
+
if (jsonContent?.schema) properties.body = this.resolveRef(jsonContent.schema);
|
|
142
|
+
else properties.body = { type: "object" };
|
|
143
|
+
if (resolvedBody.required === true) required.push("body");
|
|
144
|
+
}
|
|
145
|
+
const schema = {
|
|
146
|
+
type: "object",
|
|
147
|
+
properties
|
|
148
|
+
};
|
|
149
|
+
if (required.length > 0) schema.required = required;
|
|
150
|
+
return {
|
|
151
|
+
schema,
|
|
152
|
+
pathParams
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
mergeParameters(pathLevel, opLevel) {
|
|
156
|
+
const resolvedPathLevel = pathLevel?.map((p) => this.resolveRef(p));
|
|
157
|
+
const resolvedOpLevel = opLevel?.map((p) => this.resolveRef(p));
|
|
158
|
+
if (!resolvedPathLevel?.length) return resolvedOpLevel ?? [];
|
|
159
|
+
if (!resolvedOpLevel?.length) return resolvedPathLevel;
|
|
160
|
+
const opKeys = new Set(resolvedOpLevel.map((p) => `${p.in}:${p.name}`));
|
|
161
|
+
return [...resolvedPathLevel.filter((p) => !opKeys.has(`${p.in}:${p.name}`)), ...resolvedOpLevel];
|
|
162
|
+
}
|
|
163
|
+
resolveRef(obj, seen = /* @__PURE__ */ new Set()) {
|
|
164
|
+
if (!obj || typeof obj !== "object") return obj;
|
|
165
|
+
const record = obj;
|
|
166
|
+
if (typeof record.$ref === "string") {
|
|
167
|
+
const refPath = record.$ref;
|
|
168
|
+
if (seen.has(refPath)) return obj;
|
|
169
|
+
seen.add(refPath);
|
|
170
|
+
const resolved = this.lookupRef(refPath);
|
|
171
|
+
if (!resolved) return obj;
|
|
172
|
+
return this.resolveRef(resolved, seen);
|
|
173
|
+
}
|
|
174
|
+
const result = {};
|
|
175
|
+
for (const [key, value] of Object.entries(record)) if (Array.isArray(value)) result[key] = value.map((item) => this.resolveRef(item, seen));
|
|
176
|
+
else if (value && typeof value === "object") result[key] = this.resolveRef(value, seen);
|
|
177
|
+
else result[key] = value;
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
lookupRef(refPath) {
|
|
181
|
+
const components = this.spec.components;
|
|
182
|
+
if (!components) return void 0;
|
|
183
|
+
const match = /^#\/components\/(\w+)\/(.+)$/.exec(refPath);
|
|
184
|
+
if (!match) return void 0;
|
|
185
|
+
const [, section, name] = match;
|
|
186
|
+
const sectionObj = components[section];
|
|
187
|
+
if (typeof sectionObj !== "object") return void 0;
|
|
188
|
+
return sectionObj[name];
|
|
189
|
+
}
|
|
190
|
+
getOperation(method, path) {
|
|
191
|
+
return this.spec.paths?.[path]?.[method.toLowerCase()];
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
//#endregion
|
|
195
|
+
export { OPENAPI_TOKENS as n, OpenApiToolsService as t };
|
|
196
|
+
|
|
197
|
+
//# sourceMappingURL=openapi-tools.service-B3TxYKoQ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-tools.service-B3TxYKoQ.mjs","names":[],"sources":["../src/openapi/openapi.tokens.ts","../src/openapi/services/openapi-tools.service.ts"],"sourcesContent":["/**\n * OpenAPI Module DI Tokens\n */\nexport const OPENAPI_TOKENS = {\n /** Static options provided via forRoot() */\n Options: Symbol.for('stratal:openapi:options'),\n\n /** Request-scoped config service that supports runtime overrides */\n ConfigService: Symbol.for('stratal:openapi:config:service'),\n\n /** OpenAPI service that generates specs and serves endpoints */\n OpenAPIService: Symbol.for('stratal:openapi:service'),\n} as const\n","import { type OpenAPIObject } from \"../../i18n/validation\"\nimport type { HttpMethod } from '../../router/types'\n\ntype JsonSchema = Record<string, unknown>\n\nexport interface ToolDefinition {\n name: string\n description: string\n inputSchema: JsonSchema\n method: string\n path: string\n pathParams: string[]\n}\n\nexport interface ToolExecutionResult {\n status: number\n body: string\n headers: Record<string, string>\n}\n\nexport interface ToolFilter {\n tags?: string[]\n pathPrefix?: string\n}\n\nexport type Dispatcher = (method: string, url: string, options?: {\n body?: unknown\n headers?: Record<string, string>\n}) => Promise<Response>\n\ninterface OperationObject {\n operationId?: string\n summary?: string\n description?: string\n tags?: string[]\n parameters?: ParameterObject[]\n requestBody?: RequestBodyObject\n}\n\ninterface ParameterObject {\n name: string\n in: string\n required?: boolean\n schema?: JsonSchema\n description?: string\n}\n\ninterface RequestBodyObject {\n required?: boolean\n content?: Record<string, { schema?: JsonSchema }>\n}\n\n/**\n * Converts an OpenAPI 3.0 spec into callable tool definitions.\n *\n * Plain class (no DI) — reusable across MCP, CLI, and custom tooling.\n */\nexport class OpenApiToolsService {\n private static readonly HTTP_METHODS: Set<string> = new Set<HttpMethod>(['get', 'post', 'put', 'delete', 'patch', 'head', 'options', 'trace'])\n\n private tools: ToolDefinition[] = []\n private toolMap = new Map<string, ToolDefinition>()\n private dispatcher?: Dispatcher\n\n private spec: OpenAPIObject\n\n constructor(spec: OpenAPIObject, options?: { dispatcher?: Dispatcher }) {\n this.spec = spec\n this.dispatcher = options?.dispatcher\n this.tools = this.buildTools()\n for (const tool of this.tools) {\n this.toolMap.set(tool.name, tool)\n }\n }\n\n getTools(filter?: ToolFilter): ToolDefinition[] {\n let tools = this.tools\n\n if (filter?.tags?.length) {\n const tagSet = new Set(filter.tags)\n tools = tools.filter((t) => {\n const op = this.getOperation(t.method, t.path)\n return op?.tags?.some((tag) => tagSet.has(tag)) ?? false\n })\n }\n\n if (filter?.pathPrefix) {\n const prefix = filter.pathPrefix\n tools = tools.filter((t) => t.path.startsWith(prefix))\n }\n\n return tools\n }\n\n getTool(name: string): ToolDefinition | undefined {\n return this.toolMap.get(name)\n }\n\n async executeTool(name: string, args: Record<string, unknown>): Promise<ToolExecutionResult> {\n const tool = this.toolMap.get(name)\n if (!tool) {\n throw new Error(`Tool not found: ${name}`)\n }\n if (!this.dispatcher) {\n throw new Error('No dispatcher configured')\n }\n\n // Interpolate path params\n let url = tool.path\n for (const param of tool.pathParams) {\n const value = args[`path_${param}`]\n if (value === undefined) {\n throw new Error(`Missing required path parameter: ${param}`)\n }\n url = url.replace(`{${param}}`, encodeURIComponent(value != null && typeof value === 'object' ? JSON.stringify(value) : String(value as string | number | boolean)))\n }\n\n // Collect query params\n const queryParts: string[] = []\n for (const key of Object.keys(args)) {\n if (key.startsWith('query_')) {\n const paramName = key.slice(6)\n const value = args[key]\n queryParts.push(`${encodeURIComponent(paramName)}=${encodeURIComponent(value != null && typeof value === 'object' ? JSON.stringify(value) : String(value as string | number | boolean))}`)\n }\n }\n if (queryParts.length > 0) {\n url += `?${queryParts.join('&')}`\n }\n\n const body = args.body\n const response = await this.dispatcher(\n tool.method.toUpperCase(),\n url,\n body !== undefined ? { body } : undefined,\n )\n\n const responseHeaders: Record<string, string> = {}\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value\n })\n\n return {\n status: response.status,\n body: await response.text(),\n headers: responseHeaders,\n }\n }\n\n private buildTools(): ToolDefinition[] {\n const tools: ToolDefinition[] = []\n const paths = this.spec.paths\n\n for (const [path, pathItem] of Object.entries(paths)) {\n for (const [method, operation] of Object.entries(pathItem)) {\n if (!operation || typeof operation !== 'object') continue\n if (!OpenApiToolsService.HTTP_METHODS.has(method.toLowerCase())) continue\n\n const op = operation as OperationObject\n const name = op.operationId ?? this.generateName(method, path)\n const description = this.buildDescription(op, method, path)\n const pathItemParams = (pathItem as Record<string, unknown>).parameters as ParameterObject[] | undefined\n const mergedParameters = this.mergeParameters(pathItemParams, op.parameters)\n const { schema, pathParams } = this.buildInputSchema({ ...op, parameters: mergedParameters })\n\n tools.push({ name, description, inputSchema: schema, method: method.toUpperCase(), path, pathParams })\n }\n }\n\n return tools\n }\n\n private generateName(method: string, path: string): string {\n const snake = path\n .replace(/[{}]/g, '')\n .replace(/[^a-zA-Z0-9]+/g, '_')\n .replace(/^_|_$/g, '')\n .toLowerCase()\n return `${method.toLowerCase()}_${snake}`\n }\n\n private buildDescription(op: OperationObject, method: string, path: string): string {\n if (op.summary && op.description) {\n return `${op.summary} — ${op.description}`\n }\n return op.summary ?? op.description ?? `${method.toUpperCase()} ${path}`\n }\n\n private buildInputSchema(op: OperationObject): { schema: JsonSchema; pathParams: string[] } {\n const properties: Record<string, JsonSchema> = {}\n const required: string[] = []\n const pathParams: string[] = []\n\n // Parameters (path + query)\n for (const param of op.parameters ?? []) {\n const resolvedParam = this.resolveRef(param) as ParameterObject\n const paramSchema = resolvedParam.schema ? this.resolveRef(resolvedParam.schema) as JsonSchema : { type: 'string' }\n\n if (resolvedParam.in === 'path') {\n pathParams.push(resolvedParam.name)\n const key = `path_${resolvedParam.name}`\n properties[key] = { ...paramSchema }\n if (resolvedParam.description) properties[key].description = resolvedParam.description\n required.push(key)\n } else if (resolvedParam.in === 'query') {\n const key = `query_${resolvedParam.name}`\n properties[key] = { ...paramSchema }\n if (resolvedParam.description) properties[key].description = resolvedParam.description\n if (resolvedParam.required) required.push(key)\n }\n }\n\n // Request body\n const resolvedBody = op.requestBody ? this.resolveRef(op.requestBody) as RequestBodyObject : undefined\n if (resolvedBody) {\n const jsonContent = resolvedBody.content?.['application/json']\n if (jsonContent?.schema) {\n properties.body = this.resolveRef(jsonContent.schema) as JsonSchema\n } else {\n properties.body = { type: 'object' }\n }\n const needsBody = resolvedBody.required === true\n if (needsBody) {\n required.push('body')\n }\n }\n\n const schema: JsonSchema = { type: 'object', properties }\n if (required.length > 0) {\n schema.required = required\n }\n\n return { schema, pathParams }\n }\n\n private mergeParameters(pathLevel?: ParameterObject[], opLevel?: ParameterObject[]): ParameterObject[] {\n const resolvedPathLevel = pathLevel?.map((p) => this.resolveRef(p) as ParameterObject)\n const resolvedOpLevel = opLevel?.map((p) => this.resolveRef(p) as ParameterObject)\n\n if (!resolvedPathLevel?.length) return resolvedOpLevel ?? []\n if (!resolvedOpLevel?.length) return resolvedPathLevel\n\n const opKeys = new Set(resolvedOpLevel.map((p) => `${p.in}:${p.name}`))\n const inherited = resolvedPathLevel.filter((p) => !opKeys.has(`${p.in}:${p.name}`))\n return [...inherited, ...resolvedOpLevel]\n }\n\n private resolveRef(obj: unknown, seen = new Set<string>()): unknown {\n if (!obj || typeof obj !== 'object') return obj\n const record = obj as Record<string, unknown>\n\n if (typeof record.$ref === 'string') {\n const refPath = record.$ref\n if (seen.has(refPath)) return obj\n seen.add(refPath)\n\n const resolved = this.lookupRef(refPath)\n if (!resolved) return obj\n return this.resolveRef(resolved, seen)\n }\n\n // Recursively walk all properties and resolve nested $refs\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(record)) {\n if (Array.isArray(value)) {\n result[key] = value.map((item) => this.resolveRef(item, seen))\n } else if (value && typeof value === 'object') {\n result[key] = this.resolveRef(value, seen)\n } else {\n result[key] = value\n }\n }\n return result\n }\n\n private lookupRef(refPath: string): unknown {\n const components = this.spec.components as Record<string, Record<string, unknown>> | undefined\n if (!components) return undefined\n\n const match = /^#\\/components\\/(\\w+)\\/(.+)$/.exec(refPath)\n if (!match) return undefined\n\n const [, section, name] = match\n const sectionObj = components[section]\n if (typeof sectionObj !== 'object') return undefined\n return sectionObj[name]\n }\n\n private getOperation(method: string, path: string): OperationObject | undefined {\n const paths = this.spec.paths as Record<string, Record<string, unknown>> | undefined\n return paths?.[path]?.[method.toLowerCase()] as OperationObject | undefined\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Pt as RouterEnv, en as Container, wt as IController } from "./index-BFCxSp_f.mjs";
|
|
2
|
+
import { t as Constructor } from "./types-DahElfUw.mjs";
|
|
3
|
+
import { n as OpenAPIObject, t as OpenAPIHono } from "./index-NGxg-KP_.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/openapi/services/openapi.service.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* OpenAPI Service
|
|
8
|
+
*
|
|
9
|
+
* Generates OpenAPI specifications with support for:
|
|
10
|
+
* - Runtime configuration via OpenAPIConfigService
|
|
11
|
+
* - Route filtering via hideFromDocs and custom routeFilter
|
|
12
|
+
* - i18n support for titles and descriptions
|
|
13
|
+
* - Security scheme definitions
|
|
14
|
+
*
|
|
15
|
+
* Configuration is resolved per-request from OpenAPIConfigService,
|
|
16
|
+
* allowing middleware to override config based on domain context.
|
|
17
|
+
*/
|
|
18
|
+
declare class OpenAPIService {
|
|
19
|
+
private routeInfoMap;
|
|
20
|
+
/**
|
|
21
|
+
* Generate a filtered OpenAPI spec using the user's config.
|
|
22
|
+
* Usable from both HTTP handlers and CLI commands.
|
|
23
|
+
*/
|
|
24
|
+
getSpec(app: OpenAPIHono<RouterEnv>, container: Container): OpenAPIObject;
|
|
25
|
+
/**
|
|
26
|
+
* Setup OpenAPI documentation endpoints
|
|
27
|
+
*/
|
|
28
|
+
setupEndpoints(app: OpenAPIHono<RouterEnv>, controllers: Constructor<IController>[], container: Container): void;
|
|
29
|
+
private nameLastHandler;
|
|
30
|
+
/**
|
|
31
|
+
* Get localized security scheme definitions
|
|
32
|
+
*/
|
|
33
|
+
private getSecuritySchemeDefinitions;
|
|
34
|
+
/**
|
|
35
|
+
* Build route info map from controllers
|
|
36
|
+
* Maps route prefixes to their hideFromDocs flag
|
|
37
|
+
*/
|
|
38
|
+
private buildRouteInfoMap;
|
|
39
|
+
/**
|
|
40
|
+
* Filter OpenAPI paths based on hideFromDocs and custom routeFilter
|
|
41
|
+
*/
|
|
42
|
+
private filterRoutes;
|
|
43
|
+
/**
|
|
44
|
+
* Get route info by matching path against controller routes
|
|
45
|
+
*/
|
|
46
|
+
private getRouteInfo;
|
|
47
|
+
/**
|
|
48
|
+
* Filter unreferenced schemas from OpenAPI spec
|
|
49
|
+
*/
|
|
50
|
+
private filterSchemas;
|
|
51
|
+
/**
|
|
52
|
+
* Recursively collect all schema references from an object
|
|
53
|
+
*/
|
|
54
|
+
private collectSchemaRefs;
|
|
55
|
+
}
|
|
56
|
+
//#endregion
|
|
57
|
+
export { OpenAPIService as t };
|
|
58
|
+
//# sourceMappingURL=openapi.service-DGnX3Fc4.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.service-DGnX3Fc4.d.mts","names":[],"sources":["../src/openapi/services/openapi.service.ts"],"mappings":";;;;;AAiCA;;;;;;;;;;;;AAAA,cACa,cAAA;EAAA,QACH,YAAA;EAAA;;;;EAOR,OAAA,CAAQ,GAAA,EAAK,WAAA,CAAY,SAAA,GAAY,SAAA,EAAW,SAAA,GAAY,aAAA;EAAZ;;;EAmChD,cAAA,CAAe,GAAA,EAAK,WAAA,CAAY,SAAA,GAAY,WAAA,EAAa,WAAA,CAAY,WAAA,KAAgB,SAAA,EAAW,SAAA;EAAA,QA+CxF,eAAA;EA/CwB;;;EAAA,QAuDxB,4BAAA;EAvDoC;;;;EAAA,QAkFpC,iBAAA;EAAA;;;EAAA,QAgBA,YAAA;EAwEA;;;EAAA,QA3CA,YAAA;;;;UAcA,aAAA;;;;UA6BA,iBAAA;AAAA"}
|
package/dist/quarry/index.d.mts
CHANGED
|
@@ -1,36 +1,32 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { en as Container } from "../index-BFCxSp_f.mjs";
|
|
2
2
|
import { t as Constructor } from "../types-DahElfUw.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { t as
|
|
3
|
+
import { t as CronManager } from "../cron-manager-D7imGwUT.mjs";
|
|
4
|
+
import { t as ConsumerRegistry } from "../consumer-registry-Bymm6ff4.mjs";
|
|
5
|
+
import { c as ParsedOption, i as CommandInput, l as ParsedSignature, o as CommandResult, s as ParsedArgument, t as Application, u as Quarry } from "../application-DfPtIzxF.mjs";
|
|
6
|
+
import { t as ModuleRegistry } from "../module-registry-CmjBX6ol.mjs";
|
|
7
|
+
import { t as OpenAPIService } from "../openapi.service-DGnX3Fc4.mjs";
|
|
8
|
+
import { t as Command } from "../command-TnkPYWta.mjs";
|
|
5
9
|
|
|
6
|
-
//#region src/quarry/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
//#region src/quarry/commands/api.command.d.ts
|
|
11
|
+
declare class ApiCommand extends Command {
|
|
12
|
+
private app;
|
|
13
|
+
static command: string;
|
|
14
|
+
static description: string;
|
|
15
|
+
static aliases: string[];
|
|
16
|
+
constructor(app: Application);
|
|
17
|
+
handle(): Promise<number | undefined>;
|
|
18
|
+
private callRoute;
|
|
12
19
|
}
|
|
13
20
|
//#endregion
|
|
14
|
-
//#region src/quarry/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
*/
|
|
22
|
-
declare class CommandError extends Error {
|
|
23
|
-
constructor(message: string);
|
|
21
|
+
//#region src/quarry/commands/event-list.command.d.ts
|
|
22
|
+
declare class EventListCommand extends Command {
|
|
23
|
+
private modules;
|
|
24
|
+
static command: string;
|
|
25
|
+
static description: string;
|
|
26
|
+
constructor(modules: ModuleRegistry);
|
|
27
|
+
handle(): number | undefined;
|
|
24
28
|
}
|
|
25
29
|
//#endregion
|
|
26
|
-
//#region src/quarry/is-command.d.ts
|
|
27
|
-
/**
|
|
28
|
-
* Check if a class is a Command (extends Command base class).
|
|
29
|
-
*
|
|
30
|
-
* Used by ModuleRegistry for auto-discovery from providers.
|
|
31
|
-
*/
|
|
32
|
-
declare function isCommand(target: Constructor): boolean;
|
|
33
|
-
//#endregion
|
|
34
30
|
//#region src/quarry/quarry-registry.d.ts
|
|
35
31
|
/**
|
|
36
32
|
* QuarryRegistry — edge-compatible programmatic API for running commands.
|
|
@@ -94,6 +90,91 @@ declare class QuarryRegistry implements Quarry {
|
|
|
94
90
|
private applyDefaults;
|
|
95
91
|
}
|
|
96
92
|
//#endregion
|
|
93
|
+
//#region src/quarry/commands/help.command.d.ts
|
|
94
|
+
declare class HelpCommand extends Command {
|
|
95
|
+
private quarryRegistry;
|
|
96
|
+
static command: string;
|
|
97
|
+
static description: string;
|
|
98
|
+
static aliases: string[];
|
|
99
|
+
constructor(quarryRegistry: QuarryRegistry);
|
|
100
|
+
handle(): Promise<number | undefined>;
|
|
101
|
+
}
|
|
102
|
+
//#endregion
|
|
103
|
+
//#region src/quarry/commands/mcp-serve.command.d.ts
|
|
104
|
+
declare class McpServeCommand extends Command {
|
|
105
|
+
private app;
|
|
106
|
+
private openAPIService;
|
|
107
|
+
static command: string;
|
|
108
|
+
static description: string;
|
|
109
|
+
constructor(app: Application, openAPIService: OpenAPIService);
|
|
110
|
+
handle(): Promise<number | undefined>;
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
//#region src/quarry/commands/mcp-tools.command.d.ts
|
|
114
|
+
declare class McpToolsCommand extends Command {
|
|
115
|
+
private app;
|
|
116
|
+
private openAPIService;
|
|
117
|
+
static command: string;
|
|
118
|
+
static description: string;
|
|
119
|
+
constructor(app: Application, openAPIService: OpenAPIService);
|
|
120
|
+
handle(): number | undefined;
|
|
121
|
+
}
|
|
122
|
+
//#endregion
|
|
123
|
+
//#region src/quarry/commands/queue-list.command.d.ts
|
|
124
|
+
declare class QueueListCommand extends Command {
|
|
125
|
+
private consumers;
|
|
126
|
+
static command: string;
|
|
127
|
+
static description: string;
|
|
128
|
+
constructor(consumers: ConsumerRegistry);
|
|
129
|
+
handle(): number | undefined;
|
|
130
|
+
}
|
|
131
|
+
//#endregion
|
|
132
|
+
//#region src/quarry/commands/route-list.command.d.ts
|
|
133
|
+
declare class RouteListCommand extends Command {
|
|
134
|
+
private app;
|
|
135
|
+
static command: string;
|
|
136
|
+
static description: string;
|
|
137
|
+
constructor(app: Application);
|
|
138
|
+
handle(): number | undefined;
|
|
139
|
+
}
|
|
140
|
+
//#endregion
|
|
141
|
+
//#region src/quarry/commands/schedule-list.command.d.ts
|
|
142
|
+
declare class ScheduleListCommand extends Command {
|
|
143
|
+
private cron;
|
|
144
|
+
static command: string;
|
|
145
|
+
static description: string;
|
|
146
|
+
constructor(cron: CronManager);
|
|
147
|
+
handle(): number | undefined;
|
|
148
|
+
}
|
|
149
|
+
//#endregion
|
|
150
|
+
//#region src/quarry/errors/command-not-found.error.d.ts
|
|
151
|
+
/**
|
|
152
|
+
* Thrown when a command is not found in the Quarry registry.
|
|
153
|
+
*/
|
|
154
|
+
declare class CommandNotFoundError extends Error {
|
|
155
|
+
constructor(name: string);
|
|
156
|
+
}
|
|
157
|
+
//#endregion
|
|
158
|
+
//#region src/quarry/errors/command.error.d.ts
|
|
159
|
+
/**
|
|
160
|
+
* User-facing command error with a plain English message.
|
|
161
|
+
*
|
|
162
|
+
* Quarry catches this in `call()` and puts the message into `CommandResult.errors`.
|
|
163
|
+
* Does NOT extend `ApplicationError` (which requires i18n keys + error codes).
|
|
164
|
+
* Not routed through GlobalErrorHandler.
|
|
165
|
+
*/
|
|
166
|
+
declare class CommandError extends Error {
|
|
167
|
+
constructor(message: string);
|
|
168
|
+
}
|
|
169
|
+
//#endregion
|
|
170
|
+
//#region src/quarry/is-command.d.ts
|
|
171
|
+
/**
|
|
172
|
+
* Check if a class is a Command (extends Command base class).
|
|
173
|
+
*
|
|
174
|
+
* Used by ModuleRegistry for auto-discovery from providers.
|
|
175
|
+
*/
|
|
176
|
+
declare function isCommand(target: Constructor): boolean;
|
|
177
|
+
//#endregion
|
|
97
178
|
//#region src/quarry/signature-parser.d.ts
|
|
98
179
|
/**
|
|
99
180
|
* Parse a Laravel-style command signature string.
|
|
@@ -116,5 +197,5 @@ declare function parseSignature(signature: string): ParsedSignature;
|
|
|
116
197
|
*/
|
|
117
198
|
declare function generateUsage(signature: ParsedSignature, description?: string): string;
|
|
118
199
|
//#endregion
|
|
119
|
-
export { Command, CommandError, type CommandInput, CommandNotFoundError, type CommandResult, type ParsedArgument, type ParsedOption, type ParsedSignature, type Quarry, QuarryRegistry, generateUsage, isCommand, parseSignature };
|
|
200
|
+
export { ApiCommand, Command, CommandError, type CommandInput, CommandNotFoundError, type CommandResult, EventListCommand, HelpCommand, McpServeCommand, McpToolsCommand, type ParsedArgument, type ParsedOption, type ParsedSignature, type Quarry, QuarryRegistry, QueueListCommand, RouteListCommand, ScheduleListCommand, generateUsage, isCommand, parseSignature };
|
|
120
201
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/quarry/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/quarry/commands/api.command.ts","../../src/quarry/commands/event-list.command.ts","../../src/quarry/quarry-registry.ts","../../src/quarry/commands/help.command.ts","../../src/quarry/commands/mcp-serve.command.ts","../../src/quarry/commands/mcp-tools.command.ts","../../src/quarry/commands/queue-list.command.ts","../../src/quarry/commands/route-list.command.ts","../../src/quarry/commands/schedule-list.command.ts","../../src/quarry/errors/command-not-found.error.ts","../../src/quarry/errors/command.error.ts","../../src/quarry/is-command.ts","../../src/quarry/signature-parser.ts","../../src/quarry/usage-generator.ts"],"mappings":";;;;;;;;;;cAMa,UAAA,SAAmB,OAAA;EAAA,QAKqB,GAAA;EAAA,OAJ5C,OAAA;EAAA,OACA,WAAA;EAAA,OACA,OAAA;cAE4C,GAAA,EAAK,WAAA;EAIlD,MAAA,CAAA,GAAU,OAAA;EAAA,QAUF,SAAA;AAAA;;;cCnBH,gBAAA,SAAyB,OAAA;EAAA,QAIkB,OAAA;EAAA,OAH/C,OAAA;EAAA,OACA,WAAA;cAE+C,OAAA,EAAS,cAAA;EAI/D,MAAA,CAAA;AAAA;;;;;;;;;;ADRF;;cEiBa,cAAA,YAA0B,MAAA;EAAA,iBAKqB,SAAA;EAAA,QAJlD,QAAA;EAAA,QACA,UAAA;EAAA,QACA,OAAA;cAEkD,SAAA,EAAW,SAAA;EFtBvC;;;;EE4BxB,IAAA,CAAK,IAAA,UAAc,KAAA,GAAQ,YAAA,GAAe,OAAA,CAAQ,aAAA;;;;EAiExD,GAAA,CAAI,IAAA;EFpFY;;;EE4FhB,GAAA,CAAI,IAAA,WAAe,WAAA,CAAY,OAAA;;;;EAQ/B,GAAA,CAAA,GAAO,GAAA,SAAY,WAAA,CAAY,OAAA;ED7GH;;;ECoH5B,IAAA,CAAA;IAAU,IAAA;IAAc,WAAA;IAAsB,OAAA;EAAA;EDhHiB;;;EC0IzD,SAAA,CAAU,OAAA;IAAY,UAAA;IAAqB,WAAA;IAAsB,aAAA;EAAA,IAA2B,OAAA;EA7HvF;;;EAwIL,KAAA,CAAM,IAAA,WAAe,OAAA;EA7HM;;;;EAiJjC,QAAA,CAAS,YAAA,EAAc,WAAA,CAAY,OAAA;EAAA,QAkC3B,WAAA;EAAA,QAMA,WAAA;EAAA,QAIA,aAAA;AAAA;;;cCzNG,WAAA,SAAoB,OAAA;EAAA,QAKe,cAAA;EAAA,OAJvC,OAAA;EAAA,OACA,WAAA;EAAA,OACA,OAAA;cAEuC,cAAA,EAAgB,cAAA;EAIxD,MAAA,CAAA,GAAU,OAAA;AAAA;;;cCJL,eAAA,SAAwB,OAAA;EAAA,QAKM,GAAA;EAAA,QACQ,cAAA;EAAA,OAL1C,OAAA;EAAA,OACA,WAAA;cAGkC,GAAA,EAAK,WAAA,EACG,cAAA,EAAgB,cAAA;EAK3D,MAAA,CAAA,GAAU,OAAA;AAAA;;;cCdL,eAAA,SAAwB,OAAA;EAAA,QAKM,GAAA;EAAA,QACQ,cAAA;EAAA,OAL1C,OAAA;EAAA,OACA,WAAA;cAGkC,GAAA,EAAK,WAAA,EACG,cAAA,EAAgB,cAAA;EAKjE,MAAA,CAAA;AAAA;;;cCdW,gBAAA,SAAyB,OAAA;EAAA,QAIoB,SAAA;EAAA,OAHjD,OAAA;EAAA,OACA,WAAA;cAEiD,SAAA,EAAW,gBAAA;EAInE,MAAA,CAAA;AAAA;;;cCRW,gBAAA,SAAyB,OAAA;EAAA,QAIe,GAAA;EAAA,OAH5C,OAAA;EAAA,OACA,WAAA;cAE4C,GAAA,EAAK,WAAA;EAIxD,MAAA,CAAA;AAAA;;;cCRW,mBAAA,SAA4B,OAAA;EAAA,QAIK,IAAA;EAAA,OAHrC,OAAA;EAAA,OACA,WAAA;cAEqC,IAAA,EAAM,WAAA;EAIlD,MAAA,CAAA;AAAA;;;;;;cCVW,oBAAA,SAA6B,KAAA;cAC5B,IAAA;AAAA;;;;;;;;;;cCGD,YAAA,SAAqB,KAAA;cACpB,OAAA;AAAA;;;;;;;;iBCAE,SAAA,CAAU,MAAA,EAAQ,WAAA;;;;;;;;;;;;;AXFlC;iBYQgB,cAAA,CAAe,SAAA,WAAoB,eAAA;;;;;;;;iBCNnC,aAAA,CAAc,SAAA,EAAW,eAAA,EAAiB,WAAA"}
|
package/dist/quarry/index.mjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import "../
|
|
2
|
-
import "../
|
|
3
|
-
import
|
|
4
|
-
import { t as
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
|
|
1
|
+
import "../logger-CGT91VY6.mjs";
|
|
2
|
+
import "../events-CvUSgEuN.mjs";
|
|
3
|
+
import "../colors-Y7WIFXs7.mjs";
|
|
4
|
+
import { n as CommandError, t as Command } from "../command-B1CPgsrU.mjs";
|
|
5
|
+
import { t as isCommand } from "../is-command-DJVI6wEJ.mjs";
|
|
6
|
+
import "../openapi-tools.service-B3TxYKoQ.mjs";
|
|
7
|
+
import { a as QueueListCommand, c as HelpCommand, d as ApiCommand, i as RouteListCommand, l as CommandNotFoundError, n as parseSignature, o as McpToolsCommand, r as ScheduleListCommand, s as McpServeCommand, t as QuarryRegistry, u as EventListCommand } from "../quarry-registry-B2rkO-JS.mjs";
|
|
8
|
+
import { t as generateUsage } from "../usage-generator-CVIsENuE.mjs";
|
|
9
|
+
export { ApiCommand, Command, CommandError, CommandNotFoundError, EventListCommand, HelpCommand, McpServeCommand, McpToolsCommand, QuarryRegistry, QueueListCommand, RouteListCommand, ScheduleListCommand, generateUsage, isCommand, parseSignature };
|