@buildvision/nest-sdk-generator 1.1.3

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 (69) hide show
  1. package/.prettierrc +6 -0
  2. package/LICENSE.md +9 -0
  3. package/README.md +353 -0
  4. package/build/analyzer/builtin.d.ts +2 -0
  5. package/build/analyzer/builtin.js +11 -0
  6. package/build/analyzer/classdeps.d.ts +6 -0
  7. package/build/analyzer/classdeps.js +27 -0
  8. package/build/analyzer/controller.d.ts +26 -0
  9. package/build/analyzer/controller.js +103 -0
  10. package/build/analyzer/controllers.d.ts +7 -0
  11. package/build/analyzer/controllers.js +79 -0
  12. package/build/analyzer/decorator.d.ts +10 -0
  13. package/build/analyzer/decorator.js +29 -0
  14. package/build/analyzer/extractor.d.ts +107 -0
  15. package/build/analyzer/extractor.js +349 -0
  16. package/build/analyzer/index.d.ts +16 -0
  17. package/build/analyzer/index.js +101 -0
  18. package/build/analyzer/methods.d.ts +42 -0
  19. package/build/analyzer/methods.js +115 -0
  20. package/build/analyzer/module.d.ts +11 -0
  21. package/build/analyzer/module.js +41 -0
  22. package/build/analyzer/params.d.ts +38 -0
  23. package/build/analyzer/params.js +163 -0
  24. package/build/analyzer/route.d.ts +53 -0
  25. package/build/analyzer/route.js +131 -0
  26. package/build/analyzer/typedeps.d.ts +49 -0
  27. package/build/analyzer/typedeps.js +86 -0
  28. package/build/bin.d.ts +2 -0
  29. package/build/bin.js +39 -0
  30. package/build/config.d.ts +44 -0
  31. package/build/config.js +31 -0
  32. package/build/generator/genmodules.d.ts +24 -0
  33. package/build/generator/genmodules.js +134 -0
  34. package/build/generator/gentypes.d.ts +10 -0
  35. package/build/generator/gentypes.js +62 -0
  36. package/build/generator/index.d.ts +6 -0
  37. package/build/generator/index.js +83 -0
  38. package/build/generator/prettier.d.ts +16 -0
  39. package/build/generator/prettier.js +43 -0
  40. package/build/generator/sdk-interface.d.ts +1 -0
  41. package/build/generator/sdk-interface.js +36 -0
  42. package/build/logging.d.ts +6 -0
  43. package/build/logging.js +37 -0
  44. package/build/tsconfig.tsbuildinfo +1 -0
  45. package/build/utils.d.ts +9 -0
  46. package/build/utils.js +56 -0
  47. package/package.json +34 -0
  48. package/src/analyzer/builtin.ts +9 -0
  49. package/src/analyzer/classdeps.ts +37 -0
  50. package/src/analyzer/controller.ts +135 -0
  51. package/src/analyzer/controllers.ts +117 -0
  52. package/src/analyzer/decorator.ts +29 -0
  53. package/src/analyzer/extractor.ts +491 -0
  54. package/src/analyzer/index.ts +136 -0
  55. package/src/analyzer/methods.ts +166 -0
  56. package/src/analyzer/module.ts +56 -0
  57. package/src/analyzer/params.ts +241 -0
  58. package/src/analyzer/route.ts +156 -0
  59. package/src/analyzer/typedeps.ts +130 -0
  60. package/src/bin.ts +33 -0
  61. package/src/config.ts +89 -0
  62. package/src/generator/genmodules.ts +163 -0
  63. package/src/generator/gentypes.ts +73 -0
  64. package/src/generator/index.ts +92 -0
  65. package/src/generator/prettier.ts +46 -0
  66. package/src/generator/sdk-interface.ts +32 -0
  67. package/src/logging.ts +35 -0
  68. package/src/utils.ts +61 -0
  69. package/tsconfig.json +26 -0
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * @file Analyzer for the source API's routes in controller methods
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveRouteWith = exports.resolveRoute = exports.debugUri = exports.unparseRoute = exports.paramsOfRoute = exports.analyzeUri = void 0;
7
+ /**
8
+ * Analyze an URI path
9
+ * @param uriPath The URI path to analyze
10
+ */
11
+ function analyzeUri(uriPath) {
12
+ // Split the URI path into "parts"
13
+ const rawParts = uriPath.split('/');
14
+ // The parsed parts we'll return
15
+ const parts = [];
16
+ // The current string offset in the URI path
17
+ // This variable is used for error display
18
+ let offset = 0;
19
+ /**
20
+ * Find if a specific part of the URI path contains an invalid character
21
+ * @param part The part to check
22
+ * @param pattern The invalid characters to look for, as a regular expression
23
+ * @returns An error message if an invalid character is found, nothing else
24
+ */
25
+ function _findInvalid(part, pattern) {
26
+ return part.match(pattern) ? uriPath + '\n' + ' '.repeat(offset) + '^' : null;
27
+ }
28
+ // Treat all parts of the URI path
29
+ for (let i = 0; i < rawParts.length; i++) {
30
+ const part = rawParts[i];
31
+ // Ignore empty parts (e.g. "/a///b" will be treated as "/a/b")
32
+ if (part === '')
33
+ continue;
34
+ // Ensure there is no generic character in the path as we don't support them
35
+ const genericErr = _findInvalid(part, /[\*\+\?]/);
36
+ if (genericErr) {
37
+ return new Error('Generic symbols (* + ?) are not supported as they prevent from determining the right route to use. Found in URI:\n' + genericErr);
38
+ }
39
+ // Check if this part is an URI parameter
40
+ if (part.startsWith(':')) {
41
+ // URI parameters must follow a strict naming
42
+ const paramErr = _findInvalid(part, /[^a-zA-Z0-9_:]/);
43
+ if (paramErr) {
44
+ return new Error('Invalid character detected in named parameter in URI:\n' + paramErr);
45
+ }
46
+ // We got a parameter
47
+ parts.push({ param: part.substr(1) });
48
+ }
49
+ else {
50
+ // We got a literal part
51
+ parts.push({ segment: part });
52
+ }
53
+ // Update the offset for error display
54
+ offset += part.length + 1;
55
+ }
56
+ // Success!
57
+ return {
58
+ isRoot: uriPath.startsWith('/'),
59
+ parts,
60
+ };
61
+ }
62
+ exports.analyzeUri = analyzeUri;
63
+ /**
64
+ * Get the named parameters of a parsed route
65
+ * @param route
66
+ */
67
+ function paramsOfRoute(route) {
68
+ return route.parts.map((part) => ('param' in part ? part.param : null)).filter((e) => e !== null);
69
+ }
70
+ exports.paramsOfRoute = paramsOfRoute;
71
+ /**
72
+ * Convert a route back to its original string
73
+ * @param route
74
+ */
75
+ function unparseRoute(route) {
76
+ return (route.isRoot ? '/' : '') + route.parts.map((part) => ('segment' in part ? part.segment : ':' + part.param)).join('/');
77
+ }
78
+ exports.unparseRoute = unparseRoute;
79
+ /**
80
+ * Pretty-print a route
81
+ */
82
+ function debugUri(route, color) {
83
+ return (route.isRoot ? '/' : '') + route.parts.map((part) => ('segment' in part ? part.segment : color(':' + part.param))).join('/');
84
+ }
85
+ exports.debugUri = debugUri;
86
+ /**
87
+ * Resolve a route by providing its required parameters
88
+ * @param route
89
+ * @param params
90
+ */
91
+ function resolveRoute(route, params) {
92
+ let uri = [];
93
+ for (const part of route.parts) {
94
+ if ('segment' in part) {
95
+ uri.push(part.segment);
96
+ }
97
+ else if (!params.hasOwnProperty(part.param)) {
98
+ return new Error('Missing route parameter ' + part.param);
99
+ }
100
+ else {
101
+ uri.push(params[part.param]);
102
+ }
103
+ }
104
+ return (route.isRoot ? '/' : '') + uri.join('/');
105
+ }
106
+ exports.resolveRoute = resolveRoute;
107
+ /**
108
+ * Resolve a route by providing its required parameters through a callback
109
+ * @param route
110
+ * @param paramsProvider
111
+ */
112
+ function resolveRouteWith(route, paramsProvider) {
113
+ let uri = [];
114
+ for (const part of route.parts) {
115
+ if ('segment' in part) {
116
+ uri.push(part.segment);
117
+ }
118
+ else {
119
+ const param = paramsProvider(part.param);
120
+ if (param === null) {
121
+ return new Error('Missing route parameter ' + part.param);
122
+ }
123
+ else {
124
+ uri.push(param);
125
+ }
126
+ }
127
+ }
128
+ return (route.isRoot ? '/' : '') + uri.join('/');
129
+ }
130
+ exports.resolveRouteWith = resolveRouteWith;
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYW5hbHl6ZXIvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFrQkg7OztHQUdHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLE9BQWU7SUFDeEMsa0NBQWtDO0lBQ2xDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFbkMsZ0NBQWdDO0lBQ2hDLE1BQU0sS0FBSyxHQUFnQixFQUFFLENBQUE7SUFFN0IsNENBQTRDO0lBQzVDLDBDQUEwQztJQUMxQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFFZDs7Ozs7T0FLRztJQUNILFNBQVMsWUFBWSxDQUFDLElBQVksRUFBRSxPQUFlO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQy9FLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXhCLCtEQUErRDtRQUMvRCxJQUFJLElBQUksS0FBSyxFQUFFO1lBQUUsU0FBUTtRQUV6Qiw0RUFBNEU7UUFDNUUsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUVqRCxJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sSUFBSSxLQUFLLENBQ2Qsb0hBQW9ILEdBQUcsVUFBVSxDQUNsSSxDQUFBO1NBQ0Y7UUFFRCx5Q0FBeUM7UUFDekMsSUFBSSxJQUFJ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
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @file Type dependencies builders from the source API
3
+ */
4
+ import { ts, Type } from 'ts-morph';
5
+ /**
6
+ * Regex to match or replace imported types
7
+ */
8
+ export declare const IMPORTED_TYPE_REGEX: RegExp;
9
+ /**
10
+ * Type with resolved level 1 dependencies (does not look for dependencies' own dependencies!)
11
+ */
12
+ export interface ResolvedTypeDeps {
13
+ /** The original raw type, with import("...") expressions */
14
+ readonly rawType: string;
15
+ /** The resolved type, without imports */
16
+ readonly resolvedType: string;
17
+ /** File from which the type originates */
18
+ readonly relativeFilePath: string;
19
+ /**
20
+ * The type dependencies used by the resolved type
21
+ * A collection of scripts' relative paths mapped with the list of types imported from them
22
+ */
23
+ readonly dependencies: Map<string, string[]>;
24
+ /**
25
+ * Non-native types that are not imported
26
+ * They may be either local types (declared in the same file than the one analyzed) or globally-defined types
27
+ */
28
+ readonly localTypes: string[];
29
+ }
30
+ /**
31
+ * Resolve the dependencies of a TS-Morph analyzed type
32
+ * @param type
33
+ * @param relativeFilePath
34
+ * @param absoluteSrcPath
35
+ * @returns
36
+ */
37
+ export declare function resolveTypeDependencies(type: Type<ts.Type>, relativeFilePath: string, absoluteSrcPath: string): ResolvedTypeDeps;
38
+ /**
39
+ * Extract an import type's name from a TS-Morph type
40
+ * @example "import('dir/file').TypeName" => "TypeName"
41
+ * @param type
42
+ * @returns
43
+ */
44
+ export declare function getImportResolvedType(type: Type<ts.Type>): string;
45
+ /**
46
+ * Convert paths for external files
47
+ * @param importedFilePath
48
+ */
49
+ export declare function normalizeExternalFilePath(importedFilePath: string): string;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * @file Type dependencies builders from the source API
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.normalizeExternalFilePath = exports.getImportResolvedType = exports.resolveTypeDependencies = exports.IMPORTED_TYPE_REGEX = void 0;
7
+ const path = require("path");
8
+ const logging_1 = require("../logging");
9
+ /**
10
+ * Regex to match or replace imported types
11
+ */
12
+ exports.IMPORTED_TYPE_REGEX = /\bimport\(['"]([^'"]+)['"]\)\.([a-zA-Z0-9_]+)\b/g;
13
+ /**
14
+ * Resolve the dependencies of a TS-Morph analyzed type
15
+ * @param type
16
+ * @param relativeFilePath
17
+ * @param absoluteSrcPath
18
+ * @returns
19
+ */
20
+ function resolveTypeDependencies(type, relativeFilePath, absoluteSrcPath) {
21
+ /** Raw type's text (e.g. `Array<import("somefile.ts").SomeType>`) */
22
+ const rawType = type.getText();
23
+ if (path.isAbsolute(relativeFilePath)) {
24
+ (0, logging_1.unreachable)('Internal error: got absolute file path in type dependencies resolver, when expecting a relative one (got {magentaBright})', relativeFilePath);
25
+ }
26
+ let dependencies = new Map();
27
+ let localTypes = [];
28
+ /** Resolved type (without import statements) */
29
+ const resolvedType = rawType.replace(exports.IMPORTED_TYPE_REGEX, (_, matchedFilePath, type) => {
30
+ const filePath = path.isAbsolute(matchedFilePath) ? path.relative(absoluteSrcPath, matchedFilePath) : matchedFilePath;
31
+ const deps = dependencies.get(filePath);
32
+ if (deps) {
33
+ if (!deps.includes(type)) {
34
+ deps.push(type);
35
+ }
36
+ }
37
+ else {
38
+ dependencies.set(filePath, [type]);
39
+ }
40
+ return type;
41
+ });
42
+ if (resolvedType.includes('import(')) {
43
+ (0, logging_1.unreachable)('Internal error: resolved still contains an {magenta} statement: {green}', 'import(...)', resolvedType);
44
+ }
45
+ for (const depFile of dependencies.keys()) {
46
+ if (path.isAbsolute(depFile)) {
47
+ (0, logging_1.unreachable)('Internal error: resolved absolute file path in type dependencies, when should have resolved a relative one\nIn type: {yellow}\nGot: {magentaBright}', type.getText(), depFile);
48
+ }
49
+ }
50
+ return {
51
+ rawType,
52
+ relativeFilePath,
53
+ resolvedType,
54
+ dependencies,
55
+ localTypes,
56
+ };
57
+ }
58
+ exports.resolveTypeDependencies = resolveTypeDependencies;
59
+ /**
60
+ * Extract an import type's name from a TS-Morph type
61
+ * @example "import('dir/file').TypeName" => "TypeName"
62
+ * @param type
63
+ * @returns
64
+ */
65
+ function getImportResolvedType(type) {
66
+ return type.getText().replace(exports.IMPORTED_TYPE_REGEX, (_, __, typename) => typename);
67
+ }
68
+ exports.getImportResolvedType = getImportResolvedType;
69
+ /**
70
+ * Convert paths for external files
71
+ * @param importedFilePath
72
+ */
73
+ function normalizeExternalFilePath(importedFilePath) {
74
+ importedFilePath = path.normalize(importedFilePath);
75
+ if (!importedFilePath.startsWith('../')) {
76
+ return importedFilePath;
77
+ }
78
+ let level = 0;
79
+ while (importedFilePath.startsWith('../')) {
80
+ level++;
81
+ importedFilePath = importedFilePath.substr(3);
82
+ }
83
+ return `_external${level}/${importedFilePath}`;
84
+ }
85
+ exports.normalizeExternalFilePath = normalizeExternalFilePath;
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYW5hbHl6ZXIvdHlwZWRlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCw2QkFBNEI7QUFFNUIsd0NBQXdDO0FBRXhDOztHQUVHO0FBQ1UsUUFBQSxtQkFBbUIsR0FBRyxrREFBa0QsQ0FBQTtBQTRCckY7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsSUFBbUIsRUFBRSxnQkFBd0IsRUFBRSxlQUF1QjtJQUM1RyxxRUFBcUU7SUFDckUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBRTlCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3JDLElBQUEscUJBQVcsRUFDVCwySEFBMkgsRUFDM0gsZ0JBQWdCLENBQ2pCLENBQUE7S0FDRjtJQUVELElBQUksWUFBWSxHQUFxQyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzlELElBQUksVUFBVSxHQUFtQyxFQUFFLENBQUE7SUFFbkQsZ0RBQWdEO0lBQ2hELE1BQU0sWUFBWSxHQUFxQyxPQUFPLENBQUMsT0FBTyxDQUFDLDJCQUFtQixFQUFFLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN2SCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFBO1FBRXJILE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkMsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUNoQjtTQUNGO2FBQU07WUFDTCxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7U0FDbkM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUMsQ0FBQyxDQUFBO0lBRUYsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3BDLElBQUEscUJBQVcsRUFBQyx5RUFBeUUsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUE7S0FDcEg7SUFFRCxLQUFLLE1BQU0sT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN6QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUIsSUFBQSxxQkFBVyxFQUNULHFKQUFxSixFQUNySixJQUFJLENBQUMsT0FBTyxFQUFFLEVBQ2QsT0FBTyxDQUNSLENBQUE7U0FDRjtLQUNGO0lBRUQsT0FBTztRQUNMLE9BQU87UUFDUCxnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLFlBQVk7UUFDWixVQUFVO0tBQ1gsQ0FBQTtBQUNILENBQUM7QUFwREQsMERBb0RDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxJQUFtQjtJQUN2RCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsMkJBQW1CLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDbkYsQ0FBQztBQUZELHNEQUVDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IseUJBQXlCLENBQUMsZ0JBQXdCO0lBQ2hFLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUVuRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sZ0JBQWdCLENBQUE7S0FDeEI7SUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7SUFFYixPQUFPLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN6QyxLQUFLLEVBQUUsQ0FBQTtRQUNQLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUM5QztJQUVELE9BQU8sWUFBWSxLQUFLLElBQUksZ0JBQWdCLEVBQUUsQ0FBQTtBQUNoRCxDQUFDO0FBZkQsOERBZUMifQ==
package/build/bin.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/build/bin.js ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
+ return new (P || (P = Promise))(function (resolve, reject) {
6
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
10
+ });
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ const path = require("path");
14
+ const analyzer_1 = require("./analyzer");
15
+ const config_1 = require("./config");
16
+ const generator_1 = require("./generator");
17
+ const logging_1 = require("./logging");
18
+ function main() {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const started = Date.now();
21
+ process.chdir(path.dirname(path.resolve(config_1.configPath)));
22
+ switch (process.argv[3]) {
23
+ case '--analyze':
24
+ yield (0, analyzer_1.analyzerCli)(config_1.config);
25
+ break;
26
+ case '--generate':
27
+ case undefined:
28
+ const sdkContent = yield (0, analyzer_1.analyzerCli)(config_1.config);
29
+ yield (0, generator_1.default)(config_1.config, sdkContent);
30
+ break;
31
+ default:
32
+ console.error('ERROR: Unknown action provided (must be either "--analyze" or "--generate")');
33
+ process.exit(1);
34
+ }
35
+ (0, logging_1.println)('{green}', '@ Done in ' + ((Date.now() - started) / 1000).toFixed(2) + 's');
36
+ });
37
+ }
38
+ main();
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFQSw2QkFBNEI7QUFDNUIseUNBQXdDO0FBQ3hDLHFDQUE2QztBQUM3QywyQ0FBc0M7QUFDdEMsdUNBQW1DO0FBRW5DLFNBQWUsSUFBSTs7UUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBRTFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFckQsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZCLEtBQUssV0FBVztnQkFDZCxNQUFNLElBQUEsc0JBQVcsRUFBQyxlQUFNLENBQUMsQ0FBQTtnQkFDekIsTUFBSztZQUVQLEtBQUssWUFBWSxDQUFDO1lBQ2xCLEtBQUssU0FBUztnQkFDWixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUEsc0JBQVcsRUFBQyxlQUFNLENBQUMsQ0FBQTtnQkFDNUMsTUFBTSxJQUFBLG1CQUFZLEVBQUMsZUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFBO2dCQUN0QyxNQUFLO1lBRVA7Z0JBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQyxDQUFBO2dCQUM1RixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ2xCO1FBRUQsSUFBQSxpQkFBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7SUFDckYsQ0FBQztDQUFBO0FBRUQsSUFBSSxFQUFFLENBQUEifQ==
@@ -0,0 +1,44 @@
1
+ /**
2
+ * The configuration file's content
3
+ * For details on what these options do, see the project's README
4
+ */
5
+ export interface Config {
6
+ /** Enable verbose mode */
7
+ readonly verbose?: boolean;
8
+ /** Disable colored output */
9
+ readonly noColor?: boolean;
10
+ /** Path to the API's source directory */
11
+ readonly apiInputPath: string;
12
+ /** Path to generate the SDK at */
13
+ readonly sdkOutput: string;
14
+ /** Path to the SDK interface file */
15
+ readonly sdkInterfacePath: string;
16
+ /** List of magic types */
17
+ readonly magicTypes?: MagicType[];
18
+ /** Show a JSON output */
19
+ readonly jsonOutput?: string;
20
+ /** Prettify the JSON output */
21
+ readonly jsonPrettyOutput?: boolean;
22
+ /** Prettify the generated files (enabled by default) */
23
+ readonly prettify?: boolean;
24
+ /** Path to Prettier's configuration file */
25
+ readonly prettierConfig?: string;
26
+ /** Path to custom tsconfig file */
27
+ readonly tsconfigFile?: string;
28
+ /** If the output directory already exists, overwrite it (enabled by default) */
29
+ readonly overwriteOldOutputDir?: boolean;
30
+ /** If the SDK interface file does not exist yet, create one automatically (enabled by default) */
31
+ readonly generateDefaultSdkInterface?: boolean;
32
+ /** Write generation timestamp in each TypeScript file (enabled by default) */
33
+ readonly generateTimestamps?: boolean;
34
+ }
35
+ /**
36
+ * Magic type used to replace a non-compatible type in the generated SDK
37
+ */
38
+ export interface MagicType {
39
+ readonly nodeModuleFilePath: string;
40
+ readonly typeName: string;
41
+ readonly placeholderContent: string;
42
+ }
43
+ export declare const configPath: string;
44
+ export declare const config: Config;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = exports.configPath = void 0;
4
+ const chalk = require("chalk");
5
+ const fs = require("fs");
6
+ const path = require("path");
7
+ /**
8
+ * Load an existing configuration file and decode it
9
+ * @param configPath
10
+ */
11
+ function loadConfigFile(configPath) {
12
+ if (!fs.existsSync(configPath)) {
13
+ console.error(chalk.red('Config file was not found at path: ' + chalk.yellow(path.resolve(configPath))));
14
+ process.exit(4);
15
+ }
16
+ const text = fs.readFileSync(configPath, 'utf8');
17
+ try {
18
+ return JSON.parse(text);
19
+ }
20
+ catch (e) {
21
+ console.error(chalk.red('Failed to parse configuration file: ' + e));
22
+ process.exit(3);
23
+ }
24
+ }
25
+ exports.configPath = process.argv[2];
26
+ if (!exports.configPath) {
27
+ console.error(chalk.red('Please provide a path to the configuration file'));
28
+ process.exit(2);
29
+ }
30
+ exports.config = loadConfigFile(exports.configPath);
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IseUJBQXdCO0FBQ3hCLDZCQUE0QjtBQTJENUI7OztHQUdHO0FBQ0gsU0FBUyxjQUFjLENBQUMsVUFBa0I7SUFDeEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN4RyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFaEQsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUN4QjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDcEUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtBQUNILENBQUM7QUFFWSxRQUFBLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRXpDLElBQUksQ0FBQyxrQkFBVSxFQUFFO0lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGlEQUFpRCxDQUFDLENBQUMsQ0FBQTtJQUMzRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQ2hCO0FBRVksUUFBQSxNQUFNLEdBQUcsY0FBYyxDQUFDLGtCQUFVLENBQUMsQ0FBQSJ9
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @file Generate SDK modules
3
+ */
4
+ import { SdkModules } from '../analyzer/controllers';
5
+ import { SdkMethod } from '../analyzer/methods';
6
+ import { SdkMethodParams } from '../analyzer/params';
7
+ /**
8
+ * Generate the SDK's module and controllers files
9
+ * @param modules
10
+ * @returns
11
+ */
12
+ export declare function generateSdkModules(modules: SdkModules): Map<string, string>;
13
+ /**
14
+ * Generate the method parameters for a given SDK method
15
+ * @param params
16
+ * @returns
17
+ */
18
+ export declare function generateSdkMethodParams(params: SdkMethodParams): string;
19
+ /**
20
+ * Generate a request call to Central for the generated files
21
+ * @param method
22
+ * @returns
23
+ */
24
+ export declare function generateCentralRequest(method: SdkMethod): string;
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /**
3
+ * @file Generate SDK modules
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateCentralRequest = exports.generateSdkMethodParams = exports.generateSdkModules = void 0;
7
+ const path = require("path");
8
+ const route_1 = require("../analyzer/route");
9
+ const typedeps_1 = require("../analyzer/typedeps");
10
+ const logging_1 = require("../logging");
11
+ /**
12
+ * Generate the SDK's module and controllers files
13
+ * @param modules
14
+ * @returns
15
+ */
16
+ function generateSdkModules(modules) {
17
+ /** Generated module files */
18
+ const genFiles = new Map();
19
+ // Iterate over each module
20
+ for (const [moduleName, controllers] of modules) {
21
+ // Iterate over each of the module's controllers
22
+ for (const [controllerName, controller] of controllers) {
23
+ /** Generated controller's content */
24
+ const out = [];
25
+ out.push('/// Parent module: ' + moduleName);
26
+ out.push(`/// Controller: "${controllerName}" registered as "${controller.registrationName}" (${controller.methods.length} routes)`);
27
+ out.push('');
28
+ out.push('import { request } from "../central";');
29
+ const imports = new Map();
30
+ const depsToImport = new Array();
31
+ // Iterate over each controller
32
+ for (const method of controller.methods.values()) {
33
+ const { parameters: args, query, body } = method.params;
34
+ depsToImport.push(method.returnType);
35
+ if (args) {
36
+ depsToImport.push(...args.values());
37
+ }
38
+ if (query) {
39
+ depsToImport.push(...query.values());
40
+ }
41
+ if (body) {
42
+ if (body.full) {
43
+ depsToImport.push(body.type);
44
+ }
45
+ else {
46
+ depsToImport.push(...body.fields.values());
47
+ }
48
+ }
49
+ }
50
+ // Build the imports list
51
+ for (const dep of depsToImport) {
52
+ for (const [file, types] of dep.dependencies) {
53
+ let imported = imports.get(file);
54
+ if (!imported) {
55
+ imported = [];
56
+ imports.set(file, imported);
57
+ }
58
+ for (const typ of types) {
59
+ if (!imported.includes(typ)) {
60
+ imported.push(typ);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ for (const [file, types] of imports) {
66
+ out.push(`import type { ${types.join(', ')} } from "../_types/${(0, typedeps_1.normalizeExternalFilePath)(file.replace(/\\/g, '/')).replace(/\\/g, '/')}";`);
67
+ }
68
+ out.push('');
69
+ out.push(`export default {`);
70
+ for (const method of controller.methods) {
71
+ const ret = method.returnType.resolvedType;
72
+ const promised = ret.startsWith('Promise<') ? ret : `Promise<${ret}>`;
73
+ out.push('');
74
+ out.push(` // ${method.httpMethod} @ ${(0, route_1.unparseRoute)(method.route)}`);
75
+ out.push(` ${method.name}(${generateSdkMethodParams(method.params)}): ${promised} {`);
76
+ out.push(generateCentralRequest(method).replace(/^/gm, ' '));
77
+ out.push(' },');
78
+ }
79
+ out.push('');
80
+ out.push('};');
81
+ genFiles.set(path.join(moduleName, controller.camelClassName + '.ts'), out.join('\n'));
82
+ }
83
+ /** Generated module's content */
84
+ const moduleContent = [];
85
+ moduleContent.push('/// Module name: ' + moduleName);
86
+ moduleContent.push('');
87
+ for (const controller of controllers.keys()) {
88
+ moduleContent.push(`export { default as ${controller} } from "./${controller}";`);
89
+ }
90
+ // Generate the SDK module file
91
+ genFiles.set(path.join(moduleName, 'index.ts'), moduleContent.join('\n'));
92
+ }
93
+ return genFiles;
94
+ }
95
+ exports.generateSdkModules = generateSdkModules;
96
+ /**
97
+ * Generate the method parameters for a given SDK method
98
+ * @param params
99
+ * @returns
100
+ */
101
+ function generateSdkMethodParams(params) {
102
+ // List of parameters (e.g. `id` in `/get/:id`, analyzed from the usages of the `@Param` decorator)
103
+ const parameters = params.parameters ? [...params.parameters].map(([name, type]) => `${name}: ${type.resolvedType}`) : [];
104
+ // List of query values (e.g. `id` in `?id=xxx`, analyzed from the usages of the `@Query` decorator)
105
+ const query = params.query ? [...params.query].map(([name, type]) => `${name}: ${type.resolvedType}`) : [];
106
+ // Body's content (type used with the `@Body` decorator)
107
+ const body = params.body
108
+ ? params.body.full
109
+ ? params.body.type.resolvedType
110
+ : '{ ' + [...params.body.fields].map(([name, type]) => `${name}: ${type.resolvedType}`).join(', ') + ' }'
111
+ : null;
112
+ // The ternary conditions below are made to eclipse useless parameters
113
+ // For instance, if we're not expecting any query nor body, these two parameters can be omitted when calling the method
114
+ return [
115
+ `params: {${' ' + parameters.join(', ') + ' '}}${parameters.length === 0 && !body && query.length === 0 ? ' = {}' : ''}`,
116
+ `body: ${body !== null && body !== void 0 ? body : '{}'}${!body && query.length === 0 ? ' = {}' : ''}`,
117
+ `query: {${' ' + query.join(', ') + ' '}}${query.length === 0 ? ' = {}' : ''}`,
118
+ ].join(', ');
119
+ }
120
+ exports.generateSdkMethodParams = generateSdkMethodParams;
121
+ /**
122
+ * Generate a request call to Central for the generated files
123
+ * @param method
124
+ * @returns
125
+ */
126
+ function generateCentralRequest(method) {
127
+ const resolvedRoute = (0, route_1.resolveRouteWith)(method.route, (param) => '${params.' + param + '}');
128
+ if (resolvedRoute instanceof Error) {
129
+ (0, logging_1.panic)('Internal error: failed to resolve route: ' + resolvedRoute.message);
130
+ }
131
+ return `return request('${method.httpMethod}', \`${resolvedRoute}\`, body, query) as any`;
132
+ }
133
+ exports.generateCentralRequest = generateCentralRequest;
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VubW9kdWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0b3IvZ2VubW9kdWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILDZCQUE0QjtBQUk1Qiw2Q0FBa0U7QUFDbEUsbURBQWtGO0FBQ2xGLHdDQUFrQztBQUVsQzs7OztHQUlHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsT0FBbUI7SUFDcEQsNkJBQTZCO0lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO0lBRTFDLDJCQUEyQjtJQUMzQixLQUFLLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLElBQUksT0FBTyxFQUFFO1FBQy9DLGdEQUFnRDtRQUNoRCxLQUFLLE1BQU0sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLElBQUksV0FBVyxFQUFFO1lBQ3RELHFDQUFxQztZQUNyQyxNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUE7WUFFeEIsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLENBQUMsQ0FBQTtZQUM1QyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixjQUFjLG9CQUFvQixVQUFVLENBQUMsZ0JBQWdCLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLFVBQVUsQ0FBQyxDQUFBO1lBQ3BJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDWixHQUFHLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUE7WUFFakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUE7WUFFM0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxLQUFLLEVBQW9CLENBQUE7WUFFbEQsK0JBQStCO1lBQy9CLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDaEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJ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
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @file Generate type files for the SDK
3
+ */
4
+ import { TypesExtractorContent } from '../analyzer/extractor';
5
+ /**
6
+ * Generate the non-formatted type files which will be used by the SDK's route functions
7
+ * @param sdkTypes
8
+ * @returns
9
+ */
10
+ export declare function generateSdkTypeFiles(sdkTypes: TypesExtractorContent): Map<string, string>;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * @file Generate type files for the SDK
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateSdkTypeFiles = void 0;
7
+ const path = require("path");
8
+ const typedeps_1 = require("../analyzer/typedeps");
9
+ /**
10
+ * Generate the non-formatted type files which will be used by the SDK's route functions
11
+ * @param sdkTypes
12
+ * @returns
13
+ */
14
+ function generateSdkTypeFiles(sdkTypes) {
15
+ /** Generated type files */
16
+ const genFiles = new Map();
17
+ // While analyzing the controllers' content, all types used by their methods have been extracted
18
+ // The list of these types is then provided to this function as the `sdkTypes` argument, allowing us
19
+ // to establish the list of all dependencies.
20
+ for (const [file, types] of sdkTypes) {
21
+ const out = [];
22
+ /** List of imports in the current file */
23
+ const imports = new Map();
24
+ // Iterate over all types in the current `file`
25
+ for (const extracted of types.values()) {
26
+ // Iterate over all of the extracted type's dependencies
27
+ for (const dep of extracted.dependencies) {
28
+ // If the dependency is from the same file, then we have nothing to do
29
+ if (dep.relativePath === file) {
30
+ continue;
31
+ }
32
+ // Push the typename to the list of imports
33
+ let imported = imports.get(dep.relativePathNoExt);
34
+ if (!imported) {
35
+ imported = [dep.typename];
36
+ imports.set(dep.relativePathNoExt, imported);
37
+ }
38
+ if (!imported.includes(dep.typename)) {
39
+ imported.push(dep.typename);
40
+ }
41
+ }
42
+ }
43
+ // Generate an import statement for each imported type
44
+ out.push([...imports]
45
+ .map(([depFile, types]) => {
46
+ let depPath = path.relative(path.dirname(file), (0, typedeps_1.normalizeExternalFilePath)(depFile)).replace(/\\/g, '/');
47
+ if (!depPath.includes('/'))
48
+ depPath = './' + depPath;
49
+ return `import type { ${types.join(', ')} } from "${depPath.startsWith('./') || depPath.startsWith('../') ? depPath : './' + depPath}"`;
50
+ })
51
+ .join('\n'));
52
+ // Add the extracted types' declaration, indented
53
+ for (const extracted of types.values()) {
54
+ out.push(extracted.content.replace(/^/gm, ' '));
55
+ }
56
+ // Generate the type file
57
+ genFiles.set(file, out.join('\n'));
58
+ }
59
+ return genFiles;
60
+ }
61
+ exports.generateSdkTypeFiles = generateSdkTypeFiles;
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdG9yL2dlbnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsNkJBQTRCO0FBRTVCLG1EQUFnRTtBQUVoRTs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsUUFBK0I7SUFDbEUsMkJBQTJCO0lBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO0lBRTFDLGdHQUFnRztJQUNoRyxvR0FBb0c7SUFDcEcsOENBQThDO0lBQzlDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUU7UUFDcEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFBO1FBRWQsMENBQTBDO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFBO1FBRTNDLCtDQUErQztRQUMvQyxLQUFLLE1BQU0sU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN0Qyx3REFBd0Q7WUFDeEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFO2dCQUN4QyxzRUFBc0U7Z0JBQ3RFLElBQUksR0FBRyxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7b0JBQzdCLFNBQVE7aUJBQ1Q7Z0JBRUQsMkNBQTJDO2dCQUMzQyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO2dCQUVqRCxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNiLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUE7aUJBQzdDO2dCQUVELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDcEMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7aUJBQzVCO2FBQ0Y7U0FDRjtRQUVELHNEQUFzRDtRQUN0RCxHQUFHLENBQUMsSUFBSSxDQUNOLENBQUMsR0FBRyxPQUFPLENBQUM7YUFDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3hCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFBLG9DQUF5QixFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUN2RyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxHQUFHLElBQUksR0FBRyxPQUFPLENBQUE7WUFDcEQsT0FBTyxpQkFBaUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFDdEMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxPQUMzRSxHQUFHLENBQUE7UUFDTCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2QsQ0FBQTtRQUVELGlEQUFpRDtRQUNqRCxLQUFLLE1BQU0sU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN0QyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO1NBQ2pEO1FBRUQseUJBQXlCO1FBQ3pCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtLQUNuQztJQUVELE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUEzREQsb0RBMkRDIn0=
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @file Entrypoint of the SDK generator
3
+ */
4
+ import { SdkContent } from '../analyzer';
5
+ import { Config } from '../config';
6
+ export default function generatorCli(config: Config, sdkContent: SdkContent): Promise<void>;