@goast/core 0.0.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.
Files changed (202) hide show
  1. package/README.md +11 -0
  2. package/dist/index.cjs +7 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.js +4 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/codegen/config.cjs +6 -0
  8. package/dist/lib/codegen/config.cjs.map +1 -0
  9. package/dist/lib/codegen/config.d.ts +6 -0
  10. package/dist/lib/codegen/config.js +3 -0
  11. package/dist/lib/codegen/config.js.map +1 -0
  12. package/dist/lib/codegen/endpoints-generator.cjs +31 -0
  13. package/dist/lib/codegen/endpoints-generator.cjs.map +1 -0
  14. package/dist/lib/codegen/endpoints-generator.d.ts +15 -0
  15. package/dist/lib/codegen/endpoints-generator.js +27 -0
  16. package/dist/lib/codegen/endpoints-generator.js.map +1 -0
  17. package/dist/lib/codegen/generator.cjs +103 -0
  18. package/dist/lib/codegen/generator.cjs.map +1 -0
  19. package/dist/lib/codegen/generator.d.ts +36 -0
  20. package/dist/lib/codegen/generator.js +98 -0
  21. package/dist/lib/codegen/generator.js.map +1 -0
  22. package/dist/lib/codegen/index.cjs +10 -0
  23. package/dist/lib/codegen/index.cjs.map +1 -0
  24. package/dist/lib/codegen/index.d.ts +6 -0
  25. package/dist/lib/codegen/index.js +7 -0
  26. package/dist/lib/codegen/index.js.map +1 -0
  27. package/dist/lib/codegen/internal-utils.cjs +10 -0
  28. package/dist/lib/codegen/internal-utils.cjs.map +1 -0
  29. package/dist/lib/codegen/internal-utils.d.ts +1 -0
  30. package/dist/lib/codegen/internal-utils.js +6 -0
  31. package/dist/lib/codegen/internal-utils.js.map +1 -0
  32. package/dist/lib/codegen/schemas-generator.cjs +43 -0
  33. package/dist/lib/codegen/schemas-generator.cjs.map +1 -0
  34. package/dist/lib/codegen/schemas-generator.d.ts +16 -0
  35. package/dist/lib/codegen/schemas-generator.js +39 -0
  36. package/dist/lib/codegen/schemas-generator.js.map +1 -0
  37. package/dist/lib/codegen/services-generator.cjs +31 -0
  38. package/dist/lib/codegen/services-generator.cjs.map +1 -0
  39. package/dist/lib/codegen/services-generator.d.ts +15 -0
  40. package/dist/lib/codegen/services-generator.js +27 -0
  41. package/dist/lib/codegen/services-generator.js.map +1 -0
  42. package/dist/lib/codegen/types.cjs +3 -0
  43. package/dist/lib/codegen/types.cjs.map +1 -0
  44. package/dist/lib/codegen/types.d.ts +17 -0
  45. package/dist/lib/codegen/types.js +2 -0
  46. package/dist/lib/codegen/types.js.map +1 -0
  47. package/dist/lib/collect/collector.cjs +116 -0
  48. package/dist/lib/collect/collector.cjs.map +1 -0
  49. package/dist/lib/collect/collector.d.ts +3 -0
  50. package/dist/lib/collect/collector.js +112 -0
  51. package/dist/lib/collect/collector.js.map +1 -0
  52. package/dist/lib/collect/helpers.cjs +33 -0
  53. package/dist/lib/collect/helpers.cjs.map +1 -0
  54. package/dist/lib/collect/helpers.d.ts +3 -0
  55. package/dist/lib/collect/helpers.js +28 -0
  56. package/dist/lib/collect/helpers.js.map +1 -0
  57. package/dist/lib/collect/index.cjs +7 -0
  58. package/dist/lib/collect/index.cjs.map +1 -0
  59. package/dist/lib/collect/index.d.ts +3 -0
  60. package/dist/lib/collect/index.js +4 -0
  61. package/dist/lib/collect/index.js.map +1 -0
  62. package/dist/lib/collect/types.cjs +3 -0
  63. package/dist/lib/collect/types.cjs.map +1 -0
  64. package/dist/lib/collect/types.d.ts +12 -0
  65. package/dist/lib/collect/types.js +2 -0
  66. package/dist/lib/collect/types.js.map +1 -0
  67. package/dist/lib/internal-utils.cjs +8 -0
  68. package/dist/lib/internal-utils.cjs.map +1 -0
  69. package/dist/lib/internal-utils.d.ts +1 -0
  70. package/dist/lib/internal-utils.js +4 -0
  71. package/dist/lib/internal-utils.js.map +1 -0
  72. package/dist/lib/parse/deref-proxy.cjs +46 -0
  73. package/dist/lib/parse/deref-proxy.cjs.map +1 -0
  74. package/dist/lib/parse/deref-proxy.d.ts +3 -0
  75. package/dist/lib/parse/deref-proxy.js +42 -0
  76. package/dist/lib/parse/deref-proxy.js.map +1 -0
  77. package/dist/lib/parse/index.cjs +7 -0
  78. package/dist/lib/parse/index.cjs.map +1 -0
  79. package/dist/lib/parse/index.d.ts +3 -0
  80. package/dist/lib/parse/index.js +4 -0
  81. package/dist/lib/parse/index.js.map +1 -0
  82. package/dist/lib/parse/openapi-types.cjs +3 -0
  83. package/dist/lib/parse/openapi-types.cjs.map +1 -0
  84. package/dist/lib/parse/openapi-types.d.ts +897 -0
  85. package/dist/lib/parse/openapi-types.js +2 -0
  86. package/dist/lib/parse/openapi-types.js.map +1 -0
  87. package/dist/lib/parse/parser.cjs +189 -0
  88. package/dist/lib/parse/parser.cjs.map +1 -0
  89. package/dist/lib/parse/parser.d.ts +16 -0
  90. package/dist/lib/parse/parser.js +185 -0
  91. package/dist/lib/parse/parser.js.map +1 -0
  92. package/dist/lib/parse/types.cjs +3 -0
  93. package/dist/lib/parse/types.cjs.map +1 -0
  94. package/dist/lib/parse/types.d.ts +15 -0
  95. package/dist/lib/parse/types.js +2 -0
  96. package/dist/lib/parse/types.js.map +1 -0
  97. package/dist/lib/transform/api-types.cjs +3 -0
  98. package/dist/lib/transform/api-types.cjs.map +1 -0
  99. package/dist/lib/transform/api-types.d.ts +186 -0
  100. package/dist/lib/transform/api-types.js +2 -0
  101. package/dist/lib/transform/api-types.js.map +1 -0
  102. package/dist/lib/transform/helpers.cjs +121 -0
  103. package/dist/lib/transform/helpers.cjs.map +1 -0
  104. package/dist/lib/transform/helpers.d.ts +50 -0
  105. package/dist/lib/transform/helpers.js +108 -0
  106. package/dist/lib/transform/helpers.js.map +1 -0
  107. package/dist/lib/transform/index.cjs +6 -0
  108. package/dist/lib/transform/index.cjs.map +1 -0
  109. package/dist/lib/transform/index.d.ts +2 -0
  110. package/dist/lib/transform/index.js +3 -0
  111. package/dist/lib/transform/index.js.map +1 -0
  112. package/dist/lib/transform/transform-document.cjs +33 -0
  113. package/dist/lib/transform/transform-document.cjs.map +1 -0
  114. package/dist/lib/transform/transform-document.d.ts +3 -0
  115. package/dist/lib/transform/transform-document.js +29 -0
  116. package/dist/lib/transform/transform-document.js.map +1 -0
  117. package/dist/lib/transform/transform-endpoint.cjs +254 -0
  118. package/dist/lib/transform/transform-endpoint.cjs.map +1 -0
  119. package/dist/lib/transform/transform-endpoint.d.ts +4 -0
  120. package/dist/lib/transform/transform-endpoint.js +250 -0
  121. package/dist/lib/transform/transform-endpoint.js.map +1 -0
  122. package/dist/lib/transform/transform-schema.cjs +142 -0
  123. package/dist/lib/transform/transform-schema.cjs.map +1 -0
  124. package/dist/lib/transform/transform-schema.d.ts +4 -0
  125. package/dist/lib/transform/transform-schema.js +138 -0
  126. package/dist/lib/transform/transform-schema.js.map +1 -0
  127. package/dist/lib/transform/transformer.cjs +44 -0
  128. package/dist/lib/transform/transformer.cjs.map +1 -0
  129. package/dist/lib/transform/transformer.d.ts +3 -0
  130. package/dist/lib/transform/transformer.js +40 -0
  131. package/dist/lib/transform/transformer.js.map +1 -0
  132. package/dist/lib/transform/types.cjs +3 -0
  133. package/dist/lib/transform/types.cjs.map +1 -0
  134. package/dist/lib/transform/types.d.ts +23 -0
  135. package/dist/lib/transform/types.js +2 -0
  136. package/dist/lib/transform/types.js.map +1 -0
  137. package/dist/lib/utils/action-provider.cjs +35 -0
  138. package/dist/lib/utils/action-provider.cjs.map +1 -0
  139. package/dist/lib/utils/action-provider.d.ts +28 -0
  140. package/dist/lib/utils/action-provider.js +31 -0
  141. package/dist/lib/utils/action-provider.js.map +1 -0
  142. package/dist/lib/utils/common.utils.cjs +12 -0
  143. package/dist/lib/utils/common.utils.cjs.map +1 -0
  144. package/dist/lib/utils/common.utils.d.ts +3 -0
  145. package/dist/lib/utils/common.utils.js +7 -0
  146. package/dist/lib/utils/common.utils.js.map +1 -0
  147. package/dist/lib/utils/condition.cjs +9 -0
  148. package/dist/lib/utils/condition.cjs.map +1 -0
  149. package/dist/lib/utils/condition.d.ts +3 -0
  150. package/dist/lib/utils/condition.js +5 -0
  151. package/dist/lib/utils/condition.js.map +1 -0
  152. package/dist/lib/utils/endpoint.utils.cjs +13 -0
  153. package/dist/lib/utils/endpoint.utils.cjs.map +1 -0
  154. package/dist/lib/utils/endpoint.utils.d.ts +2 -0
  155. package/dist/lib/utils/endpoint.utils.js +9 -0
  156. package/dist/lib/utils/endpoint.utils.js.map +1 -0
  157. package/dist/lib/utils/factory.cjs +29 -0
  158. package/dist/lib/utils/factory.cjs.map +1 -0
  159. package/dist/lib/utils/factory.d.ts +20 -0
  160. package/dist/lib/utils/factory.js +25 -0
  161. package/dist/lib/utils/factory.js.map +1 -0
  162. package/dist/lib/utils/generator.utils.cjs +11 -0
  163. package/dist/lib/utils/generator.utils.cjs.map +1 -0
  164. package/dist/lib/utils/generator.utils.d.ts +1 -0
  165. package/dist/lib/utils/generator.utils.js +7 -0
  166. package/dist/lib/utils/generator.utils.js.map +1 -0
  167. package/dist/lib/utils/index.cjs +14 -0
  168. package/dist/lib/utils/index.cjs.map +1 -0
  169. package/dist/lib/utils/index.d.ts +10 -0
  170. package/dist/lib/utils/index.js +11 -0
  171. package/dist/lib/utils/index.js.map +1 -0
  172. package/dist/lib/utils/object.utils.cjs +21 -0
  173. package/dist/lib/utils/object.utils.cjs.map +1 -0
  174. package/dist/lib/utils/object.utils.d.ts +1 -0
  175. package/dist/lib/utils/object.utils.js +17 -0
  176. package/dist/lib/utils/object.utils.js.map +1 -0
  177. package/dist/lib/utils/schema.utils.cjs +55 -0
  178. package/dist/lib/utils/schema.utils.cjs.map +1 -0
  179. package/dist/lib/utils/schema.utils.d.ts +10 -0
  180. package/dist/lib/utils/schema.utils.js +50 -0
  181. package/dist/lib/utils/schema.utils.js.map +1 -0
  182. package/dist/lib/utils/source-builder.cjs +378 -0
  183. package/dist/lib/utils/source-builder.cjs.map +1 -0
  184. package/dist/lib/utils/source-builder.d.ts +216 -0
  185. package/dist/lib/utils/source-builder.js +374 -0
  186. package/dist/lib/utils/source-builder.js.map +1 -0
  187. package/dist/lib/utils/string.utils.cjs +337 -0
  188. package/dist/lib/utils/string.utils.cjs.map +1 -0
  189. package/dist/lib/utils/string.utils.d.ts +173 -0
  190. package/dist/lib/utils/string.utils.js +324 -0
  191. package/dist/lib/utils/string.utils.js.map +1 -0
  192. package/dist/lib/utils/string.utils.types.cjs +3 -0
  193. package/dist/lib/utils/string.utils.types.cjs.map +1 -0
  194. package/dist/lib/utils/string.utils.types.d.ts +148 -0
  195. package/dist/lib/utils/string.utils.types.js +2 -0
  196. package/dist/lib/utils/string.utils.types.js.map +1 -0
  197. package/dist/lib/utils/type.utils.cjs +3 -0
  198. package/dist/lib/utils/type.utils.cjs.map +1 -0
  199. package/dist/lib/utils/type.utils.d.ts +15 -0
  200. package/dist/lib/utils/type.utils.js +2 -0
  201. package/dist/lib/utils/type.utils.js.map +1 -0
  202. package/package.json +27 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=openapi-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-types.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/parse/openapi-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenApiParser = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /* eslint-disable @typescript-eslint/no-explicit-any */
6
+ const path_1 = tslib_1.__importDefault(require("path"));
7
+ const process_1 = require("process");
8
+ const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
9
+ const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
10
+ const yaml_1 = tslib_1.__importDefault(require("yaml"));
11
+ const deref_proxy_1 = require("./deref-proxy");
12
+ const collector_1 = require("../collect/collector");
13
+ const transformer_1 = require("../transform/transformer");
14
+ class OpenApiParser {
15
+ constructor() {
16
+ this._loadedDocuments = new Map();
17
+ }
18
+ parseApisAndTransform(...fileNames) {
19
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
20
+ const flatFileNames = [].concat(...fileNames);
21
+ const apis = yield Promise.all(flatFileNames.map((fileName) => this.parseApi(fileName)));
22
+ const transformed = this.transformApis(apis);
23
+ return transformed;
24
+ });
25
+ }
26
+ parseApi(fileName) {
27
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
28
+ const absoluteFilePath = this.isUrl(fileName) ? fileName : path_1.default.resolve((0, process_1.cwd)(), fileName);
29
+ const doc = yield this.loadDocument(absoluteFilePath);
30
+ return yield this.dereference(absoluteFilePath, '', doc.document);
31
+ });
32
+ }
33
+ transformApis(apis) {
34
+ const collectedData = (0, collector_1.collectOpenApi)(apis);
35
+ const transformedData = (0, transformer_1.transformOpenApi)(collectedData);
36
+ return transformedData;
37
+ }
38
+ dereference(file, path, value) {
39
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
40
+ let existingDocument = this._loadedDocuments.get(file);
41
+ if (existingDocument) {
42
+ const existingComponent = existingDocument.dereferencedComponents.get(path);
43
+ if (existingComponent) {
44
+ return existingComponent;
45
+ }
46
+ }
47
+ else {
48
+ existingDocument = yield this.loadDocument(file);
49
+ }
50
+ const result = (0, deref_proxy_1.createDerefProxy)(value, {
51
+ file,
52
+ path,
53
+ document: existingDocument.dereferencedDocument,
54
+ originalComponent: value,
55
+ });
56
+ existingDocument.dereferencedComponents.set(path, result);
57
+ if (value.$ref) {
58
+ result.$ref = yield this.resolveReference(file, value);
59
+ }
60
+ for (const key of Object.keys(value)) {
61
+ if (key === '$ref')
62
+ continue;
63
+ const v = value[key];
64
+ if (v && typeof v === 'object') {
65
+ if (Array.isArray(v)) {
66
+ result[key] = yield Promise.all(v.map((v, index) => tslib_1.__awaiter(this, void 0, void 0, function* () {
67
+ if (v && typeof v === 'object') {
68
+ return yield this.dereference(file, `${path}/${String(key)}/${index}`, v);
69
+ }
70
+ else {
71
+ return v;
72
+ }
73
+ })));
74
+ }
75
+ else {
76
+ result[key] = yield this.dereference(file, `${path}/${String(key)}`, v);
77
+ }
78
+ }
79
+ }
80
+ return result;
81
+ });
82
+ }
83
+ resolveReference(file, ref) {
84
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
85
+ const [refFile, refPath] = ref.$ref.split('#');
86
+ let absoluteRefFile = refFile;
87
+ if (!/\S/.test(refFile)) {
88
+ absoluteRefFile = file;
89
+ }
90
+ else if (!this.isUrl(refFile)) {
91
+ absoluteRefFile = path_1.default.resolve(path_1.default.dirname(file), refFile);
92
+ }
93
+ const doc = yield this.loadDocument(absoluteRefFile);
94
+ const value = getDeepProperty(doc.document, refPath.replace(/[/]/g, '.'));
95
+ if (value && typeof value === 'object') {
96
+ return this.dereference(absoluteRefFile, refPath, value);
97
+ }
98
+ return undefined;
99
+ });
100
+ }
101
+ loadDocument(fileOrUrl) {
102
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
103
+ const existingDocument = this._loadedDocuments.get(fileOrUrl);
104
+ if (existingDocument) {
105
+ return existingDocument;
106
+ }
107
+ const documentContent = yield this.getDocumentContent(fileOrUrl);
108
+ const extname = path_1.default.extname(fileOrUrl).toLowerCase();
109
+ let parsedDocument;
110
+ if (extname === '.json') {
111
+ parsedDocument = this.tryParseJson(documentContent);
112
+ }
113
+ else if (extname === '.yaml' || extname === '.yml') {
114
+ parsedDocument = this.tryParseYaml(documentContent);
115
+ }
116
+ else {
117
+ parsedDocument = this.tryParseJson(documentContent);
118
+ if (parsedDocument !== undefined) {
119
+ parsedDocument = this.tryParseYaml(documentContent);
120
+ }
121
+ }
122
+ if (parsedDocument === undefined) {
123
+ throw new Error(`Unable to parse ${fileOrUrl}`);
124
+ }
125
+ const doc = (parsedDocument !== null && parsedDocument !== void 0 ? parsedDocument : {});
126
+ const deref = (0, deref_proxy_1.createDerefProxy)(doc, {
127
+ file: fileOrUrl,
128
+ path: '',
129
+ originalComponent: doc,
130
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
131
+ document: undefined,
132
+ });
133
+ deref.$src.document = deref;
134
+ const loadedDocument = {
135
+ file: fileOrUrl,
136
+ document: doc,
137
+ dereferencedDocument: deref,
138
+ dereferencedComponents: new Map(),
139
+ };
140
+ this._loadedDocuments.set(fileOrUrl, loadedDocument);
141
+ return loadedDocument;
142
+ });
143
+ }
144
+ getDocumentContent(fileOrUrl) {
145
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
146
+ if (this.isUrl(fileOrUrl)) {
147
+ const res = yield (0, node_fetch_1.default)(fileOrUrl);
148
+ if (!res.ok) {
149
+ throw new Error(`Unable to download ${fileOrUrl}: ${res.statusText}`);
150
+ }
151
+ return yield res.text();
152
+ }
153
+ else {
154
+ return (yield fs_extra_1.default.readFile(fileOrUrl)).toString();
155
+ }
156
+ });
157
+ }
158
+ isUrl(fileOrUrl) {
159
+ return /^https?:\/\//i.test(fileOrUrl);
160
+ }
161
+ tryParseJson(json) {
162
+ try {
163
+ return JSON.parse(json);
164
+ }
165
+ catch (_a) {
166
+ return undefined;
167
+ }
168
+ }
169
+ tryParseYaml(yaml) {
170
+ try {
171
+ return yaml_1.default.parse(yaml);
172
+ }
173
+ catch (_a) {
174
+ return undefined;
175
+ }
176
+ }
177
+ }
178
+ exports.OpenApiParser = OpenApiParser;
179
+ function getDeepProperty(value, path) {
180
+ const parts = path.split('.');
181
+ let result = value;
182
+ for (const part of parts) {
183
+ if (!/\S/.test(part))
184
+ continue;
185
+ result = result === null || result === void 0 ? void 0 : result[part];
186
+ }
187
+ return result;
188
+ }
189
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.cjs","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/parse/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { OpenApiDocument } from './openapi-types';
2
+ import { Deref } from './types';
3
+ import { ApiData } from '../transform';
4
+ export declare class OpenApiParser {
5
+ private readonly _loadedDocuments;
6
+ parseApisAndTransform(...fileNames: (string | string[])[]): Promise<ApiData>;
7
+ parseApi(fileName: string): Promise<Deref<OpenApiDocument>>;
8
+ transformApis(apis: Deref<OpenApiDocument>[]): ApiData;
9
+ private dereference;
10
+ private resolveReference;
11
+ private loadDocument;
12
+ private getDocumentContent;
13
+ private isUrl;
14
+ private tryParseJson;
15
+ private tryParseYaml;
16
+ }
@@ -0,0 +1,185 @@
1
+ import { __awaiter } from "tslib";
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ import path from 'path';
4
+ import { cwd } from 'process';
5
+ import fs from 'fs-extra';
6
+ import nodeFetch from 'node-fetch';
7
+ import YAML from 'yaml';
8
+ import { createDerefProxy } from './deref-proxy';
9
+ import { collectOpenApi } from '../collect/collector';
10
+ import { transformOpenApi } from '../transform/transformer';
11
+ export class OpenApiParser {
12
+ constructor() {
13
+ this._loadedDocuments = new Map();
14
+ }
15
+ parseApisAndTransform(...fileNames) {
16
+ return __awaiter(this, void 0, void 0, function* () {
17
+ const flatFileNames = [].concat(...fileNames);
18
+ const apis = yield Promise.all(flatFileNames.map((fileName) => this.parseApi(fileName)));
19
+ const transformed = this.transformApis(apis);
20
+ return transformed;
21
+ });
22
+ }
23
+ parseApi(fileName) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ const absoluteFilePath = this.isUrl(fileName) ? fileName : path.resolve(cwd(), fileName);
26
+ const doc = yield this.loadDocument(absoluteFilePath);
27
+ return yield this.dereference(absoluteFilePath, '', doc.document);
28
+ });
29
+ }
30
+ transformApis(apis) {
31
+ const collectedData = collectOpenApi(apis);
32
+ const transformedData = transformOpenApi(collectedData);
33
+ return transformedData;
34
+ }
35
+ dereference(file, path, value) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ let existingDocument = this._loadedDocuments.get(file);
38
+ if (existingDocument) {
39
+ const existingComponent = existingDocument.dereferencedComponents.get(path);
40
+ if (existingComponent) {
41
+ return existingComponent;
42
+ }
43
+ }
44
+ else {
45
+ existingDocument = yield this.loadDocument(file);
46
+ }
47
+ const result = createDerefProxy(value, {
48
+ file,
49
+ path,
50
+ document: existingDocument.dereferencedDocument,
51
+ originalComponent: value,
52
+ });
53
+ existingDocument.dereferencedComponents.set(path, result);
54
+ if (value.$ref) {
55
+ result.$ref = yield this.resolveReference(file, value);
56
+ }
57
+ for (const key of Object.keys(value)) {
58
+ if (key === '$ref')
59
+ continue;
60
+ const v = value[key];
61
+ if (v && typeof v === 'object') {
62
+ if (Array.isArray(v)) {
63
+ result[key] = yield Promise.all(v.map((v, index) => __awaiter(this, void 0, void 0, function* () {
64
+ if (v && typeof v === 'object') {
65
+ return yield this.dereference(file, `${path}/${String(key)}/${index}`, v);
66
+ }
67
+ else {
68
+ return v;
69
+ }
70
+ })));
71
+ }
72
+ else {
73
+ result[key] = yield this.dereference(file, `${path}/${String(key)}`, v);
74
+ }
75
+ }
76
+ }
77
+ return result;
78
+ });
79
+ }
80
+ resolveReference(file, ref) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ const [refFile, refPath] = ref.$ref.split('#');
83
+ let absoluteRefFile = refFile;
84
+ if (!/\S/.test(refFile)) {
85
+ absoluteRefFile = file;
86
+ }
87
+ else if (!this.isUrl(refFile)) {
88
+ absoluteRefFile = path.resolve(path.dirname(file), refFile);
89
+ }
90
+ const doc = yield this.loadDocument(absoluteRefFile);
91
+ const value = getDeepProperty(doc.document, refPath.replace(/[/]/g, '.'));
92
+ if (value && typeof value === 'object') {
93
+ return this.dereference(absoluteRefFile, refPath, value);
94
+ }
95
+ return undefined;
96
+ });
97
+ }
98
+ loadDocument(fileOrUrl) {
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ const existingDocument = this._loadedDocuments.get(fileOrUrl);
101
+ if (existingDocument) {
102
+ return existingDocument;
103
+ }
104
+ const documentContent = yield this.getDocumentContent(fileOrUrl);
105
+ const extname = path.extname(fileOrUrl).toLowerCase();
106
+ let parsedDocument;
107
+ if (extname === '.json') {
108
+ parsedDocument = this.tryParseJson(documentContent);
109
+ }
110
+ else if (extname === '.yaml' || extname === '.yml') {
111
+ parsedDocument = this.tryParseYaml(documentContent);
112
+ }
113
+ else {
114
+ parsedDocument = this.tryParseJson(documentContent);
115
+ if (parsedDocument !== undefined) {
116
+ parsedDocument = this.tryParseYaml(documentContent);
117
+ }
118
+ }
119
+ if (parsedDocument === undefined) {
120
+ throw new Error(`Unable to parse ${fileOrUrl}`);
121
+ }
122
+ const doc = (parsedDocument !== null && parsedDocument !== void 0 ? parsedDocument : {});
123
+ const deref = createDerefProxy(doc, {
124
+ file: fileOrUrl,
125
+ path: '',
126
+ originalComponent: doc,
127
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
128
+ document: undefined,
129
+ });
130
+ deref.$src.document = deref;
131
+ const loadedDocument = {
132
+ file: fileOrUrl,
133
+ document: doc,
134
+ dereferencedDocument: deref,
135
+ dereferencedComponents: new Map(),
136
+ };
137
+ this._loadedDocuments.set(fileOrUrl, loadedDocument);
138
+ return loadedDocument;
139
+ });
140
+ }
141
+ getDocumentContent(fileOrUrl) {
142
+ return __awaiter(this, void 0, void 0, function* () {
143
+ if (this.isUrl(fileOrUrl)) {
144
+ const res = yield nodeFetch(fileOrUrl);
145
+ if (!res.ok) {
146
+ throw new Error(`Unable to download ${fileOrUrl}: ${res.statusText}`);
147
+ }
148
+ return yield res.text();
149
+ }
150
+ else {
151
+ return (yield fs.readFile(fileOrUrl)).toString();
152
+ }
153
+ });
154
+ }
155
+ isUrl(fileOrUrl) {
156
+ return /^https?:\/\//i.test(fileOrUrl);
157
+ }
158
+ tryParseJson(json) {
159
+ try {
160
+ return JSON.parse(json);
161
+ }
162
+ catch (_a) {
163
+ return undefined;
164
+ }
165
+ }
166
+ tryParseYaml(yaml) {
167
+ try {
168
+ return YAML.parse(yaml);
169
+ }
170
+ catch (_a) {
171
+ return undefined;
172
+ }
173
+ }
174
+ }
175
+ function getDeepProperty(value, path) {
176
+ const parts = path.split('.');
177
+ let result = value;
178
+ for (const part of parts) {
179
+ if (!/\S/.test(part))
180
+ continue;
181
+ result = result === null || result === void 0 ? void 0 : result[part];
182
+ }
183
+ return result;
184
+ }
185
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/parse/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/parse/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { OpenApiDocument, OpenApiReference } from './openapi-types';
2
+ export type DerefSource<T> = {
3
+ file: string;
4
+ path: string;
5
+ document: Deref<OpenApiDocument>;
6
+ originalComponent: T;
7
+ };
8
+ type _Deref<T> = {
9
+ [K in keyof T as K extends keyof OpenApiReference ? never : K]: Deref<T[K]>;
10
+ } & {
11
+ $src: DerefSource<T>;
12
+ $ref?: Deref<T>;
13
+ };
14
+ export type Deref<T> = T extends object ? (T extends (infer A)[] ? Deref<A>[] : _Deref<T>) : T;
15
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/parse/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=api-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-types.cjs","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/transform/api-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,186 @@
1
+ import { DerefSource, Deref, OpenApiHttpMethod, KnownOpenApiParameterTarget, OpenApiTag, OpenApiPathItem, OpenApiOperation, OpenApiParameter, OpenApiRequestBody, OpenApiMediaType, OpenApiResponse, OpenApiHeader, OpenApiSchema } from '../parse';
2
+ import { OptionalProperties } from '../utils';
3
+ export type ApiData = {
4
+ services: ApiService[];
5
+ endpoints: ApiEndpoint[];
6
+ schemas: ApiSchema[];
7
+ };
8
+ export type ApiComponentSource<T> = DerefSource<T> & {
9
+ component: Deref<T>;
10
+ };
11
+ export type Transformed<T> = T extends OpenApiTag ? ApiService : T extends OpenApiPathItem ? ApiPath : T extends OpenApiParameter ? ApiParameter : T extends OpenApiRequestBody ? ApiRequestBody : T extends OpenApiResponse ? ApiResponse : T extends OpenApiMediaType ? ApiContent : T extends OpenApiHeader ? ApiHeader : T extends OpenApiSchema ? ApiSchema : undefined;
12
+ export type ApiComponent<T> = {
13
+ id: string;
14
+ $src: ApiComponentSource<T>;
15
+ $ref: Transformed<T> | undefined;
16
+ };
17
+ export type ApiMethod = OpenApiHttpMethod;
18
+ export type ApiParameterTarget = KnownOpenApiParameterTarget;
19
+ export type ApiServiceComponent = OptionalProperties<ApiComponent<OpenApiTag>, '$src'>;
20
+ export type ApiService = ApiServiceComponent & {
21
+ name: string;
22
+ description: string | undefined;
23
+ endpoints: ApiEndpoint[];
24
+ };
25
+ export type ApiPathComponent = ApiComponent<OpenApiPathItem>;
26
+ export type ApiPath = ApiPathComponent & {
27
+ summary: string | undefined;
28
+ description: string | undefined;
29
+ path: string;
30
+ parameters: ApiParameter[];
31
+ } & {
32
+ [K in ApiMethod]: ApiEndpoint | undefined;
33
+ };
34
+ export type ApiEndpointComponent = ApiComponent<OpenApiOperation>;
35
+ export type ApiEndpoint = ApiEndpointComponent & {
36
+ name: string;
37
+ path: string;
38
+ pathInfo: ApiPath;
39
+ method: ApiMethod;
40
+ summary: string | undefined;
41
+ description: string | undefined;
42
+ parameters: ApiParameter[];
43
+ deprecated: boolean;
44
+ requestBody: ApiRequestBody | undefined;
45
+ responses: ApiResponse[];
46
+ tags: string[];
47
+ custom: Record<string, unknown>;
48
+ };
49
+ export type ApiParameterComponent = ApiComponent<OpenApiParameter>;
50
+ export type ApiParameter = ApiParameterComponent & {
51
+ name: string;
52
+ target: ApiParameterTarget;
53
+ description: string | undefined;
54
+ required: boolean;
55
+ deprecated: boolean;
56
+ allowEmptyValue: boolean | undefined;
57
+ style: string | undefined;
58
+ explode: boolean | undefined;
59
+ allowReserved: boolean | undefined;
60
+ schema: ApiSchema | undefined;
61
+ };
62
+ export type ApiRequestBodyComponent = ApiComponent<OpenApiRequestBody>;
63
+ export type ApiRequestBody = ApiRequestBodyComponent & {
64
+ description: string | undefined;
65
+ content: ApiContent[];
66
+ required: boolean;
67
+ };
68
+ export type ApiContentComponent = ApiComponent<OpenApiMediaType>;
69
+ export type ApiContent = ApiContentComponent & {
70
+ type: string;
71
+ schema: ApiSchema | undefined;
72
+ };
73
+ export type ApiExampleComponent = ApiComponent<OpenApiResponse>;
74
+ export type ApiResponse = ApiExampleComponent & {
75
+ statusCode: number | undefined;
76
+ description: string | undefined;
77
+ headers: ApiHeader[];
78
+ contentOptions: ApiContent[];
79
+ };
80
+ export type ApiHeaderComponent = Omit<ApiComponent<OpenApiHeader> | ApiComponent<OpenApiSchema>, '$ref'> & {
81
+ $ref: ApiHeader | undefined;
82
+ };
83
+ export type ApiHeader = ApiHeaderComponent & Omit<ApiParameter, 'target'>;
84
+ export type ApiSchemaType = 'string' | 'number' | 'integer' | 'array' | 'boolean' | 'null' | 'object' | string;
85
+ export type ApiSchemaKind = 'oneOf' | 'multi-type' | 'string' | 'number' | 'integer' | 'array' | 'boolean' | 'null' | 'object' | 'combined' | 'unknown';
86
+ export type ApiSchemaAccessibility = 'all' | 'readOnly' | 'writeOnly' | 'none';
87
+ export type ApiSchemaProperty = {
88
+ name: string;
89
+ schema: ApiSchema;
90
+ };
91
+ export type ApiSchemaComponent = ApiComponent<OpenApiSchema>;
92
+ export type ApiSchemaBase = ApiSchemaComponent & {
93
+ name: string;
94
+ isNameGenerated: boolean;
95
+ description: string | undefined;
96
+ deprecated: boolean;
97
+ accessibility: ApiSchemaAccessibility;
98
+ enum: unknown[] | undefined;
99
+ const: unknown | undefined;
100
+ default: unknown | undefined;
101
+ example: unknown | undefined;
102
+ nullable: boolean;
103
+ required: Set<string>;
104
+ custom: Record<string, unknown>;
105
+ not: ApiSchema | undefined;
106
+ };
107
+ export type ApiSchema<T extends ApiSchemaKind = ApiSchemaKind> = ApiSchemaBase & ApiSchemaExtensions<T>;
108
+ type AdditionalCombinedSchemaProperties = {
109
+ allOf: ApiSchema[];
110
+ anyOf: ApiSchema[];
111
+ };
112
+ type AdditionalArraySchemaProperties = {
113
+ items: ApiSchema | undefined;
114
+ minItems: number | undefined;
115
+ maxItems: number | undefined;
116
+ };
117
+ type AdditionalObjectSchemaProperties = {
118
+ properties: Map<string, ApiSchemaProperty>;
119
+ additionalProperties: boolean | undefined | ApiSchema;
120
+ } & AdditionalCombinedSchemaProperties;
121
+ type AdditionalNumberSchemaProperties = {
122
+ minimum: number | undefined;
123
+ maximum: number | undefined;
124
+ };
125
+ type AdditionalStringSchemaProperties = {
126
+ pattern: string | undefined;
127
+ minLength: number | undefined;
128
+ maxLength: number | undefined;
129
+ };
130
+ type AdditionalPrimitiveSchemaProperties = {
131
+ format: string | undefined;
132
+ };
133
+ export type ApiSchemaExtensions<T extends ApiSchemaKind> = T extends 'oneOf' ? {
134
+ kind: 'oneOf';
135
+ oneOf: ApiSchema[];
136
+ } : T extends 'multi-type' ? {
137
+ kind: 'multi-type';
138
+ type: ApiSchemaType[];
139
+ } & AdditionalArraySchemaProperties & AdditionalObjectSchemaProperties & AdditionalNumberSchemaProperties & AdditionalStringSchemaProperties & AdditionalPrimitiveSchemaProperties : T extends 'string' ? {
140
+ kind: 'string';
141
+ type: 'string';
142
+ } & AdditionalStringSchemaProperties & AdditionalPrimitiveSchemaProperties : T extends 'boolean' ? {
143
+ kind: 'boolean';
144
+ type: 'boolean';
145
+ } & AdditionalPrimitiveSchemaProperties : T extends 'null' ? {
146
+ kind: 'null';
147
+ type: 'null';
148
+ } : T extends 'number' | 'integer' ? {
149
+ kind: 'number' | 'integer';
150
+ type: T;
151
+ } & AdditionalNumberSchemaProperties & AdditionalPrimitiveSchemaProperties : T extends 'array' ? {
152
+ kind: 'array';
153
+ type: 'array';
154
+ } & AdditionalArraySchemaProperties : T extends 'object' ? {
155
+ kind: 'object';
156
+ type: 'object';
157
+ } & AdditionalObjectSchemaProperties : T extends 'combined' ? {
158
+ kind: 'combined';
159
+ } & AdditionalCombinedSchemaProperties : {
160
+ kind: 'unknown';
161
+ };
162
+ export type CombinedLikeApiSchema = ApiSchemaBase & {
163
+ kind: 'combined' | 'object' | 'multi-type';
164
+ type?: 'object' | string[];
165
+ } & AdditionalCombinedSchemaProperties;
166
+ export type NumberLikeApiSchema = ApiSchemaBase & {
167
+ kind: 'number' | 'integer' | 'multi-type';
168
+ type: 'number' | 'integer' | string[];
169
+ } & AdditionalNumberSchemaProperties;
170
+ export type ArrayLikeApiSchema = ApiSchemaBase & {
171
+ kind: 'array' | 'multi-type';
172
+ type: 'array' | string[];
173
+ } & AdditionalArraySchemaProperties;
174
+ export type ObjectLikeApiSchema = ApiSchemaBase & {
175
+ kind: 'object' | 'multi-type';
176
+ type: 'object' | string[];
177
+ } & AdditionalObjectSchemaProperties;
178
+ export type StringLikeApiSchema = ApiSchemaBase & {
179
+ kind: 'string' | 'multi-type';
180
+ type: 'string' | string[];
181
+ } & AdditionalStringSchemaProperties;
182
+ export type PrimitiveLikeApiSchema = ApiSchemaBase & {
183
+ kind: 'string' | 'number' | 'integer' | 'boolean' | 'null' | 'multi-type';
184
+ type: 'string' | 'number' | 'integer' | 'boolean' | 'null' | string[];
185
+ } & AdditionalPrimitiveSchemaProperties;
186
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-types.js","sourceRoot":"","sources":["../../../../../../packages/core/src/lib/transform/api-types.ts"],"names":[],"mappings":""}