@demoscript/cli 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/bundle.cjs +43254 -0
  2. package/dist/index.js +3 -20
  3. package/dist/ui-dist/assets/index-DFwzKJ81.css +1 -0
  4. package/dist/ui-dist/assets/index-cngvCrhl.js +177 -0
  5. package/dist/ui-dist/favicon.svg +10 -0
  6. package/dist/ui-dist/index.html +2 -2
  7. package/package.json +1 -1
  8. package/dist/commands/serve.d.ts +0 -9
  9. package/dist/commands/serve.d.ts.map +0 -1
  10. package/dist/commands/serve.js +0 -197
  11. package/dist/commands/serve.js.map +0 -1
  12. package/dist/index.d.ts +0 -3
  13. package/dist/index.d.ts.map +0 -1
  14. package/dist/index.js.map +0 -1
  15. package/dist/lib/executor.d.ts +0 -20
  16. package/dist/lib/executor.d.ts.map +0 -1
  17. package/dist/lib/executor.js +0 -185
  18. package/dist/lib/executor.js.map +0 -1
  19. package/dist/lib/executor.test.d.ts +0 -2
  20. package/dist/lib/executor.test.d.ts.map +0 -1
  21. package/dist/lib/executor.test.js +0 -62
  22. package/dist/lib/executor.test.js.map +0 -1
  23. package/dist/lib/loader.d.ts +0 -10
  24. package/dist/lib/loader.d.ts.map +0 -1
  25. package/dist/lib/loader.js +0 -109
  26. package/dist/lib/loader.js.map +0 -1
  27. package/dist/lib/openapi.d.ts +0 -98
  28. package/dist/lib/openapi.d.ts.map +0 -1
  29. package/dist/lib/openapi.js +0 -269
  30. package/dist/lib/openapi.js.map +0 -1
  31. package/dist/lib/openapi.test.d.ts +0 -2
  32. package/dist/lib/openapi.test.d.ts.map +0 -1
  33. package/dist/lib/openapi.test.js +0 -226
  34. package/dist/lib/openapi.test.js.map +0 -1
  35. package/dist/lib/validator.d.ts +0 -12
  36. package/dist/lib/validator.d.ts.map +0 -1
  37. package/dist/lib/validator.js +0 -55
  38. package/dist/lib/validator.js.map +0 -1
  39. package/dist/server/rest-proxy.d.ts +0 -3
  40. package/dist/server/rest-proxy.d.ts.map +0 -1
  41. package/dist/server/rest-proxy.js +0 -34
  42. package/dist/server/rest-proxy.js.map +0 -1
  43. package/dist/server/shell-executor.d.ts +0 -3
  44. package/dist/server/shell-executor.d.ts.map +0 -1
  45. package/dist/server/shell-executor.js +0 -56
  46. package/dist/server/shell-executor.js.map +0 -1
  47. package/dist/types.d.ts +0 -311
  48. package/dist/types.d.ts.map +0 -1
  49. package/dist/types.js +0 -33
  50. package/dist/types.js.map +0 -1
  51. package/dist/ui-dist/assets/index-CtREFkwP.js +0 -175
  52. package/dist/ui-dist/assets/index-DTJEjfHv.css +0 -1
@@ -1,109 +0,0 @@
1
- import { readFileSync, existsSync } from 'fs';
2
- import { dirname, join } from 'path';
3
- import yaml from 'js-yaml';
4
- import { isRestStep, isStepGroup } from '../types.js';
5
- import { validateDemoConfig, formatValidationErrors } from './validator.js';
6
- import { fetchOpenApiSpec, generateFormFields, mergeFormFields } from './openapi.js';
7
- export async function loadDemo(demoFile, skipValidation = false) {
8
- if (!existsSync(demoFile)) {
9
- throw new Error(`Demo file not found: ${demoFile}`);
10
- }
11
- const content = readFileSync(demoFile, 'utf-8');
12
- const config = yaml.load(content);
13
- // Validate against JSON Schema
14
- if (!skipValidation) {
15
- const result = validateDemoConfig(config);
16
- if (!result.valid) {
17
- throw new Error(formatValidationErrors(result.errors));
18
- }
19
- }
20
- // Basic required fields check (fallback)
21
- if (!config.title) {
22
- throw new Error('Demo config missing required field: title');
23
- }
24
- if (!config.steps || !Array.isArray(config.steps)) {
25
- throw new Error('Demo config missing required field: steps');
26
- }
27
- // Try to load recordings
28
- const demoDir = dirname(demoFile);
29
- const recordingsPath = join(demoDir, 'recordings.json');
30
- let recordings = null;
31
- if (existsSync(recordingsPath)) {
32
- const recordingsContent = readFileSync(recordingsPath, 'utf-8');
33
- recordings = JSON.parse(recordingsContent);
34
- }
35
- // Fetch OpenAPI spec if configured
36
- const openapiUrl = config.settings?.openapi;
37
- let openapiSpec = null;
38
- if (openapiUrl) {
39
- openapiSpec = await fetchOpenApiSpec(openapiUrl);
40
- if (openapiSpec) {
41
- // Process steps to generate forms from OpenAPI
42
- config.steps = processStepsWithOpenApi(config.steps, openapiSpec, config.settings?.base_url);
43
- }
44
- }
45
- return { config, recordings, openapiSpec };
46
- }
47
- /**
48
- * Process steps to generate form fields from OpenAPI spec
49
- */
50
- function processStepsWithOpenApi(steps, spec, baseUrl) {
51
- return steps.map(item => {
52
- if (isStepGroup(item)) {
53
- return {
54
- ...item,
55
- steps: processStepsArray(item.steps, spec, baseUrl)
56
- };
57
- }
58
- if (isRestStep(item)) {
59
- return processRestStepWithOpenApi(item, spec, baseUrl);
60
- }
61
- return item;
62
- });
63
- }
64
- /**
65
- * Process a flat array of steps (inside a group)
66
- */
67
- function processStepsArray(steps, spec, baseUrl) {
68
- return steps.map(step => {
69
- if (isRestStep(step)) {
70
- return processRestStepWithOpenApi(step, spec, baseUrl);
71
- }
72
- return step;
73
- });
74
- }
75
- /**
76
- * Process a single REST step to generate form fields from OpenAPI
77
- */
78
- function processRestStepWithOpenApi(step, spec, baseUrl) {
79
- // Get method and path from step
80
- let method;
81
- let path;
82
- if ('rest' in step) {
83
- const parts = step.rest.trim().split(/\s+/);
84
- if (parts.length === 1) {
85
- method = 'GET';
86
- path = parts[0];
87
- }
88
- else {
89
- method = parts[0].toUpperCase();
90
- path = parts.slice(1).join(' ');
91
- }
92
- }
93
- else {
94
- method = step.method;
95
- path = step.path;
96
- }
97
- // Generate form fields from OpenAPI
98
- const openapiFields = generateFormFields(spec, method, path);
99
- if (openapiFields.length === 0) {
100
- return step;
101
- }
102
- // Merge with defaults and manual form fields
103
- const mergedFields = mergeFormFields(openapiFields, step.defaults, step.form);
104
- return {
105
- ...step,
106
- form: mergedFields
107
- };
108
- }
109
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/lib/loader.ts"],"names":[],"mappings":"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"}
@@ -1,98 +0,0 @@
1
- import type { FormField } from '../types.js';
2
- export interface OpenApiSpec {
3
- openapi: string;
4
- info: {
5
- title: string;
6
- version: string;
7
- description?: string;
8
- };
9
- paths: Record<string, OpenApiPath>;
10
- components?: {
11
- schemas?: Record<string, JsonSchema>;
12
- };
13
- }
14
- export interface OpenApiPath {
15
- get?: OpenApiOperation;
16
- post?: OpenApiOperation;
17
- put?: OpenApiOperation;
18
- delete?: OpenApiOperation;
19
- patch?: OpenApiOperation;
20
- }
21
- export interface OpenApiOperation {
22
- summary?: string;
23
- description?: string;
24
- operationId?: string;
25
- tags?: string[];
26
- parameters?: OpenApiParameter[];
27
- requestBody?: {
28
- required?: boolean;
29
- content: Record<string, {
30
- schema: JsonSchema;
31
- }>;
32
- };
33
- responses: Record<string, {
34
- description: string;
35
- }>;
36
- }
37
- export interface OpenApiParameter {
38
- name: string;
39
- in: 'path' | 'query' | 'header';
40
- required?: boolean;
41
- schema?: JsonSchema;
42
- description?: string;
43
- }
44
- export interface JsonSchema {
45
- type?: string;
46
- properties?: Record<string, JsonSchema>;
47
- required?: string[];
48
- default?: unknown;
49
- description?: string;
50
- enum?: unknown[];
51
- items?: JsonSchema;
52
- $ref?: string;
53
- allOf?: JsonSchema[];
54
- oneOf?: JsonSchema[];
55
- anyOf?: JsonSchema[];
56
- format?: string;
57
- minimum?: number;
58
- maximum?: number;
59
- minLength?: number;
60
- maxLength?: number;
61
- pattern?: string;
62
- }
63
- /**
64
- * Fetch and cache an OpenAPI spec
65
- */
66
- export declare function fetchOpenApiSpec(url: string): Promise<OpenApiSpec | null>;
67
- /**
68
- * Clear the OpenAPI spec cache
69
- */
70
- export declare function clearOpenApiCache(): void;
71
- /**
72
- * Generate FormField[] from an OpenAPI operation's request body
73
- */
74
- export declare function generateFormFields(spec: OpenApiSpec, method: string, path: string): FormField[];
75
- /**
76
- * Merge OpenAPI-generated fields with manual defaults and overrides
77
- *
78
- * Priority (smart merge - each layer inherits from previous):
79
- * 1. OpenAPI schema (base: type, required, options, description)
80
- * 2. defaults: values (override default values only)
81
- * 3. form: fields (partial override - only specified properties are changed)
82
- *
83
- * This allows YAML like:
84
- * defaults:
85
- * wallet: "0x..."
86
- * form:
87
- * - name: wallet
88
- * label: "From Wallet" # Only override the label, inherit default from above
89
- */
90
- export declare function mergeFormFields(openapiFields: FormField[], defaults?: Record<string, unknown>, manualFields?: FormField[]): FormField[];
91
- /**
92
- * Get endpoint info from OpenAPI for display
93
- */
94
- export declare function getEndpointInfo(spec: OpenApiSpec, method: string, path: string): {
95
- summary?: string;
96
- description?: string;
97
- } | null;
98
- //# sourceMappingURL=openapi.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/lib/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;KACtC,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE;QACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,UAAU,CAAA;SAAE,CAAC,CAAC;KACjD,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA8B/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAuFD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,SAAS,EAAE,CAgBb;AA8DD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,SAAS,EAAE,EAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,YAAY,CAAC,EAAE,SAAS,EAAE,GACzB,SAAS,EAAE,CAoDb;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAenD"}
@@ -1,269 +0,0 @@
1
- // In-memory cache for OpenAPI specs
2
- const specCache = new Map();
3
- const CACHE_TTL = 5 * 60 * 1000; // 5 minutes
4
- /**
5
- * Fetch and cache an OpenAPI spec
6
- */
7
- export async function fetchOpenApiSpec(url) {
8
- // Check cache
9
- const cached = specCache.get(url);
10
- if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
11
- return cached.spec;
12
- }
13
- try {
14
- const response = await fetch(url);
15
- if (!response.ok) {
16
- console.warn(`Failed to fetch OpenAPI spec from ${url}: ${response.status}`);
17
- return null;
18
- }
19
- const spec = await response.json();
20
- // Validate it looks like an OpenAPI spec
21
- if (!spec.openapi || !spec.paths) {
22
- console.warn(`Invalid OpenAPI spec from ${url}: missing openapi or paths`);
23
- return null;
24
- }
25
- // Cache the spec
26
- specCache.set(url, { spec, timestamp: Date.now() });
27
- return spec;
28
- }
29
- catch (err) {
30
- console.warn(`Error fetching OpenAPI spec from ${url}: ${err instanceof Error ? err.message : 'Unknown error'}`);
31
- return null;
32
- }
33
- }
34
- /**
35
- * Clear the OpenAPI spec cache
36
- */
37
- export function clearOpenApiCache() {
38
- specCache.clear();
39
- }
40
- /**
41
- * Resolve a $ref in an OpenAPI spec
42
- */
43
- function resolveRef(spec, ref) {
44
- // Handle #/components/schemas/SchemaName format
45
- const match = ref.match(/^#\/components\/schemas\/(.+)$/);
46
- if (match && spec.components?.schemas) {
47
- return spec.components.schemas[match[1]] || null;
48
- }
49
- return null;
50
- }
51
- /**
52
- * Resolve a schema, handling $ref and allOf
53
- */
54
- function resolveSchema(spec, schema) {
55
- if (schema.$ref) {
56
- const resolved = resolveRef(spec, schema.$ref);
57
- if (resolved) {
58
- return resolveSchema(spec, resolved);
59
- }
60
- }
61
- if (schema.allOf) {
62
- // Merge all schemas in allOf
63
- const merged = { type: 'object', properties: {}, required: [] };
64
- for (const subSchema of schema.allOf) {
65
- const resolved = resolveSchema(spec, subSchema);
66
- if (resolved.properties) {
67
- merged.properties = { ...merged.properties, ...resolved.properties };
68
- }
69
- if (resolved.required) {
70
- merged.required = [...(merged.required || []), ...resolved.required];
71
- }
72
- }
73
- return merged;
74
- }
75
- return schema;
76
- }
77
- /**
78
- * Map OpenAPI type to FormField type
79
- */
80
- function mapType(schema) {
81
- if (schema.enum) {
82
- return 'select';
83
- }
84
- switch (schema.type) {
85
- case 'integer':
86
- case 'number':
87
- return 'number';
88
- case 'boolean':
89
- return 'select'; // Will have true/false options
90
- case 'array':
91
- case 'object':
92
- return 'textarea'; // JSON input
93
- case 'string':
94
- default:
95
- return 'text';
96
- }
97
- }
98
- /**
99
- * Generate select options from schema
100
- */
101
- function generateOptions(schema) {
102
- if (schema.enum) {
103
- return schema.enum.map(v => ({
104
- value: String(v),
105
- label: String(v),
106
- }));
107
- }
108
- if (schema.type === 'boolean') {
109
- return [
110
- { value: 'true', label: 'true' },
111
- { value: 'false', label: 'false' },
112
- ];
113
- }
114
- return undefined;
115
- }
116
- /**
117
- * Generate FormField[] from an OpenAPI operation's request body
118
- */
119
- export function generateFormFields(spec, method, path) {
120
- const pathObj = spec.paths[path];
121
- if (!pathObj) {
122
- // Try with path parameters like /plvs/{plvId}/deposits
123
- const normalizedPath = path.replace(/\$\w+/g, match => `{${match.slice(1)}}`);
124
- const matchingPath = Object.keys(spec.paths).find(p => {
125
- const pattern = p.replace(/\{[^}]+\}/g, '[^/]+');
126
- return new RegExp(`^${pattern}$`).test(normalizedPath);
127
- });
128
- if (matchingPath) {
129
- return generateFormFieldsFromPath(spec, spec.paths[matchingPath], method);
130
- }
131
- return [];
132
- }
133
- return generateFormFieldsFromPath(spec, pathObj, method);
134
- }
135
- function generateFormFieldsFromPath(spec, pathObj, method) {
136
- const operation = pathObj[method.toLowerCase()];
137
- if (!operation) {
138
- return [];
139
- }
140
- const requestBody = operation.requestBody;
141
- if (!requestBody) {
142
- return [];
143
- }
144
- // Get JSON schema from request body
145
- const jsonContent = requestBody.content['application/json'];
146
- if (!jsonContent?.schema) {
147
- return [];
148
- }
149
- const schema = resolveSchema(spec, jsonContent.schema);
150
- if (!schema.properties) {
151
- return [];
152
- }
153
- const requiredFields = schema.required || [];
154
- const fields = [];
155
- for (const [name, propSchema] of Object.entries(schema.properties)) {
156
- const resolved = resolveSchema(spec, propSchema);
157
- const field = {
158
- name,
159
- label: resolved.description || name,
160
- type: mapType(resolved),
161
- required: requiredFields.includes(name),
162
- };
163
- // Add default if present
164
- if (resolved.default !== undefined) {
165
- field.default = resolved.default;
166
- }
167
- // Add options for select fields
168
- const options = generateOptions(resolved);
169
- if (options) {
170
- field.options = options;
171
- }
172
- // Add placeholder from description if no label override
173
- if (resolved.description && field.label === name) {
174
- field.placeholder = resolved.description;
175
- }
176
- fields.push(field);
177
- }
178
- return fields;
179
- }
180
- /**
181
- * Merge OpenAPI-generated fields with manual defaults and overrides
182
- *
183
- * Priority (smart merge - each layer inherits from previous):
184
- * 1. OpenAPI schema (base: type, required, options, description)
185
- * 2. defaults: values (override default values only)
186
- * 3. form: fields (partial override - only specified properties are changed)
187
- *
188
- * This allows YAML like:
189
- * defaults:
190
- * wallet: "0x..."
191
- * form:
192
- * - name: wallet
193
- * label: "From Wallet" # Only override the label, inherit default from above
194
- */
195
- export function mergeFormFields(openapiFields, defaults, manualFields) {
196
- // Start with OpenAPI fields
197
- const fieldMap = new Map();
198
- for (const field of openapiFields) {
199
- fieldMap.set(field.name, { ...field });
200
- }
201
- // Apply defaults
202
- if (defaults) {
203
- for (const [name, value] of Object.entries(defaults)) {
204
- const existing = fieldMap.get(name);
205
- if (existing) {
206
- existing.default = value;
207
- }
208
- else {
209
- // Create a new field for defaults not in OpenAPI
210
- fieldMap.set(name, {
211
- name,
212
- default: value,
213
- type: typeof value === 'number' ? 'number' : 'text',
214
- });
215
- }
216
- }
217
- }
218
- // Apply manual overrides (smart merge - inherit from OpenAPI + defaults)
219
- if (manualFields) {
220
- for (const manualField of manualFields) {
221
- const existing = fieldMap.get(manualField.name);
222
- if (existing) {
223
- // Merge: start with existing (OpenAPI + defaults), override only specified properties
224
- const merged = { ...existing };
225
- // Only override properties that are explicitly set in the manual field
226
- if (manualField.label !== undefined)
227
- merged.label = manualField.label;
228
- if (manualField.type !== undefined)
229
- merged.type = manualField.type;
230
- if (manualField.default !== undefined)
231
- merged.default = manualField.default;
232
- if (manualField.required !== undefined)
233
- merged.required = manualField.required;
234
- if (manualField.readonly !== undefined)
235
- merged.readonly = manualField.readonly;
236
- if (manualField.hidden !== undefined)
237
- merged.hidden = manualField.hidden;
238
- if (manualField.placeholder !== undefined)
239
- merged.placeholder = manualField.placeholder;
240
- if (manualField.options !== undefined)
241
- merged.options = manualField.options;
242
- fieldMap.set(manualField.name, merged);
243
- }
244
- else {
245
- // No existing field - use manual field as-is
246
- fieldMap.set(manualField.name, { ...manualField });
247
- }
248
- }
249
- }
250
- return Array.from(fieldMap.values());
251
- }
252
- /**
253
- * Get endpoint info from OpenAPI for display
254
- */
255
- export function getEndpointInfo(spec, method, path) {
256
- const pathObj = spec.paths[path];
257
- if (!pathObj) {
258
- return null;
259
- }
260
- const operation = pathObj[method.toLowerCase()];
261
- if (!operation) {
262
- return null;
263
- }
264
- return {
265
- summary: operation.summary,
266
- description: operation.description,
267
- };
268
- }
269
- //# sourceMappingURL=openapi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/lib/openapi.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=openapi.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi.test.d.ts","sourceRoot":"","sources":["../../src/lib/openapi.test.ts"],"names":[],"mappings":""}