@lssm/lib.contracts-transformers 0.0.0-canary-20251221114240 → 0.0.0-canary-20251221144710
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/common/types.d.ts +2 -0
- package/dist/common/types.d.ts.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.js +10 -2
- package/dist/openapi/exporter/data-views.d.ts +38 -0
- package/dist/openapi/exporter/data-views.d.ts.map +1 -0
- package/dist/openapi/exporter/data-views.js +47 -0
- package/dist/openapi/exporter/data-views.js.map +1 -0
- package/dist/openapi/exporter/events.d.ts +28 -0
- package/dist/openapi/exporter/events.d.ts.map +1 -0
- package/dist/openapi/exporter/events.js +39 -0
- package/dist/openapi/exporter/events.js.map +1 -0
- package/dist/openapi/exporter/features.d.ts +37 -0
- package/dist/openapi/exporter/features.d.ts.map +1 -0
- package/dist/openapi/exporter/features.js +46 -0
- package/dist/openapi/exporter/features.js.map +1 -0
- package/dist/openapi/exporter/forms.d.ts +30 -0
- package/dist/openapi/exporter/forms.d.ts.map +1 -0
- package/dist/openapi/exporter/forms.js +49 -0
- package/dist/openapi/exporter/forms.js.map +1 -0
- package/dist/openapi/exporter/index.js +8 -0
- package/dist/openapi/exporter/operations.d.ts +65 -0
- package/dist/openapi/exporter/operations.d.ts.map +1 -0
- package/dist/openapi/exporter/operations.js +142 -0
- package/dist/openapi/exporter/operations.js.map +1 -0
- package/dist/openapi/exporter/presentations.d.ts +48 -0
- package/dist/openapi/exporter/presentations.d.ts.map +1 -0
- package/dist/openapi/exporter/presentations.js +66 -0
- package/dist/openapi/exporter/presentations.js.map +1 -0
- package/dist/openapi/exporter/registries.d.ts +23 -0
- package/dist/openapi/exporter/registries.d.ts.map +1 -0
- package/dist/openapi/exporter/registries.js +29 -0
- package/dist/openapi/exporter/registries.js.map +1 -0
- package/dist/openapi/exporter/workflows.d.ts +36 -0
- package/dist/openapi/exporter/workflows.d.ts.map +1 -0
- package/dist/openapi/exporter/workflows.js +54 -0
- package/dist/openapi/exporter/workflows.js.map +1 -0
- package/dist/openapi/exporter.d.ts +29 -9
- package/dist/openapi/exporter.d.ts.map +1 -1
- package/dist/openapi/exporter.js +76 -102
- package/dist/openapi/exporter.js.map +1 -1
- package/dist/openapi/importer/grouping.js +73 -0
- package/dist/openapi/importer/grouping.js.map +1 -0
- package/dist/openapi/importer/index.d.ts.map +1 -1
- package/dist/openapi/importer/index.js +7 -0
- package/dist/openapi/importer/index.js.map +1 -1
- package/dist/openapi/index.d.ts +10 -2
- package/dist/openapi/index.js +11 -2
- package/dist/openapi/schema-converter.d.ts.map +1 -1
- package/dist/openapi/schema-converter.js.map +1 -1
- package/dist/openapi/types.d.ts +62 -1
- package/dist/openapi/types.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/openapi/exporter/operations.ts
|
|
4
|
+
/**
|
|
5
|
+
* Convert a spec name and version to an operationId.
|
|
6
|
+
*/
|
|
7
|
+
function toOperationId(name, version) {
|
|
8
|
+
return `${name.replace(/\./g, "_")}_v${version}`;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Convert a spec name and version to a schema name.
|
|
12
|
+
*/
|
|
13
|
+
function toSchemaName(prefix, name, version) {
|
|
14
|
+
return `${prefix}_${toOperationId(name, version)}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Determine HTTP method from spec kind and override.
|
|
18
|
+
*/
|
|
19
|
+
function toHttpMethod(kind, override) {
|
|
20
|
+
return (override ?? (kind === "query" ? "GET" : "POST")).toLowerCase();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate default REST path from spec name and version.
|
|
24
|
+
*/
|
|
25
|
+
function defaultRestPath(name, version) {
|
|
26
|
+
return `/${name.replace(/\./g, "/")}/v${version}`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get REST path from spec, using transport override or default.
|
|
30
|
+
*/
|
|
31
|
+
function toRestPath(spec) {
|
|
32
|
+
const path = spec.transport?.rest?.path ?? defaultRestPath(spec.meta.name, spec.meta.version);
|
|
33
|
+
return path.startsWith("/") ? path : `/${path}`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Convert a SchemaModel to JSON Schema using Zod.
|
|
37
|
+
*/
|
|
38
|
+
function schemaModelToJsonSchema(schema) {
|
|
39
|
+
if (!schema) return null;
|
|
40
|
+
return z.toJSONSchema(schema.getZod());
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extract JSON Schema for a spec's input and output.
|
|
44
|
+
*/
|
|
45
|
+
function jsonSchemaForSpec(spec) {
|
|
46
|
+
return {
|
|
47
|
+
input: schemaModelToJsonSchema(spec.io.input),
|
|
48
|
+
output: schemaModelToJsonSchema(spec.io.output),
|
|
49
|
+
meta: {
|
|
50
|
+
name: spec.meta.name,
|
|
51
|
+
version: spec.meta.version,
|
|
52
|
+
kind: spec.meta.kind,
|
|
53
|
+
description: spec.meta.description,
|
|
54
|
+
tags: spec.meta.tags ?? [],
|
|
55
|
+
stability: spec.meta.stability ?? "stable"
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Export operations from a registry to OpenAPI paths and schemas.
|
|
61
|
+
*/
|
|
62
|
+
function exportOperations(registry) {
|
|
63
|
+
const specs = registry.listSpecs().filter((s) => s.meta.kind === "command" || s.meta.kind === "query").slice().sort((a, b) => {
|
|
64
|
+
const byName = a.meta.name.localeCompare(b.meta.name);
|
|
65
|
+
return byName !== 0 ? byName : a.meta.version - b.meta.version;
|
|
66
|
+
});
|
|
67
|
+
const paths = {};
|
|
68
|
+
const schemas = {};
|
|
69
|
+
for (const spec of specs) {
|
|
70
|
+
const schema = jsonSchemaForSpec(spec);
|
|
71
|
+
const method = toHttpMethod(spec.meta.kind, spec.transport?.rest?.method);
|
|
72
|
+
const path = toRestPath(spec);
|
|
73
|
+
const operationId = toOperationId(spec.meta.name, spec.meta.version);
|
|
74
|
+
const pathItem = paths[path] ??= {};
|
|
75
|
+
const op = {
|
|
76
|
+
operationId,
|
|
77
|
+
summary: spec.meta.description ?? spec.meta.name,
|
|
78
|
+
description: spec.meta.description,
|
|
79
|
+
tags: spec.meta.tags ?? [],
|
|
80
|
+
"x-contractspec": {
|
|
81
|
+
name: spec.meta.name,
|
|
82
|
+
version: spec.meta.version,
|
|
83
|
+
kind: spec.meta.kind
|
|
84
|
+
},
|
|
85
|
+
responses: {}
|
|
86
|
+
};
|
|
87
|
+
if (schema.input) {
|
|
88
|
+
const inputName = toSchemaName("Input", spec.meta.name, spec.meta.version);
|
|
89
|
+
schemas[inputName] = schema.input;
|
|
90
|
+
op["requestBody"] = {
|
|
91
|
+
required: true,
|
|
92
|
+
content: { "application/json": { schema: { $ref: `#/components/schemas/${inputName}` } } }
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const responses = {};
|
|
96
|
+
if (schema.output) {
|
|
97
|
+
const outputName = toSchemaName("Output", spec.meta.name, spec.meta.version);
|
|
98
|
+
schemas[outputName] = schema.output;
|
|
99
|
+
responses["200"] = {
|
|
100
|
+
description: "OK",
|
|
101
|
+
content: { "application/json": { schema: { $ref: `#/components/schemas/${outputName}` } } }
|
|
102
|
+
};
|
|
103
|
+
} else responses["200"] = { description: "OK" };
|
|
104
|
+
op["responses"] = responses;
|
|
105
|
+
pathItem[method] = op;
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
paths,
|
|
109
|
+
schemas
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Generate TypeScript code for operations registry.
|
|
114
|
+
*/
|
|
115
|
+
function generateOperationsRegistry(registry) {
|
|
116
|
+
const specs = registry.listSpecs();
|
|
117
|
+
const imports = /* @__PURE__ */ new Set();
|
|
118
|
+
const registrations = [];
|
|
119
|
+
for (const spec of specs) {
|
|
120
|
+
const specVarName = spec.meta.name.replace(/\./g, "_") + `_v${spec.meta.version}`;
|
|
121
|
+
imports.add(`import { ${specVarName} } from './${spec.meta.name.split(".")[0]}';`);
|
|
122
|
+
registrations.push(` .register(${specVarName})`);
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
code: `/**
|
|
126
|
+
* Auto-generated operations registry.
|
|
127
|
+
* DO NOT EDIT - This file is generated by ContractSpec exporter.
|
|
128
|
+
*/
|
|
129
|
+
import { OperationSpecRegistry } from '@lssm/lib.contracts';
|
|
130
|
+
|
|
131
|
+
${Array.from(imports).join("\n")}
|
|
132
|
+
|
|
133
|
+
export const operationsRegistry = new OperationSpecRegistry()
|
|
134
|
+
${registrations.join("\n")};
|
|
135
|
+
`,
|
|
136
|
+
fileName: "operations-registry.ts"
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
//#endregion
|
|
141
|
+
export { defaultRestPath, exportOperations, generateOperationsRegistry, jsonSchemaForSpec, schemaModelToJsonSchema, toHttpMethod, toOperationId, toRestPath, toSchemaName };
|
|
142
|
+
//# sourceMappingURL=operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.js","names":["paths: Record<string, Record<string, unknown>>","schemas: Record<string, OpenApiSchemaObject>","op: Record<string, unknown>","responses: Record<string, unknown>","registrations: string[]"],"sources":["../../../src/openapi/exporter/operations.ts"],"sourcesContent":["/**\n * Operations exporter - exports OperationSpec to OpenAPI paths.\n */\nimport type {\n AnyOperationSpec,\n OperationSpec,\n OperationSpecRegistry,\n} from '@lssm/lib.contracts';\nimport type { AnySchemaModel } from '@lssm/lib.schema';\nimport { z } from 'zod';\nimport type { GeneratedRegistryCode } from '../types';\n\ntype OpenApiSchemaObject = Record<string, unknown>;\n\n/**\n * Convert a spec name and version to an operationId.\n */\nexport function toOperationId(name: string, version: number): string {\n return `${name.replace(/\\./g, '_')}_v${version}`;\n}\n\n/**\n * Convert a spec name and version to a schema name.\n */\nexport function toSchemaName(\n prefix: 'Input' | 'Output',\n name: string,\n version: number\n): string {\n return `${prefix}_${toOperationId(name, version)}`;\n}\n\n/**\n * Determine HTTP method from spec kind and override.\n */\nexport function toHttpMethod(\n kind: 'command' | 'query',\n override?: 'GET' | 'POST'\n): string {\n const method = override ?? (kind === 'query' ? 'GET' : 'POST');\n return method.toLowerCase();\n}\n\n/**\n * Generate default REST path from spec name and version.\n */\nexport function defaultRestPath(name: string, version: number): string {\n return `/${name.replace(/\\./g, '/')}/v${version}`;\n}\n\n/**\n * Get REST path from spec, using transport override or default.\n */\nexport function toRestPath(spec: AnyOperationSpec): string {\n const path =\n spec.transport?.rest?.path ??\n defaultRestPath(spec.meta.name, spec.meta.version);\n return path.startsWith('/') ? path : `/${path}`;\n}\n\n/**\n * Convert a SchemaModel to JSON Schema using Zod.\n */\nexport function schemaModelToJsonSchema(\n schema: AnySchemaModel | null\n): OpenApiSchemaObject | null {\n if (!schema) return null;\n return z.toJSONSchema(schema.getZod()) as OpenApiSchemaObject;\n}\n\ninterface SpecJsonSchema {\n input: OpenApiSchemaObject | null;\n output: OpenApiSchemaObject | null;\n meta: {\n name: string;\n version: number;\n kind: 'command' | 'query';\n description: string;\n tags: string[];\n stability: string;\n };\n}\n\n/**\n * Extract JSON Schema for a spec's input and output.\n */\nexport function jsonSchemaForSpec(\n spec: OperationSpec<AnySchemaModel, AnySchemaModel>\n): SpecJsonSchema {\n return {\n input: schemaModelToJsonSchema(spec.io.input),\n output: schemaModelToJsonSchema(spec.io.output as AnySchemaModel | null),\n meta: {\n name: spec.meta.name,\n version: spec.meta.version,\n kind: spec.meta.kind,\n description: spec.meta.description,\n tags: spec.meta.tags ?? [],\n stability: spec.meta.stability ?? 'stable',\n },\n };\n}\n\n/**\n * Result of exporting operations to OpenAPI format.\n */\nexport interface OperationsExportResult {\n paths: Record<string, Record<string, unknown>>;\n schemas: Record<string, OpenApiSchemaObject>;\n}\n\n/**\n * Export operations from a registry to OpenAPI paths and schemas.\n */\nexport function exportOperations(\n registry: OperationSpecRegistry\n): OperationsExportResult {\n const specs = registry\n .listSpecs()\n .filter(\n (s): s is AnyOperationSpec =>\n s.meta.kind === 'command' || s.meta.kind === 'query'\n )\n .slice()\n .sort((a, b) => {\n const byName = a.meta.name.localeCompare(b.meta.name);\n return byName !== 0 ? byName : a.meta.version - b.meta.version;\n });\n\n const paths: Record<string, Record<string, unknown>> = {};\n const schemas: Record<string, OpenApiSchemaObject> = {};\n\n for (const spec of specs) {\n const schema = jsonSchemaForSpec(\n spec as unknown as OperationSpec<AnySchemaModel, AnySchemaModel>\n );\n const method = toHttpMethod(spec.meta.kind, spec.transport?.rest?.method);\n const path = toRestPath(spec);\n\n const operationId = toOperationId(spec.meta.name, spec.meta.version);\n\n const pathItem = (paths[path] ??= {});\n const op: Record<string, unknown> = {\n operationId,\n summary: spec.meta.description ?? spec.meta.name,\n description: spec.meta.description,\n tags: spec.meta.tags ?? [],\n 'x-contractspec': {\n name: spec.meta.name,\n version: spec.meta.version,\n kind: spec.meta.kind,\n },\n responses: {},\n };\n\n if (schema.input) {\n const inputName = toSchemaName('Input', spec.meta.name, spec.meta.version);\n schemas[inputName] = schema.input;\n op['requestBody'] = {\n required: true,\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${inputName}` },\n },\n },\n };\n }\n\n const responses: Record<string, unknown> = {};\n if (schema.output) {\n const outputName = toSchemaName(\n 'Output',\n spec.meta.name,\n spec.meta.version\n );\n schemas[outputName] = schema.output;\n responses['200'] = {\n description: 'OK',\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${outputName}` },\n },\n },\n };\n } else {\n responses['200'] = { description: 'OK' };\n }\n op['responses'] = responses;\n\n pathItem[method] = op;\n }\n\n return { paths, schemas };\n}\n\n/**\n * Generate TypeScript code for operations registry.\n */\nexport function generateOperationsRegistry(\n registry: OperationSpecRegistry\n): GeneratedRegistryCode {\n const specs = registry.listSpecs();\n\n const imports = new Set<string>();\n const registrations: string[] = [];\n\n for (const spec of specs) {\n const specVarName = spec.meta.name.replace(/\\./g, '_') + `_v${spec.meta.version}`;\n imports.add(`import { ${specVarName} } from './${spec.meta.name.split('.')[0]}';`);\n registrations.push(` .register(${specVarName})`);\n }\n\n const code = `/**\n * Auto-generated operations registry.\n * DO NOT EDIT - This file is generated by ContractSpec exporter.\n */\nimport { OperationSpecRegistry } from '@lssm/lib.contracts';\n\n${Array.from(imports).join('\\n')}\n\nexport const operationsRegistry = new OperationSpecRegistry()\n${registrations.join('\\n')};\n`;\n\n return {\n code,\n fileName: 'operations-registry.ts',\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { GeneratedRegistryCode } from "../types.js";
|
|
2
|
+
import { PresentationDescriptorV2, PresentationRegistry } from "@lssm/lib.contracts";
|
|
3
|
+
|
|
4
|
+
//#region src/openapi/exporter/presentations.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Exported presentation structure for OpenAPI extensions.
|
|
8
|
+
*/
|
|
9
|
+
interface ExportedPresentation {
|
|
10
|
+
name: string;
|
|
11
|
+
version: number;
|
|
12
|
+
description?: string;
|
|
13
|
+
stability?: string;
|
|
14
|
+
kind: 'web_component' | 'markdown' | 'data';
|
|
15
|
+
tags?: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Export presentations (V1) to OpenAPI extension format.
|
|
19
|
+
*/
|
|
20
|
+
declare function exportPresentationsV1(registry: PresentationRegistry): ExportedPresentation[];
|
|
21
|
+
/**
|
|
22
|
+
* Exported V2 presentation structure for OpenAPI extensions.
|
|
23
|
+
*/
|
|
24
|
+
interface ExportedPresentationV2 {
|
|
25
|
+
name: string;
|
|
26
|
+
version: number;
|
|
27
|
+
description?: string;
|
|
28
|
+
targets: string[];
|
|
29
|
+
sourceType: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Export presentations (V2) to OpenAPI extension format.
|
|
33
|
+
*/
|
|
34
|
+
declare function exportPresentationsV2(descriptors: PresentationDescriptorV2[]): ExportedPresentationV2[];
|
|
35
|
+
/**
|
|
36
|
+
* Combined presentations export.
|
|
37
|
+
*/
|
|
38
|
+
declare function exportPresentations(registry: PresentationRegistry, v2Descriptors?: PresentationDescriptorV2[]): {
|
|
39
|
+
v1: ExportedPresentation[];
|
|
40
|
+
v2: ExportedPresentationV2[];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Generate TypeScript code for presentations registry.
|
|
44
|
+
*/
|
|
45
|
+
declare function generatePresentationsRegistry(registry: PresentationRegistry): GeneratedRegistryCode;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { ExportedPresentation, ExportedPresentationV2, exportPresentations, exportPresentationsV1, exportPresentationsV2, generatePresentationsRegistry };
|
|
48
|
+
//# sourceMappingURL=presentations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentations.d.ts","names":[],"sources":["../../../src/openapi/exporter/presentations.ts"],"sourcesContent":[],"mappings":";;;;;AAyBA;AAgBA;AAWA;AAegB,UAtDC,oBAAA,CAsDkB;EACvB,IAAA,EAAA,MAAA;EACM,OAAA,EAAA,MAAA;EAEZ,WAAA,CAAA,EAAA,MAAA;EACA,SAAA,CAAA,EAAA,MAAA;EAAsB,IAAA,EAAA,eAAA,GAAA,UAAA,GAAA,MAAA;EAWZ,IAAA,CAAA,EAAA,MAAA,EAAA;;;;;iBA1DA,qBAAA,WACJ,uBACT;;;;UAcc,sBAAA;;;;;;;;;;iBAWD,qBAAA,cACD,6BACZ;;;;iBAaa,mBAAA,WACJ,sCACM;MAEZ;MACA;;;;;iBAWU,6BAAA,WACJ,uBACT"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
//#region src/openapi/exporter/presentations.ts
|
|
2
|
+
/**
|
|
3
|
+
* Export presentations (V1) to OpenAPI extension format.
|
|
4
|
+
*/
|
|
5
|
+
function exportPresentationsV1(registry) {
|
|
6
|
+
return registry.list().map((pres) => ({
|
|
7
|
+
name: pres.meta.name,
|
|
8
|
+
version: pres.meta.version,
|
|
9
|
+
description: pres.meta.description,
|
|
10
|
+
stability: pres.meta.stability,
|
|
11
|
+
kind: pres.content.kind,
|
|
12
|
+
tags: pres.meta.tags
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Export presentations (V2) to OpenAPI extension format.
|
|
17
|
+
*/
|
|
18
|
+
function exportPresentationsV2(descriptors) {
|
|
19
|
+
return descriptors.map((desc) => ({
|
|
20
|
+
name: desc.meta.name,
|
|
21
|
+
version: desc.meta.version,
|
|
22
|
+
description: desc.meta.description,
|
|
23
|
+
targets: desc.targets,
|
|
24
|
+
sourceType: desc.source.type
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Combined presentations export.
|
|
29
|
+
*/
|
|
30
|
+
function exportPresentations(registry, v2Descriptors) {
|
|
31
|
+
return {
|
|
32
|
+
v1: exportPresentationsV1(registry),
|
|
33
|
+
v2: v2Descriptors ? exportPresentationsV2(v2Descriptors) : []
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Generate TypeScript code for presentations registry.
|
|
38
|
+
*/
|
|
39
|
+
function generatePresentationsRegistry(registry) {
|
|
40
|
+
const presentations = registry.list();
|
|
41
|
+
const imports = /* @__PURE__ */ new Set();
|
|
42
|
+
const registrations = [];
|
|
43
|
+
for (const pres of presentations) {
|
|
44
|
+
const presVarName = pres.meta.name.replace(/\./g, "_") + `_v${pres.meta.version}`;
|
|
45
|
+
imports.add(`import { ${presVarName} } from './${pres.meta.name.split(".")[0]}';`);
|
|
46
|
+
registrations.push(` .register(${presVarName})`);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
code: `/**
|
|
50
|
+
* Auto-generated presentations registry.
|
|
51
|
+
* DO NOT EDIT - This file is generated by ContractSpec exporter.
|
|
52
|
+
*/
|
|
53
|
+
import { PresentationRegistry } from '@lssm/lib.contracts';
|
|
54
|
+
|
|
55
|
+
${Array.from(imports).join("\n")}
|
|
56
|
+
|
|
57
|
+
export const presentationsRegistry = new PresentationRegistry()
|
|
58
|
+
${registrations.join("\n")};
|
|
59
|
+
`,
|
|
60
|
+
fileName: "presentations-registry.ts"
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
//#endregion
|
|
65
|
+
export { exportPresentations, exportPresentationsV1, exportPresentationsV2, generatePresentationsRegistry };
|
|
66
|
+
//# sourceMappingURL=presentations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentations.js","names":["registrations: string[]"],"sources":["../../../src/openapi/exporter/presentations.ts"],"sourcesContent":["/**\n * Presentations exporter - exports PresentationSpec to OpenAPI extensions.\n */\nimport type {\n PresentationRegistry,\n PresentationSpec,\n PresentationDescriptorV2,\n} from '@lssm/lib.contracts';\nimport type { GeneratedRegistryCode } from '../types';\n\n/**\n * Exported presentation structure for OpenAPI extensions.\n */\nexport interface ExportedPresentation {\n name: string;\n version: number;\n description?: string;\n stability?: string;\n kind: 'web_component' | 'markdown' | 'data';\n tags?: string[];\n}\n\n/**\n * Export presentations (V1) to OpenAPI extension format.\n */\nexport function exportPresentationsV1(\n registry: PresentationRegistry\n): ExportedPresentation[] {\n return registry.list().map((pres) => ({\n name: pres.meta.name,\n version: pres.meta.version,\n description: pres.meta.description,\n stability: pres.meta.stability,\n kind: pres.content.kind,\n tags: pres.meta.tags,\n }));\n}\n\n/**\n * Exported V2 presentation structure for OpenAPI extensions.\n */\nexport interface ExportedPresentationV2 {\n name: string;\n version: number;\n description?: string;\n targets: string[];\n sourceType: string;\n}\n\n/**\n * Export presentations (V2) to OpenAPI extension format.\n */\nexport function exportPresentationsV2(\n descriptors: PresentationDescriptorV2[]\n): ExportedPresentationV2[] {\n return descriptors.map((desc) => ({\n name: desc.meta.name,\n version: desc.meta.version,\n description: desc.meta.description,\n targets: desc.targets,\n sourceType: desc.source.type,\n }));\n}\n\n/**\n * Combined presentations export.\n */\nexport function exportPresentations(\n registry: PresentationRegistry,\n v2Descriptors?: PresentationDescriptorV2[]\n): {\n v1: ExportedPresentation[];\n v2: ExportedPresentationV2[];\n} {\n return {\n v1: exportPresentationsV1(registry),\n v2: v2Descriptors ? exportPresentationsV2(v2Descriptors) : [],\n };\n}\n\n/**\n * Generate TypeScript code for presentations registry.\n */\nexport function generatePresentationsRegistry(\n registry: PresentationRegistry\n): GeneratedRegistryCode {\n const presentations = registry.list();\n const imports = new Set<string>();\n const registrations: string[] = [];\n\n for (const pres of presentations) {\n const presVarName =\n pres.meta.name.replace(/\\./g, '_') + `_v${pres.meta.version}`;\n imports.add(\n `import { ${presVarName} } from './${pres.meta.name.split('.')[0]}';`\n );\n registrations.push(` .register(${presVarName})`);\n }\n\n const code = `/**\n * Auto-generated presentations registry.\n * DO NOT EDIT - This file is generated by ContractSpec exporter.\n */\nimport { PresentationRegistry } from '@lssm/lib.contracts';\n\n${Array.from(imports).join('\\n')}\n\nexport const presentationsRegistry = new PresentationRegistry()\n${registrations.join('\\n')};\n`;\n\n return {\n code,\n fileName: 'presentations-registry.ts',\n };\n}\n"],"mappings":";;;;AAyBA,SAAgB,sBACd,UACwB;AACxB,QAAO,SAAS,MAAM,CAAC,KAAK,UAAU;EACpC,MAAM,KAAK,KAAK;EAChB,SAAS,KAAK,KAAK;EACnB,aAAa,KAAK,KAAK;EACvB,WAAW,KAAK,KAAK;EACrB,MAAM,KAAK,QAAQ;EACnB,MAAM,KAAK,KAAK;EACjB,EAAE;;;;;AAiBL,SAAgB,sBACd,aAC0B;AAC1B,QAAO,YAAY,KAAK,UAAU;EAChC,MAAM,KAAK,KAAK;EAChB,SAAS,KAAK,KAAK;EACnB,aAAa,KAAK,KAAK;EACvB,SAAS,KAAK;EACd,YAAY,KAAK,OAAO;EACzB,EAAE;;;;;AAML,SAAgB,oBACd,UACA,eAIA;AACA,QAAO;EACL,IAAI,sBAAsB,SAAS;EACnC,IAAI,gBAAgB,sBAAsB,cAAc,GAAG,EAAE;EAC9D;;;;;AAMH,SAAgB,8BACd,UACuB;CACvB,MAAM,gBAAgB,SAAS,MAAM;CACrC,MAAM,0BAAU,IAAI,KAAa;CACjC,MAAMA,gBAA0B,EAAE;AAElC,MAAK,MAAM,QAAQ,eAAe;EAChC,MAAM,cACJ,KAAK,KAAK,KAAK,QAAQ,OAAO,IAAI,GAAG,KAAK,KAAK,KAAK;AACtD,UAAQ,IACN,YAAY,YAAY,aAAa,KAAK,KAAK,KAAK,MAAM,IAAI,CAAC,GAAG,IACnE;AACD,gBAAc,KAAK,eAAe,YAAY,GAAG;;AAenD,QAAO;EACL,MAbW;;;;;;EAMb,MAAM,KAAK,QAAQ,CAAC,KAAK,KAAK,CAAC;;;EAG/B,cAAc,KAAK,KAAK,CAAC;;EAKvB,UAAU;EACX"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { GeneratedRegistryCode } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/openapi/exporter/registries.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Registry generation options.
|
|
7
|
+
*/
|
|
8
|
+
interface RegistryGenerationOptions {
|
|
9
|
+
operations?: boolean;
|
|
10
|
+
events?: boolean;
|
|
11
|
+
features?: boolean;
|
|
12
|
+
presentations?: boolean;
|
|
13
|
+
forms?: boolean;
|
|
14
|
+
dataViews?: boolean;
|
|
15
|
+
workflows?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generate unified index file that exports all registries.
|
|
19
|
+
*/
|
|
20
|
+
declare function generateRegistryIndex(options?: RegistryGenerationOptions): GeneratedRegistryCode;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { RegistryGenerationOptions, generateRegistryIndex };
|
|
23
|
+
//# sourceMappingURL=registries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registries.d.ts","names":[],"sources":["../../../src/openapi/exporter/registries.ts"],"sourcesContent":[],"mappings":";;;;AAqBA;;;UAbiB,yBAAA;;;;;;;;;;;;iBAaD,qBAAA,WACL,4BACR"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/openapi/exporter/registries.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generate unified index file that exports all registries.
|
|
4
|
+
*/
|
|
5
|
+
function generateRegistryIndex(options = {}) {
|
|
6
|
+
const { operations = true, events = true, features = true, presentations = true, forms = true, dataViews = true, workflows = true } = options;
|
|
7
|
+
const exports = [];
|
|
8
|
+
if (operations) exports.push("export * from './operations-registry';");
|
|
9
|
+
if (events) exports.push("export * from './events-exports';");
|
|
10
|
+
if (features) exports.push("export * from './features-registry';");
|
|
11
|
+
if (presentations) exports.push("export * from './presentations-registry';");
|
|
12
|
+
if (forms) exports.push("export * from './forms-registry';");
|
|
13
|
+
if (dataViews) exports.push("export * from './dataviews-registry';");
|
|
14
|
+
if (workflows) exports.push("export * from './workflows-registry';");
|
|
15
|
+
return {
|
|
16
|
+
code: `/**
|
|
17
|
+
* Auto-generated registry index.
|
|
18
|
+
* DO NOT EDIT - This file is generated by ContractSpec exporter.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
${exports.join("\n")}
|
|
22
|
+
`,
|
|
23
|
+
fileName: "index.ts"
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
export { generateRegistryIndex };
|
|
29
|
+
//# sourceMappingURL=registries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registries.js","names":["exports: string[]"],"sources":["../../../src/openapi/exporter/registries.ts"],"sourcesContent":["/**\n * Unified registries generator - combines all surface registries.\n */\nimport type { GeneratedRegistryCode } from '../types';\n\n/**\n * Registry generation options.\n */\nexport interface RegistryGenerationOptions {\n operations?: boolean;\n events?: boolean;\n features?: boolean;\n presentations?: boolean;\n forms?: boolean;\n dataViews?: boolean;\n workflows?: boolean;\n}\n\n/**\n * Generate unified index file that exports all registries.\n */\nexport function generateRegistryIndex(\n options: RegistryGenerationOptions = {}\n): GeneratedRegistryCode {\n const {\n operations = true,\n events = true,\n features = true,\n presentations = true,\n forms = true,\n dataViews = true,\n workflows = true,\n } = options;\n\n const exports: string[] = [];\n\n if (operations) {\n exports.push(\"export * from './operations-registry';\");\n }\n if (events) {\n exports.push(\"export * from './events-exports';\");\n }\n if (features) {\n exports.push(\"export * from './features-registry';\");\n }\n if (presentations) {\n exports.push(\"export * from './presentations-registry';\");\n }\n if (forms) {\n exports.push(\"export * from './forms-registry';\");\n }\n if (dataViews) {\n exports.push(\"export * from './dataviews-registry';\");\n }\n if (workflows) {\n exports.push(\"export * from './workflows-registry';\");\n }\n\n const code = `/**\n * Auto-generated registry index.\n * DO NOT EDIT - This file is generated by ContractSpec exporter.\n */\n\n${exports.join('\\n')}\n`;\n\n return {\n code,\n fileName: 'index.ts',\n };\n}\n"],"mappings":";;;;AAqBA,SAAgB,sBACd,UAAqC,EAAE,EAChB;CACvB,MAAM,EACJ,aAAa,MACb,SAAS,MACT,WAAW,MACX,gBAAgB,MAChB,QAAQ,MACR,YAAY,MACZ,YAAY,SACV;CAEJ,MAAMA,UAAoB,EAAE;AAE5B,KAAI,WACF,SAAQ,KAAK,yCAAyC;AAExD,KAAI,OACF,SAAQ,KAAK,oCAAoC;AAEnD,KAAI,SACF,SAAQ,KAAK,uCAAuC;AAEtD,KAAI,cACF,SAAQ,KAAK,4CAA4C;AAE3D,KAAI,MACF,SAAQ,KAAK,oCAAoC;AAEnD,KAAI,UACF,SAAQ,KAAK,wCAAwC;AAEvD,KAAI,UACF,SAAQ,KAAK,wCAAwC;AAWvD,QAAO;EACL,MATW;;;;;EAKb,QAAQ,KAAK,KAAK,CAAC;;EAKjB,UAAU;EACX"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { GeneratedRegistryCode } from "../types.js";
|
|
2
|
+
import { WorkflowRegistry } from "@lssm/lib.contracts";
|
|
3
|
+
|
|
4
|
+
//#region src/openapi/exporter/workflows.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Exported workflow structure for OpenAPI extensions.
|
|
8
|
+
*/
|
|
9
|
+
interface ExportedWorkflow {
|
|
10
|
+
name: string;
|
|
11
|
+
version: number;
|
|
12
|
+
description?: string;
|
|
13
|
+
stability?: string;
|
|
14
|
+
owners?: string[];
|
|
15
|
+
steps: {
|
|
16
|
+
id: string;
|
|
17
|
+
type: 'human' | 'automation' | 'decision';
|
|
18
|
+
label: string;
|
|
19
|
+
}[];
|
|
20
|
+
transitions: {
|
|
21
|
+
from: string;
|
|
22
|
+
to: string;
|
|
23
|
+
label?: string;
|
|
24
|
+
}[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Export workflows to OpenAPI extension format.
|
|
28
|
+
*/
|
|
29
|
+
declare function exportWorkflows(registry: WorkflowRegistry): ExportedWorkflow[];
|
|
30
|
+
/**
|
|
31
|
+
* Generate TypeScript code for workflows registry.
|
|
32
|
+
*/
|
|
33
|
+
declare function generateWorkflowsRegistry(registry: WorkflowRegistry): GeneratedRegistryCode;
|
|
34
|
+
//#endregion
|
|
35
|
+
export { ExportedWorkflow, exportWorkflows, generateWorkflowsRegistry };
|
|
36
|
+
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","names":[],"sources":["../../../src/openapi/exporter/workflows.ts"],"sourcesContent":[],"mappings":";;;;;AA8BA;AAyBA;;UA9CiB,gBAAA;;;;;;;;;;;;;;;;;;;;iBAqBD,eAAA,WACJ,mBACT;;;;iBAuBa,yBAAA,WACJ,mBACT"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//#region src/openapi/exporter/workflows.ts
|
|
2
|
+
/**
|
|
3
|
+
* Export workflows to OpenAPI extension format.
|
|
4
|
+
*/
|
|
5
|
+
function exportWorkflows(registry) {
|
|
6
|
+
return registry.list().map((wf) => ({
|
|
7
|
+
name: wf.meta.name,
|
|
8
|
+
version: wf.meta.version,
|
|
9
|
+
description: wf.meta.description,
|
|
10
|
+
stability: wf.meta.stability,
|
|
11
|
+
owners: wf.meta.owners,
|
|
12
|
+
steps: wf.definition.steps.map((s) => ({
|
|
13
|
+
id: s.id,
|
|
14
|
+
type: s.type,
|
|
15
|
+
label: s.label
|
|
16
|
+
})),
|
|
17
|
+
transitions: wf.definition.transitions.map((t) => ({
|
|
18
|
+
from: t.from,
|
|
19
|
+
to: t.to,
|
|
20
|
+
label: t.label
|
|
21
|
+
}))
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generate TypeScript code for workflows registry.
|
|
26
|
+
*/
|
|
27
|
+
function generateWorkflowsRegistry(registry) {
|
|
28
|
+
const workflows = registry.list();
|
|
29
|
+
const imports = /* @__PURE__ */ new Set();
|
|
30
|
+
const registrations = [];
|
|
31
|
+
for (const wf of workflows) {
|
|
32
|
+
const wfVarName = wf.meta.name.replace(/\./g, "_") + `_v${wf.meta.version}`;
|
|
33
|
+
imports.add(`import { ${wfVarName} } from './${wf.meta.name.split(".")[0]}';`);
|
|
34
|
+
registrations.push(` .register(${wfVarName})`);
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
code: `/**
|
|
38
|
+
* Auto-generated workflows registry.
|
|
39
|
+
* DO NOT EDIT - This file is generated by ContractSpec exporter.
|
|
40
|
+
*/
|
|
41
|
+
import { WorkflowRegistry } from '@lssm/lib.contracts';
|
|
42
|
+
|
|
43
|
+
${Array.from(imports).join("\n")}
|
|
44
|
+
|
|
45
|
+
export const workflowsRegistry = new WorkflowRegistry()
|
|
46
|
+
${registrations.join("\n")};
|
|
47
|
+
`,
|
|
48
|
+
fileName: "workflows-registry.ts"
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
export { exportWorkflows, generateWorkflowsRegistry };
|
|
54
|
+
//# sourceMappingURL=workflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.js","names":["registrations: string[]"],"sources":["../../../src/openapi/exporter/workflows.ts"],"sourcesContent":["/**\n * Workflows exporter - exports WorkflowSpec to OpenAPI extensions.\n */\nimport type { WorkflowRegistry, WorkflowSpec } from '@lssm/lib.contracts';\nimport type { GeneratedRegistryCode } from '../types';\n\n/**\n * Exported workflow structure for OpenAPI extensions.\n */\nexport interface ExportedWorkflow {\n name: string;\n version: number;\n description?: string;\n stability?: string;\n owners?: string[];\n steps: {\n id: string;\n type: 'human' | 'automation' | 'decision';\n label: string;\n }[];\n transitions: {\n from: string;\n to: string;\n label?: string;\n }[];\n}\n\n/**\n * Export workflows to OpenAPI extension format.\n */\nexport function exportWorkflows(\n registry: WorkflowRegistry\n): ExportedWorkflow[] {\n return registry.list().map((wf) => ({\n name: wf.meta.name,\n version: wf.meta.version,\n description: wf.meta.description,\n stability: wf.meta.stability,\n owners: wf.meta.owners,\n steps: wf.definition.steps.map((s) => ({\n id: s.id,\n type: s.type,\n label: s.label,\n })),\n transitions: wf.definition.transitions.map((t) => ({\n from: t.from,\n to: t.to,\n label: t.label,\n })),\n }));\n}\n\n/**\n * Generate TypeScript code for workflows registry.\n */\nexport function generateWorkflowsRegistry(\n registry: WorkflowRegistry\n): GeneratedRegistryCode {\n const workflows = registry.list();\n const imports = new Set<string>();\n const registrations: string[] = [];\n\n for (const wf of workflows) {\n const wfVarName = wf.meta.name.replace(/\\./g, '_') + `_v${wf.meta.version}`;\n imports.add(\n `import { ${wfVarName} } from './${wf.meta.name.split('.')[0]}';`\n );\n registrations.push(` .register(${wfVarName})`);\n }\n\n const code = `/**\n * Auto-generated workflows registry.\n * DO NOT EDIT - This file is generated by ContractSpec exporter.\n */\nimport { WorkflowRegistry } from '@lssm/lib.contracts';\n\n${Array.from(imports).join('\\n')}\n\nexport const workflowsRegistry = new WorkflowRegistry()\n${registrations.join('\\n')};\n`;\n\n return {\n code,\n fileName: 'workflows-registry.ts',\n };\n}\n"],"mappings":";;;;AA8BA,SAAgB,gBACd,UACoB;AACpB,QAAO,SAAS,MAAM,CAAC,KAAK,QAAQ;EAClC,MAAM,GAAG,KAAK;EACd,SAAS,GAAG,KAAK;EACjB,aAAa,GAAG,KAAK;EACrB,WAAW,GAAG,KAAK;EACnB,QAAQ,GAAG,KAAK;EAChB,OAAO,GAAG,WAAW,MAAM,KAAK,OAAO;GACrC,IAAI,EAAE;GACN,MAAM,EAAE;GACR,OAAO,EAAE;GACV,EAAE;EACH,aAAa,GAAG,WAAW,YAAY,KAAK,OAAO;GACjD,MAAM,EAAE;GACR,IAAI,EAAE;GACN,OAAO,EAAE;GACV,EAAE;EACJ,EAAE;;;;;AAML,SAAgB,0BACd,UACuB;CACvB,MAAM,YAAY,SAAS,MAAM;CACjC,MAAM,0BAAU,IAAI,KAAa;CACjC,MAAMA,gBAA0B,EAAE;AAElC,MAAK,MAAM,MAAM,WAAW;EAC1B,MAAM,YAAY,GAAG,KAAK,KAAK,QAAQ,OAAO,IAAI,GAAG,KAAK,GAAG,KAAK;AAClE,UAAQ,IACN,YAAY,UAAU,aAAa,GAAG,KAAK,KAAK,MAAM,IAAI,CAAC,GAAG,IAC/D;AACD,gBAAc,KAAK,eAAe,UAAU,GAAG;;AAejD,QAAO;EACL,MAbW;;;;;;EAMb,MAAM,KAAK,QAAQ,CAAC,KAAK,KAAK,CAAC;;;EAG/B,cAAc,KAAK,KAAK,CAAC;;EAKvB,UAAU;EACX"}
|
|
@@ -1,20 +1,32 @@
|
|
|
1
|
-
import { ContractSpecOpenApiDocument, OpenApiExportOptions, OpenApiServer } from "./types.js";
|
|
2
|
-
import {
|
|
1
|
+
import { ContractSpecExportOptions, ContractSpecExportResult, ContractSpecOpenApiDocument, OpenApiExportOptions, OpenApiServer } from "./types.js";
|
|
2
|
+
import { defaultRestPath } from "./exporter/operations.js";
|
|
3
|
+
import { DataViewRegistry, EventSpec, FeatureRegistry, FormRegistry, OperationSpecRegistry, PresentationDescriptorV2, PresentationRegistry, WorkflowRegistry } from "@lssm/lib.contracts";
|
|
4
|
+
import { AnySchemaModel } from "@lssm/lib.schema";
|
|
3
5
|
|
|
4
6
|
//#region src/openapi/exporter.d.ts
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
|
-
*
|
|
9
|
+
* Input registries for unified export.
|
|
8
10
|
*/
|
|
9
|
-
|
|
11
|
+
interface ContractSpecRegistries {
|
|
12
|
+
operations?: OperationSpecRegistry;
|
|
13
|
+
events?: EventSpec<AnySchemaModel>[];
|
|
14
|
+
features?: FeatureRegistry;
|
|
15
|
+
presentations?: PresentationRegistry;
|
|
16
|
+
presentationsV2?: PresentationDescriptorV2[];
|
|
17
|
+
forms?: FormRegistry;
|
|
18
|
+
dataViews?: DataViewRegistry;
|
|
19
|
+
workflows?: WorkflowRegistry;
|
|
20
|
+
}
|
|
10
21
|
/**
|
|
11
22
|
* Export a OperationSpecRegistry to an OpenAPI 3.1 document.
|
|
12
|
-
*
|
|
13
|
-
* @param registry - The OperationSpecRegistry containing specs to export
|
|
14
|
-
* @param options - Export options (title, version, description, servers)
|
|
15
|
-
* @returns OpenAPI 3.1 document
|
|
23
|
+
* @deprecated Use exportContractSpec for full surface support.
|
|
16
24
|
*/
|
|
17
25
|
declare function openApiForRegistry(registry: OperationSpecRegistry, options?: OpenApiExportOptions): ContractSpecOpenApiDocument;
|
|
26
|
+
/**
|
|
27
|
+
* Export all ContractSpec surfaces to OpenAPI document with extensions.
|
|
28
|
+
*/
|
|
29
|
+
declare function exportContractSpec(registries: ContractSpecRegistries, options?: ContractSpecExportOptions): ContractSpecExportResult;
|
|
18
30
|
/**
|
|
19
31
|
* Export a OperationSpecRegistry to OpenAPI JSON string.
|
|
20
32
|
*/
|
|
@@ -23,6 +35,14 @@ declare function openApiToJson(registry: OperationSpecRegistry, options?: OpenAp
|
|
|
23
35
|
* Export a OperationSpecRegistry to OpenAPI YAML string.
|
|
24
36
|
*/
|
|
25
37
|
declare function openApiToYaml(registry: OperationSpecRegistry, options?: OpenApiExportOptions): string;
|
|
38
|
+
/**
|
|
39
|
+
* Export ContractSpec to JSON string (all surfaces).
|
|
40
|
+
*/
|
|
41
|
+
declare function contractSpecToJson(registries: ContractSpecRegistries, options?: ContractSpecExportOptions): string;
|
|
42
|
+
/**
|
|
43
|
+
* Export ContractSpec to YAML string (all surfaces).
|
|
44
|
+
*/
|
|
45
|
+
declare function contractSpecToYaml(registries: ContractSpecRegistries, options?: ContractSpecExportOptions): string;
|
|
26
46
|
//#endregion
|
|
27
|
-
export {
|
|
47
|
+
export { ContractSpecRegistries, contractSpecToJson, contractSpecToYaml, exportContractSpec, openApiForRegistry, openApiToJson, openApiToYaml };
|
|
28
48
|
//# sourceMappingURL=exporter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exporter.d.ts","names":[],"sources":["../../src/openapi/exporter.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exporter.d.ts","names":[],"sources":["../../src/openapi/exporter.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AAmDkB,UAJD,sBAAA,CAIC;EACE,UAAA,CAAA,EAJL,qBAIK;EACV,MAAA,CAAA,EAJC,SAID,CAJW,cAIX,CAAA,EAAA;EACI,QAAA,CAAA,EAJD,eAIC;EACA,aAAA,CAAA,EAJI,oBAIJ;EAAgB,eAAA,CAAA,EAHV,wBAGU,EAAA;EAUd,KAAA,CAAA,EAZN,YAYM;EACJ,SAAA,CAAA,EAZE,gBAYF;EACD,SAAA,CAAA,EAZG,gBAYH;;AAoBX;;;;AAG2B,iBAzBX,kBAAA,CAyBW,QAAA,EAxBf,qBAwBe,EAAA,OAAA,CAAA,EAvBhB,oBAuBgB,CAAA,EAtBxB,2BAsBwB;AAiI3B;AAWA;AAWA;AAWgB,iBArKA,kBAAA,CAsKF,UAAA,EArKA,sBAsKH,EAAA,OAA8B,CAAA,EArK9B,yBAqK8B,CAAA,EApKtC,wBAoKsC;;;;iBAnCzB,aAAA,WACJ,iCACD;;;;iBASK,aAAA,WACJ,iCACD;;;;iBASK,kBAAA,aACF,kCACH;;;;iBASK,kBAAA,aACF,kCACH"}
|