apcore-toolkit 0.1.0
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/CHANGELOG.md +17 -0
- package/README.md +134 -0
- package/dist/formatting/index.d.ts +2 -0
- package/dist/formatting/index.d.ts.map +1 -0
- package/dist/formatting/index.js +2 -0
- package/dist/formatting/index.js.map +1 -0
- package/dist/formatting/markdown.d.ts +8 -0
- package/dist/formatting/markdown.d.ts.map +1 -0
- package/dist/formatting/markdown.js +221 -0
- package/dist/formatting/markdown.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/openapi.d.ts +5 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +73 -0
- package/dist/openapi.js.map +1 -0
- package/dist/output/factory.d.ts +5 -0
- package/dist/output/factory.d.ts.map +1 -0
- package/dist/output/factory.js +13 -0
- package/dist/output/factory.js.map +1 -0
- package/dist/output/index.d.ts +5 -0
- package/dist/output/index.d.ts.map +1 -0
- package/dist/output/index.js +5 -0
- package/dist/output/index.js.map +1 -0
- package/dist/output/registry-writer.d.ts +10 -0
- package/dist/output/registry-writer.d.ts.map +1 -0
- package/dist/output/registry-writer.js +42 -0
- package/dist/output/registry-writer.js.map +1 -0
- package/dist/output/typescript-writer.d.ts +10 -0
- package/dist/output/typescript-writer.d.ts.map +1 -0
- package/dist/output/typescript-writer.js +78 -0
- package/dist/output/typescript-writer.js.map +1 -0
- package/dist/output/yaml-writer.d.ts +8 -0
- package/dist/output/yaml-writer.d.ts.map +1 -0
- package/dist/output/yaml-writer.js +67 -0
- package/dist/output/yaml-writer.js.map +1 -0
- package/dist/resolve-target.d.ts +9 -0
- package/dist/resolve-target.d.ts.map +1 -0
- package/dist/resolve-target.js +28 -0
- package/dist/resolve-target.js.map +1 -0
- package/dist/scanner.d.ts +13 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +53 -0
- package/dist/scanner.js.map +1 -0
- package/dist/schema-utils.d.ts +10 -0
- package/dist/schema-utils.d.ts.map +1 -0
- package/dist/schema-utils.js +28 -0
- package/dist/schema-utils.js.map +1 -0
- package/dist/serializers.d.ts +16 -0
- package/dist/serializers.d.ts.map +1 -0
- package/dist/serializers.js +44 -0
- package/dist/serializers.js.map +1 -0
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.1.0] - 2026-03-07
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `ScannedModule` interface — canonical representation of a scanned endpoint
|
|
8
|
+
- `BaseScanner` abstract class with filtering, deduplication, and annotation inference
|
|
9
|
+
- `enrichSchemaDescriptions()` — merge parameter descriptions into JSON Schema
|
|
10
|
+
- OpenAPI utilities: `resolveRef`, `resolveSchema`, `extractInputSchema`, `extractOutputSchema`
|
|
11
|
+
- Serializers: `annotationsToDict`, `moduleToDict`, `modulesToDicts`
|
|
12
|
+
- `toMarkdown()` — generic dict-to-Markdown conversion with depth control and table heuristics
|
|
13
|
+
- `YAMLWriter` — generate `.binding.yaml` files for `BindingLoader`
|
|
14
|
+
- `TypeScriptWriter` — generate TypeScript wrapper files with `module()` decorator
|
|
15
|
+
- `RegistryWriter` — direct registration into `apcore-js` Registry
|
|
16
|
+
- `getWriter()` factory function
|
|
17
|
+
- `resolveTarget()` — dynamic import resolution for `module:export` target strings
|
package/README.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/aipartnerup/apcore-toolkit/main/apcore-toolkit-logo.svg" alt="apcore-toolkit logo" width="200"/>
|
|
3
|
+
</div>
|
|
4
|
+
|
|
5
|
+
# apcore-toolkit
|
|
6
|
+
|
|
7
|
+
Shared scanner, schema extraction, and output toolkit for apcore framework adapters (TypeScript).
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install apcore-toolkit
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
### ScannedModule
|
|
18
|
+
|
|
19
|
+
The canonical representation of a scanned endpoint:
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { createScannedModule, cloneModule } from 'apcore-toolkit';
|
|
23
|
+
|
|
24
|
+
const mod = createScannedModule({
|
|
25
|
+
moduleId: 'users.get_user',
|
|
26
|
+
description: 'Get a user by ID',
|
|
27
|
+
inputSchema: { type: 'object', properties: { id: { type: 'string' } } },
|
|
28
|
+
outputSchema: { type: 'object', properties: { name: { type: 'string' } } },
|
|
29
|
+
tags: ['users'],
|
|
30
|
+
target: 'myapp/users:getUser',
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### BaseScanner
|
|
35
|
+
|
|
36
|
+
Abstract base class for framework-specific scanners:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { BaseScanner } from 'apcore-toolkit';
|
|
40
|
+
import type { ScannedModule } from 'apcore-toolkit';
|
|
41
|
+
|
|
42
|
+
class MyScanner extends BaseScanner {
|
|
43
|
+
scan(): ScannedModule[] {
|
|
44
|
+
// scan your framework endpoints
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
getSourceName(): string {
|
|
48
|
+
return 'my-framework';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Output Writers
|
|
54
|
+
|
|
55
|
+
Three output strategies for scanned modules:
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
import { YAMLWriter, TypeScriptWriter, RegistryWriter, getWriter } from 'apcore-toolkit';
|
|
59
|
+
|
|
60
|
+
// YAML binding files
|
|
61
|
+
const yamlWriter = new YAMLWriter();
|
|
62
|
+
yamlWriter.write(modules, './output');
|
|
63
|
+
|
|
64
|
+
// TypeScript module wrappers
|
|
65
|
+
const tsWriter = new TypeScriptWriter();
|
|
66
|
+
tsWriter.write(modules, './output');
|
|
67
|
+
|
|
68
|
+
// Direct registry registration
|
|
69
|
+
const regWriter = new RegistryWriter();
|
|
70
|
+
await regWriter.write(modules, registry);
|
|
71
|
+
|
|
72
|
+
// Or use the factory
|
|
73
|
+
const writer = getWriter('yaml'); // 'yaml' | 'typescript' | 'registry'
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### OpenAPI Schema Extraction
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
import { extractInputSchema, extractOutputSchema } from 'apcore-toolkit';
|
|
80
|
+
|
|
81
|
+
const inputSchema = extractInputSchema(operation, openapiDoc);
|
|
82
|
+
const outputSchema = extractOutputSchema(operation, openapiDoc);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Markdown Formatting
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { toMarkdown } from 'apcore-toolkit';
|
|
89
|
+
|
|
90
|
+
const md = toMarkdown(data, {
|
|
91
|
+
title: 'Report',
|
|
92
|
+
fields: ['name', 'status'],
|
|
93
|
+
exclude: ['internal'],
|
|
94
|
+
maxDepth: 3,
|
|
95
|
+
tableThreshold: 5,
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Serializers
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
import { moduleToDict, modulesToDicts, annotationsToDict } from 'apcore-toolkit';
|
|
103
|
+
|
|
104
|
+
const dict = moduleToDict(mod); // snake_case keys
|
|
105
|
+
const dicts = modulesToDicts(modules); // batch conversion
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## API
|
|
109
|
+
|
|
110
|
+
| Export | Description |
|
|
111
|
+
|--------|-------------|
|
|
112
|
+
| `ScannedModule` | Interface for scanned endpoint data |
|
|
113
|
+
| `createScannedModule()` | Factory with defaults for optional fields |
|
|
114
|
+
| `cloneModule()` | Defensive copy with optional overrides |
|
|
115
|
+
| `BaseScanner` | Abstract base class for scanners |
|
|
116
|
+
| `YAMLWriter` | Writes YAML binding files |
|
|
117
|
+
| `TypeScriptWriter` | Generates TypeScript module wrappers |
|
|
118
|
+
| `RegistryWriter` | Registers modules into an apcore Registry |
|
|
119
|
+
| `getWriter()` | Factory for writer instances |
|
|
120
|
+
| `extractInputSchema()` | Extract input schema from OpenAPI operation |
|
|
121
|
+
| `extractOutputSchema()` | Extract output schema from OpenAPI operation |
|
|
122
|
+
| `resolveRef()` | Resolve `$ref` in OpenAPI documents |
|
|
123
|
+
| `resolveSchema()` | Resolve schema with `$ref` support |
|
|
124
|
+
| `enrichSchemaDescriptions()` | Merge parameter descriptions into schema |
|
|
125
|
+
| `toMarkdown()` | Convert dict to formatted Markdown |
|
|
126
|
+
| `moduleToDict()` | Serialize module to snake_case dict |
|
|
127
|
+
| `modulesToDicts()` | Batch serialize modules |
|
|
128
|
+
| `annotationsToDict()` | Convert annotations to plain dict |
|
|
129
|
+
| `resolveTarget()` | Dynamic import + named export resolution |
|
|
130
|
+
| `VERSION` | Package version string |
|
|
131
|
+
|
|
132
|
+
## License
|
|
133
|
+
|
|
134
|
+
Apache-2.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatting/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatting/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatting/markdown.ts"],"names":[],"mappings":"AAoOA,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,MAAM,CA+BR"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// Generic dict-to-Markdown conversion (F07)
|
|
2
|
+
function _isScalar(value) {
|
|
3
|
+
if (value === null || value === undefined)
|
|
4
|
+
return true;
|
|
5
|
+
const t = typeof value;
|
|
6
|
+
return t === 'string' || t === 'number' || t === 'boolean';
|
|
7
|
+
}
|
|
8
|
+
function _formatScalar(value) {
|
|
9
|
+
if (value === null || value === undefined)
|
|
10
|
+
return '*N/A*';
|
|
11
|
+
if (typeof value === 'boolean')
|
|
12
|
+
return value ? 'Yes' : 'No';
|
|
13
|
+
if (typeof value === 'number') {
|
|
14
|
+
if (Number.isInteger(value))
|
|
15
|
+
return String(value);
|
|
16
|
+
return Number(value.toPrecision(4)).toString();
|
|
17
|
+
}
|
|
18
|
+
return String(value);
|
|
19
|
+
}
|
|
20
|
+
function _escapePipe(text) {
|
|
21
|
+
return text.replace(/\|/g, '\\|');
|
|
22
|
+
}
|
|
23
|
+
function _compactRepr(value, maxLen = 80) {
|
|
24
|
+
let text;
|
|
25
|
+
if (Array.isArray(value)) {
|
|
26
|
+
const parts = value.map(v => _compactRepr(v, 30));
|
|
27
|
+
text = `[${parts.join(', ')}]`;
|
|
28
|
+
}
|
|
29
|
+
else if (value !== null && typeof value === 'object') {
|
|
30
|
+
const parts = Object.entries(value).map(([k, v]) => `${k}: ${_compactRepr(v, 30)}`);
|
|
31
|
+
text = `{${parts.join(', ')}}`;
|
|
32
|
+
}
|
|
33
|
+
else if (_isScalar(value)) {
|
|
34
|
+
text = _formatScalar(value);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
text = String(value);
|
|
38
|
+
}
|
|
39
|
+
if (text.length > maxLen) {
|
|
40
|
+
text = text.slice(0, maxLen - 3) + '...';
|
|
41
|
+
}
|
|
42
|
+
return text;
|
|
43
|
+
}
|
|
44
|
+
function _uniformKeys(items) {
|
|
45
|
+
if (items.length === 0)
|
|
46
|
+
return true;
|
|
47
|
+
const ref = new Set(Object.keys(items[0]));
|
|
48
|
+
return items.every(item => {
|
|
49
|
+
const keys = Object.keys(item);
|
|
50
|
+
return keys.length === ref.size && keys.every(k => ref.has(k));
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function _filterKeys(data, fields, exclude) {
|
|
54
|
+
let result = data;
|
|
55
|
+
if (fields !== undefined) {
|
|
56
|
+
const filtered = {};
|
|
57
|
+
for (const k of fields) {
|
|
58
|
+
if (k in data) {
|
|
59
|
+
filtered[k] = data[k];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
result = filtered;
|
|
63
|
+
}
|
|
64
|
+
if (exclude && exclude.length > 0) {
|
|
65
|
+
const ex = new Set(exclude);
|
|
66
|
+
const filtered = {};
|
|
67
|
+
for (const [k, v] of Object.entries(result)) {
|
|
68
|
+
if (!ex.has(k))
|
|
69
|
+
filtered[k] = v;
|
|
70
|
+
}
|
|
71
|
+
result = filtered;
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
function _renderTable(data, lines) {
|
|
76
|
+
lines.push('| Field | Value |');
|
|
77
|
+
lines.push('|-------|-------|');
|
|
78
|
+
for (const [key, value] of Object.entries(data)) {
|
|
79
|
+
lines.push(`| ${_escapePipe(String(key))} | ${_escapePipe(_formatScalar(value))} |`);
|
|
80
|
+
}
|
|
81
|
+
lines.push('');
|
|
82
|
+
}
|
|
83
|
+
function _renderListTable(items, lines, exclude) {
|
|
84
|
+
if (items.length === 0)
|
|
85
|
+
return;
|
|
86
|
+
let keys = Object.keys(items[0]);
|
|
87
|
+
if (exclude && exclude.length > 0) {
|
|
88
|
+
const ex = new Set(exclude);
|
|
89
|
+
keys = keys.filter(k => !ex.has(k));
|
|
90
|
+
}
|
|
91
|
+
lines.push('| ' + keys.map(k => _escapePipe(k)).join(' | ') + ' |');
|
|
92
|
+
lines.push('| ' + keys.map(() => '---').join(' | ') + ' |');
|
|
93
|
+
for (const item of items) {
|
|
94
|
+
const row = keys.map(k => _escapePipe(_formatScalar(item[k]))).join(' | ');
|
|
95
|
+
lines.push(`| ${row} |`);
|
|
96
|
+
}
|
|
97
|
+
lines.push('');
|
|
98
|
+
}
|
|
99
|
+
function _renderList(items, lines, depth, absDepth, maxDepth, exclude) {
|
|
100
|
+
const indent = ' '.repeat(depth);
|
|
101
|
+
if (items.length === 0) {
|
|
102
|
+
lines.push(`${indent}- *(empty)*`);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Check if items form a uniform table
|
|
106
|
+
if (items.length >= 2 &&
|
|
107
|
+
items.every(item => item !== null && typeof item === 'object' && !Array.isArray(item)) &&
|
|
108
|
+
_uniformKeys(items) &&
|
|
109
|
+
items.every(item => Object.values(item).every(v => _isScalar(v)))) {
|
|
110
|
+
_renderListTable(items, lines, exclude);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const ex = exclude && exclude.length > 0 ? new Set(exclude) : null;
|
|
114
|
+
for (const item of items) {
|
|
115
|
+
if (_isScalar(item)) {
|
|
116
|
+
lines.push(`${indent}- ${_formatScalar(item)}`);
|
|
117
|
+
}
|
|
118
|
+
else if (Array.isArray(item)) {
|
|
119
|
+
lines.push(`${indent}- ${_compactRepr(item)}`);
|
|
120
|
+
}
|
|
121
|
+
else if (item !== null && typeof item === 'object') {
|
|
122
|
+
if (absDepth >= maxDepth) {
|
|
123
|
+
lines.push(`${indent}- ${_compactRepr(item)}`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
let first = true;
|
|
127
|
+
for (const [k, v] of Object.entries(item)) {
|
|
128
|
+
if (ex && ex.has(k))
|
|
129
|
+
continue;
|
|
130
|
+
const prefix = first ? `${indent}- ` : `${' '.repeat(depth + 1)}`;
|
|
131
|
+
first = false;
|
|
132
|
+
if (_isScalar(v)) {
|
|
133
|
+
lines.push(`${prefix}**${k}**: ${_formatScalar(v)}`);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
lines.push(`${prefix}**${k}**: ${_compactRepr(v)}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
lines.push(`${indent}- ${_formatScalar(item)}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function _renderDict(data, lines, depth, absDepth, maxDepth, tableThreshold, exclude) {
|
|
147
|
+
if (Object.keys(data).length === 0)
|
|
148
|
+
return;
|
|
149
|
+
if (exclude && exclude.length > 0) {
|
|
150
|
+
const ex = new Set(exclude);
|
|
151
|
+
const filtered = {};
|
|
152
|
+
for (const [k, v] of Object.entries(data)) {
|
|
153
|
+
if (!ex.has(k))
|
|
154
|
+
filtered[k] = v;
|
|
155
|
+
}
|
|
156
|
+
data = filtered;
|
|
157
|
+
}
|
|
158
|
+
const allScalar = Object.values(data).every(v => _isScalar(v));
|
|
159
|
+
if (allScalar && Object.keys(data).length >= tableThreshold) {
|
|
160
|
+
_renderTable(data, lines);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const indent = ' '.repeat(depth);
|
|
164
|
+
for (const [key, value] of Object.entries(data)) {
|
|
165
|
+
if (_isScalar(value)) {
|
|
166
|
+
lines.push(`${indent}- **${key}**: ${_formatScalar(value)}`);
|
|
167
|
+
}
|
|
168
|
+
else if (Array.isArray(value)) {
|
|
169
|
+
if (absDepth + 1 >= maxDepth) {
|
|
170
|
+
lines.push(`${indent}- **${key}**: ${_compactRepr(value)}`);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
lines.push(`${indent}- **${key}**:`);
|
|
174
|
+
_renderList(value, lines, depth + 1, absDepth + 1, maxDepth, exclude);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else if (value !== null && typeof value === 'object') {
|
|
178
|
+
if (absDepth + 1 >= maxDepth) {
|
|
179
|
+
lines.push(`${indent}- **${key}**: ${_compactRepr(value)}`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
if (depth === 0) {
|
|
183
|
+
const headingLevel = Math.min(absDepth + 2, 6);
|
|
184
|
+
lines.push('');
|
|
185
|
+
lines.push(`${'#'.repeat(headingLevel)} ${key}`);
|
|
186
|
+
lines.push('');
|
|
187
|
+
_renderDict(value, lines, 0, absDepth + 1, maxDepth, tableThreshold, exclude);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
lines.push(`${indent}- **${key}**:`);
|
|
191
|
+
_renderDict(value, lines, depth + 1, absDepth + 1, maxDepth, tableThreshold, exclude);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
lines.push(`${indent}- **${key}**: ${_formatScalar(value)}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
export function toMarkdown(data, options) {
|
|
201
|
+
if (data === null || data === undefined) {
|
|
202
|
+
const typeName = data === null ? 'null' : 'undefined';
|
|
203
|
+
throw new TypeError(`toMarkdown() expects a dict, got ${typeName}`);
|
|
204
|
+
}
|
|
205
|
+
if (Array.isArray(data)) {
|
|
206
|
+
throw new TypeError('toMarkdown() expects a dict, got array');
|
|
207
|
+
}
|
|
208
|
+
if (typeof data !== 'object') {
|
|
209
|
+
throw new TypeError(`toMarkdown() expects a dict, got ${typeof data}`);
|
|
210
|
+
}
|
|
211
|
+
const { fields, exclude, maxDepth = 3, tableThreshold = 5, title, } = options ?? {};
|
|
212
|
+
const filtered = _filterKeys(data, fields, exclude);
|
|
213
|
+
const lines = [];
|
|
214
|
+
if (title) {
|
|
215
|
+
lines.push(`# ${title}`);
|
|
216
|
+
lines.push('');
|
|
217
|
+
}
|
|
218
|
+
_renderDict(filtered, lines, 0, 0, maxDepth, tableThreshold, exclude);
|
|
219
|
+
return lines.join('\n').replace(/\n+$/, '') + '\n';
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatting/markdown.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type { ScannedModule } from './types.js';
|
|
2
|
+
export { createScannedModule, cloneModule } from './types.js';
|
|
3
|
+
export { BaseScanner } from './scanner.js';
|
|
4
|
+
export { enrichSchemaDescriptions } from './schema-utils.js';
|
|
5
|
+
export { resolveRef, resolveSchema, extractInputSchema, extractOutputSchema, } from './openapi.js';
|
|
6
|
+
export { annotationsToDict, moduleToDict, modulesToDicts, } from './serializers.js';
|
|
7
|
+
export { resolveTarget } from './resolve-target.js';
|
|
8
|
+
export { toMarkdown } from './formatting/index.js';
|
|
9
|
+
export { YAMLWriter } from './output/yaml-writer.js';
|
|
10
|
+
export { TypeScriptWriter } from './output/typescript-writer.js';
|
|
11
|
+
export { RegistryWriter } from './output/registry-writer.js';
|
|
12
|
+
export { getWriter } from './output/factory.js';
|
|
13
|
+
export declare const VERSION: string;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKhD,eAAO,MAAM,OAAO,EAAE,MAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { createScannedModule, cloneModule } from './types.js';
|
|
2
|
+
export { BaseScanner } from './scanner.js';
|
|
3
|
+
export { enrichSchemaDescriptions } from './schema-utils.js';
|
|
4
|
+
export { resolveRef, resolveSchema, extractInputSchema, extractOutputSchema, } from './openapi.js';
|
|
5
|
+
export { annotationsToDict, moduleToDict, modulesToDicts, } from './serializers.js';
|
|
6
|
+
export { resolveTarget } from './resolve-target.js';
|
|
7
|
+
export { toMarkdown } from './formatting/index.js';
|
|
8
|
+
export { YAMLWriter } from './output/yaml-writer.js';
|
|
9
|
+
export { TypeScriptWriter } from './output/typescript-writer.js';
|
|
10
|
+
export { RegistryWriter } from './output/registry-writer.js';
|
|
11
|
+
export { getWriter } from './output/factory.js';
|
|
12
|
+
import { createRequire } from 'node:module';
|
|
13
|
+
const _require = createRequire(import.meta.url);
|
|
14
|
+
const _pkg = _require('../package.json');
|
|
15
|
+
export const VERSION = _pkg.version;
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,iBAAiB,CAAwB,CAAC;AAChE,MAAM,CAAC,MAAM,OAAO,GAAW,IAAI,CAAC,OAAO,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function resolveRef(refString: string, openapiDoc: Record<string, unknown>): Record<string, unknown>;
|
|
2
|
+
export declare function resolveSchema(schema: Record<string, unknown>, openapiDoc: Record<string, unknown> | null): Record<string, unknown>;
|
|
3
|
+
export declare function extractInputSchema(operation: Record<string, unknown>, openapiDoc?: Record<string, unknown> | null): Record<string, unknown>;
|
|
4
|
+
export declare function extractOutputSchema(operation: Record<string, unknown>, openapiDoc?: Record<string, unknown> | null): Record<string, unknown>;
|
|
5
|
+
//# sourceMappingURL=openapi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACzC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAW,GAChD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkCzB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAW,GAChD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6BzB"}
|
package/dist/openapi.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// OpenAPI schema extraction utilities
|
|
2
|
+
export function resolveRef(refString, openapiDoc) {
|
|
3
|
+
if (!refString.startsWith("#/")) {
|
|
4
|
+
return {};
|
|
5
|
+
}
|
|
6
|
+
const parts = refString.slice(2).split("/");
|
|
7
|
+
let current = openapiDoc;
|
|
8
|
+
for (const part of parts) {
|
|
9
|
+
if (typeof current !== "object" || current === null || Array.isArray(current)) {
|
|
10
|
+
return {};
|
|
11
|
+
}
|
|
12
|
+
current = current[part] ?? {};
|
|
13
|
+
}
|
|
14
|
+
return typeof current === "object" && current !== null && !Array.isArray(current)
|
|
15
|
+
? current
|
|
16
|
+
: {};
|
|
17
|
+
}
|
|
18
|
+
export function resolveSchema(schema, openapiDoc) {
|
|
19
|
+
if (openapiDoc && "$ref" in schema) {
|
|
20
|
+
return resolveRef(schema["$ref"], openapiDoc);
|
|
21
|
+
}
|
|
22
|
+
return schema;
|
|
23
|
+
}
|
|
24
|
+
export function extractInputSchema(operation, openapiDoc = null) {
|
|
25
|
+
const schema = { type: "object", properties: {}, required: [] };
|
|
26
|
+
const parameters = (operation["parameters"] ?? []);
|
|
27
|
+
for (const param of parameters) {
|
|
28
|
+
if (param["in"] === "query" || param["in"] === "path") {
|
|
29
|
+
const name = param["name"];
|
|
30
|
+
let paramSchema = (param["schema"] ?? { type: "string" });
|
|
31
|
+
paramSchema = resolveSchema(paramSchema, openapiDoc);
|
|
32
|
+
schema.properties[name] = paramSchema;
|
|
33
|
+
if (param["required"]) {
|
|
34
|
+
schema.required.push(name);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const requestBody = (operation["requestBody"] ?? {});
|
|
39
|
+
const content = (requestBody["content"] ?? {});
|
|
40
|
+
const jsonContent = (content["application/json"] ?? {});
|
|
41
|
+
const bodySchema = (jsonContent["schema"] ?? {});
|
|
42
|
+
if (Object.keys(bodySchema).length > 0) {
|
|
43
|
+
const resolved = resolveSchema(bodySchema, openapiDoc);
|
|
44
|
+
const bodyProps = (resolved["properties"] ?? {});
|
|
45
|
+
const bodyRequired = (resolved["required"] ?? []);
|
|
46
|
+
Object.assign(schema.properties, bodyProps);
|
|
47
|
+
schema.required.push(...bodyRequired);
|
|
48
|
+
}
|
|
49
|
+
return schema;
|
|
50
|
+
}
|
|
51
|
+
export function extractOutputSchema(operation, openapiDoc = null) {
|
|
52
|
+
const responses = (operation["responses"] ?? {});
|
|
53
|
+
for (const statusCode of ["200", "201"]) {
|
|
54
|
+
const response = (responses[statusCode] ?? {});
|
|
55
|
+
const content = (response["content"] ?? {});
|
|
56
|
+
const jsonContent = (content["application/json"] ?? {});
|
|
57
|
+
if ("schema" in jsonContent) {
|
|
58
|
+
let schema = resolveSchema(jsonContent["schema"], openapiDoc);
|
|
59
|
+
if (schema["type"] === "array" &&
|
|
60
|
+
typeof schema["items"] === "object" &&
|
|
61
|
+
schema["items"] !== null &&
|
|
62
|
+
"$ref" in schema["items"]) {
|
|
63
|
+
schema = {
|
|
64
|
+
...schema,
|
|
65
|
+
items: resolveSchema(schema["items"], openapiDoc),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return schema;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return { type: "object", properties: {} };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=openapi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { YAMLWriter } from './yaml-writer.js';
|
|
2
|
+
import { TypeScriptWriter } from './typescript-writer.js';
|
|
3
|
+
import { RegistryWriter } from './registry-writer.js';
|
|
4
|
+
export declare function getWriter(format: string): YAMLWriter | TypeScriptWriter | RegistryWriter;
|
|
5
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/output/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,GACb,UAAU,GAAG,gBAAgB,GAAG,cAAc,CAKhD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { YAMLWriter } from './yaml-writer.js';
|
|
2
|
+
import { TypeScriptWriter } from './typescript-writer.js';
|
|
3
|
+
import { RegistryWriter } from './registry-writer.js';
|
|
4
|
+
export function getWriter(format) {
|
|
5
|
+
if (format === 'yaml')
|
|
6
|
+
return new YAMLWriter();
|
|
7
|
+
if (format === 'typescript')
|
|
8
|
+
return new TypeScriptWriter();
|
|
9
|
+
if (format === 'registry')
|
|
10
|
+
return new RegistryWriter();
|
|
11
|
+
throw new Error(`Unknown output format: "${format}"`);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/output/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,UAAU,SAAS,CACvB,MAAc;IAEd,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,UAAU,EAAE,CAAC;IAC/C,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,IAAI,gBAAgB,EAAE,CAAC;IAC3D,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,IAAI,cAAc,EAAE,CAAC;IACvD,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,GAAG,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ScannedModule } from '../types.js';
|
|
2
|
+
export declare class RegistryWriter {
|
|
3
|
+
write(modules: ScannedModule[], registry: {
|
|
4
|
+
register(moduleId: string, module: unknown): void;
|
|
5
|
+
}, options?: {
|
|
6
|
+
dryRun?: boolean;
|
|
7
|
+
}): Promise<string[]>;
|
|
8
|
+
private _toFunctionModule;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=registry-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-writer.d.ts","sourceRoot":"","sources":["../../src/output/registry-writer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,qBAAa,cAAc;IACnB,KAAK,CACT,OAAO,EAAE,aAAa,EAAE,EACxB,QAAQ,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,EAC/D,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC;YAcN,iBAAiB;CAwBhC"}
|