@opra/cli 1.0.0-alpha.9 → 1.0.0-beta.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 (41) hide show
  1. package/cjs/file-writer.js +2 -2
  2. package/cjs/oprimp-cli.js +11 -9
  3. package/cjs/ts-generator/{processors → generators}/clean-directory.js +4 -5
  4. package/cjs/ts-generator/generators/generate-data-type.js +258 -0
  5. package/cjs/ts-generator/generators/generate-document.js +64 -0
  6. package/cjs/ts-generator/{processors/process-http-api.js → generators/generate-http-api.js} +3 -4
  7. package/cjs/ts-generator/generators/generate-http-controller.js +296 -0
  8. package/cjs/ts-generator/ts-file.js +18 -12
  9. package/cjs/ts-generator/ts-generator.js +20 -20
  10. package/cjs/ts-generator/utils/locate-named-type.js +1 -2
  11. package/cjs/ts-generator/utils/string-utils.js +4 -5
  12. package/esm/file-writer.js +1 -1
  13. package/esm/oprimp-cli.js +9 -7
  14. package/esm/package.json +3 -0
  15. package/esm/ts-generator/{processors → generators}/clean-directory.js +3 -3
  16. package/esm/ts-generator/generators/generate-data-type.js +248 -0
  17. package/esm/ts-generator/{processors/process-document.js → generators/generate-document.js} +17 -12
  18. package/esm/ts-generator/{processors/process-http-api.js → generators/generate-http-api.js} +2 -2
  19. package/esm/ts-generator/generators/generate-http-controller.js +292 -0
  20. package/esm/ts-generator/ts-file.js +15 -9
  21. package/esm/ts-generator/ts-generator.js +20 -20
  22. package/package.json +28 -33
  23. package/types/file-writer.d.ts +1 -1
  24. package/types/index.d.cts +1 -0
  25. package/types/interfaces/service-generation-context.interface.d.ts +2 -2
  26. package/types/ts-generator/generators/generate-data-type.d.ts +41 -0
  27. package/types/ts-generator/{processors/process-document.d.ts → generators/generate-document.d.ts} +1 -1
  28. package/types/ts-generator/generators/generate-http-api.d.ts +3 -0
  29. package/types/ts-generator/generators/generate-http-controller.d.ts +3 -0
  30. package/types/ts-generator/ts-file.d.ts +6 -2
  31. package/types/ts-generator/ts-generator.d.ts +22 -20
  32. package/bin/bin/oprimp.mjs +0 -3
  33. package/cjs/ts-generator/processors/process-data-types.js +0 -262
  34. package/cjs/ts-generator/processors/process-document.js +0 -60
  35. package/cjs/ts-generator/processors/process-http-controller.js +0 -189
  36. package/esm/ts-generator/processors/process-data-types.js +0 -251
  37. package/esm/ts-generator/processors/process-http-controller.js +0 -184
  38. package/types/ts-generator/processors/process-data-types.d.ts +0 -30
  39. package/types/ts-generator/processors/process-http-api.d.ts +0 -3
  40. package/types/ts-generator/processors/process-http-controller.d.ts +0 -3
  41. /package/types/ts-generator/{processors → generators}/clean-directory.d.ts +0 -0
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FileWriter = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const fs_1 = tslib_1.__importDefault(require("fs"));
5
+ const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
6
6
  class FileWriter {
7
7
  writeFile(filename, contents) {
8
- fs_1.default.writeFileSync(filename, contents, 'utf-8');
8
+ node_fs_1.default.writeFileSync(filename, contents, 'utf-8');
9
9
  }
10
10
  }
11
11
  exports.FileWriter = FileWriter;
package/cjs/oprimp-cli.js CHANGED
@@ -1,35 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
+ const console = tslib_1.__importStar(require("node:console"));
5
+ const fs = tslib_1.__importStar(require("node:fs"));
6
+ const node_path_1 = tslib_1.__importDefault(require("node:path"));
7
+ const process = tslib_1.__importStar(require("node:process"));
4
8
  const common_1 = require("@opra/common");
5
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
9
+ const ansi_colors_1 = tslib_1.__importDefault(require("ansi-colors"));
6
10
  const commander_1 = require("commander");
7
- const console = tslib_1.__importStar(require("console"));
8
- const fs = tslib_1.__importStar(require("fs"));
9
- const path_1 = tslib_1.__importDefault(require("path"));
10
- const process = tslib_1.__importStar(require("process"));
11
11
  const ts_generator_js_1 = require("./ts-generator/ts-generator.js");
12
- const dirname = path_1.default.dirname((0, common_1.getStackFileName)());
13
- const pkgJson = JSON.parse(fs.readFileSync(path_1.default.resolve(dirname, '../package.json'), 'utf-8'));
12
+ const dirname = node_path_1.default.dirname((0, common_1.getStackFileName)());
13
+ const pkgJson = JSON.parse(fs.readFileSync(node_path_1.default.resolve(dirname, '../package.json'), 'utf-8'));
14
14
  commander_1.program
15
15
  .version(pkgJson.version)
16
16
  .argument('<serviceUrl>', 'OPRA service url')
17
17
  .argument('<outDir>', 'Output directory')
18
18
  .option('--ext', 'Adds js extension to imports')
19
+ .option('--refns', 'Exports references with namespaces')
19
20
  .option('--no-color', 'Disables colors in logs messages')
20
21
  .action(async (serviceUrl, outDir, options) => {
21
22
  if (!options.color)
22
- chalk_1.default.level = 0;
23
+ ansi_colors_1.default.enabled = false;
23
24
  const generator = new ts_generator_js_1.TsGenerator({
24
25
  serviceUrl,
25
26
  logger: console,
26
27
  outDir,
27
28
  importExt: options.ext,
29
+ referenceNamespaces: options.refns,
28
30
  fileHeader: `/* Generated by OPRA Code Generator, Version ${pkgJson.version} */`,
29
31
  });
30
32
  await generator
31
33
  .generate()
32
- .then(() => console.log(chalk_1.default.greenBright('Completed')))
34
+ .then(() => console.log(ansi_colors_1.default.greenBright('Completed')))
33
35
  .catch(e => console.error(e.message));
34
36
  });
35
37
  if (process.argv.length < 3)
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cleanDirectory = void 0;
3
+ exports.cleanDirectory = cleanDirectory;
4
4
  const tslib_1 = require("tslib");
5
5
  const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
6
6
  const node_path_1 = tslib_1.__importDefault(require("node:path"));
7
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
+ const ansi_colors_1 = tslib_1.__importDefault(require("ansi-colors"));
8
8
  function cleanDirectory(dirname) {
9
9
  const rootDir = dirname;
10
10
  const _cleanDirectory = (targetDir) => {
@@ -16,7 +16,7 @@ function cleanDirectory(dirname) {
16
16
  if (node_fs_1.default.statSync(absolutePath).isDirectory()) {
17
17
  _cleanDirectory(absolutePath);
18
18
  if (!node_fs_1.default.readdirSync(absolutePath).length) {
19
- this.emit('verbose', chalk_1.default.cyan(`Removing directory ${node_path_1.default.relative(absolutePath, rootDir)}`));
19
+ this.emit('verbose', ansi_colors_1.default.cyan(`Removing directory ${node_path_1.default.relative(absolutePath, rootDir)}`));
20
20
  node_fs_1.default.rmdirSync(absolutePath);
21
21
  }
22
22
  continue;
@@ -24,7 +24,7 @@ function cleanDirectory(dirname) {
24
24
  if (node_path_1.default.extname(f) === '.ts') {
25
25
  const contents = node_fs_1.default.readFileSync(absolutePath, 'utf-8');
26
26
  if (contents.includes('#!oprimp_auto_generated!#')) {
27
- this.emit('verbose', chalk_1.default.cyan(`Removing file ${node_path_1.default.relative(absolutePath, rootDir)}`));
27
+ this.emit('verbose', ansi_colors_1.default.cyan(`Removing file ${node_path_1.default.relative(absolutePath, rootDir)}`));
28
28
  node_fs_1.default.unlinkSync(absolutePath);
29
29
  }
30
30
  }
@@ -32,4 +32,3 @@ function cleanDirectory(dirname) {
32
32
  };
33
33
  _cleanDirectory(dirname);
34
34
  }
35
- exports.cleanDirectory = cleanDirectory;
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateDataType = generateDataType;
4
+ exports._generateTypeCode = _generateTypeCode;
5
+ exports._generateEnumTypeCode = _generateEnumTypeCode;
6
+ exports._generateComplexTypeCode = _generateComplexTypeCode;
7
+ exports._generateSimpleTypeCode = _generateSimpleTypeCode;
8
+ exports._generateMixinTypeCode = _generateMixinTypeCode;
9
+ exports._generateMappedTypeCode = _generateMappedTypeCode;
10
+ const tslib_1 = require("tslib");
11
+ const node_path_1 = tslib_1.__importDefault(require("node:path"));
12
+ const common_1 = require("@opra/common");
13
+ const code_block_js_1 = require("../../code-block.js");
14
+ const string_utils_js_1 = require("../utils/string-utils.js");
15
+ const internalTypeNames = ['any', 'boolean', 'bigint', 'number', 'null', 'string', 'object'];
16
+ async function generateDataType(dataType, intent, currentFile) {
17
+ const doc = dataType.node.getDocument();
18
+ if (doc.id !== this._document?.id) {
19
+ const { generator } = await this.generateDocument(doc);
20
+ return await generator.generateDataType(dataType, intent, currentFile);
21
+ }
22
+ const typeName = dataType.name;
23
+ if (typeName) {
24
+ if (internalTypeNames.includes(typeName))
25
+ return { kind: 'internal', typeName: dataType.name };
26
+ let file = this._filesMap.get(dataType);
27
+ if (file) {
28
+ if (currentFile)
29
+ currentFile.addImport(file.filename, [typeName]);
30
+ return { kind: 'named', file, typeName: dataType.name };
31
+ }
32
+ if (dataType instanceof common_1.SimpleType)
33
+ file = this.addFile(node_path_1.default.join(this._documentRoot, '/simple-types.ts'), true);
34
+ else if (dataType instanceof common_1.EnumType) {
35
+ file = this.addFile(node_path_1.default.join(this._typesRoot, 'enums', typeName + '.ts'), true);
36
+ }
37
+ else
38
+ file = this.addFile(node_path_1.default.join(this._typesRoot, 'types', typeName + '.ts'), true);
39
+ this._filesMap.set(dataType, file);
40
+ if (file.exportTypes.includes(typeName)) {
41
+ if (currentFile)
42
+ currentFile.addImport(file.filename, [typeName]);
43
+ return { kind: 'named', file, typeName: dataType.name };
44
+ }
45
+ file.exportTypes.push(typeName);
46
+ const typesIndexTs = this.addFile(node_path_1.default.join(this._typesRoot, 'index.ts'), true);
47
+ const indexTs = this.addFile('/index.ts', true);
48
+ indexTs.addExport(typesIndexTs.filename, undefined, this._typesNamespace);
49
+ const codeBlock = (file.code['type_' + typeName] = new code_block_js_1.CodeBlock());
50
+ codeBlock.head = `/**\n * ${(0, string_utils_js_1.wrapJSDocString)(dataType.description || '')}\n *`;
51
+ codeBlock.head += `
52
+ * @url ${node_path_1.default.posix.join(doc.url || this.serviceUrl, '$schema', '#types/' + typeName)}
53
+ */
54
+ export `;
55
+ codeBlock.typeDef = (await this._generateTypeCode(file, dataType, 'root')) + '\n\n';
56
+ typesIndexTs.addExport(file.filename);
57
+ if (currentFile)
58
+ currentFile.addImport(file.filename, [typeName]);
59
+ return { kind: 'named', file, typeName };
60
+ }
61
+ if (!currentFile)
62
+ throw new TypeError(`You must provide currentFile to generate data type`);
63
+ const code = await this._generateTypeCode(currentFile, dataType, intent);
64
+ return { kind: 'embedded', code };
65
+ }
66
+ /**
67
+ *
68
+ */
69
+ async function _generateTypeCode(currentFile, dataType, intent) {
70
+ if (intent === 'root' && !dataType.name) {
71
+ throw new TypeError(`Name required to generate data type code to root intent`);
72
+ }
73
+ if (dataType instanceof common_1.EnumType) {
74
+ return await this._generateEnumTypeCode(currentFile, dataType, intent);
75
+ }
76
+ if (dataType instanceof common_1.ComplexType) {
77
+ return await this._generateComplexTypeCode(currentFile, dataType, intent);
78
+ }
79
+ if (dataType instanceof common_1.SimpleType) {
80
+ return await this._generateSimpleTypeCode(currentFile, dataType, intent);
81
+ }
82
+ if (dataType instanceof common_1.MappedType) {
83
+ return await this._generateMappedTypeCode(currentFile, dataType, intent);
84
+ }
85
+ if (dataType instanceof common_1.MixinType) {
86
+ return await this._generateMixinTypeCode(currentFile, dataType, intent);
87
+ }
88
+ /* istanbul ignore next */
89
+ throw new TypeError(`${dataType.kind} data types can not be directly exported`);
90
+ }
91
+ /**
92
+ *
93
+ */
94
+ async function _generateEnumTypeCode(currentFile, dataType, intent) {
95
+ if (intent === 'root') {
96
+ let out = `enum ${dataType.name} {\n\t`;
97
+ for (const [value, info] of Object.entries(dataType.attributes)) {
98
+ // Print JSDoc
99
+ let jsDoc = '';
100
+ if (dataType.attributes[value].description)
101
+ jsDoc += ` * ${dataType.attributes[value].description}\n`;
102
+ if (jsDoc)
103
+ out += `/**\n${jsDoc} */\n`;
104
+ out +=
105
+ `${info.alias || value} = ` +
106
+ (typeof value === 'number' ? value : "'" + String(value).replace("'", "\\'") + "'");
107
+ out += ',\n\n';
108
+ }
109
+ return out + '\b}';
110
+ }
111
+ return ('(' +
112
+ Object.keys(dataType.attributes)
113
+ .map(t => `'${t}'`)
114
+ .join(' | ') +
115
+ ')');
116
+ }
117
+ /**
118
+ *
119
+ */
120
+ async function _generateComplexTypeCode(currentFile, dataType, intent) {
121
+ let out = intent === 'root' ? `interface ${dataType.name} ` : '';
122
+ const ownFields = [...dataType.fields.values()].filter(f => f.origin === dataType);
123
+ if (dataType.base) {
124
+ const base = await this.generateDataType(dataType.base, 'extends', currentFile);
125
+ let baseDef = base.kind === 'embedded' ? base.code : base.typeName;
126
+ const omitBaseFields = ownFields.filter(f => dataType.base.fields.has(f.name));
127
+ if (omitBaseFields.length)
128
+ baseDef = `Omit<${baseDef}, ${omitBaseFields.map(x => "'" + x.name + "'").join(' | ')}>`;
129
+ if (intent === 'root')
130
+ out += `extends ${baseDef} `;
131
+ else {
132
+ out += baseDef;
133
+ if (!ownFields.length)
134
+ return out;
135
+ out += ' & ';
136
+ }
137
+ }
138
+ out += '{\n\t';
139
+ let i = 0;
140
+ for (const field of ownFields) {
141
+ if (i++)
142
+ out += '\n';
143
+ // Print JSDoc
144
+ out += `/**\n * ${field.description || ''}\n`;
145
+ if (field.default)
146
+ out += ` * @default ` + field.default + '\n';
147
+ // if (field.format)
148
+ // jsDoc += ` * @format ` + field.format + '\n';
149
+ if (field.exclusive)
150
+ out += ` * @exclusive\n`;
151
+ if (field.readonly)
152
+ out += ` * @readonly\n`;
153
+ if (field.writeonly)
154
+ out += ` * @writeonly\n`;
155
+ if (field.deprecated) {
156
+ out += ` * @deprecated ` + (typeof field.deprecated === 'string' ? field.deprecated : '') + '\n';
157
+ }
158
+ out += ' */\n';
159
+ // Print field name
160
+ if (field.readonly)
161
+ out += 'readonly ';
162
+ out += `${field.name}${field.required ? '' : '?'}: `;
163
+ if (field.fixed) {
164
+ const t = typeof field.fixed;
165
+ out += `${t === 'number' || t === 'boolean' || t === 'bigint' ? field.fixed : "'" + field.fixed + "'"}\n`;
166
+ }
167
+ else {
168
+ const x = await this.generateDataType(field.type, 'typeDef', currentFile);
169
+ out += (x.kind === 'embedded' ? x.code : x.typeName) + `${field.isArray ? '[]' : ''};\n`;
170
+ }
171
+ }
172
+ if (dataType.additionalFields)
173
+ out += '[key: string]: any;\n';
174
+ return out + '\b}';
175
+ }
176
+ /**
177
+ *
178
+ */
179
+ async function _generateSimpleTypeCode(currentFile, dataType, intent) {
180
+ let out = intent === 'root' ? `type ${dataType.name} = ` : '';
181
+ out += dataType.nameMappings.js || 'any';
182
+ return intent === 'root' ? out + ';' : out;
183
+ }
184
+ /**
185
+ *
186
+ */
187
+ async function _generateMixinTypeCode(currentFile, dataType, intent) {
188
+ const outArray = [];
189
+ for (const t of dataType.types) {
190
+ const x = await this.generateDataType(t, 'typeDef', currentFile);
191
+ if (x.kind === 'embedded') {
192
+ outArray.push(x.code.includes('|') ? '(' + x.code + ')' : x.code);
193
+ }
194
+ else
195
+ outArray.push(x.typeName);
196
+ }
197
+ if (intent === 'root')
198
+ return `type ${dataType.name} = ${outArray.join(' & ')}`;
199
+ if (intent === 'extends')
200
+ return outArray.join(', ');
201
+ return outArray.join(' & ');
202
+ }
203
+ /**
204
+ *
205
+ */
206
+ async function _generateMappedTypeCode(currentFile, dataType, intent) {
207
+ let out = intent === 'root' ? `type ${dataType.name} = ` : '';
208
+ const base = await this.generateDataType(dataType.base, 'typeDef', currentFile);
209
+ const typeDef = base.kind === 'embedded' ? base.code : base.typeName;
210
+ const pick = dataType.pick?.length ? dataType.pick : undefined;
211
+ const omit = !pick && dataType.omit?.length ? dataType.omit : undefined;
212
+ const partial = dataType.partial === true || (Array.isArray(dataType.partial) && dataType.partial.length > 0)
213
+ ? dataType.partial
214
+ : undefined;
215
+ const required = dataType.required === true || (Array.isArray(dataType.required) && dataType.required.length > 0)
216
+ ? dataType.required
217
+ : undefined;
218
+ if (!(pick || omit || partial || required))
219
+ return typeDef;
220
+ if (partial === true)
221
+ out += 'Partial<';
222
+ else if (partial) {
223
+ out += 'PartialSome<';
224
+ currentFile.addExport('ts-gems', ['PartialSome']);
225
+ }
226
+ if (required === true)
227
+ out += 'Partial<';
228
+ else if (required) {
229
+ out += 'RequiredSome<';
230
+ currentFile.addExport('ts-gems', ['RequiredSome']);
231
+ }
232
+ if (pick)
233
+ out += 'Pick<';
234
+ else if (omit)
235
+ out += 'Omit<';
236
+ out += typeDef;
237
+ if (omit || pick) {
238
+ out +=
239
+ ', ' +
240
+ (omit || pick)
241
+ .filter(x => !!x)
242
+ .map(x => `'${x}'`)
243
+ .join(' | ') +
244
+ '>';
245
+ }
246
+ if (partial) {
247
+ if (Array.isArray(partial)) {
248
+ out +=
249
+ ', ' +
250
+ partial
251
+ .filter(x => !!x)
252
+ .map(x => `'${x}'`)
253
+ .join(' | ');
254
+ }
255
+ out += '>';
256
+ }
257
+ return out;
258
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateDocument = generateDocument;
4
+ const tslib_1 = require("tslib");
5
+ const node_path_1 = tslib_1.__importDefault(require("node:path"));
6
+ const client_1 = require("@opra/client");
7
+ const common_1 = require("@opra/common");
8
+ const ansi_colors_1 = tslib_1.__importDefault(require("ansi-colors"));
9
+ const putil_varhelpers_1 = require("putil-varhelpers");
10
+ async function generateDocument(document, options) {
11
+ if (!document || typeof document === 'string') {
12
+ if (document) {
13
+ const out = this._documentsMap.get(document);
14
+ if (out)
15
+ return out;
16
+ }
17
+ this.emit('log', ansi_colors_1.default.cyan('Fetching document schema from ') + ansi_colors_1.default.blueBright(this.serviceUrl));
18
+ const client = new client_1.OpraHttpClient(this.serviceUrl);
19
+ document = await client.fetchDocument({ documentId: document });
20
+ }
21
+ this._document = document;
22
+ let out = this._documentsMap.get(document.id);
23
+ if (out)
24
+ return out;
25
+ out = {
26
+ document,
27
+ generator: this,
28
+ };
29
+ this._documentsMap.set(document.id, out);
30
+ this.emit('log', ansi_colors_1.default.white('[' + document.id + '] ') +
31
+ ansi_colors_1.default.cyan('Processing document ') +
32
+ ansi_colors_1.default.magenta(document.info.title || ''));
33
+ if (document.references.size) {
34
+ let refIdGenerator = options?.refIdGenerator || 1;
35
+ this.emit('log', ansi_colors_1.default.white('[' + document.id + '] ') + ansi_colors_1.default.cyan(`Processing references`));
36
+ for (const ref of document.references.values()) {
37
+ const generator = this.extend();
38
+ generator._document = ref;
39
+ const typesNamespace = ref.api?.name || (ref.info.title ? (0, putil_varhelpers_1.pascalCase)(ref.info.title) : `Reference${refIdGenerator++}`);
40
+ generator._documentRoot = '/references/' + typesNamespace;
41
+ generator._typesRoot = node_path_1.default.join(generator._documentRoot, 'models');
42
+ generator._typesNamespace = !this.options.referenceNamespaces || ref[common_1.BUILTIN] ? '' : typesNamespace;
43
+ await generator.generateDocument(ref, { typesOnly: true, refIdGenerator });
44
+ }
45
+ }
46
+ this._fileHeaderDocInfo = `/*
47
+ * ${document.info.title}
48
+ * Id: ${document.id}
49
+ * Version: ${document.info.version}
50
+ * ${this.serviceUrl}
51
+ */`;
52
+ if (document.types.size) {
53
+ this.emit('log', ansi_colors_1.default.white('[' + document.id + ']'), ansi_colors_1.default.cyan(`Processing data types`));
54
+ for (const t of document.types.values()) {
55
+ await this.generateDataType(t, 'root');
56
+ }
57
+ }
58
+ if (options?.typesOnly)
59
+ return out;
60
+ if (document.api instanceof common_1.HttpApi) {
61
+ await this.generateHttpApi(document.api);
62
+ }
63
+ return out;
64
+ }
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processHttpApi = void 0;
3
+ exports.generateHttpApi = generateHttpApi;
4
4
  const tslib_1 = require("tslib");
5
5
  const node_path_1 = tslib_1.__importDefault(require("node:path"));
6
6
  const putil_varhelpers_1 = require("putil-varhelpers");
7
7
  const code_block_js_1 = require("../../code-block.js");
8
8
  const http_controller_node_js_1 = require("../http-controller-node.js");
9
9
  const string_utils_js_1 = require("../utils/string-utils.js");
10
- async function processHttpApi(api) {
10
+ async function generateHttpApi(api) {
11
11
  let file = this._filesMap.get(api);
12
12
  if (file)
13
13
  return file;
@@ -32,7 +32,7 @@ async function processHttpApi(api) {
32
32
  classConstBlock.tail = `\b\n}\n`;
33
33
  for (const controller of api.controllers.values()) {
34
34
  const generator = this.extend();
35
- const f = await generator.processHttpController(controller);
35
+ const f = await generator.generateHttpController(controller);
36
36
  const childClassName = (0, putil_varhelpers_1.pascalCase)(controller.name) + 'Controller';
37
37
  file.addImport('.' + f.filename, [childClassName]);
38
38
  const property = '$' + controller.name.charAt(0).toLowerCase() + (0, putil_varhelpers_1.camelCase)(controller.name.substring(1));
@@ -42,4 +42,3 @@ async function processHttpApi(api) {
42
42
  classBlock.tail = `\b}`;
43
43
  return file;
44
44
  }
45
- exports.processHttpApi = processHttpApi;