@breadstone-tools/openapi-core 0.0.12-beta.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.
Files changed (102) hide show
  1. package/Index.d.ts +25 -0
  2. package/Index.d.ts.map +1 -0
  3. package/Index.js +42 -0
  4. package/Index.js.map +1 -0
  5. package/Interfaces/IOpenApiInfo.d.ts +10 -0
  6. package/Interfaces/IOpenApiInfo.d.ts.map +1 -0
  7. package/Interfaces/IOpenApiInfo.js +4 -0
  8. package/Interfaces/IOpenApiInfo.js.map +1 -0
  9. package/Interfaces/IOptions.d.ts +31 -0
  10. package/Interfaces/IOptions.d.ts.map +1 -0
  11. package/Interfaces/IOptions.js +12 -0
  12. package/Interfaces/IOptions.js.map +1 -0
  13. package/LICENSE +21 -0
  14. package/Models/TypeScript/Import.d.ts +14 -0
  15. package/Models/TypeScript/Import.d.ts.map +1 -0
  16. package/Models/TypeScript/Import.js +53 -0
  17. package/Models/TypeScript/Import.js.map +1 -0
  18. package/Models/TypeScript/Imports.d.ts +15 -0
  19. package/Models/TypeScript/Imports.d.ts.map +1 -0
  20. package/Models/TypeScript/Imports.js +39 -0
  21. package/Models/TypeScript/Imports.js.map +1 -0
  22. package/Models/TypeScript/Interfaces/ITypeScriptNamingConvention.d.ts +21 -0
  23. package/Models/TypeScript/Interfaces/ITypeScriptNamingConvention.d.ts.map +1 -0
  24. package/Models/TypeScript/Interfaces/ITypeScriptNamingConvention.js +3 -0
  25. package/Models/TypeScript/Interfaces/ITypeScriptNamingConvention.js.map +1 -0
  26. package/Models/TypeScript/Interfaces/ITypeScriptOptions.d.ts +63 -0
  27. package/Models/TypeScript/Interfaces/ITypeScriptOptions.d.ts.map +1 -0
  28. package/Models/TypeScript/Interfaces/ITypeScriptOptions.js +39 -0
  29. package/Models/TypeScript/Interfaces/ITypeScriptOptions.js.map +1 -0
  30. package/Models/TypeScript/Models/Abstracts/Interfaces/IComment.d.ts +7 -0
  31. package/Models/TypeScript/Models/Abstracts/Interfaces/IComment.d.ts.map +1 -0
  32. package/Models/TypeScript/Models/Abstracts/Interfaces/IComment.js +3 -0
  33. package/Models/TypeScript/Models/Abstracts/Interfaces/IComment.js.map +1 -0
  34. package/Models/TypeScript/Models/Abstracts/Symantic.d.ts +48 -0
  35. package/Models/TypeScript/Models/Abstracts/Symantic.d.ts.map +1 -0
  36. package/Models/TypeScript/Models/Abstracts/Symantic.js +124 -0
  37. package/Models/TypeScript/Models/Abstracts/Symantic.js.map +1 -0
  38. package/Models/TypeScript/Models/Model.d.ts +31 -0
  39. package/Models/TypeScript/Models/Model.d.ts.map +1 -0
  40. package/Models/TypeScript/Models/Model.js +149 -0
  41. package/Models/TypeScript/Models/Model.js.map +1 -0
  42. package/Models/TypeScript/Models/ModelProperty.d.ts +20 -0
  43. package/Models/TypeScript/Models/ModelProperty.d.ts.map +1 -0
  44. package/Models/TypeScript/Models/ModelProperty.js +34 -0
  45. package/Models/TypeScript/Models/ModelProperty.js.map +1 -0
  46. package/Models/TypeScript/Models/ModelValue.d.ts +19 -0
  47. package/Models/TypeScript/Models/ModelValue.d.ts.map +1 -0
  48. package/Models/TypeScript/Models/ModelValue.js +51 -0
  49. package/Models/TypeScript/Models/ModelValue.js.map +1 -0
  50. package/Models/TypeScript/Models/Service.d.ts +20 -0
  51. package/Models/TypeScript/Models/Service.d.ts.map +1 -0
  52. package/Models/TypeScript/Models/Service.js +81 -0
  53. package/Models/TypeScript/Models/Service.js.map +1 -0
  54. package/Models/TypeScript/Models/ServiceContent.d.ts +15 -0
  55. package/Models/TypeScript/Models/ServiceContent.d.ts.map +1 -0
  56. package/Models/TypeScript/Models/ServiceContent.js +28 -0
  57. package/Models/TypeScript/Models/ServiceContent.js.map +1 -0
  58. package/Models/TypeScript/Models/ServiceOperation.d.ts +60 -0
  59. package/Models/TypeScript/Models/ServiceOperation.d.ts.map +1 -0
  60. package/Models/TypeScript/Models/ServiceOperation.js +222 -0
  61. package/Models/TypeScript/Models/ServiceOperation.js.map +1 -0
  62. package/Models/TypeScript/Models/ServiceOperationVariant.d.ts +26 -0
  63. package/Models/TypeScript/Models/ServiceOperationVariant.d.ts.map +1 -0
  64. package/Models/TypeScript/Models/ServiceOperationVariant.js +82 -0
  65. package/Models/TypeScript/Models/ServiceOperationVariant.js.map +1 -0
  66. package/Models/TypeScript/Models/ServiceParameter.d.ts +19 -0
  67. package/Models/TypeScript/Models/ServiceParameter.d.ts.map +1 -0
  68. package/Models/TypeScript/Models/ServiceParameter.js +34 -0
  69. package/Models/TypeScript/Models/ServiceParameter.js.map +1 -0
  70. package/Models/TypeScript/Models/ServiceRequestBody.d.ts +18 -0
  71. package/Models/TypeScript/Models/ServiceRequestBody.d.ts.map +1 -0
  72. package/Models/TypeScript/Models/ServiceRequestBody.js +28 -0
  73. package/Models/TypeScript/Models/ServiceRequestBody.js.map +1 -0
  74. package/Models/TypeScript/Models/ServiceResponse.d.ts +13 -0
  75. package/Models/TypeScript/Models/ServiceResponse.d.ts.map +1 -0
  76. package/Models/TypeScript/Models/ServiceResponse.js +25 -0
  77. package/Models/TypeScript/Models/ServiceResponse.js.map +1 -0
  78. package/Models/TypeScript/Models/ServiceSecurity.d.ts +18 -0
  79. package/Models/TypeScript/Models/ServiceSecurity.d.ts.map +1 -0
  80. package/Models/TypeScript/Models/ServiceSecurity.js +33 -0
  81. package/Models/TypeScript/Models/ServiceSecurity.js.map +1 -0
  82. package/Models/TypeScript/TemplateType.d.ts +33 -0
  83. package/Models/TypeScript/TemplateType.d.ts.map +1 -0
  84. package/Models/TypeScript/TemplateType.js +39 -0
  85. package/Models/TypeScript/TemplateType.js.map +1 -0
  86. package/Models/TypeScript/Utils.d.ts +65 -0
  87. package/Models/TypeScript/Utils.d.ts.map +1 -0
  88. package/Models/TypeScript/Utils.js +274 -0
  89. package/Models/TypeScript/Utils.js.map +1 -0
  90. package/Services/OpenApiParser.d.ts +47 -0
  91. package/Services/OpenApiParser.d.ts.map +1 -0
  92. package/Services/OpenApiParser.js +192 -0
  93. package/Services/OpenApiParser.js.map +1 -0
  94. package/Services/TemplateBuilder.d.ts +53 -0
  95. package/Services/TemplateBuilder.d.ts.map +1 -0
  96. package/Services/TemplateBuilder.js +105 -0
  97. package/Services/TemplateBuilder.js.map +1 -0
  98. package/Services/TemplateEngine.d.ts +40 -0
  99. package/Services/TemplateEngine.d.ts.map +1 -0
  100. package/Services/TemplateEngine.js +105 -0
  101. package/Services/TemplateEngine.js.map +1 -0
  102. package/package.json +23 -0
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ /* eslint-disable max-depth */
3
+ // #region Imports
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.OpenApiParser = exports.HTTP_METHODS = void 0;
9
+ const utilities_1 = require("@breadstone-infrastructure/utilities");
10
+ const json_schema_ref_parser_1 = __importDefault(require("json-schema-ref-parser"));
11
+ const oas30_1 = require("openapi3-ts/oas30");
12
+ const ITypeScriptOptions_js_1 = require("../Models/TypeScript/Interfaces/ITypeScriptOptions.js");
13
+ const Model_js_1 = require("../Models/TypeScript/Models/Model.js");
14
+ const Service_js_1 = require("../Models/TypeScript/Models/Service.js");
15
+ const ServiceOperation_js_1 = require("../Models/TypeScript/Models/ServiceOperation.js");
16
+ const Utils_js_1 = require("../Models/TypeScript/Utils.js");
17
+ // #endregion
18
+ exports.HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'];
19
+ /**
20
+ * A OpenApi parser.
21
+ * @public
22
+ */
23
+ class OpenApiParser {
24
+ // #region Fields
25
+ _logger;
26
+ _config;
27
+ // #endregion
28
+ // #region Ctor
29
+ /**
30
+ * Constructs a new instance of the `OpenApiParser` class.
31
+ *
32
+ * @public
33
+ */
34
+ constructor(logger, config) {
35
+ this._logger = logger;
36
+ this._config = config;
37
+ }
38
+ // #endregion
39
+ // #region Methods
40
+ /**
41
+ * @public
42
+ * @param path - The path or url of the schema json file.
43
+ */
44
+ async parse(path, options = ITypeScriptOptions_js_1.defaultTypeScriptOptions) {
45
+ const abstracts = new Array();
46
+ try {
47
+ const openApi = await json_schema_ref_parser_1.default.default.bundle(path, {
48
+ dereference: {
49
+ circular: false
50
+ },
51
+ resolve: {
52
+ http: { timeout: this._config.fetchTimeout ?? 20000 }
53
+ }
54
+ });
55
+ const openApiInfo = this.parseOpenApiInfo(openApi);
56
+ if (!openApiInfo.version.startsWith('3')) {
57
+ this._logger.error(`Wrong version detected.${utilities_1.StringExtensions.newLine}` +
58
+ `You tried to parse an openApi document in a not supported version (${openApiInfo.version}).${utilities_1.StringExtensions.newLine}` +
59
+ 'The supported version is 3.* or higher.');
60
+ return await Promise.resolve([]);
61
+ }
62
+ this._logger.log((0, utilities_1.magenta)('Parsing...'));
63
+ abstracts.push(...this.parseModels(openApi, openApiInfo, options));
64
+ abstracts.push(...this.parseServices(openApi, openApiInfo, options));
65
+ }
66
+ catch (error) {
67
+ this._logger.error(`Error while parsing schema json.${utilities_1.StringExtensions.newLine}` +
68
+ `${error.message}`);
69
+ }
70
+ return [...abstracts.values()];
71
+ }
72
+ /**
73
+ * @private
74
+ * @param openApi
75
+ */
76
+ parseModels(openApi, openApiInfo, options) {
77
+ const schemas = openApi.components?.schemas ?? {};
78
+ const models = new Map();
79
+ for (const name of Object.keys(schemas)) {
80
+ const schema = schemas[name];
81
+ if (!(0, oas30_1.isSchemaObject)(schema)) {
82
+ continue;
83
+ }
84
+ const cls = new Model_js_1.Model(name, schema, openApiInfo, options);
85
+ models.set(name, cls);
86
+ this._logger.log((0, utilities_1.magenta)(` + schmea for ${name}`));
87
+ }
88
+ return [...models.values()];
89
+ }
90
+ /**
91
+ * @private
92
+ * @param openApi - The open api object.
93
+ */
94
+ parseServices(openApi, openApiInfo, options) {
95
+ const defaultTag = 'Api';
96
+ const services = new Map();
97
+ const operations = new Map();
98
+ // First read all operations, as tags are by operation
99
+ const operationsByTag = new Map();
100
+ for (const opPath of Object.keys(openApi.paths)) {
101
+ const pathSpec = openApi.paths[opPath];
102
+ for (const method of exports.HTTP_METHODS) {
103
+ const methodSpec = pathSpec[method];
104
+ if (methodSpec) {
105
+ let id = methodSpec.operationId;
106
+ if (id) {
107
+ // Make sure the id is valid
108
+ id = (0, Utils_js_1.methodName)(id);
109
+ }
110
+ else {
111
+ // Generate an id
112
+ id = (0, Utils_js_1.methodName)(`${opPath}.${method}`);
113
+ this._logger.warn(`Operation '${opPath}.${method}' didn't specify an 'operationId'. Assuming '${id}'.`);
114
+ }
115
+ if (operations.has(id)) {
116
+ // Duplicated id. Add a suffix
117
+ let suffix = 0;
118
+ let newId = id;
119
+ while (operations.has(newId)) {
120
+ newId = `${id}_${suffix += 1}`;
121
+ }
122
+ this._logger.warn(`Duplicate operation id '${id}'. Assuming id ${newId} for operation '${opPath}.${method}'.`);
123
+ id = newId;
124
+ }
125
+ const operation = new ServiceOperation_js_1.ServiceOperation(openApi, opPath, pathSpec, method, id, methodSpec, options);
126
+ // Set a default tag if no tags are found
127
+ if (operation.tags.length === 0) {
128
+ this._logger.warn(`No tags set on operation '${opPath}.${method}'. Assuming '${defaultTag}'.`);
129
+ operation.tags.push(defaultTag);
130
+ }
131
+ for (const tag of operation.tags) {
132
+ let ops = operationsByTag.get(tag);
133
+ if (!ops) {
134
+ ops = [];
135
+ operationsByTag.set(tag, ops);
136
+ }
137
+ ops.push(operation);
138
+ }
139
+ // Store the operation
140
+ operations.set(id, operation);
141
+ }
142
+ }
143
+ }
144
+ const includeTags = options.includeTags;
145
+ const excludeTags = options.excludeTags;
146
+ for (const tagName of operationsByTag.keys()) {
147
+ if (includeTags.length > 0 && !includeTags.includes(tagName)) {
148
+ this._logger.debug(`Ignoring tag ${tagName} because it is not listed in the 'includeTags' option`);
149
+ continue;
150
+ }
151
+ if (excludeTags.length > 0 && excludeTags.includes(tagName)) {
152
+ this._logger.debug(`Ignoring tag ${tagName} because it is listed in the 'excludeTags' option`);
153
+ continue;
154
+ }
155
+ const ops = operationsByTag.get(tagName) ?? [];
156
+ const tag = openApi.tags?.find((t) => t.name === tagName) ?? { name: tagName };
157
+ const service = new Service_js_1.Service(tag, openApiInfo, ops, options);
158
+ services.set(tag.name, service);
159
+ this._logger.log((0, utilities_1.magenta)(` + schmea for ${tag.name}`));
160
+ }
161
+ return [...services.values()];
162
+ }
163
+ /**
164
+ * @private
165
+ * @param openApi - The open api object.
166
+ */
167
+ parseOpenApiInfo(openApi) {
168
+ let rootUrl = '';
169
+ if (!openApi.servers || openApi.servers.length === 0) {
170
+ rootUrl = '';
171
+ }
172
+ else {
173
+ const server = openApi.servers[0];
174
+ rootUrl = server.url;
175
+ if (!rootUrl) {
176
+ rootUrl = '';
177
+ }
178
+ const vars = server.variables ?? {};
179
+ for (const key of Object.keys(vars)) {
180
+ const value = vars[key].default.toString();
181
+ rootUrl = rootUrl.replace(`{${key}}`, value);
182
+ }
183
+ }
184
+ return {
185
+ version: openApi.openapi,
186
+ root: rootUrl,
187
+ info: openApi.info
188
+ };
189
+ }
190
+ }
191
+ exports.OpenApiParser = OpenApiParser;
192
+ //# sourceMappingURL=OpenApiParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenApiParser.js","sourceRoot":"","sources":["../../src/Services/OpenApiParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { type ILogger } from '@breadstone-infrastructure/utilities';
2
+ import type { Symantic } from '../Models/TypeScript/Models/Abstracts/Symantic.js';
3
+ import type { TemplateEngine } from './TemplateEngine.js';
4
+ export type PreferedComplexType = 'class' | 'interface';
5
+ export type PreferedSimpleType = 'enum' | 'type';
6
+ export interface IBuildConfig {
7
+ preferedComplexType: PreferedComplexType;
8
+ preferedSimpleType: PreferedSimpleType;
9
+ target: string;
10
+ }
11
+ /**
12
+ * @public
13
+ */
14
+ export interface ITemplateBuilderConfig {
15
+ emoji: boolean;
16
+ debug: boolean;
17
+ test: boolean;
18
+ }
19
+ /**
20
+ * @public
21
+ */
22
+ export declare class TemplateBuilder {
23
+ private readonly _logger;
24
+ private readonly _config;
25
+ private readonly _templateEngine;
26
+ /**
27
+ * Constructs a new instance of the `TemplateBuilder` class.
28
+ *
29
+ * @public
30
+ */
31
+ constructor(logger: ILogger, config: ITemplateBuilderConfig, templateEngine: TemplateEngine);
32
+ /**
33
+ * @public
34
+ */
35
+ build(abstracts: Array<Symantic>, config: IBuildConfig): Promise<void>;
36
+ /**
37
+ * @private
38
+ */
39
+ private buildModels;
40
+ /**
41
+ * @private
42
+ */
43
+ private buildServices;
44
+ /**
45
+ * @private
46
+ */
47
+ private buildIndex;
48
+ /**
49
+ * @private
50
+ */
51
+ private write;
52
+ }
53
+ //# sourceMappingURL=TemplateBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateBuilder.d.ts","sourceRoot":"","sources":["../../src/Services/TemplateBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,OAAO,EAA0B,MAAM,sCAAsC,CAAC;AAElG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mDAAmD,CAAC;AAIlF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI1D,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,WAAW,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjD,MAAM,WAAW,YAAY;IACzB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAMjD;;;;OAIG;gBACgB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,EAAE,cAAc;IAUlG;;OAEG;IACI,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB7E;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBnB;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,KAAK;CAUhB"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ // #region Imports
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TemplateBuilder = void 0;
5
+ const utilities_1 = require("@breadstone-infrastructure/utilities");
6
+ const Import_js_1 = require("../Models/TypeScript/Import.js");
7
+ const Model_js_1 = require("../Models/TypeScript/Models/Model.js");
8
+ const Service_js_1 = require("../Models/TypeScript/Models/Service.js");
9
+ const TemplateType_js_1 = require("../Models/TypeScript/TemplateType.js");
10
+ /**
11
+ * @public
12
+ */
13
+ class TemplateBuilder {
14
+ // #region Fields
15
+ _logger;
16
+ _config;
17
+ _templateEngine;
18
+ // #endregion
19
+ // #region Ctor
20
+ /**
21
+ * Constructs a new instance of the `TemplateBuilder` class.
22
+ *
23
+ * @public
24
+ */
25
+ constructor(logger, config, templateEngine) {
26
+ this._logger = logger;
27
+ this._config = config;
28
+ this._templateEngine = templateEngine;
29
+ }
30
+ // #endregion
31
+ // #region Methods
32
+ /**
33
+ * @public
34
+ */
35
+ build(abstracts, config) {
36
+ const models = abstracts.filter((e) => e instanceof Model_js_1.Model);
37
+ const services = abstracts.filter((e) => e instanceof Service_js_1.Service);
38
+ this.buildModels(models, config);
39
+ this.buildServices(services, config);
40
+ this.buildIndex(abstracts, config);
41
+ if (abstracts.length > 0) {
42
+ this._logger.log(`Generated ${models.filter((x) => x.isObject).length} models${utilities_1.StringExtensions.newLine}` +
43
+ ` ${models.filter((x) => x.isEnum).length} enums ${utilities_1.StringExtensions.newLine}` +
44
+ ` ${models.filter((x) => x.isSimple).length} types${utilities_1.StringExtensions.newLine}` +
45
+ ` ${services.length} services`, { color: 'magenta' });
46
+ }
47
+ return Promise.resolve();
48
+ }
49
+ /**
50
+ * @private
51
+ */
52
+ buildModels(models, config) {
53
+ models.forEach((x) => {
54
+ let type = TemplateType_js_1.TemplateType.None;
55
+ if (x.isObject) {
56
+ type = config.preferedComplexType === 'class' ? TemplateType_js_1.TemplateType.Class : TemplateType_js_1.TemplateType.Interface;
57
+ }
58
+ else if (x.isEnum) {
59
+ type = TemplateType_js_1.TemplateType.Enum;
60
+ }
61
+ else if (x.isSimple) {
62
+ type = TemplateType_js_1.TemplateType.Type;
63
+ }
64
+ else {
65
+ type = TemplateType_js_1.TemplateType.Index;
66
+ }
67
+ this.write(utilities_1.Path.combine(config.target, x.options.modelRoot), `${x.fileName}.ts`, x, type);
68
+ });
69
+ }
70
+ /**
71
+ * @private
72
+ */
73
+ buildServices(services, config) {
74
+ services.forEach((x) => {
75
+ this.write(utilities_1.Path.combine(config.target, x.options.serviceRoot), `${x.fileName}.ts`, x, TemplateType_js_1.TemplateType.Service);
76
+ });
77
+ }
78
+ /**
79
+ * @private
80
+ */
81
+ buildIndex(abstracts, config) {
82
+ const imports = abstracts.map((x) => {
83
+ if (x instanceof Model_js_1.Model) {
84
+ return new Import_js_1.Import(x, `./${x.options.modelRoot}`, x.options);
85
+ }
86
+ if (x instanceof Service_js_1.Service) {
87
+ return new Import_js_1.Import(x, `./${x.options.serviceRoot}`, x.options);
88
+ }
89
+ throw new Error('Invalid import type.');
90
+ });
91
+ this.write(config.target, 'Index.ts', { imports: imports }, TemplateType_js_1.TemplateType.Index);
92
+ }
93
+ /**
94
+ * @private
95
+ */
96
+ write(target, fileName, context, type) {
97
+ const file = utilities_1.Path.combine(target, fileName);
98
+ const content = this._templateEngine.compile(type, context);
99
+ if (!this._config.test) {
100
+ utilities_1.File.writeAllText(file, content);
101
+ }
102
+ }
103
+ }
104
+ exports.TemplateBuilder = TemplateBuilder;
105
+ //# sourceMappingURL=TemplateBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateBuilder.js","sourceRoot":"","sources":["../../src/Services/TemplateBuilder.ts"],"names":[],"mappings":";AAAA,kBAAkB;;;AAElB,oEAAkG;AAClG,8DAAwD;AAExD,mEAA6D;AAC7D,uEAAiE;AACjE,0EAAoE;AAwBpE;;GAEG;AACH,MAAa,eAAe;IAExB,iBAAiB;IAEA,OAAO,CAAU;IACjB,OAAO,CAAyB;IAChC,eAAe,CAAiB;IAEjD,aAAa;IAEb,eAAe;IAEf;;;;OAIG;IACH,YAAmB,MAAe,EAAE,MAA8B,EAAE,cAA8B;QAC9F,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IAC1C,CAAC;IAED,aAAa;IAEb,kBAAkB;IAElB;;OAEG;IACI,KAAK,CAAC,SAA0B,EAAE,MAAoB;QACzD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,gBAAK,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,oBAAO,CAAC,CAAC;QAExE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAEnC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CACZ,aAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,UAAU,4BAAgB,CAAC,OAAO,EAAE;gBACxF,aAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,UAAU,4BAAgB,CAAC,OAAO,EAAE;gBACtF,aAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,SAAS,4BAAgB,CAAC,OAAO,EAAE;gBACvF,aAAa,QAAQ,CAAC,MAAM,WAAW,EACrC,EAAE,KAAK,EAAE,SAAS,EAAE,CACzB,CAAC;QACN,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,MAAoB,EAAE,MAAoB;QAC1D,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,IAAI,GAAG,8BAAY,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACb,IAAI,GAAG,MAAM,CAAC,mBAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,8BAAY,CAAC,KAAK,CAAC,CAAC,CAAC,8BAAY,CAAC,SAAS,CAAC;YAChG,CAAC;iBAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAClB,IAAI,GAAG,8BAAY,CAAC,IAAI,CAAC;YAC7B,CAAC;iBAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACpB,IAAI,GAAG,8BAAY,CAAC,IAAI,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACJ,IAAI,GAAG,8BAAY,CAAC,KAAK,CAAC;YAC9B,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,gBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,QAAwB,EAAE,MAAoB;QAChE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,gBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,EAAE,8BAAY,CAAC,OAAO,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,SAA0B,EAAE,MAAoB;QAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAChC,IAAI,CAAC,YAAY,gBAAK,EAAE,CAAC;gBACrB,OAAO,IAAI,kBAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,YAAY,oBAAO,EAAE,CAAC;gBACvB,OAAO,IAAI,kBAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,8BAAY,CAAC,KAAK,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,MAAc,EAAE,QAAgB,EAAE,OAAqD,EAAE,IAAkB;QACrH,MAAM,IAAI,GAAG,gBAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,gBAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;CAIJ;AA/GD,0CA+GC"}
@@ -0,0 +1,40 @@
1
+ import type { Import } from '../Models/TypeScript/Import.js';
2
+ import type { Model } from '../Models/TypeScript/Models/Model.js';
3
+ import type { Service } from '../Models/TypeScript/Models/Service.js';
4
+ import type { TemplateType } from '../Models/TypeScript/TemplateType.js';
5
+ /**
6
+ * @public
7
+ */
8
+ export interface ITemplateEngineConfig {
9
+ debug: boolean;
10
+ }
11
+ /**
12
+ * @public
13
+ */
14
+ export declare class TemplateEngine {
15
+ private readonly _config;
16
+ private readonly _mappings;
17
+ /**
18
+ * Constructs a new instance of the `TemplateEngine.ts` class.
19
+ *
20
+ * @public
21
+ */
22
+ constructor(config: ITemplateEngineConfig);
23
+ /**
24
+ * @public
25
+ * @param templateSource - The template source directory.
26
+ */
27
+ compose(templateSource: string | Map<string, string>): void;
28
+ /**
29
+ * @public
30
+ * @param type - The template type to compile.
31
+ * @param ctx - The context to compile.
32
+ */
33
+ compile(type: TemplateType, ctx: Model | Service | {
34
+ imports: Array<Import>;
35
+ }): string;
36
+ private compileDebug;
37
+ private createContext;
38
+ private toJSON;
39
+ }
40
+ //# sourceMappingURL=TemplateEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../../src/Services/TemplateEngine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAIzE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAMhD;;;;OAIG;gBACgB,MAAM,EAAE,qBAAqB;IAShD;;;OAGG;IACI,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAqBlE;;;;OAIG;IACI,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,GAAG,OAAO,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;KAAE,GAAG,MAAM;IAe7F,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,MAAM;CAUjB"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ // #region Imports
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TemplateEngine = void 0;
5
+ const utilities_1 = require("@breadstone-infrastructure/utilities");
6
+ /**
7
+ * @public
8
+ */
9
+ class TemplateEngine {
10
+ // #region Fields
11
+ _config;
12
+ _mappings;
13
+ // #endregion
14
+ // #region Ctor
15
+ /**
16
+ * Constructs a new instance of the `TemplateEngine.ts` class.
17
+ *
18
+ * @public
19
+ */
20
+ constructor(config) {
21
+ this._config = config;
22
+ this._mappings = new Map();
23
+ }
24
+ // #endregion
25
+ // #region Methods
26
+ /**
27
+ * @public
28
+ * @param templateSource - The template source directory.
29
+ */
30
+ compose(templateSource) {
31
+ if (templateSource instanceof Map) {
32
+ templateSource.forEach((v, k) => {
33
+ this._mappings.set(utilities_1.Path.getFileNameWithoutExtension(k).toLowerCase(), utilities_1.File.readAllText(v));
34
+ });
35
+ }
36
+ else {
37
+ if (!utilities_1.Directory.exists(templateSource)) {
38
+ throw new Error(`Template path '${templateSource}' does not exist.`);
39
+ }
40
+ const tplGlob = utilities_1.Path.combine(templateSource, '*.tpl');
41
+ const tplFiles = utilities_1.File.glob(tplGlob);
42
+ if (tplFiles.length === 0) {
43
+ throw new Error('Template path contains no templates.');
44
+ }
45
+ else {
46
+ tplFiles.forEach((x) => this._mappings.set(utilities_1.Path.getFileNameWithoutExtension(x).toLowerCase(), utilities_1.File.readAllText(x)));
47
+ }
48
+ }
49
+ }
50
+ /**
51
+ * @public
52
+ * @param type - The template type to compile.
53
+ * @param ctx - The context to compile.
54
+ */
55
+ compile(type, ctx) {
56
+ const content = this._mappings.get(type);
57
+ if (!content) {
58
+ throw new Error(`Type ${type} has no template.`);
59
+ }
60
+ try {
61
+ return this.compileDebug(utilities_1.Template.create(this.createContext(ctx))
62
+ .apply(content)
63
+ .toString(), ctx);
64
+ }
65
+ catch (error) {
66
+ throw new Error(`Error in template '${type}': ${error}`);
67
+ }
68
+ }
69
+ compileDebug(content, ctx) {
70
+ if (this._config.debug) {
71
+ // debug context
72
+ const circualrCache = [];
73
+ // const omitCtx = omit(ctx, 'operations.parameters._openApi');
74
+ const json = JSON.stringify(this.toJSON(ctx), (_, value) => {
75
+ if (typeof value === 'object' && value !== null) {
76
+ if (circualrCache.includes(value)) {
77
+ return;
78
+ }
79
+ circualrCache.push(value);
80
+ }
81
+ // eslint-disable-next-line @typescript-eslint/consistent-return
82
+ return value;
83
+ }, 4);
84
+ return json.split('\n').map((x) => `// ${x}`)
85
+ .join('\n')
86
+ .concat('\n')
87
+ .concat(content);
88
+ }
89
+ return content;
90
+ }
91
+ createContext(ctx) {
92
+ return {
93
+ ctx: ctx,
94
+ fn: () => ''
95
+ };
96
+ }
97
+ toJSON(ctx) {
98
+ if ('toJSON' in ctx) {
99
+ return ctx.toJson();
100
+ }
101
+ return ctx;
102
+ }
103
+ }
104
+ exports.TemplateEngine = TemplateEngine;
105
+ //# sourceMappingURL=TemplateEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateEngine.js","sourceRoot":"","sources":["../../src/Services/TemplateEngine.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@breadstone-tools/openapi-core",
3
+ "description": "Open API Model generator",
4
+ "version": "0.0.12-beta.0",
5
+ "license": "MIT",
6
+ "author": "andre.wehlert <awehlert@breadstone.de> (https://www.breadstone.de)",
7
+ "repository": {
8
+ "url": "git+ssh://git@github.com/RueDeRennes/mosaik.git"
9
+ },
10
+ "type": "commonjs",
11
+ "main": "./Index.js",
12
+ "commonjs": "./Index.js",
13
+ "module": "./Index.js",
14
+ "types": "./Index.d.ts",
15
+ "dependencies": {
16
+ "@breadstone-infrastructure/utilities": "^0.0.12-beta.0",
17
+ "es-toolkit": "^1.37.2",
18
+ "fs-extra": "^11.3.0",
19
+ "jsesc": "3.1.0",
20
+ "json-schema-ref-parser": "9.0.9",
21
+ "openapi3-ts": "4.4.0"
22
+ }
23
+ }