schemantic 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +204 -174
- package/LICENSE +21 -21
- package/README.md +88 -830
- package/dist/cli/index.d.ts +4 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +185 -61
- package/dist/cli/index.js.map +1 -1
- package/dist/core/configuration.d.ts +6 -0
- package/dist/core/configuration.d.ts.map +1 -0
- package/dist/core/configuration.js +64 -0
- package/dist/core/configuration.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/output-writer.d.ts +7 -0
- package/dist/core/output-writer.d.ts.map +1 -0
- package/dist/core/output-writer.js +255 -0
- package/dist/core/output-writer.js.map +1 -0
- package/dist/core/schemantic.d.ts +8 -2
- package/dist/core/schemantic.d.ts.map +1 -1
- package/dist/core/schemantic.js +196 -71
- package/dist/core/schemantic.js.map +1 -1
- package/dist/generators/api-client-generator.d.ts +10 -20
- package/dist/generators/api-client-generator.d.ts.map +1 -1
- package/dist/generators/api-client-generator.js +374 -424
- package/dist/generators/api-client-generator.js.map +1 -1
- package/dist/generators/base.d.ts.map +1 -1
- package/dist/generators/base.js +7 -25
- package/dist/generators/base.js.map +1 -1
- package/dist/generators/enum-generator.d.ts.map +1 -1
- package/dist/generators/enum-generator.js +30 -3
- package/dist/generators/enum-generator.js.map +1 -1
- package/dist/generators/hook-generator.d.ts +3 -17
- package/dist/generators/hook-generator.d.ts.map +1 -1
- package/dist/generators/hook-generator.js +51 -445
- package/dist/generators/hook-generator.js.map +1 -1
- package/dist/generators/naming.d.ts +10 -0
- package/dist/generators/naming.d.ts.map +1 -0
- package/dist/generators/naming.js +331 -0
- package/dist/generators/naming.js.map +1 -0
- package/dist/generators/object-generator.d.ts +0 -4
- package/dist/generators/object-generator.d.ts.map +1 -1
- package/dist/generators/object-generator.js +13 -101
- package/dist/generators/object-generator.js.map +1 -1
- package/dist/generators/primitive-generator.d.ts +1 -13
- package/dist/generators/primitive-generator.d.ts.map +1 -1
- package/dist/generators/primitive-generator.js +11 -76
- package/dist/generators/primitive-generator.js.map +1 -1
- package/dist/generators/projections.d.ts +10 -0
- package/dist/generators/projections.d.ts.map +1 -0
- package/dist/generators/projections.js +65 -0
- package/dist/generators/projections.js.map +1 -0
- package/dist/generators/schema-type.d.ts +23 -0
- package/dist/generators/schema-type.d.ts.map +1 -0
- package/dist/generators/schema-type.js +233 -0
- package/dist/generators/schema-type.js.map +1 -0
- package/dist/parsers/base.d.ts +2 -0
- package/dist/parsers/base.d.ts.map +1 -1
- package/dist/parsers/base.js +12 -2
- package/dist/parsers/base.js.map +1 -1
- package/dist/parsers/factory.d.ts.map +1 -1
- package/dist/parsers/factory.js +2 -1
- package/dist/parsers/factory.js.map +1 -1
- package/dist/parsers/openapi.d.ts +4 -0
- package/dist/parsers/openapi.d.ts.map +1 -1
- package/dist/parsers/openapi.js +107 -20
- package/dist/parsers/openapi.js.map +1 -1
- package/dist/plugins/branded-types.d.ts.map +1 -1
- package/dist/plugins/branded-types.js +231 -365
- package/dist/plugins/branded-types.js.map +1 -1
- package/dist/plugins/builtin.d.ts.map +1 -1
- package/dist/plugins/builtin.js +6 -141
- package/dist/plugins/builtin.js.map +1 -1
- package/dist/plugins/index.d.ts +4 -0
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +17 -0
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/loader.d.ts +5 -1
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +42 -5
- package/dist/plugins/loader.js.map +1 -1
- package/dist/plugins/manager.d.ts.map +1 -1
- package/dist/plugins/manager.js +7 -7
- package/dist/plugins/manager.js.map +1 -1
- package/dist/plugins/performance-monitoring.d.ts +31 -1
- package/dist/plugins/performance-monitoring.d.ts.map +1 -1
- package/dist/plugins/performance-monitoring.js +146 -207
- package/dist/plugins/performance-monitoring.js.map +1 -1
- package/dist/plugins/request-deduplication.d.ts.map +1 -1
- package/dist/plugins/request-deduplication.js +151 -586
- package/dist/plugins/request-deduplication.js.map +1 -1
- package/dist/plugins/zod-validation.d.ts +23 -15
- package/dist/plugins/zod-validation.d.ts.map +1 -1
- package/dist/plugins/zod-validation.js +392 -268
- package/dist/plugins/zod-validation.js.map +1 -1
- package/dist/types/core.d.ts +20 -3
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +2 -0
- package/dist/types/core.js.map +1 -1
- package/dist/types/openapi.d.ts +14 -1
- package/dist/types/openapi.d.ts.map +1 -1
- package/docs/ADVANCED_PLUGINS_IMPLEMENTATION.md +24 -355
- package/docs/ADVANCED_PLUGIN_DEVELOPMENT.md +33 -309
- package/docs/API.md +80 -601
- package/docs/AUDIT.md +49 -0
- package/docs/CONFIGURATION.md +81 -715
- package/docs/FASTAPI_TUTORIAL.md +109 -1497
- package/docs/NAMING_MIGRATION.md +59 -0
- package/docs/PLUGINS.md +49 -687
- package/docs/PLUGIN_DEVELOPMENT.md +53 -720
- package/docs/REAUDIT.md +399 -0
- package/docs/RELEASING.md +88 -0
- package/docs/REMEDIATION.md +58 -0
- package/docs/superpowers/plans/2026-10-10-audit-remediation.md +113 -0
- package/package.json +114 -95
- package/dist/__tests__/setup.d.ts +0 -6
- package/dist/__tests__/setup.d.ts.map +0 -1
- package/dist/__tests__/setup.js +0 -30
- package/dist/__tests__/setup.js.map +0 -1
- package/dist/__tests__/test-config.d.ts +0 -36
- package/dist/__tests__/test-config.d.ts.map +0 -1
- package/dist/__tests__/test-config.js +0 -562
- package/dist/__tests__/test-config.js.map +0 -1
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.PrimitiveTypeGenerator = void 0;
|
|
8
8
|
const schema_1 = require("../types/schema");
|
|
9
9
|
const base_1 = require("./base");
|
|
10
|
+
const schema_type_1 = require("./schema-type");
|
|
10
11
|
/**
|
|
11
12
|
* Primitive type generator implementation
|
|
12
13
|
*/
|
|
@@ -15,22 +16,25 @@ class PrimitiveTypeGenerator extends base_1.BaseTypeGenerator {
|
|
|
15
16
|
super(options);
|
|
16
17
|
}
|
|
17
18
|
generate(schema, context) {
|
|
18
|
-
if (!(0, schema_1.isOpenAPISchemaObject)(schema)) {
|
|
19
|
-
throw new Error("Cannot generate primitive from reference schema");
|
|
20
|
-
}
|
|
21
19
|
const typeName = this.getTypeName(schema, context);
|
|
22
|
-
const comment = this.generateComment(schema.description, schema.example);
|
|
20
|
+
const comment = (0, schema_1.isOpenAPISchemaObject)(schema) ? this.generateComment(schema.description, schema.example) : "";
|
|
23
21
|
let content = "";
|
|
24
22
|
if (comment) {
|
|
25
23
|
content += comment + "\n";
|
|
26
24
|
}
|
|
27
25
|
// Generate type alias
|
|
28
|
-
const
|
|
26
|
+
const dependencies = [];
|
|
27
|
+
const expression = (0, schema_type_1.schemaType)(schema, ref => {
|
|
28
|
+
const name = this.formatTypeName(this.extractTypeNameFromRef(ref));
|
|
29
|
+
dependencies.push(name);
|
|
30
|
+
return name;
|
|
31
|
+
}, this.options.customTypeMappings, context.schemaResolver);
|
|
32
|
+
const typeAlias = 'export type ' + typeName + ' = ' + expression + ';\n';
|
|
29
33
|
content += typeAlias;
|
|
30
34
|
return {
|
|
31
35
|
name: typeName,
|
|
32
36
|
content,
|
|
33
|
-
dependencies
|
|
37
|
+
dependencies,
|
|
34
38
|
exports: [typeName],
|
|
35
39
|
isInterface: false,
|
|
36
40
|
isEnum: false,
|
|
@@ -38,28 +42,7 @@ class PrimitiveTypeGenerator extends base_1.BaseTypeGenerator {
|
|
|
38
42
|
sourceSchema: schema,
|
|
39
43
|
};
|
|
40
44
|
}
|
|
41
|
-
canHandle(
|
|
42
|
-
if (!(0, schema_1.isOpenAPISchemaObject)(schema)) {
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
// Handle primitive types
|
|
46
|
-
if (schema.type &&
|
|
47
|
-
typeof schema.type === "string" &&
|
|
48
|
-
["string", "number", "integer", "boolean"].includes(schema.type)) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
// Handle const values
|
|
52
|
-
if (schema.const !== undefined) {
|
|
53
|
-
return true;
|
|
54
|
-
}
|
|
55
|
-
// Handle arrays of primitives
|
|
56
|
-
if (schema.type === "array" &&
|
|
57
|
-
schema.items &&
|
|
58
|
-
this.isPrimitiveSchema(schema.items)) {
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
45
|
+
canHandle(_schema) { return true; }
|
|
63
46
|
getPriority() {
|
|
64
47
|
return 50; // Lower priority than specialized generators
|
|
65
48
|
}
|
|
@@ -72,54 +55,6 @@ class PrimitiveTypeGenerator extends base_1.BaseTypeGenerator {
|
|
|
72
55
|
supportedFormats: ["json"],
|
|
73
56
|
};
|
|
74
57
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Generate type alias
|
|
77
|
-
*/
|
|
78
|
-
generateTypeAlias(schema, typeName) {
|
|
79
|
-
const type = this.generateType(schema);
|
|
80
|
-
return `export type ${typeName} = ${type};\n`;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Generate TypeScript type from schema
|
|
84
|
-
*/
|
|
85
|
-
generateType(schema) {
|
|
86
|
-
if (!(0, schema_1.isOpenAPISchemaObject)(schema)) {
|
|
87
|
-
return "unknown";
|
|
88
|
-
}
|
|
89
|
-
// Handle const values
|
|
90
|
-
if (schema.const !== undefined) {
|
|
91
|
-
return JSON.stringify(schema.const);
|
|
92
|
-
}
|
|
93
|
-
// Handle arrays
|
|
94
|
-
if (schema.type === "array") {
|
|
95
|
-
const itemType = schema.items
|
|
96
|
-
? this.generateType(schema.items)
|
|
97
|
-
: "unknown";
|
|
98
|
-
return `${itemType}[]`;
|
|
99
|
-
}
|
|
100
|
-
// Handle basic types
|
|
101
|
-
if (schema.type) {
|
|
102
|
-
return this.mapSchemaTypeToTypeScript(schema.type, schema.format);
|
|
103
|
-
}
|
|
104
|
-
return "unknown";
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Check if schema is a primitive type
|
|
108
|
-
*/
|
|
109
|
-
isPrimitiveSchema(schema) {
|
|
110
|
-
if (!(0, schema_1.isOpenAPISchemaObject)(schema)) {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
if (schema.type &&
|
|
114
|
-
typeof schema.type === "string" &&
|
|
115
|
-
["string", "number", "integer", "boolean"].includes(schema.type)) {
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
if (schema.const !== undefined) {
|
|
119
|
-
return true;
|
|
120
|
-
}
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
58
|
/**
|
|
124
59
|
* Get type name from schema
|
|
125
60
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitive-generator.js","sourceRoot":"","sources":["../../src/generators/primitive-generator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4CAAwE;AAExE,iCAAkE;
|
|
1
|
+
{"version":3,"file":"primitive-generator.js","sourceRoot":"","sources":["../../src/generators/primitive-generator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4CAAwE;AAExE,iCAAkE;AAClE,+CAA2C;AAE3C;;GAEG;AACH,MAAa,sBAAuB,SAAQ,wBAAiB;IAC3D,YAAY,OAA8B;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED,QAAQ,CAAC,MAAsB,EAAE,OAA0B;QAGzD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAA,8BAAqB,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9G,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,OAAO,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,sBAAsB;QACtB,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,IAAA,wBAAU,EAAC,MAAM,EAAE,GAAG,CAAC,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,cAAc,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;QACzE,OAAO,IAAI,SAAS,CAAC;QAErB,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,YAAY;YACZ,OAAO,EAAE,CAAC,QAAQ,CAAC;YACnB,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,MAAM;SACrB,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,OAAuB,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC;IAE5D,WAAW;QACT,OAAO,EAAE,CAAC,CAAC,6CAA6C;IAC1D,CAAC;IAED,WAAW;QACT,OAAO;YACL,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,wDAAwD;YACrE,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;YACnE,gBAAgB,EAAE,CAAC,MAAM,CAAC;SAC3B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,WAAW,CACjB,MAAsB,EACtB,OAA0B;QAE1B,oCAAoC;QACpC,IAAI,oBAAoB,IAAI,MAAM,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,kBAA4B,CAAC,CAAC;QAClE,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAA,8BAAqB,EAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACzD,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,QAAQ,GAAG,oBAAoB,CAAC;YAEpC,OACE,aAAa,CAAC,IAAI,CAChB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAC1D,EACD,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,WAAW;QACX,OAAO,oBAAoB,CAAC;IAC9B,CAAC;CACF;AA5FD,wDA4FC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { OpenAPISchema } from '../types/openapi';
|
|
2
|
+
import { SchemaResolver } from '../types/schema';
|
|
3
|
+
export type ProjectionNames = Record<string, {
|
|
4
|
+
request?: string;
|
|
5
|
+
response?: string;
|
|
6
|
+
binary?: string;
|
|
7
|
+
}>;
|
|
8
|
+
/** Add named projections so clients, hooks and plugins consume the same schemas. */
|
|
9
|
+
export declare function addSchemaProjections(document: OpenAPISchema, resolver: SchemaResolver, selected?: Set<string>): ProjectionNames;
|
|
10
|
+
//# sourceMappingURL=projections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../../src/generators/projections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAkB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAGvG,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,eAAe,CA+C/H"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addSchemaProjections = addSchemaProjections;
|
|
4
|
+
const schema_type_1 = require("./schema-type");
|
|
5
|
+
const reference = (name) => '#/components/schemas/' + name.replace(/~/g, '~0').replace(/\//g, '~1');
|
|
6
|
+
/** Add named projections so clients, hooks and plugins consume the same schemas. */
|
|
7
|
+
function addSchemaProjections(document, resolver, selected) {
|
|
8
|
+
const schemas = document.components?.schemas;
|
|
9
|
+
const names = Object.create(null);
|
|
10
|
+
if (!schemas)
|
|
11
|
+
return names;
|
|
12
|
+
const originals = Object.entries(schemas);
|
|
13
|
+
const contains = (schema, predicate, seen = new Set()) => {
|
|
14
|
+
if (!schema || typeof schema !== 'object')
|
|
15
|
+
return false;
|
|
16
|
+
const value = schema;
|
|
17
|
+
if (predicate(value))
|
|
18
|
+
return true;
|
|
19
|
+
if (typeof value.$ref === 'string' && !seen.has(value.$ref)) {
|
|
20
|
+
const next = new Set([...seen, value.$ref]);
|
|
21
|
+
if (contains(resolver(value.$ref), predicate, next))
|
|
22
|
+
return true;
|
|
23
|
+
seen = next;
|
|
24
|
+
}
|
|
25
|
+
return Object.values(value.properties || {}).some(child => contains(child, predicate, seen)) ||
|
|
26
|
+
['items', 'additionalProperties', 'not'].some(key => contains(value[key], predicate, seen)) ||
|
|
27
|
+
[...(value.allOf || []), ...(value.oneOf || []), ...(value.anyOf || [])].some(child => contains(child, predicate, seen));
|
|
28
|
+
};
|
|
29
|
+
for (const [name, value] of originals) {
|
|
30
|
+
if (selected && !selected.has(name))
|
|
31
|
+
continue;
|
|
32
|
+
if (contains(value, node => node.readOnly === true || node.writeOnly === true))
|
|
33
|
+
names[name] = { request: name + 'Request', response: name + 'Response' };
|
|
34
|
+
if (contains(value, schema_type_1.isBinaryStringSchema))
|
|
35
|
+
names[name] = { ...names[name], binary: name + 'Binary' };
|
|
36
|
+
}
|
|
37
|
+
const binary = (schema) => {
|
|
38
|
+
const node = schema;
|
|
39
|
+
if ((0, schema_type_1.isBinaryStringSchema)(node))
|
|
40
|
+
return { ...node, 'x-schemantic-binary': true };
|
|
41
|
+
return { ...node,
|
|
42
|
+
...(node.properties && { properties: Object.fromEntries(Object.entries(node.properties).map(([key, value]) => [key, binary(value)])) }),
|
|
43
|
+
...(node.items && { items: binary(node.items) }),
|
|
44
|
+
...(typeof node.additionalProperties === 'object' && { additionalProperties: binary(node.additionalProperties) }),
|
|
45
|
+
...(node.allOf && { allOf: node.allOf.map(binary) }), ...(node.anyOf && { anyOf: node.anyOf.map(binary) }), ...(node.oneOf && { oneOf: node.oneOf.map(binary) }),
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
for (const [name, value] of originals) {
|
|
49
|
+
for (const [kind, target] of Object.entries(names[name] || {})) {
|
|
50
|
+
if (target in schemas)
|
|
51
|
+
throw new Error(`Projected schema name collision: ${name} produces ${target}, which already exists`);
|
|
52
|
+
const projected = (0, schema_type_1.projectSchema)(value, { direction: kind === 'response' ? 'response' : 'request' }, resolver, ref => {
|
|
53
|
+
if (!/^#\/components\/schemas\/[^/]+$/.test(ref))
|
|
54
|
+
return ref;
|
|
55
|
+
const original = (0, schema_type_1.referenceName)(ref);
|
|
56
|
+
const mapped = kind === 'binary' ? names[original]?.binary || names[original]?.request : names[original]?.[kind];
|
|
57
|
+
return mapped ? reference(mapped) : ref;
|
|
58
|
+
});
|
|
59
|
+
schemas[target] = kind === 'binary' ? binary(projected) : projected;
|
|
60
|
+
selected?.add(target);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return names;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=projections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projections.js","sourceRoot":"","sources":["../../src/generators/projections.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { OpenAPISchemaObject } from '../types/openapi';
|
|
2
|
+
import { ResolvedSchema } from '../types/schema';
|
|
3
|
+
export declare function propertyKey(name: string): string;
|
|
4
|
+
export declare function typeName(name: string, prefix?: string, suffix?: string): string;
|
|
5
|
+
export declare function referenceName(ref: string): string;
|
|
6
|
+
export interface SchemaTypeOptions {
|
|
7
|
+
/** Explicit OpenAPI annotation policy: omit readOnly inputs and writeOnly outputs. */
|
|
8
|
+
direction?: 'request' | 'response';
|
|
9
|
+
/** Enable only for binary request media/parts; JSON encodings remain strings. */
|
|
10
|
+
binary?: boolean;
|
|
11
|
+
/** Application property names; required checks always use the original wire name. */
|
|
12
|
+
propertyName?: (wireName: string) => string;
|
|
13
|
+
}
|
|
14
|
+
/** Binary media can carry raw string content; explicitly encoded content stays a string. */
|
|
15
|
+
export declare function isBinaryStringSchema(schema: OpenAPISchemaObject): boolean;
|
|
16
|
+
/** Build the same directional schema used by type emission for runtime validators.
|
|
17
|
+
* Component references stay references: callers map them to the corresponding projected names.
|
|
18
|
+
* This function preserves source schemas and wire names unless a property formatter is supplied.
|
|
19
|
+
*/
|
|
20
|
+
export declare function projectSchema(schema: ResolvedSchema | boolean, options: SchemaTypeOptions, resolver?: (ref: string) => ResolvedSchema | undefined, mapReference?: (ref: string) => string): ResolvedSchema;
|
|
21
|
+
/** One expression emitter keeps types and endpoint signatures consistent. */
|
|
22
|
+
export declare function schemaType(schema: ResolvedSchema | boolean, formatReference: (ref: string) => string, customMappings?: Record<string, string>, resolveReference?: (ref: string) => ResolvedSchema | undefined, seen?: Set<string>, options?: SchemaTypeOptions): string;
|
|
23
|
+
//# sourceMappingURL=schema-type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-type.d.ts","sourceRoot":"","sources":["../../src/generators/schema-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAgB,MAAM,iBAAiB,CAAC;AAE/D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAK,EAAE,MAAM,SAAK,GAAG,MAAM,CASvE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACnC,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7C;AAED,4FAA4F;AAC5F,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAIzE;AAoCD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,EAAE,OAAO,EAAE,iBAAiB,EACxF,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,EACtD,YAAY,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAmB,GAAG,cAAc,CAgCpE;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CACxB,MAAM,EAAE,cAAc,GAAG,OAAO,EAChC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EACxC,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAC3C,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,EAC9D,IAAI,cAAoB,EACxB,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CAyFR"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.propertyKey = propertyKey;
|
|
4
|
+
exports.typeName = typeName;
|
|
5
|
+
exports.referenceName = referenceName;
|
|
6
|
+
exports.isBinaryStringSchema = isBinaryStringSchema;
|
|
7
|
+
exports.projectSchema = projectSchema;
|
|
8
|
+
exports.schemaType = schemaType;
|
|
9
|
+
const schema_1 = require("../types/schema");
|
|
10
|
+
function propertyKey(name) {
|
|
11
|
+
return /^[A-Za-z_$][\w$]*$/.test(name) ? name : JSON.stringify(name);
|
|
12
|
+
}
|
|
13
|
+
function typeName(name, prefix = '', suffix = '') {
|
|
14
|
+
const formatted = name.replace(/[^A-Za-z0-9]+/g, '_').split('_').filter(Boolean)
|
|
15
|
+
.map(token => token[0].toUpperCase() + token.slice(1)).join('') || 'Anonymous';
|
|
16
|
+
let result = `${prefix}${formatted}${suffix}`.replace(/[^A-Za-z0-9_$]/g, '_');
|
|
17
|
+
const reserved = new Set(['Record', 'Partial', 'Required', 'Readonly', 'Pick', 'Omit', 'Exclude', 'Extract', 'NonNullable',
|
|
18
|
+
'Parameters', 'ConstructorParameters', 'ReturnType', 'InstanceType', 'Awaited', 'Array', 'ReadonlyArray',
|
|
19
|
+
'Promise', 'Map', 'Set', 'WeakMap', 'WeakSet', 'ApiClientConfig', 'ApiClientError']);
|
|
20
|
+
if (reserved.has(result))
|
|
21
|
+
result += 'Model';
|
|
22
|
+
return /^\d/.test(result) ? `_${result}` : result;
|
|
23
|
+
}
|
|
24
|
+
function referenceName(ref) {
|
|
25
|
+
return decodeURIComponent(ref.split('/').pop() || 'Unknown').replace(/~1/g, '/').replace(/~0/g, '~');
|
|
26
|
+
}
|
|
27
|
+
/** Binary media can carry raw string content; explicitly encoded content stays a string. */
|
|
28
|
+
function isBinaryStringSchema(schema) {
|
|
29
|
+
return schema.format === 'binary' || (schema.type === 'string'
|
|
30
|
+
&& typeof schema.contentMediaType === 'string' && schema.contentMediaType.trim().length > 0
|
|
31
|
+
&& !schema.contentEncoding);
|
|
32
|
+
}
|
|
33
|
+
function excludedProperty(schema, options, resolver, seen = new Set()) {
|
|
34
|
+
const annotation = options.direction === 'request' ? 'readOnly' : options.direction === 'response' ? 'writeOnly' : undefined;
|
|
35
|
+
if (!annotation)
|
|
36
|
+
return false;
|
|
37
|
+
if (annotation in schema && schema[annotation] === true)
|
|
38
|
+
return true;
|
|
39
|
+
if ((0, schema_1.isOpenAPIRef)(schema) && !seen.has(schema.$ref)) {
|
|
40
|
+
const target = resolver?.(schema.$ref);
|
|
41
|
+
if (target && excludedProperty(target, options, resolver, new Set([...seen, schema.$ref])))
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
const object = schema;
|
|
45
|
+
return [...(object.allOf || []), ...(object.anyOf || []), ...(object.oneOf || [])]
|
|
46
|
+
.some(branch => excludedProperty(branch, options, resolver, seen));
|
|
47
|
+
}
|
|
48
|
+
function directionalKeys(schema, options, resolver, seen = new Set()) {
|
|
49
|
+
const keys = new Set();
|
|
50
|
+
if (!options.direction)
|
|
51
|
+
return keys;
|
|
52
|
+
if ((0, schema_1.isOpenAPIRef)(schema)) {
|
|
53
|
+
if (!seen.has(schema.$ref)) {
|
|
54
|
+
const target = resolver?.(schema.$ref);
|
|
55
|
+
if (target)
|
|
56
|
+
for (const key of directionalKeys(target, options, resolver, new Set([...seen, schema.$ref])))
|
|
57
|
+
keys.add(key);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const object = schema;
|
|
61
|
+
for (const [name, value] of Object.entries(object.properties || {})) {
|
|
62
|
+
if (excludedProperty(value, options, resolver))
|
|
63
|
+
keys.add(name);
|
|
64
|
+
}
|
|
65
|
+
for (const branch of [...(object.allOf || []), ...(object.anyOf || []), ...(object.oneOf || [])]) {
|
|
66
|
+
for (const key of directionalKeys(branch, options, resolver, seen))
|
|
67
|
+
keys.add(key);
|
|
68
|
+
}
|
|
69
|
+
return keys;
|
|
70
|
+
}
|
|
71
|
+
/** Build the same directional schema used by type emission for runtime validators.
|
|
72
|
+
* Component references stay references: callers map them to the corresponding projected names.
|
|
73
|
+
* This function preserves source schemas and wire names unless a property formatter is supplied.
|
|
74
|
+
*/
|
|
75
|
+
function projectSchema(schema, options, resolver, mapReference = ref => ref) {
|
|
76
|
+
const project = (value, inheritedExcluded = new Set()) => {
|
|
77
|
+
const result = { ...value };
|
|
78
|
+
if (options.binary && isBinaryStringSchema(result))
|
|
79
|
+
result['x-schemantic-binary'] = true;
|
|
80
|
+
const excluded = new Set([...inheritedExcluded, ...directionalKeys(value, options, resolver)]);
|
|
81
|
+
if ((0, schema_1.isOpenAPIRef)(value))
|
|
82
|
+
result.$ref = mapReference(value.$ref);
|
|
83
|
+
if (result.properties) {
|
|
84
|
+
const properties = {};
|
|
85
|
+
const names = new Map();
|
|
86
|
+
for (const [wireName, child] of Object.entries(result.properties)) {
|
|
87
|
+
if (excludedProperty(child, options, resolver))
|
|
88
|
+
continue;
|
|
89
|
+
const name = options.propertyName?.(wireName) ?? wireName;
|
|
90
|
+
const existing = names.get(name);
|
|
91
|
+
if (existing !== undefined && existing !== wireName)
|
|
92
|
+
throw new Error(`Property naming collision: ${existing} and ${wireName} both become ${name}`);
|
|
93
|
+
names.set(name, wireName);
|
|
94
|
+
properties[name] = project(child);
|
|
95
|
+
}
|
|
96
|
+
result.properties = properties;
|
|
97
|
+
}
|
|
98
|
+
if (result.required)
|
|
99
|
+
result.required = result.required.filter(name => !excluded.has(name))
|
|
100
|
+
.map(name => options.propertyName?.(name) ?? name);
|
|
101
|
+
if (result.items)
|
|
102
|
+
result.items = project(result.items);
|
|
103
|
+
if (typeof result.additionalProperties === 'object')
|
|
104
|
+
result.additionalProperties = project(result.additionalProperties);
|
|
105
|
+
if (result.allOf)
|
|
106
|
+
result.allOf = result.allOf.map(branch => project(branch, excluded));
|
|
107
|
+
if (result.anyOf)
|
|
108
|
+
result.anyOf = result.anyOf.map(branch => project(branch));
|
|
109
|
+
if (result.oneOf)
|
|
110
|
+
result.oneOf = result.oneOf.map(branch => project(branch));
|
|
111
|
+
for (const key of ['not', 'if', 'then', 'else']) {
|
|
112
|
+
if (result[key])
|
|
113
|
+
result[key] = project(result[key]);
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
};
|
|
117
|
+
return typeof schema === 'boolean' ? schema ? {} : { not: {} } : project(schema);
|
|
118
|
+
}
|
|
119
|
+
/** One expression emitter keeps types and endpoint signatures consistent. */
|
|
120
|
+
function schemaType(schema, formatReference, customMappings = {}, resolveReference, seen = new Set(), options = {}) {
|
|
121
|
+
if (typeof schema === 'boolean')
|
|
122
|
+
return schema ? 'unknown' : 'never';
|
|
123
|
+
if (schema['x-schemantic-binary'] === true)
|
|
124
|
+
return 'globalThis.Blob';
|
|
125
|
+
if ((0, schema_1.isOpenAPIRef)(schema)) {
|
|
126
|
+
let reference;
|
|
127
|
+
if (/^#\/components\/schemas\/[^/]+$/.test(schema.$ref))
|
|
128
|
+
reference = formatReference(schema.$ref);
|
|
129
|
+
else {
|
|
130
|
+
if (seen.has(schema.$ref))
|
|
131
|
+
throw new Error(`Circular inline schema reference: ${schema.$ref}`);
|
|
132
|
+
const resolved = resolveReference?.(schema.$ref);
|
|
133
|
+
if (resolved === undefined)
|
|
134
|
+
throw new Error(`Unresolved schema reference: ${schema.$ref}`);
|
|
135
|
+
reference = schemaType(resolved, formatReference, customMappings, resolveReference, new Set([...seen, schema.$ref]), options);
|
|
136
|
+
}
|
|
137
|
+
const siblings = { ...schema };
|
|
138
|
+
delete siblings.$ref;
|
|
139
|
+
if (Object.keys(siblings).length) {
|
|
140
|
+
const nullable = siblings.nullable;
|
|
141
|
+
delete siblings.nullable;
|
|
142
|
+
const excluded = directionalKeys(schema, options, resolveReference);
|
|
143
|
+
if (siblings.required)
|
|
144
|
+
siblings.required = siblings.required.filter(key => !excluded.has(key));
|
|
145
|
+
const sibling = schemaType(siblings, formatReference, customMappings, resolveReference, seen, options);
|
|
146
|
+
if (sibling !== 'unknown')
|
|
147
|
+
reference = `(${reference}) & (${sibling})`;
|
|
148
|
+
if (nullable)
|
|
149
|
+
reference = `(${reference}) | null`;
|
|
150
|
+
}
|
|
151
|
+
return reference;
|
|
152
|
+
}
|
|
153
|
+
const render = (value) => schemaType(value, formatReference, customMappings, resolveReference, seen, options);
|
|
154
|
+
let result;
|
|
155
|
+
if (schema.not && !(0, schema_1.isOpenAPIRef)(schema.not) && Object.keys(schema.not).length === 0)
|
|
156
|
+
result = 'never';
|
|
157
|
+
else if (schema.const !== undefined)
|
|
158
|
+
result = JSON.stringify(schema.const);
|
|
159
|
+
else if (schema.enum?.length)
|
|
160
|
+
result = schema.enum.map(value => JSON.stringify(value)).join(' | ');
|
|
161
|
+
else {
|
|
162
|
+
const parts = [];
|
|
163
|
+
if (schema.oneOf?.length)
|
|
164
|
+
parts.push(schema.oneOf.map(render).join(' | '));
|
|
165
|
+
if (schema.anyOf?.length)
|
|
166
|
+
parts.push(schema.anyOf.map(render).join(' | '));
|
|
167
|
+
if (schema.allOf?.length) {
|
|
168
|
+
const excluded = directionalKeys(schema, options, resolveReference);
|
|
169
|
+
parts.push(...schema.allOf.map(branch => render(!(0, schema_1.isOpenAPIRef)(branch) && branch.required
|
|
170
|
+
? { ...branch, required: branch.required.filter(key => !excluded.has(key)) } : branch)));
|
|
171
|
+
}
|
|
172
|
+
if (Array.isArray(schema.type)) {
|
|
173
|
+
parts.push(schema.type.map(type => render({ ...schema, type, nullable: false,
|
|
174
|
+
oneOf: [], anyOf: [], allOf: [] })).join(' | '));
|
|
175
|
+
}
|
|
176
|
+
else if (schema.type || schema.properties || schema.required?.length || schema.additionalProperties !== undefined) {
|
|
177
|
+
const type = schema.type || 'object';
|
|
178
|
+
if (type === 'array') {
|
|
179
|
+
const item = schema.items ? render(schema.items) : 'unknown';
|
|
180
|
+
parts.push(`${/[|&]/.test(item) ? `(${item})` : item}[]`);
|
|
181
|
+
}
|
|
182
|
+
else if (type === 'object') {
|
|
183
|
+
const excluded = directionalKeys(schema, options, resolveReference);
|
|
184
|
+
const required = (schema.required || []).filter(name => !excluded.has(name));
|
|
185
|
+
const entries = Object.entries(schema.properties || {}).filter(([, value]) => !excludedProperty(value, options, resolveReference));
|
|
186
|
+
const names = new Map();
|
|
187
|
+
const valueTypes = [];
|
|
188
|
+
const fields = entries.map(([wireName, value]) => {
|
|
189
|
+
const name = options.propertyName?.(wireName) ?? wireName;
|
|
190
|
+
const existing = names.get(name);
|
|
191
|
+
if (existing !== undefined && existing !== wireName)
|
|
192
|
+
throw new Error(`Property naming collision: ${existing} and ${wireName} both become ${name}`);
|
|
193
|
+
names.set(name, wireName);
|
|
194
|
+
const valueType = render(value);
|
|
195
|
+
valueTypes.push(valueType);
|
|
196
|
+
if (!required.includes(wireName))
|
|
197
|
+
valueTypes.push('undefined');
|
|
198
|
+
return `${propertyKey(name)}${required.includes(wireName) ? '' : '?'}: ${valueType}${required.includes(wireName) ? '' : ' | undefined'};`;
|
|
199
|
+
});
|
|
200
|
+
for (const name of required.filter(name => !(name in (schema.properties || {})))) {
|
|
201
|
+
fields.push(`${propertyKey(options.propertyName?.(name) ?? name)}: unknown;`);
|
|
202
|
+
valueTypes.push('unknown');
|
|
203
|
+
}
|
|
204
|
+
if (fields.length) {
|
|
205
|
+
let object = `{ ${fields.join(' ')} }`;
|
|
206
|
+
if (schema.additionalProperties && typeof schema.additionalProperties === 'object') {
|
|
207
|
+
// TypeScript cannot exclude finite declared keys from a string index signature.
|
|
208
|
+
// Widen its values to include declared fields, retaining their precise member types.
|
|
209
|
+
const indexTypes = [...new Set([render(schema.additionalProperties), ...valueTypes])];
|
|
210
|
+
object += ` & Record<string, ${indexTypes.includes('unknown') ? 'unknown' : indexTypes.join(' | ')}>`;
|
|
211
|
+
}
|
|
212
|
+
else if (schema.additionalProperties === true)
|
|
213
|
+
object += ' & Record<string, unknown>';
|
|
214
|
+
parts.push(object);
|
|
215
|
+
}
|
|
216
|
+
else if (schema.additionalProperties === false)
|
|
217
|
+
parts.push('Record<string, never>');
|
|
218
|
+
else
|
|
219
|
+
parts.push(`Record<string, ${typeof schema.additionalProperties === 'object' ? render(schema.additionalProperties) : 'unknown'}>`);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
const basic = { string: 'string', integer: 'number', number: 'number', boolean: 'boolean', null: 'null' };
|
|
223
|
+
parts.push((type !== 'null' && schema.format && customMappings[schema.format]) || customMappings[type]
|
|
224
|
+
|| (type === 'string' && isBinaryStringSchema(schema) && options.binary ? 'Blob' : basic[type]) || 'unknown');
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
result = parts.length ? parts.map(part => parts.length > 1 && part.includes(' | ') ? `(${part})` : part).join(' & ') : 'unknown';
|
|
228
|
+
}
|
|
229
|
+
if (schema.nullable)
|
|
230
|
+
result = `${result} | null`;
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=schema-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-type.js","sourceRoot":"","sources":["../../src/generators/schema-type.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers/base.d.ts
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
import { OpenAPISchema } from "../types/openapi";
|
|
6
6
|
import { ResolvedSchema, SchemaResolver } from "../types/schema";
|
|
7
7
|
import { SchemanticConfig, GenerationContext } from "../types/core";
|
|
8
|
+
/** JSON is the supported input serialization; fail with an actionable format diagnostic. */
|
|
9
|
+
export declare function parseJsonSchemaText(text: string): unknown;
|
|
8
10
|
/**
|
|
9
11
|
* Base interface for all schema parsers
|
|
10
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/parsers/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EAIlB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,aAAa;IAC7C;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE/C;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC;IAE1C;;OAEG;IACH,WAAW,IAAI,cAAc,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,8BAAsB,gBAAgB,CAAC,CAAC,GAAG,aAAa,CACtD,YAAW,YAAY,CAAC,CAAC,CAAC;IAE1B,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC;gBAEvB,MAAM,EAAE,gBAAgB;IAIpC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACvD,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,cAAc;IAClD,QAAQ,CAAC,WAAW,IAAI,cAAc;IAEtC;;OAEG;IACH,SAAS,CAAC,gBAAgB,CACxB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,GACR,cAAc,GAAG,SAAS;IAS7B;;OAEG;IACH,SAAS,CAAC,cAAc,CACtB,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,MAAM,EAAE,GACb,cAAc,GAAG,SAAS;IAkB7B;;OAEG;IACH,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,GAAG,iBAAiB;IAkB/D;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAY3B"}
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/parsers/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EAIlB,MAAM,eAAe,CAAC;AAEvB,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,aAAa;IAC7C;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE/C;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC;IAE1C;;OAEG;IACH,WAAW,IAAI,cAAc,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,8BAAsB,gBAAgB,CAAC,CAAC,GAAG,aAAa,CACtD,YAAW,YAAY,CAAC,CAAC,CAAC;IAE1B,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC;gBAEvB,MAAM,EAAE,gBAAgB;IAIpC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACvD,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,cAAc;IAClD,QAAQ,CAAC,WAAW,IAAI,cAAc;IAEtC;;OAEG;IACH,SAAS,CAAC,gBAAgB,CACxB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,GACR,cAAc,GAAG,SAAS;IAS7B;;OAEG;IACH,SAAS,CAAC,cAAc,CACtB,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,MAAM,EAAE,GACb,cAAc,GAAG,SAAS;IAkB7B;;OAEG;IACH,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,GAAG,iBAAiB;IAkB/D;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAY3B"}
|
package/dist/parsers/base.js
CHANGED
|
@@ -5,6 +5,16 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.BaseSchemaParser = void 0;
|
|
8
|
+
exports.parseJsonSchemaText = parseJsonSchemaText;
|
|
9
|
+
/** JSON is the supported input serialization; fail with an actionable format diagnostic. */
|
|
10
|
+
function parseJsonSchemaText(text) {
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(text);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
throw new Error(`Invalid JSON schema input. YAML is not supported; convert the document to JSON. ${error instanceof Error ? error.message : String(error)}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
8
18
|
/**
|
|
9
19
|
* Abstract base parser implementation
|
|
10
20
|
*/
|
|
@@ -19,7 +29,7 @@ class BaseSchemaParser {
|
|
|
19
29
|
if (!ref.startsWith("#/")) {
|
|
20
30
|
return undefined;
|
|
21
31
|
}
|
|
22
|
-
const path = ref.substring(2).split("/");
|
|
32
|
+
const path = ref.substring(2).split("/").map(segment => decodeURIComponent(segment).replace(/~1/g, '/').replace(/~0/g, '~'));
|
|
23
33
|
return this.traverseSchema(schema, path);
|
|
24
34
|
}
|
|
25
35
|
/**
|
|
@@ -30,7 +40,7 @@ class BaseSchemaParser {
|
|
|
30
40
|
for (const segment of path) {
|
|
31
41
|
if (typeof current === "object" &&
|
|
32
42
|
current !== null &&
|
|
33
|
-
segment
|
|
43
|
+
Object.prototype.hasOwnProperty.call(current, segment)) {
|
|
34
44
|
current = current[segment];
|
|
35
45
|
}
|
|
36
46
|
else {
|
package/dist/parsers/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/parsers/base.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/parsers/base.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAaH,kDAKC;AAND,4FAA4F;AAC5F,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAChC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mFAAmF,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/J,CAAC;AACH,CAAC;AA6ED;;GAEG;AACH,MAAsB,gBAAgB;IAKpC,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAOD;;OAEG;IACO,gBAAgB,CACxB,GAAW,EACX,MAAS;QAET,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7H,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACO,cAAc,CACtB,MAAS,EACT,IAAc;QAEd,IAAI,OAAO,GAAY,MAAM,CAAC;QAE9B,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,IACE,OAAO,OAAO,KAAK,QAAQ;gBAC3B,OAAO,KAAK,IAAI;gBAChB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EACtD,CAAC;gBACD,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,OAAyB,CAAC;IACnC,CAAC;IAED;;OAEG;IACO,uBAAuB,CAAC,MAAS;QACzC,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC;QAC1D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAC;QACxD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA8B,CAAC;QAE/D,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEnD,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,MAAkC;YAC1C,eAAe;YACf,cAAc;YACd,gBAAgB;YAChB,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE;YACvC,cAAc;SACf,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,8CAA8C;QAC9C,OAAO;YACL,YAAY,EAAE,CAAC,KAAa,EAAE,KAAoB,EAAE,EAAE;gBACpD,WAAW;YACb,CAAC;YACD,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS;YACrC,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;YACrB,eAAe,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,EAAE;YACtC,mBAAmB,EAAE,GAAG,EAAE,CAAC,EAAE;SAC9B,CAAC;IACJ,CAAC;CACF;AAzFD,4CAyFC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAuB,MAAM,QAAQ,CAAC;AAG3E;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAE/D;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,OAAO,CAGR;IAEd;;OAEG;IACH,MAAM,CAAC,cAAc,CACnB,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,KAAK,MAAM,EAAE,gBAAgB,KAAK,YAAY,GAC1D,IAAI;IAIP;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,gBAAgB,GACvB,YAAY;IASf;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,UAAU,EAAE;IAI1C;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,SAAS;IAWtE;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,UAAU;IAgDd;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,KAAK,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAC3E,MAAM,EAAE,gBAAgB,GACvB,YAAY;CAIhB;AAKD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,gBAAgB,GACvB,YAAY,CAEd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3E,MAAM,EAAE,gBAAgB,GACvB,YAAY,CAEd"}
|
package/dist/parsers/factory.js
CHANGED
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.ParserFactory = void 0;
|
|
8
8
|
exports.createParser = createParser;
|
|
9
9
|
exports.autoCreateParser = autoCreateParser;
|
|
10
|
+
const base_1 = require("./base");
|
|
10
11
|
const openapi_1 = require("./openapi");
|
|
11
12
|
/**
|
|
12
13
|
* Parser factory class
|
|
@@ -73,7 +74,7 @@ class ParserFactory {
|
|
|
73
74
|
}
|
|
74
75
|
// Check data structure
|
|
75
76
|
if (input.data || input.string) {
|
|
76
|
-
const data = input.data ||
|
|
77
|
+
const data = input.data || (0, base_1.parseJsonSchemaText)(input.string);
|
|
77
78
|
if (typeof data === "object" && data !== null) {
|
|
78
79
|
if ("openapi" in data) {
|
|
79
80
|
return "openapi";
|