schemantic 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 +92 -0
- package/LICENSE +21 -0
- package/README.md +827 -0
- package/dist/__tests__/setup.d.ts +6 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +30 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/test-config.d.ts +36 -0
- package/dist/__tests__/test-config.d.ts.map +1 -0
- package/dist/__tests__/test-config.js +563 -0
- package/dist/__tests__/test-config.js.map +1 -0
- package/dist/cli/index.d.ts +118 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +657 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +21 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/schemantic.d.ts +95 -0
- package/dist/core/schemantic.d.ts.map +1 -0
- package/dist/core/schemantic.js +543 -0
- package/dist/core/schemantic.js.map +1 -0
- package/dist/generators/api-client-generator.d.ts +145 -0
- package/dist/generators/api-client-generator.d.ts.map +1 -0
- package/dist/generators/api-client-generator.js +856 -0
- package/dist/generators/api-client-generator.js.map +1 -0
- package/dist/generators/base.d.ts +117 -0
- package/dist/generators/base.d.ts.map +1 -0
- package/dist/generators/base.js +232 -0
- package/dist/generators/base.js.map +1 -0
- package/dist/generators/enum-generator.d.ts +52 -0
- package/dist/generators/enum-generator.d.ts.map +1 -0
- package/dist/generators/enum-generator.js +178 -0
- package/dist/generators/enum-generator.js.map +1 -0
- package/dist/generators/factory.d.ts +59 -0
- package/dist/generators/factory.d.ts.map +1 -0
- package/dist/generators/factory.js +127 -0
- package/dist/generators/factory.js.map +1 -0
- package/dist/generators/hook-generator.d.ts +36 -0
- package/dist/generators/hook-generator.d.ts.map +1 -0
- package/dist/generators/hook-generator.js +495 -0
- package/dist/generators/hook-generator.js.map +1 -0
- package/dist/generators/index.d.ts +10 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +26 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/object-generator.d.ts +48 -0
- package/dist/generators/object-generator.d.ts.map +1 -0
- package/dist/generators/object-generator.js +280 -0
- package/dist/generators/object-generator.js.map +1 -0
- package/dist/generators/primitive-generator.d.ts +40 -0
- package/dist/generators/primitive-generator.d.ts.map +1 -0
- package/dist/generators/primitive-generator.js +150 -0
- package/dist/generators/primitive-generator.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/base.d.ts +101 -0
- package/dist/parsers/base.d.ts.map +1 -0
- package/dist/parsers/base.js +77 -0
- package/dist/parsers/base.js.map +1 -0
- package/dist/parsers/factory.d.ts +64 -0
- package/dist/parsers/factory.d.ts.map +1 -0
- package/dist/parsers/factory.js +116 -0
- package/dist/parsers/factory.js.map +1 -0
- package/dist/parsers/index.d.ts +7 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +23 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/openapi.d.ts +52 -0
- package/dist/parsers/openapi.d.ts.map +1 -0
- package/dist/parsers/openapi.js +396 -0
- package/dist/parsers/openapi.js.map +1 -0
- package/dist/plugins/branded-types.d.ts +28 -0
- package/dist/plugins/branded-types.d.ts.map +1 -0
- package/dist/plugins/branded-types.js +568 -0
- package/dist/plugins/branded-types.js.map +1 -0
- package/dist/plugins/builtin.d.ts +38 -0
- package/dist/plugins/builtin.d.ts.map +1 -0
- package/dist/plugins/builtin.js +283 -0
- package/dist/plugins/builtin.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +23 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +92 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +245 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +99 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +233 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/performance-monitoring.d.ts +98 -0
- package/dist/plugins/performance-monitoring.d.ts.map +1 -0
- package/dist/plugins/performance-monitoring.js +596 -0
- package/dist/plugins/performance-monitoring.js.map +1 -0
- package/dist/plugins/request-deduplication.d.ts +27 -0
- package/dist/plugins/request-deduplication.d.ts.map +1 -0
- package/dist/plugins/request-deduplication.js +650 -0
- package/dist/plugins/request-deduplication.js.map +1 -0
- package/dist/plugins/zod-validation.d.ts +63 -0
- package/dist/plugins/zod-validation.d.ts.map +1 -0
- package/dist/plugins/zod-validation.js +743 -0
- package/dist/plugins/zod-validation.js.map +1 -0
- package/dist/types/core.d.ts +203 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +24 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/openapi.d.ts +250 -0
- package/dist/types/openapi.d.ts.map +1 -0
- package/dist/types/openapi.js +8 -0
- package/dist/types/openapi.js.map +1 -0
- package/dist/types/schema.d.ts +68 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +22 -0
- package/dist/types/schema.js.map +1 -0
- package/docs/ADVANCED_PLUGINS_IMPLEMENTATION.md +355 -0
- package/docs/ADVANCED_PLUGIN_DEVELOPMENT.md +309 -0
- package/docs/API.md +600 -0
- package/docs/CONFIGURATION.md +722 -0
- package/docs/FASTAPI_TUTORIAL.md +1497 -0
- package/docs/PLUGINS.md +683 -0
- package/docs/PLUGIN_DEVELOPMENT.md +720 -0
- package/package.json +90 -0
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base parser interface and abstract implementation
|
|
4
|
+
* Provides the foundation for all schema parsers in the schemantic system
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.BaseSchemaParser = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Abstract base parser implementation
|
|
10
|
+
*/
|
|
11
|
+
class BaseSchemaParser {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Common utility method to resolve references
|
|
17
|
+
*/
|
|
18
|
+
resolveReference(ref, schema) {
|
|
19
|
+
if (!ref.startsWith("#/")) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const path = ref.substring(2).split("/");
|
|
23
|
+
return this.traverseSchema(schema, path);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Traverse schema object using path segments
|
|
27
|
+
*/
|
|
28
|
+
traverseSchema(schema, path) {
|
|
29
|
+
let current = schema;
|
|
30
|
+
for (const segment of path) {
|
|
31
|
+
if (typeof current === "object" &&
|
|
32
|
+
current !== null &&
|
|
33
|
+
segment in current) {
|
|
34
|
+
current = current[segment];
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return current;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create a generation context from parsed schema
|
|
44
|
+
*/
|
|
45
|
+
createGenerationContext(schema) {
|
|
46
|
+
const resolvedSchemas = new Map();
|
|
47
|
+
const generatedTypes = new Map();
|
|
48
|
+
const generatedClients = new Map();
|
|
49
|
+
const schemaResolver = this.createResolver(schema);
|
|
50
|
+
return {
|
|
51
|
+
config: this.config,
|
|
52
|
+
schema: schema,
|
|
53
|
+
resolvedSchemas,
|
|
54
|
+
generatedTypes,
|
|
55
|
+
generatedClients,
|
|
56
|
+
typeRegistry: this.createTypeRegistry(),
|
|
57
|
+
schemaResolver,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create a type registry instance
|
|
62
|
+
*/
|
|
63
|
+
createTypeRegistry() {
|
|
64
|
+
// This will be implemented in the core module
|
|
65
|
+
return {
|
|
66
|
+
registerType: (_name, _type) => {
|
|
67
|
+
/* no-op */
|
|
68
|
+
},
|
|
69
|
+
getType: (_name) => undefined,
|
|
70
|
+
getAllTypes: () => [],
|
|
71
|
+
getDependencies: (_name) => [],
|
|
72
|
+
resolveDependencies: () => [],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.BaseSchemaParser = BaseSchemaParser;
|
|
77
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/parsers/base.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAuFH;;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;QACzC,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,OAAO,IAAI,OAAO,EAClB,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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser factory for creating and managing different schema parsers
|
|
3
|
+
* Provides a centralized way to instantiate and configure parsers
|
|
4
|
+
*/
|
|
5
|
+
import { SchemanticConfig } from "../types/core";
|
|
6
|
+
import { SchemaParser, ParserMetadata } from "./base";
|
|
7
|
+
/**
|
|
8
|
+
* Supported parser types
|
|
9
|
+
*/
|
|
10
|
+
export type ParserType = "openapi" | "swagger" | "json-schema";
|
|
11
|
+
/**
|
|
12
|
+
* Parser factory class
|
|
13
|
+
*/
|
|
14
|
+
export declare class ParserFactory {
|
|
15
|
+
private static parsers;
|
|
16
|
+
/**
|
|
17
|
+
* Register a parser type
|
|
18
|
+
*/
|
|
19
|
+
static registerParser(type: ParserType, parserClass: new (config: SchemanticConfig) => SchemaParser): void;
|
|
20
|
+
/**
|
|
21
|
+
* Create a parser instance
|
|
22
|
+
*/
|
|
23
|
+
static createParser(type: ParserType, config: SchemanticConfig): SchemaParser;
|
|
24
|
+
/**
|
|
25
|
+
* Get available parser types
|
|
26
|
+
*/
|
|
27
|
+
static getAvailableParsers(): ParserType[];
|
|
28
|
+
/**
|
|
29
|
+
* Get parser metadata
|
|
30
|
+
*/
|
|
31
|
+
static getParserMetadata(type: ParserType): ParserMetadata | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Detect parser type from input
|
|
34
|
+
*/
|
|
35
|
+
static detectParserType(input: {
|
|
36
|
+
url?: string;
|
|
37
|
+
filePath?: string;
|
|
38
|
+
data?: unknown;
|
|
39
|
+
string?: string;
|
|
40
|
+
}): ParserType;
|
|
41
|
+
/**
|
|
42
|
+
* Auto-detect and create parser
|
|
43
|
+
*/
|
|
44
|
+
static autoCreateParser(input: {
|
|
45
|
+
url?: string;
|
|
46
|
+
filePath?: string;
|
|
47
|
+
data?: unknown;
|
|
48
|
+
string?: string;
|
|
49
|
+
}, config: SchemanticConfig): SchemaParser;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convenience function to create a parser
|
|
53
|
+
*/
|
|
54
|
+
export declare function createParser(type: ParserType, config: SchemanticConfig): SchemaParser;
|
|
55
|
+
/**
|
|
56
|
+
* Convenience function to auto-detect and create parser
|
|
57
|
+
*/
|
|
58
|
+
export declare function autoCreateParser(input: {
|
|
59
|
+
url?: string;
|
|
60
|
+
filePath?: string;
|
|
61
|
+
data?: unknown;
|
|
62
|
+
string?: string;
|
|
63
|
+
}, config: SchemanticConfig): SchemaParser;
|
|
64
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +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,EAAE,MAAM,QAAQ,CAAC;AAGtD;;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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Parser factory for creating and managing different schema parsers
|
|
4
|
+
* Provides a centralized way to instantiate and configure parsers
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ParserFactory = void 0;
|
|
8
|
+
exports.createParser = createParser;
|
|
9
|
+
exports.autoCreateParser = autoCreateParser;
|
|
10
|
+
const openapi_1 = require("./openapi");
|
|
11
|
+
/**
|
|
12
|
+
* Parser factory class
|
|
13
|
+
*/
|
|
14
|
+
class ParserFactory {
|
|
15
|
+
/**
|
|
16
|
+
* Register a parser type
|
|
17
|
+
*/
|
|
18
|
+
static registerParser(type, parserClass) {
|
|
19
|
+
this.parsers.set(type, parserClass);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a parser instance
|
|
23
|
+
*/
|
|
24
|
+
static createParser(type, config) {
|
|
25
|
+
const ParserClass = this.parsers.get(type);
|
|
26
|
+
if (!ParserClass) {
|
|
27
|
+
throw new Error(`Unsupported parser type: ${type}`);
|
|
28
|
+
}
|
|
29
|
+
return new ParserClass(config);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get available parser types
|
|
33
|
+
*/
|
|
34
|
+
static getAvailableParsers() {
|
|
35
|
+
return Array.from(this.parsers.keys());
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get parser metadata
|
|
39
|
+
*/
|
|
40
|
+
static getParserMetadata(type) {
|
|
41
|
+
const ParserClass = this.parsers.get(type);
|
|
42
|
+
if (!ParserClass) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
// Create a temporary instance to get metadata
|
|
46
|
+
const tempInstance = new ParserClass({});
|
|
47
|
+
return tempInstance.getMetadata();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Detect parser type from input
|
|
51
|
+
*/
|
|
52
|
+
static detectParserType(input) {
|
|
53
|
+
// Check URL
|
|
54
|
+
if (input.url) {
|
|
55
|
+
if (input.url.includes("openapi.json") ||
|
|
56
|
+
input.url.includes("openapi.yaml")) {
|
|
57
|
+
return "openapi";
|
|
58
|
+
}
|
|
59
|
+
if (input.url.includes("swagger.json") ||
|
|
60
|
+
input.url.includes("swagger.yaml")) {
|
|
61
|
+
return "swagger";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Check file path
|
|
65
|
+
if (input.filePath) {
|
|
66
|
+
const ext = input.filePath.toLowerCase();
|
|
67
|
+
if (ext.endsWith("openapi.json") || ext.endsWith("openapi.yaml")) {
|
|
68
|
+
return "openapi";
|
|
69
|
+
}
|
|
70
|
+
if (ext.endsWith("swagger.json") || ext.endsWith("swagger.yaml")) {
|
|
71
|
+
return "swagger";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Check data structure
|
|
75
|
+
if (input.data || input.string) {
|
|
76
|
+
const data = input.data || JSON.parse(input.string);
|
|
77
|
+
if (typeof data === "object" && data !== null) {
|
|
78
|
+
if ("openapi" in data) {
|
|
79
|
+
return "openapi";
|
|
80
|
+
}
|
|
81
|
+
if ("swagger" in data) {
|
|
82
|
+
return "swagger";
|
|
83
|
+
}
|
|
84
|
+
if ("$schema" in data) {
|
|
85
|
+
return "json-schema";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Default to OpenAPI for FastAPI applications
|
|
90
|
+
return "openapi";
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Auto-detect and create parser
|
|
94
|
+
*/
|
|
95
|
+
static autoCreateParser(input, config) {
|
|
96
|
+
const parserType = this.detectParserType(input);
|
|
97
|
+
return this.createParser(parserType, config);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.ParserFactory = ParserFactory;
|
|
101
|
+
ParserFactory.parsers = new Map();
|
|
102
|
+
// Register default parsers
|
|
103
|
+
ParserFactory.registerParser("openapi", openapi_1.OpenAPIParser);
|
|
104
|
+
/**
|
|
105
|
+
* Convenience function to create a parser
|
|
106
|
+
*/
|
|
107
|
+
function createParser(type, config) {
|
|
108
|
+
return ParserFactory.createParser(type, config);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Convenience function to auto-detect and create parser
|
|
112
|
+
*/
|
|
113
|
+
function autoCreateParser(input, config) {
|
|
114
|
+
return ParserFactory.autoCreateParser(input, config);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Parser module exports
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./base"), exports);
|
|
21
|
+
__exportStar(require("./openapi"), exports);
|
|
22
|
+
__exportStar(require("./factory"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,yCAAuB;AACvB,4CAA0B;AAC1B,4CAA0B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI 3.0+ schema parser implementation
|
|
3
|
+
* Handles parsing and validation of OpenAPI specifications from FastAPI applications
|
|
4
|
+
*/
|
|
5
|
+
import { OpenAPISchema } from "../types/openapi";
|
|
6
|
+
import { ResolvedSchema } from "../types/schema";
|
|
7
|
+
import { SchemanticConfig } from "../types/core";
|
|
8
|
+
import { BaseSchemaParser, SchemaInput, ValidationResult, ParserMetadata } from "./base";
|
|
9
|
+
/**
|
|
10
|
+
* OpenAPI parser implementation
|
|
11
|
+
*/
|
|
12
|
+
export declare class OpenAPIParser extends BaseSchemaParser<OpenAPISchema> {
|
|
13
|
+
private readonly SUPPORTED_VERSIONS;
|
|
14
|
+
constructor(config: SchemanticConfig);
|
|
15
|
+
parse(input: SchemaInput): Promise<OpenAPISchema>;
|
|
16
|
+
validate(schema: OpenAPISchema): Promise<ValidationResult>;
|
|
17
|
+
createResolver(schema: OpenAPISchema): (ref: string) => ResolvedSchema | undefined;
|
|
18
|
+
getMetadata(): ParserMetadata;
|
|
19
|
+
/**
|
|
20
|
+
* Validate and transform raw schema data
|
|
21
|
+
*/
|
|
22
|
+
private validateAndTransform;
|
|
23
|
+
/**
|
|
24
|
+
* Validate paths object
|
|
25
|
+
*/
|
|
26
|
+
private validatePaths;
|
|
27
|
+
/**
|
|
28
|
+
* Validate operation object
|
|
29
|
+
*/
|
|
30
|
+
private validateOperation;
|
|
31
|
+
/**
|
|
32
|
+
* Validate parameters array
|
|
33
|
+
*/
|
|
34
|
+
private validateParameters;
|
|
35
|
+
/**
|
|
36
|
+
* Validate components object
|
|
37
|
+
*/
|
|
38
|
+
private validateComponents;
|
|
39
|
+
/**
|
|
40
|
+
* Validate schemas object
|
|
41
|
+
*/
|
|
42
|
+
private validateSchemas;
|
|
43
|
+
/**
|
|
44
|
+
* Validate component type object
|
|
45
|
+
*/
|
|
46
|
+
private validateComponentType;
|
|
47
|
+
/**
|
|
48
|
+
* Check for circular references in schema
|
|
49
|
+
*/
|
|
50
|
+
private hasCircularReference;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=openapi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/parsers/openapi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACL,aAAa,EAOd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAGhB,cAAc,EACf,MAAM,QAAQ,CAAC;AAEhB;;GAEG;AACH,qBAAa,aAAc,SAAQ,gBAAgB,CAAC,aAAa,CAAC;IAChE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAMjC;gBAEU,MAAM,EAAE,gBAAgB;IAI9B,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAwBjD,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuEhE,cAAc,CACZ,MAAM,EAAE,aAAa,GACpB,CAAC,GAAG,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS;IAM9C,WAAW,IAAI,cAAc;IAW7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkDrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoDzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuD1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAoB7B"}
|