@odata2ts/odata2ts 0.36.2 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/lib/FactoryFunctionModel.d.ts +5 -5
- package/lib/FactoryFunctionModel.js +1 -2
- package/lib/FactoryFunctionModel.js.map +1 -1
- package/lib/NamingModel.js +2 -5
- package/lib/NamingModel.js.map +1 -1
- package/lib/OptionModel.d.ts +2 -2
- package/lib/OptionModel.js +4 -7
- package/lib/OptionModel.js.map +1 -1
- package/lib/TypeModel.js +2 -5
- package/lib/TypeModel.js.map +1 -1
- package/lib/app.d.ts +2 -2
- package/lib/app.js +23 -27
- package/lib/app.js.map +1 -1
- package/lib/cli/cli.d.ts +1 -0
- package/lib/cli/cli.js +27 -0
- package/lib/cli/cli.js.map +1 -0
- package/lib/cli/index.d.ts +4 -0
- package/lib/cli/index.js +5 -0
- package/lib/cli/index.js.map +1 -0
- package/lib/cli/processCliArgs.d.ts +2 -0
- package/lib/cli/processCliArgs.js +57 -0
- package/lib/cli/processCliArgs.js.map +1 -0
- package/lib/cli/processConfigFile.d.ts +2 -0
- package/lib/cli/processConfigFile.js +24 -0
- package/lib/cli/processConfigFile.js.map +1 -0
- package/lib/cli/serviceGenerationRun.d.ts +2 -0
- package/lib/cli/serviceGenerationRun.js +77 -0
- package/lib/cli/serviceGenerationRun.js.map +1 -0
- package/lib/data-model/DataModel.d.ts +2 -2
- package/lib/data-model/DataModel.js +5 -10
- package/lib/data-model/DataModel.js.map +1 -1
- package/lib/data-model/DataModelDigestion.d.ts +10 -10
- package/lib/data-model/DataModelDigestion.js +19 -23
- package/lib/data-model/DataModelDigestion.js.map +1 -1
- package/lib/data-model/DataModelDigestionV2.d.ts +2 -2
- package/lib/data-model/DataModelDigestionV2.js +27 -31
- package/lib/data-model/DataModelDigestionV2.js.map +1 -1
- package/lib/data-model/DataModelDigestionV4.d.ts +2 -2
- package/lib/data-model/DataModelDigestionV4.js +38 -35
- package/lib/data-model/DataModelDigestionV4.js.map +1 -1
- package/lib/data-model/DataTypeModel.d.ts +1 -1
- package/lib/data-model/DataTypeModel.js +2 -5
- package/lib/data-model/DataTypeModel.js.map +1 -1
- package/lib/data-model/NamingHelper.d.ts +2 -2
- package/lib/data-model/NamingHelper.js +12 -19
- package/lib/data-model/NamingHelper.js.map +1 -1
- package/lib/data-model/ServiceConfigHelper.d.ts +3 -3
- package/lib/data-model/ServiceConfigHelper.js +18 -22
- package/lib/data-model/ServiceConfigHelper.js.map +1 -1
- package/lib/data-model/edmx/ODataEdmxModelBase.js +1 -2
- package/lib/data-model/edmx/ODataEdmxModelV3.d.ts +1 -1
- package/lib/data-model/edmx/ODataEdmxModelV3.js +1 -2
- package/lib/data-model/edmx/ODataEdmxModelV3.js.map +1 -1
- package/lib/data-model/edmx/ODataEdmxModelV4.d.ts +1 -1
- package/lib/data-model/edmx/ODataEdmxModelV4.js +1 -2
- package/lib/data-model/edmx/ODataEdmxModelV4.js.map +1 -1
- package/lib/data-model/validation/NameClashValidator.d.ts +2 -2
- package/lib/data-model/validation/NameClashValidator.js +10 -14
- package/lib/data-model/validation/NameClashValidator.js.map +1 -1
- package/lib/data-model/validation/NameValidator.d.ts +1 -1
- package/lib/data-model/validation/NameValidator.js +1 -2
- package/lib/data-model/validation/NameValidator.js.map +1 -1
- package/lib/data-model/validation/NoopValidator.d.ts +1 -1
- package/lib/data-model/validation/NoopValidator.js +1 -5
- package/lib/data-model/validation/NoopValidator.js.map +1 -1
- package/lib/defaultConfig.d.ts +1 -1
- package/lib/defaultConfig.js +21 -26
- package/lib/defaultConfig.js.map +1 -1
- package/lib/download/downloadMetadata.d.ts +1 -1
- package/lib/download/downloadMetadata.js +6 -10
- package/lib/download/downloadMetadata.js.map +1 -1
- package/lib/download/index.d.ts +2 -2
- package/lib/download/index.js +2 -7
- package/lib/download/index.js.map +1 -1
- package/lib/download/storeMetadata.js +15 -17
- package/lib/download/storeMetadata.js.map +1 -1
- package/lib/evaluateConfig.d.ts +1 -1
- package/lib/evaluateConfig.js +14 -18
- package/lib/evaluateConfig.js.map +1 -1
- package/lib/generator/ImportContainer.d.ts +2 -2
- package/lib/generator/ImportContainer.js +17 -22
- package/lib/generator/ImportContainer.js.map +1 -1
- package/lib/generator/ImportedNameValidator.js +1 -5
- package/lib/generator/ImportedNameValidator.js.map +1 -1
- package/lib/generator/ModelGenerator.d.ts +1 -1
- package/lib/generator/ModelGenerator.js +8 -12
- package/lib/generator/ModelGenerator.js.map +1 -1
- package/lib/generator/QueryObjectGenerator.d.ts +1 -1
- package/lib/generator/QueryObjectGenerator.js +25 -29
- package/lib/generator/QueryObjectGenerator.js.map +1 -1
- package/lib/generator/ServiceGenerator.d.ts +4 -4
- package/lib/generator/ServiceGenerator.js +52 -56
- package/lib/generator/ServiceGenerator.js.map +1 -1
- package/lib/generator/import/ImportObjects.js +11 -14
- package/lib/generator/import/ImportObjects.js.map +1 -1
- package/lib/generator/index.d.ts +3 -3
- package/lib/generator/index.js +3 -9
- package/lib/generator/index.js.map +1 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.js +4 -7
- package/lib/index.js.map +1 -1
- package/lib/project/FileHandler.d.ts +3 -3
- package/lib/project/FileHandler.js +12 -16
- package/lib/project/FileHandler.js.map +1 -1
- package/lib/project/ProjectManager.d.ts +5 -5
- package/lib/project/ProjectManager.js +25 -32
- package/lib/project/ProjectManager.js.map +1 -1
- package/lib/project/TsMorphHelper.d.ts +1 -1
- package/lib/project/TsMorphHelper.js +21 -22
- package/lib/project/TsMorphHelper.js.map +1 -1
- package/lib/project/formatter/BaseFormatter.d.ts +1 -1
- package/lib/project/formatter/BaseFormatter.js +1 -5
- package/lib/project/formatter/BaseFormatter.js.map +1 -1
- package/lib/project/formatter/FileFormatter.js +1 -2
- package/lib/project/formatter/NoopFormatter.d.ts +1 -1
- package/lib/project/formatter/NoopFormatter.js +5 -9
- package/lib/project/formatter/NoopFormatter.js.map +1 -1
- package/lib/project/formatter/PrettierFormatter.d.ts +1 -1
- package/lib/project/formatter/PrettierFormatter.js +20 -25
- package/lib/project/formatter/PrettierFormatter.js.map +1 -1
- package/lib/project/formatter/index.d.ts +1 -1
- package/lib/project/formatter/index.js +6 -10
- package/lib/project/formatter/index.js.map +1 -1
- package/lib/project/logger/logFilePath.js +4 -9
- package/lib/project/logger/logFilePath.js.map +1 -1
- package/lib/run-cli.js +2 -4
- package/lib/run-cli.js.map +1 -1
- package/package.json +53 -63
- package/lib/cli.d.ts +0 -3
- package/lib/cli.js +0 -176
- package/lib/cli.js.map +0 -1
package/lib/generator/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { generateModels } from "./ModelGenerator";
|
|
2
|
-
export { generateQueryObjects } from "./QueryObjectGenerator";
|
|
3
|
-
export { generateServices } from "./ServiceGenerator";
|
|
1
|
+
export { generateModels } from "./ModelGenerator.js";
|
|
2
|
+
export { generateQueryObjects } from "./QueryObjectGenerator.js";
|
|
3
|
+
export { generateServices } from "./ServiceGenerator.js";
|
package/lib/generator/index.js
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var ModelGenerator_1 = require("./ModelGenerator");
|
|
5
|
-
Object.defineProperty(exports, "generateModels", { enumerable: true, get: function () { return ModelGenerator_1.generateModels; } });
|
|
6
|
-
var QueryObjectGenerator_1 = require("./QueryObjectGenerator");
|
|
7
|
-
Object.defineProperty(exports, "generateQueryObjects", { enumerable: true, get: function () { return QueryObjectGenerator_1.generateQueryObjects; } });
|
|
8
|
-
var ServiceGenerator_1 = require("./ServiceGenerator");
|
|
9
|
-
Object.defineProperty(exports, "generateServices", { enumerable: true, get: function () { return ServiceGenerator_1.generateServices; } });
|
|
1
|
+
export { generateModels } from "./ModelGenerator.js";
|
|
2
|
+
export { generateQueryObjects } from "./QueryObjectGenerator.js";
|
|
3
|
+
export { generateServices } from "./ServiceGenerator.js";
|
|
10
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { generateModels } from \"./ModelGenerator.js\";\r\nexport { generateQueryObjects } from \"./QueryObjectGenerator.js\";\r\nexport { generateServices } from \"./ServiceGenerator.js\";\r\n"]}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from "./OptionModel";
|
|
2
|
-
export * from "./NamingModel";
|
|
3
|
-
export * from "./defaultConfig";
|
|
4
|
-
export * from "./TypeModel";
|
|
1
|
+
export * from "./OptionModel.js";
|
|
2
|
+
export * from "./NamingModel.js";
|
|
3
|
+
export * from "./defaultConfig.js";
|
|
4
|
+
export * from "./TypeModel.js";
|
package/lib/index.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
tslib_1.__exportStar(require("./NamingModel"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./defaultConfig"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./TypeModel"), exports);
|
|
1
|
+
export * from "./OptionModel.js";
|
|
2
|
+
export * from "./NamingModel.js";
|
|
3
|
+
export * from "./defaultConfig.js";
|
|
4
|
+
export * from "./TypeModel.js";
|
|
8
5
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC","sourcesContent":["export * from \"./OptionModel.js\";\r\nexport * from \"./NamingModel.js\";\r\nexport * from \"./defaultConfig.js\";\r\nexport * from \"./TypeModel.js\";\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SourceFile } from "ts-morph";
|
|
2
|
-
import { ImportContainer } from "../generator/ImportContainer";
|
|
3
|
-
import { EmitModes } from "../OptionModel";
|
|
4
|
-
import { FileFormatter } from "./formatter/FileFormatter";
|
|
2
|
+
import { ImportContainer } from "../generator/ImportContainer.js";
|
|
3
|
+
import { EmitModes } from "../OptionModel.js";
|
|
4
|
+
import { FileFormatter } from "./formatter/FileFormatter.js";
|
|
5
5
|
export declare class FileHandler {
|
|
6
6
|
readonly path: string;
|
|
7
7
|
readonly fileName: string;
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const promises_1 = require("fs/promises");
|
|
6
|
-
const OptionModel_1 = require("../OptionModel");
|
|
7
|
-
class FileHandler {
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { writeFile } from "fs/promises";
|
|
3
|
+
import { EmitModes } from "../OptionModel.js";
|
|
4
|
+
export class FileHandler {
|
|
8
5
|
constructor(path, fileName, file, importContainer, formatter, allowTypeChecking) {
|
|
9
6
|
this.path = path;
|
|
10
7
|
this.fileName = fileName;
|
|
@@ -23,7 +20,7 @@ class FileHandler {
|
|
|
23
20
|
return this.importContainer;
|
|
24
21
|
}
|
|
25
22
|
write(emitMode, noOutput = false) {
|
|
26
|
-
return
|
|
23
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
24
|
this.file.addImportDeclarations(this.importContainer.getImportDeclarations());
|
|
28
25
|
// add ts-nocheck to beginning of each file
|
|
29
26
|
if (!this.allowTypeChecking) {
|
|
@@ -36,12 +33,12 @@ class FileHandler {
|
|
|
36
33
|
return;
|
|
37
34
|
}
|
|
38
35
|
switch (emitMode) {
|
|
39
|
-
case
|
|
40
|
-
case
|
|
36
|
+
case EmitModes.js:
|
|
37
|
+
case EmitModes.js_dts:
|
|
41
38
|
return this.file.emit();
|
|
42
|
-
case
|
|
39
|
+
case EmitModes.dts:
|
|
43
40
|
return this.file.emit({ emitOnlyDtsFiles: true });
|
|
44
|
-
case
|
|
41
|
+
case EmitModes.ts:
|
|
45
42
|
return this.formatAndWriteFile();
|
|
46
43
|
default:
|
|
47
44
|
throw new Error(`Emit mode "${emitMode}" is invalid!`);
|
|
@@ -49,13 +46,13 @@ class FileHandler {
|
|
|
49
46
|
});
|
|
50
47
|
}
|
|
51
48
|
formatAndWriteFile() {
|
|
52
|
-
return
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
50
|
const fileName = this.file.getFilePath();
|
|
54
51
|
const content = this.file.getFullText();
|
|
55
52
|
try {
|
|
56
53
|
const formatted = this.formatter ? yield this.formatter.format(content) : content;
|
|
57
54
|
try {
|
|
58
|
-
return
|
|
55
|
+
return writeFile(fileName, formatted);
|
|
59
56
|
}
|
|
60
57
|
catch (writeError) {
|
|
61
58
|
console.error(`Failed to write file [/${fileName}]`, writeError);
|
|
@@ -64,11 +61,10 @@ class FileHandler {
|
|
|
64
61
|
}
|
|
65
62
|
catch (formattingError) {
|
|
66
63
|
console.error("Formatting failed", formattingError);
|
|
67
|
-
yield
|
|
64
|
+
yield writeFile("error.log", (formattingError === null || formattingError === void 0 ? void 0 : formattingError.toString()) || "no error message!");
|
|
68
65
|
process.exit(99);
|
|
69
66
|
}
|
|
70
67
|
});
|
|
71
68
|
}
|
|
72
69
|
}
|
|
73
|
-
exports.FileHandler = FileHandler;
|
|
74
70
|
//# sourceMappingURL=FileHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileHandler.js","sourceRoot":"","sources":["../../src/project/FileHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileHandler.js","sourceRoot":"","sources":["../../src/project/FileHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { writeFile } from \"fs/promises\";\r\n\r\nimport { SourceFile } from \"ts-morph\";\r\n\r\nimport { ImportContainer } from \"../generator/ImportContainer.js\";\r\nimport { EmitModes } from \"../OptionModel.js\";\r\nimport { FileFormatter } from \"./formatter/FileFormatter.js\";\r\n\r\nexport class FileHandler {\r\n constructor(\r\n public readonly path: string,\r\n public readonly fileName: string,\r\n protected readonly file: SourceFile,\r\n protected readonly importContainer: ImportContainer,\r\n protected formatter: FileFormatter | undefined,\r\n public readonly allowTypeChecking: boolean\r\n ) {}\r\n\r\n public getFullFilePath() {\r\n return this.path ? `${this.path}/${this.fileName}` : this.fileName;\r\n }\r\n\r\n public getFile() {\r\n return this.file;\r\n }\r\n\r\n public getImports() {\r\n return this.importContainer;\r\n }\r\n\r\n public async write(emitMode: EmitModes, noOutput = false) {\r\n this.file.addImportDeclarations(this.importContainer.getImportDeclarations());\r\n // add ts-nocheck to beginning of each file\r\n if (!this.allowTypeChecking) {\r\n const stmts = this.file.addStatements((writer) => {\r\n writer.writeLine(\"// @ts-nocheck\");\r\n });\r\n stmts[0].setOrder(0);\r\n }\r\n\r\n if (noOutput) {\r\n return;\r\n }\r\n\r\n switch (emitMode) {\r\n case EmitModes.js:\r\n case EmitModes.js_dts:\r\n return this.file.emit();\r\n case EmitModes.dts:\r\n return this.file.emit({ emitOnlyDtsFiles: true });\r\n case EmitModes.ts:\r\n return this.formatAndWriteFile();\r\n default:\r\n throw new Error(`Emit mode \"${emitMode}\" is invalid!`);\r\n }\r\n }\r\n\r\n private async formatAndWriteFile() {\r\n const fileName = this.file.getFilePath();\r\n const content = this.file.getFullText();\r\n\r\n try {\r\n const formatted = this.formatter ? await this.formatter.format(content) : content;\r\n\r\n try {\r\n return writeFile(fileName, formatted);\r\n } catch (writeError) {\r\n console.error(`Failed to write file [/${fileName}]`, writeError);\r\n process.exit(3);\r\n }\r\n } catch (formattingError) {\r\n console.error(\"Formatting failed\", formattingError);\r\n await writeFile(\"error.log\", formattingError?.toString() || \"no error message!\");\r\n process.exit(99);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { CompilerOptions, SourceFile } from "ts-morph";
|
|
2
|
-
import { DataModel } from "../data-model/DataModel";
|
|
3
|
-
import { NamingHelper } from "../data-model/NamingHelper";
|
|
4
|
-
import { EmitModes } from "../OptionModel";
|
|
5
|
-
import { FileHandler } from "./FileHandler";
|
|
6
|
-
import { FileFormatter } from "./formatter/FileFormatter";
|
|
2
|
+
import { DataModel } from "../data-model/DataModel.js";
|
|
3
|
+
import { NamingHelper } from "../data-model/NamingHelper.js";
|
|
4
|
+
import { EmitModes } from "../OptionModel.js";
|
|
5
|
+
import { FileHandler } from "./FileHandler.js";
|
|
6
|
+
import { FileFormatter } from "./formatter/FileFormatter.js";
|
|
7
7
|
export interface ProjectManagerOptions {
|
|
8
8
|
usePrettier?: boolean;
|
|
9
9
|
tsConfigPath?: string;
|
|
@@ -1,28 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const TsMorphHelper_1 = require("./TsMorphHelper");
|
|
13
|
-
function createProjectManager(outputDir, emitMode, namingHelper, dataModel, options) {
|
|
14
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { mkdirp } from "mkdirp";
|
|
4
|
+
import { Project } from "ts-morph";
|
|
5
|
+
import { firstCharLowerCase } from "xml2js/lib/processors.js";
|
|
6
|
+
import { ImportContainer } from "../generator/ImportContainer.js";
|
|
7
|
+
import { FileHandler } from "./FileHandler.js";
|
|
8
|
+
import { createFormatter } from "./formatter/index.js";
|
|
9
|
+
import { loadTsMorphCompilerOptions } from "./TsMorphHelper.js";
|
|
10
|
+
export function createProjectManager(outputDir, emitMode, namingHelper, dataModel, options) {
|
|
11
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15
12
|
const { usePrettier = false, tsConfigPath = "tsconfig.json" } = options;
|
|
16
|
-
const formatter = usePrettier ? yield
|
|
17
|
-
const compilerOpts = yield
|
|
13
|
+
const formatter = usePrettier ? yield createFormatter(outputDir, usePrettier) : undefined;
|
|
14
|
+
const compilerOpts = yield loadTsMorphCompilerOptions(tsConfigPath, emitMode, outputDir);
|
|
18
15
|
const pm = new ProjectManager(outputDir, emitMode, namingHelper, dataModel, formatter, compilerOpts, Object.assign({ usePrettier,
|
|
19
16
|
tsConfigPath }, options));
|
|
20
17
|
yield pm.init();
|
|
21
18
|
return pm;
|
|
22
19
|
});
|
|
23
20
|
}
|
|
24
|
-
|
|
25
|
-
class ProjectManager {
|
|
21
|
+
export class ProjectManager {
|
|
26
22
|
constructor(outputDir, emitMode, namingHelper, dataModel, formatter, compilerOptions, options) {
|
|
27
23
|
this.outputDir = outputDir;
|
|
28
24
|
this.emitMode = emitMode;
|
|
@@ -31,7 +27,7 @@ class ProjectManager {
|
|
|
31
27
|
this.formatter = formatter;
|
|
32
28
|
this.options = options;
|
|
33
29
|
// Create ts-morph project
|
|
34
|
-
this.project = new
|
|
30
|
+
this.project = new Project({
|
|
35
31
|
// manipulationSettings: this.formatter.getSettings(),
|
|
36
32
|
skipAddingFilesFromTsConfig: true,
|
|
37
33
|
compilerOptions,
|
|
@@ -50,7 +46,7 @@ class ProjectManager {
|
|
|
50
46
|
return this.cachedFiles;
|
|
51
47
|
}
|
|
52
48
|
writeFile(fileHandler) {
|
|
53
|
-
return
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
50
|
if (this.options.noOutput) {
|
|
55
51
|
yield fileHandler.write(this.emitMode, true);
|
|
56
52
|
this.cachedFiles.set(fileHandler.getFullFilePath(), fileHandler.getFile());
|
|
@@ -61,17 +57,15 @@ class ProjectManager {
|
|
|
61
57
|
}
|
|
62
58
|
createFile(name, reservedNames, additionalPath = "", forceTypeChecking = false) {
|
|
63
59
|
const fileName = path.join(this.outputDir, additionalPath, `${name}.ts`);
|
|
64
|
-
const imports = new
|
|
65
|
-
return new
|
|
60
|
+
const imports = new ImportContainer(additionalPath, name, this.dataModel, this.namingHelper.getFileNames(), !!this.options.bundledFileGeneration, reservedNames);
|
|
61
|
+
return new FileHandler(additionalPath, name, this.project.createSourceFile(fileName), imports, this.formatter, forceTypeChecking || !!this.options.allowTypeChecking);
|
|
66
62
|
}
|
|
67
63
|
init() {
|
|
68
|
-
return
|
|
64
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
65
|
if (!this.options.bundledFileGeneration) {
|
|
70
66
|
// ensure folder for each model: we do this at this point for performance reasons
|
|
71
|
-
yield Promise.all(this.dataModel.getModelTypes().map((mt) => (
|
|
67
|
+
yield Promise.all(this.dataModel.getModelTypes().map((mt) => mkdirp(path.join(this.outputDir, mt.folderPath))));
|
|
72
68
|
}
|
|
73
|
-
const typePart = this.emitMode.toUpperCase().replace("_", " & ");
|
|
74
|
-
console.log(`Prepared to emit ${typePart} files.`);
|
|
75
69
|
});
|
|
76
70
|
}
|
|
77
71
|
initModels() {
|
|
@@ -103,7 +97,7 @@ class ProjectManager {
|
|
|
103
97
|
}
|
|
104
98
|
}
|
|
105
99
|
finalizeModels() {
|
|
106
|
-
return
|
|
100
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
107
101
|
if (this.mainModelFile &&
|
|
108
102
|
(this.options.bundledFileGeneration || this.mainModelFile.getFile().getFullText().length)) {
|
|
109
103
|
yield this.writeFile(this.mainModelFile);
|
|
@@ -117,7 +111,7 @@ class ProjectManager {
|
|
|
117
111
|
var _a;
|
|
118
112
|
const asEntityType = model;
|
|
119
113
|
if (asEntityType.qName) {
|
|
120
|
-
collector.push(asEntityType.qName,
|
|
114
|
+
collector.push(asEntityType.qName, firstCharLowerCase(asEntityType.qName));
|
|
121
115
|
}
|
|
122
116
|
if ((_a = asEntityType.id) === null || _a === void 0 ? void 0 : _a.qName) {
|
|
123
117
|
collector.push(asEntityType.id.qName);
|
|
@@ -134,7 +128,7 @@ class ProjectManager {
|
|
|
134
128
|
}
|
|
135
129
|
}
|
|
136
130
|
finalizeQObjects() {
|
|
137
|
-
return
|
|
131
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
138
132
|
if (this.mainQFile && (this.options.bundledFileGeneration || this.mainQFile.getFile().getFullText().length)) {
|
|
139
133
|
yield this.writeFile(this.mainQFile);
|
|
140
134
|
}
|
|
@@ -152,7 +146,7 @@ class ProjectManager {
|
|
|
152
146
|
this.mainServiceFile = this.createFile(mainServiceName, reservedNames);
|
|
153
147
|
}
|
|
154
148
|
finalizeServices() {
|
|
155
|
-
return
|
|
149
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
156
150
|
if (this.mainServiceFile) {
|
|
157
151
|
yield this.writeFile(this.mainServiceFile);
|
|
158
152
|
}
|
|
@@ -193,7 +187,7 @@ class ProjectManager {
|
|
|
193
187
|
return this.createFile(name, reservedNames, folderPath);
|
|
194
188
|
}
|
|
195
189
|
finalizeFile(file) {
|
|
196
|
-
return
|
|
190
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
197
191
|
// write individual files in unbundled mode & if this is not one of the main files on root level
|
|
198
192
|
if (!this.options.bundledFileGeneration &&
|
|
199
193
|
file.path !== "" &&
|
|
@@ -203,5 +197,4 @@ class ProjectManager {
|
|
|
203
197
|
});
|
|
204
198
|
}
|
|
205
199
|
}
|
|
206
|
-
exports.ProjectManager = ProjectManager;
|
|
207
200
|
//# sourceMappingURL=ProjectManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectManager.js","sourceRoot":"","sources":["../../src/project/ProjectManager.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from \"path\";\r\n\r\nimport { ensureDir } from \"fs-extra\";\r\nimport { CompilerOptions, Project, SourceFile } from \"ts-morph\";\r\nimport { firstCharLowerCase } from \"xml2js/lib/processors\";\r\n\r\nimport { DataModel } from \"../data-model/DataModel\";\r\nimport { EntityType } from \"../data-model/DataTypeModel\";\r\nimport { NamingHelper } from \"../data-model/NamingHelper\";\r\nimport { ImportContainer } from \"../generator/ImportContainer\";\r\nimport { EmitModes } from \"../OptionModel\";\r\nimport { FileHandler } from \"./FileHandler\";\r\nimport { createFormatter } from \"./formatter\";\r\nimport { FileFormatter } from \"./formatter/FileFormatter\";\r\nimport { loadTsMorphCompilerOptions } from \"./TsMorphHelper\";\r\n\r\nexport interface ProjectManagerOptions {\r\n usePrettier?: boolean;\r\n tsConfigPath?: string;\r\n bundledFileGeneration?: boolean;\r\n /**\r\n * for testing purposes, turn this on and retrieve all generated files via getCachedFiles\r\n */\r\n noOutput?: boolean;\r\n allowTypeChecking?: boolean;\r\n}\r\n\r\nexport async function createProjectManager(\r\n outputDir: string,\r\n emitMode: EmitModes,\r\n namingHelper: NamingHelper,\r\n dataModel: DataModel,\r\n options: ProjectManagerOptions\r\n): Promise<ProjectManager> {\r\n const { usePrettier = false, tsConfigPath = \"tsconfig.json\" } = options;\r\n const formatter = usePrettier ? await createFormatter(outputDir, usePrettier) : undefined;\r\n\r\n const compilerOpts: CompilerOptions = await loadTsMorphCompilerOptions(tsConfigPath, emitMode, outputDir);\r\n\r\n const pm = new ProjectManager(outputDir, emitMode, namingHelper, dataModel, formatter, compilerOpts, {\r\n usePrettier,\r\n tsConfigPath,\r\n ...options,\r\n });\r\n\r\n await pm.init();\r\n\r\n return pm;\r\n}\r\n\r\nexport class ProjectManager {\r\n private project!: Project;\r\n\r\n private mainServiceFile: FileHandler | undefined;\r\n private mainModelFile: FileHandler | undefined;\r\n private mainQFile: FileHandler | undefined;\r\n\r\n private readonly cachedFiles: Map<string, SourceFile> | undefined;\r\n\r\n constructor(\r\n protected outputDir: string,\r\n protected emitMode: EmitModes,\r\n protected namingHelper: NamingHelper,\r\n protected dataModel: DataModel,\r\n protected formatter: FileFormatter | undefined,\r\n compilerOptions: CompilerOptions | undefined,\r\n protected options: ProjectManagerOptions\r\n ) {\r\n // Create ts-morph project\r\n this.project = new Project({\r\n // manipulationSettings: this.formatter.getSettings(),\r\n skipAddingFilesFromTsConfig: true,\r\n compilerOptions,\r\n });\r\n\r\n if (options.noOutput) {\r\n this.cachedFiles = new Map();\r\n }\r\n }\r\n\r\n public getDataModel() {\r\n return this.dataModel;\r\n }\r\n\r\n /**\r\n * Only filled when noOutput=true\r\n */\r\n public getCachedFiles() {\r\n return this.cachedFiles!;\r\n }\r\n\r\n private async writeFile(fileHandler: FileHandler) {\r\n if (this.options.noOutput) {\r\n await fileHandler.write(this.emitMode, true);\r\n this.cachedFiles!.set(fileHandler.getFullFilePath(), fileHandler.getFile());\r\n\r\n return;\r\n }\r\n\r\n return fileHandler.write(this.emitMode);\r\n }\r\n\r\n private createFile(\r\n name: string,\r\n reservedNames?: Array<string> | undefined,\r\n additionalPath: string = \"\",\r\n forceTypeChecking = false\r\n ): FileHandler {\r\n const fileName = path.join(this.outputDir, additionalPath, `${name}.ts`);\r\n const imports = new ImportContainer(\r\n additionalPath,\r\n name,\r\n this.dataModel,\r\n this.namingHelper.getFileNames(),\r\n !!this.options.bundledFileGeneration,\r\n reservedNames\r\n );\r\n\r\n return new FileHandler(\r\n additionalPath,\r\n name,\r\n this.project.createSourceFile(fileName),\r\n imports,\r\n this.formatter,\r\n forceTypeChecking || !!this.options.allowTypeChecking\r\n );\r\n }\r\n\r\n public async init() {\r\n if (!this.options.bundledFileGeneration) {\r\n // ensure folder for each model: we do this at this point for performance reasons\r\n await Promise.all(\r\n this.dataModel.getModelTypes().map((mt) => ensureDir(path.join(this.outputDir, mt.folderPath)))\r\n );\r\n }\r\n\r\n const typePart = this.emitMode.toUpperCase().replace(\"_\", \" & \");\r\n console.log(`Prepared to emit ${typePart} files.`);\r\n }\r\n\r\n public initModels() {\r\n if (this.options.bundledFileGeneration) {\r\n // collect reserved names, that is names of classes we're going to create => imports must take them into account\r\n const reservedWords = this.dataModel.getModelTypes().reduce<Array<string>>((collector, model) => {\r\n const asEntityType = model as EntityType;\r\n collector.push(model.modelName);\r\n if (asEntityType.editableName) {\r\n collector.push(asEntityType.editableName);\r\n }\r\n if (asEntityType.id?.modelName) {\r\n collector.push(asEntityType.id.modelName);\r\n }\r\n this.dataModel.getAllEntityOperations(model.fqName).forEach((op) => {\r\n if (op.parameters.length) {\r\n collector.push(op.paramsModelName);\r\n }\r\n });\r\n\r\n return collector;\r\n }, []);\r\n this.dataModel.getUnboundOperationTypes().forEach((op) => {\r\n if (op.parameters.length) {\r\n reservedWords.push(op.paramsModelName);\r\n }\r\n });\r\n\r\n this.mainModelFile = this.createFile(this.namingHelper.getFileNames().model, reservedWords);\r\n }\r\n }\r\n\r\n public async finalizeModels() {\r\n if (\r\n this.mainModelFile &&\r\n (this.options.bundledFileGeneration || this.mainModelFile.getFile().getFullText().length)\r\n ) {\r\n await this.writeFile(this.mainModelFile);\r\n }\r\n }\r\n\r\n public initQObjects() {\r\n if (this.options.bundledFileGeneration) {\r\n // collect reserved names, that is names of classes we're going to create => imports must take them into account\r\n const reservedWords = this.dataModel.getModelTypes().reduce<Array<string>>((collector, model) => {\r\n const asEntityType = model as EntityType;\r\n if (asEntityType.qName) {\r\n collector.push(asEntityType.qName, firstCharLowerCase(asEntityType.qName));\r\n }\r\n if (asEntityType.id?.qName) {\r\n collector.push(asEntityType.id.qName);\r\n }\r\n this.dataModel.getAllEntityOperations(model.fqName).forEach((op) => {\r\n collector.push(op.qName);\r\n });\r\n\r\n return collector;\r\n }, []);\r\n this.dataModel.getUnboundOperationTypes().forEach((op) => {\r\n reservedWords.push(op.qName);\r\n });\r\n\r\n this.mainQFile = this.createFile(this.namingHelper.getFileNames().qObject, reservedWords);\r\n }\r\n }\r\n\r\n public async finalizeQObjects() {\r\n if (this.mainQFile && (this.options.bundledFileGeneration || this.mainQFile.getFile().getFullText().length)) {\r\n await this.writeFile(this.mainQFile);\r\n }\r\n }\r\n\r\n public initServices() {\r\n const mainServiceName = this.namingHelper.getMainServiceName();\r\n const reservedNames = [mainServiceName];\r\n\r\n if (this.options.bundledFileGeneration) {\r\n [...this.dataModel.getEntityTypes(), ...this.dataModel.getComplexTypes()].reduce((collector, model) => {\r\n collector.push(model.serviceName, model.serviceCollectionName);\r\n return collector;\r\n }, reservedNames);\r\n }\r\n\r\n this.mainServiceFile = this.createFile(mainServiceName, reservedNames);\r\n }\r\n\r\n public async finalizeServices() {\r\n if (this.mainServiceFile) {\r\n await this.writeFile(this.mainServiceFile);\r\n }\r\n }\r\n\r\n public getMainServiceFile() {\r\n return this.mainServiceFile!;\r\n }\r\n\r\n public createOrGetMainModelFile(reservedNames?: Array<string>) {\r\n if (!this.mainModelFile) {\r\n this.mainModelFile = this.createFile(this.namingHelper.getFileNames().model, reservedNames, \"\", true);\r\n }\r\n return this.mainModelFile;\r\n }\r\n\r\n public createOrGetMainQObjectFile(reservedNames?: Array<string>) {\r\n if (!this.mainQFile) {\r\n this.mainQFile = this.createFile(this.namingHelper.getFileNames().qObject, reservedNames);\r\n }\r\n return this.mainQFile;\r\n }\r\n\r\n public createOrGetModelFile(folderPath: string, name: string, reservedNames?: Array<string> | undefined) {\r\n if (this.mainModelFile) {\r\n return this.mainModelFile;\r\n }\r\n\r\n // model files always allow for type checking\r\n return this.createFile(name, reservedNames, folderPath, true);\r\n }\r\n public createOrGetQObjectFile(folderPath: string, name: string, reservedNames?: Array<string> | undefined) {\r\n if (this.mainQFile) {\r\n return this.mainQFile;\r\n }\r\n\r\n return this.createFile(name, reservedNames, folderPath);\r\n }\r\n public createOrGetServiceFile(folderPath: string, name: string, reservedNames?: Array<string> | undefined) {\r\n if (this.options.bundledFileGeneration) {\r\n return this.mainServiceFile!;\r\n }\r\n\r\n return this.createFile(name, reservedNames, folderPath);\r\n }\r\n\r\n public async finalizeFile(file: FileHandler) {\r\n // write individual files in unbundled mode & if this is not one of the main files on root level\r\n if (\r\n !this.options.bundledFileGeneration &&\r\n file.path !== \"\" &&\r\n !Object.values(this.namingHelper.getFileNames()).includes(file.fileName)\r\n ) {\r\n await this.writeFile(file);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ProjectManager.js","sourceRoot":"","sources":["../../src/project/ProjectManager.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from \"path\";\r\nimport { mkdirp } from \"mkdirp\";\r\nimport { CompilerOptions, Project, SourceFile } from \"ts-morph\";\r\nimport { firstCharLowerCase } from \"xml2js/lib/processors.js\";\r\nimport { DataModel } from \"../data-model/DataModel.js\";\r\nimport { EntityType } from \"../data-model/DataTypeModel.js\";\r\nimport { NamingHelper } from \"../data-model/NamingHelper.js\";\r\nimport { ImportContainer } from \"../generator/ImportContainer.js\";\r\nimport { EmitModes } from \"../OptionModel.js\";\r\nimport { FileHandler } from \"./FileHandler.js\";\r\nimport { FileFormatter } from \"./formatter/FileFormatter.js\";\r\nimport { createFormatter } from \"./formatter/index.js\";\r\nimport { loadTsMorphCompilerOptions } from \"./TsMorphHelper.js\";\r\n\r\nexport interface ProjectManagerOptions {\r\n usePrettier?: boolean;\r\n tsConfigPath?: string;\r\n bundledFileGeneration?: boolean;\r\n /**\r\n * for testing purposes, turn this on and retrieve all generated files via getCachedFiles\r\n */\r\n noOutput?: boolean;\r\n allowTypeChecking?: boolean;\r\n}\r\n\r\nexport async function createProjectManager(\r\n outputDir: string,\r\n emitMode: EmitModes,\r\n namingHelper: NamingHelper,\r\n dataModel: DataModel,\r\n options: ProjectManagerOptions,\r\n): Promise<ProjectManager> {\r\n const { usePrettier = false, tsConfigPath = \"tsconfig.json\" } = options;\r\n const formatter = usePrettier ? await createFormatter(outputDir, usePrettier) : undefined;\r\n\r\n const compilerOpts: CompilerOptions = await loadTsMorphCompilerOptions(tsConfigPath, emitMode, outputDir);\r\n\r\n const pm = new ProjectManager(outputDir, emitMode, namingHelper, dataModel, formatter, compilerOpts, {\r\n usePrettier,\r\n tsConfigPath,\r\n ...options,\r\n });\r\n\r\n await pm.init();\r\n\r\n return pm;\r\n}\r\n\r\nexport class ProjectManager {\r\n private project!: Project;\r\n\r\n private mainServiceFile: FileHandler | undefined;\r\n private mainModelFile: FileHandler | undefined;\r\n private mainQFile: FileHandler | undefined;\r\n\r\n private readonly cachedFiles: Map<string, SourceFile> | undefined;\r\n\r\n constructor(\r\n protected outputDir: string,\r\n protected emitMode: EmitModes,\r\n protected namingHelper: NamingHelper,\r\n protected dataModel: DataModel,\r\n protected formatter: FileFormatter | undefined,\r\n compilerOptions: CompilerOptions | undefined,\r\n protected options: ProjectManagerOptions,\r\n ) {\r\n // Create ts-morph project\r\n this.project = new Project({\r\n // manipulationSettings: this.formatter.getSettings(),\r\n skipAddingFilesFromTsConfig: true,\r\n compilerOptions,\r\n });\r\n\r\n if (options.noOutput) {\r\n this.cachedFiles = new Map();\r\n }\r\n }\r\n\r\n public getDataModel() {\r\n return this.dataModel;\r\n }\r\n\r\n /**\r\n * Only filled when noOutput=true\r\n */\r\n public getCachedFiles() {\r\n return this.cachedFiles!;\r\n }\r\n\r\n private async writeFile(fileHandler: FileHandler) {\r\n if (this.options.noOutput) {\r\n await fileHandler.write(this.emitMode, true);\r\n this.cachedFiles!.set(fileHandler.getFullFilePath(), fileHandler.getFile());\r\n\r\n return;\r\n }\r\n\r\n return fileHandler.write(this.emitMode);\r\n }\r\n\r\n private createFile(\r\n name: string,\r\n reservedNames?: Array<string> | undefined,\r\n additionalPath: string = \"\",\r\n forceTypeChecking = false,\r\n ): FileHandler {\r\n const fileName = path.join(this.outputDir, additionalPath, `${name}.ts`);\r\n const imports = new ImportContainer(\r\n additionalPath,\r\n name,\r\n this.dataModel,\r\n this.namingHelper.getFileNames(),\r\n !!this.options.bundledFileGeneration,\r\n reservedNames,\r\n );\r\n\r\n return new FileHandler(\r\n additionalPath,\r\n name,\r\n this.project.createSourceFile(fileName),\r\n imports,\r\n this.formatter,\r\n forceTypeChecking || !!this.options.allowTypeChecking,\r\n );\r\n }\r\n\r\n public async init() {\r\n if (!this.options.bundledFileGeneration) {\r\n // ensure folder for each model: we do this at this point for performance reasons\r\n await Promise.all(this.dataModel.getModelTypes().map((mt) => mkdirp(path.join(this.outputDir, mt.folderPath))));\r\n }\r\n }\r\n\r\n public initModels() {\r\n if (this.options.bundledFileGeneration) {\r\n // collect reserved names, that is names of classes we're going to create => imports must take them into account\r\n const reservedWords = this.dataModel.getModelTypes().reduce<Array<string>>((collector, model) => {\r\n const asEntityType = model as EntityType;\r\n collector.push(model.modelName);\r\n if (asEntityType.editableName) {\r\n collector.push(asEntityType.editableName);\r\n }\r\n if (asEntityType.id?.modelName) {\r\n collector.push(asEntityType.id.modelName);\r\n }\r\n this.dataModel.getAllEntityOperations(model.fqName).forEach((op) => {\r\n if (op.parameters.length) {\r\n collector.push(op.paramsModelName);\r\n }\r\n });\r\n\r\n return collector;\r\n }, []);\r\n this.dataModel.getUnboundOperationTypes().forEach((op) => {\r\n if (op.parameters.length) {\r\n reservedWords.push(op.paramsModelName);\r\n }\r\n });\r\n\r\n this.mainModelFile = this.createFile(this.namingHelper.getFileNames().model, reservedWords);\r\n }\r\n }\r\n\r\n public async finalizeModels() {\r\n if (\r\n this.mainModelFile &&\r\n (this.options.bundledFileGeneration || this.mainModelFile.getFile().getFullText().length)\r\n ) {\r\n await this.writeFile(this.mainModelFile);\r\n }\r\n }\r\n\r\n public initQObjects() {\r\n if (this.options.bundledFileGeneration) {\r\n // collect reserved names, that is names of classes we're going to create => imports must take them into account\r\n const reservedWords = this.dataModel.getModelTypes().reduce<Array<string>>((collector, model) => {\r\n const asEntityType = model as EntityType;\r\n if (asEntityType.qName) {\r\n collector.push(asEntityType.qName, firstCharLowerCase(asEntityType.qName));\r\n }\r\n if (asEntityType.id?.qName) {\r\n collector.push(asEntityType.id.qName);\r\n }\r\n this.dataModel.getAllEntityOperations(model.fqName).forEach((op) => {\r\n collector.push(op.qName);\r\n });\r\n\r\n return collector;\r\n }, []);\r\n this.dataModel.getUnboundOperationTypes().forEach((op) => {\r\n reservedWords.push(op.qName);\r\n });\r\n\r\n this.mainQFile = this.createFile(this.namingHelper.getFileNames().qObject, reservedWords);\r\n }\r\n }\r\n\r\n public async finalizeQObjects() {\r\n if (this.mainQFile && (this.options.bundledFileGeneration || this.mainQFile.getFile().getFullText().length)) {\r\n await this.writeFile(this.mainQFile);\r\n }\r\n }\r\n\r\n public initServices() {\r\n const mainServiceName = this.namingHelper.getMainServiceName();\r\n const reservedNames = [mainServiceName];\r\n\r\n if (this.options.bundledFileGeneration) {\r\n [...this.dataModel.getEntityTypes(), ...this.dataModel.getComplexTypes()].reduce((collector, model) => {\r\n collector.push(model.serviceName, model.serviceCollectionName);\r\n return collector;\r\n }, reservedNames);\r\n }\r\n\r\n this.mainServiceFile = this.createFile(mainServiceName, reservedNames);\r\n }\r\n\r\n public async finalizeServices() {\r\n if (this.mainServiceFile) {\r\n await this.writeFile(this.mainServiceFile);\r\n }\r\n }\r\n\r\n public getMainServiceFile() {\r\n return this.mainServiceFile!;\r\n }\r\n\r\n public createOrGetMainModelFile(reservedNames?: Array<string>) {\r\n if (!this.mainModelFile) {\r\n this.mainModelFile = this.createFile(this.namingHelper.getFileNames().model, reservedNames, \"\", true);\r\n }\r\n return this.mainModelFile;\r\n }\r\n\r\n public createOrGetMainQObjectFile(reservedNames?: Array<string>) {\r\n if (!this.mainQFile) {\r\n this.mainQFile = this.createFile(this.namingHelper.getFileNames().qObject, reservedNames);\r\n }\r\n return this.mainQFile;\r\n }\r\n\r\n public createOrGetModelFile(folderPath: string, name: string, reservedNames?: Array<string> | undefined) {\r\n if (this.mainModelFile) {\r\n return this.mainModelFile;\r\n }\r\n\r\n // model files always allow for type checking\r\n return this.createFile(name, reservedNames, folderPath, true);\r\n }\r\n public createOrGetQObjectFile(folderPath: string, name: string, reservedNames?: Array<string> | undefined) {\r\n if (this.mainQFile) {\r\n return this.mainQFile;\r\n }\r\n\r\n return this.createFile(name, reservedNames, folderPath);\r\n }\r\n public createOrGetServiceFile(folderPath: string, name: string, reservedNames?: Array<string> | undefined) {\r\n if (this.options.bundledFileGeneration) {\r\n return this.mainServiceFile!;\r\n }\r\n\r\n return this.createFile(name, reservedNames, folderPath);\r\n }\r\n\r\n public async finalizeFile(file: FileHandler) {\r\n // write individual files in unbundled mode & if this is not one of the main files on root level\r\n if (\r\n !this.options.bundledFileGeneration &&\r\n file.path !== \"\" &&\r\n !Object.values(this.namingHelper.getFileNames()).includes(file.fileName)\r\n ) {\r\n await this.writeFile(file);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const tsconfig_loader_1 = tslib_1.__importDefault(require("tsconfig-loader"));
|
|
7
|
-
const typescript_1 = tslib_1.__importDefault(require("typescript"));
|
|
8
|
-
const OptionModel_1 = require("../OptionModel");
|
|
1
|
+
import { __awaiter, __rest } from "tslib";
|
|
2
|
+
import { NewLineKind } from "@ts-morph/common";
|
|
3
|
+
import load from "tsconfig-loader";
|
|
4
|
+
import ts from "typescript";
|
|
5
|
+
import { EmitModes } from "../OptionModel.js";
|
|
9
6
|
/**
|
|
10
7
|
* Loads the TS configuration from the specified path.
|
|
11
8
|
* Then maps the appropriate options to ts-morph compiler options.
|
|
@@ -14,30 +11,32 @@ const OptionModel_1 = require("../OptionModel");
|
|
|
14
11
|
* @param emitMode the used emit mode
|
|
15
12
|
* @param outputDir the used output dir
|
|
16
13
|
*/
|
|
17
|
-
function loadTsMorphCompilerOptions(tsConfigPath, emitMode, outputDir) {
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
export function loadTsMorphCompilerOptions(tsConfigPath, emitMode, outputDir) {
|
|
15
|
+
var _a;
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
const generateDeclarations = EmitModes.js_dts === emitMode || EmitModes.dts === emitMode;
|
|
20
18
|
// load config file
|
|
21
19
|
// NOTE: not async...
|
|
22
|
-
|
|
23
|
-
const
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
const doLoad = (_a = load === null || load === void 0 ? void 0 : load.default) !== null && _a !== void 0 ? _a : load;
|
|
22
|
+
const conf = doLoad({ filename: tsConfigPath });
|
|
23
|
+
const _b = (conf === null || conf === void 0 ? void 0 : conf.tsConfig.compilerOptions) || {}, {
|
|
24
24
|
// ignored props
|
|
25
25
|
noEmit, // we always want to emit
|
|
26
26
|
importsNotUsedAsValues, // type is missing
|
|
27
27
|
jsx, plugins,
|
|
28
28
|
// mapped props
|
|
29
|
-
moduleResolution, lib, module, newLine, target, rootDir, rootDirs } =
|
|
29
|
+
moduleResolution, lib, module, newLine, target, rootDir, rootDirs } = _b, passThrough = __rest(_b, ["noEmit", "importsNotUsedAsValues", "jsx", "plugins", "moduleResolution", "lib", "module", "newLine", "target", "rootDir", "rootDirs"]);
|
|
30
30
|
const compilerOpts = Object.assign(Object.assign({}, passThrough), { outDir: outputDir, declaration: generateDeclarations, moduleResolution: getModuleResolutionKind(moduleResolution), module: getModuleKind(module), target: getTarget(target) });
|
|
31
31
|
if (lib) {
|
|
32
32
|
compilerOpts.lib = lib;
|
|
33
33
|
}
|
|
34
34
|
if (newLine) {
|
|
35
|
-
compilerOpts.newLine = (newLine === null || newLine === void 0 ? void 0 : newLine.toLowerCase()) === "lf" ?
|
|
35
|
+
compilerOpts.newLine = (newLine === null || newLine === void 0 ? void 0 : newLine.toLowerCase()) === "lf" ? NewLineKind.LineFeed : NewLineKind.CarriageReturnLineFeed;
|
|
36
36
|
}
|
|
37
37
|
return compilerOpts;
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
exports.loadTsMorphCompilerOptions = loadTsMorphCompilerOptions;
|
|
41
40
|
/**
|
|
42
41
|
* Maps to lower case.
|
|
43
42
|
* Also translates "node" to "nodejs".
|
|
@@ -50,17 +49,17 @@ function getModuleResolutionKind(moduleResolution) {
|
|
|
50
49
|
? "nodejs"
|
|
51
50
|
: moduleResolution.toLowerCase()
|
|
52
51
|
: undefined;
|
|
53
|
-
const matchedKey = Object.keys(
|
|
54
|
-
return matchedKey ?
|
|
52
|
+
const matchedKey = Object.keys(ts.ModuleResolutionKind).find((mk) => mk.toLowerCase() === modRes);
|
|
53
|
+
return matchedKey ? ts.ModuleResolutionKind[matchedKey] : undefined;
|
|
55
54
|
}
|
|
56
55
|
function getModuleKind(module) {
|
|
57
56
|
const mod = typeof module === "string" ? module.toLowerCase() : undefined;
|
|
58
|
-
const matchedKey = Object.keys(
|
|
59
|
-
return matchedKey ?
|
|
57
|
+
const matchedKey = Object.keys(ts.ModuleKind).find((mk) => mk.toLowerCase() === mod);
|
|
58
|
+
return matchedKey ? ts.ModuleKind[matchedKey] : undefined;
|
|
60
59
|
}
|
|
61
60
|
function getTarget(target) {
|
|
62
61
|
const t = typeof target === "string" ? target.toLowerCase() : undefined;
|
|
63
|
-
const matchedKey = Object.keys(
|
|
64
|
-
return matchedKey ?
|
|
62
|
+
const matchedKey = Object.keys(ts.ScriptTarget).find((st) => st.toLowerCase() === t);
|
|
63
|
+
return matchedKey ? ts.ScriptTarget[matchedKey] : undefined;
|
|
65
64
|
}
|
|
66
65
|
//# sourceMappingURL=TsMorphHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TsMorphHelper.js","sourceRoot":"","sources":["../../src/project/TsMorphHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TsMorphHelper.js","sourceRoot":"","sources":["../../src/project/TsMorphHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import { NewLineKind } from \"@ts-morph/common\";\r\nimport { CompilerOptions, ModuleKind, ModuleResolutionKind, ScriptTarget } from \"ts-morph\";\r\nimport load, { TsConfigLoaderParams, TsConfigLoaderResult } from \"tsconfig-loader\";\r\nimport ts from \"typescript\";\r\nimport { EmitModes } from \"../OptionModel.js\";\r\n\r\n/**\r\n * Loads the TS configuration from the specified path.\r\n * Then maps the appropriate options to ts-morph compiler options.\r\n *\r\n * @param tsConfigPath path to tsconfig.json\r\n * @param emitMode the used emit mode\r\n * @param outputDir the used output dir\r\n */\r\nexport async function loadTsMorphCompilerOptions(tsConfigPath: string, emitMode: EmitModes, outputDir: string) {\r\n const generateDeclarations = EmitModes.js_dts === emitMode || EmitModes.dts === emitMode;\r\n\r\n // load config file\r\n // NOTE: not async...\r\n // @ts-ignore\r\n const doLoad: ({ filename, cwd }?: TsConfigLoaderParams) => TsConfigLoaderResult | undefined = load?.default ?? load;\r\n const conf = doLoad({ filename: tsConfigPath });\r\n\r\n const {\r\n // ignored props\r\n noEmit, // we always want to emit\r\n importsNotUsedAsValues, // type is missing\r\n jsx,\r\n plugins,\r\n // mapped props\r\n moduleResolution,\r\n lib,\r\n module,\r\n newLine,\r\n target,\r\n rootDir,\r\n rootDirs,\r\n ...passThrough\r\n } = conf?.tsConfig.compilerOptions || {};\r\n\r\n const compilerOpts: CompilerOptions = {\r\n ...passThrough,\r\n outDir: outputDir,\r\n declaration: generateDeclarations,\r\n moduleResolution: getModuleResolutionKind(moduleResolution),\r\n module: getModuleKind(module),\r\n target: getTarget(target),\r\n };\r\n if (lib) {\r\n compilerOpts.lib = lib as string[];\r\n }\r\n if (newLine) {\r\n compilerOpts.newLine = newLine?.toLowerCase() === \"lf\" ? NewLineKind.LineFeed : NewLineKind.CarriageReturnLineFeed;\r\n }\r\n\r\n return compilerOpts;\r\n}\r\n\r\n/**\r\n * Maps to lower case.\r\n * Also translates \"node\" to \"nodejs\".\r\n *\r\n * @param moduleResolution\r\n */\r\nfunction getModuleResolutionKind(\r\n moduleResolution: string | undefined | Record<string, any>,\r\n): ModuleResolutionKind | undefined {\r\n const modRes =\r\n typeof moduleResolution === \"string\"\r\n ? moduleResolution.toLowerCase() === \"node\"\r\n ? \"nodejs\"\r\n : moduleResolution.toLowerCase()\r\n : undefined;\r\n const matchedKey = Object.keys(ts.ModuleResolutionKind).find(\r\n (mk): mk is keyof typeof ModuleResolutionKind => mk.toLowerCase() === modRes,\r\n );\r\n return matchedKey ? (ts.ModuleResolutionKind[matchedKey] as ModuleResolutionKind) : undefined;\r\n}\r\n\r\nfunction getModuleKind(module: string | undefined | Record<string, any>): ModuleKind | undefined {\r\n const mod = typeof module === \"string\" ? module.toLowerCase() : undefined;\r\n const matchedKey = Object.keys(ts.ModuleKind).find((mk): mk is keyof typeof ModuleKind => mk.toLowerCase() === mod);\r\n return matchedKey ? (ts.ModuleKind[matchedKey] as ModuleKind) : undefined;\r\n}\r\n\r\nfunction getTarget(target: string | undefined | Record<string, any>): ScriptTarget | undefined {\r\n const t = typeof target === \"string\" ? target.toLowerCase() : undefined;\r\n const matchedKey = Object.keys(ts.ScriptTarget).find((st): st is keyof typeof ScriptTarget => st.toLowerCase() === t);\r\n return matchedKey ? (ts.ScriptTarget[matchedKey] as ScriptTarget) : undefined;\r\n}\r\n"]}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BaseFormatter = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* Abstract formatter.
|
|
6
3
|
*
|
|
@@ -8,7 +5,7 @@ exports.BaseFormatter = void 0;
|
|
|
8
5
|
* @abstract
|
|
9
6
|
* @class Formatter
|
|
10
7
|
*/
|
|
11
|
-
class BaseFormatter {
|
|
8
|
+
export class BaseFormatter {
|
|
12
9
|
/**
|
|
13
10
|
* Default constructor
|
|
14
11
|
* @param {string} output Path of the output file
|
|
@@ -27,5 +24,4 @@ class BaseFormatter {
|
|
|
27
24
|
return this.settings;
|
|
28
25
|
}
|
|
29
26
|
}
|
|
30
|
-
exports.BaseFormatter = BaseFormatter;
|
|
31
27
|
//# sourceMappingURL=BaseFormatter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseFormatter.js","sourceRoot":"","sources":["../../../src/project/formatter/BaseFormatter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseFormatter.js","sourceRoot":"","sources":["../../../src/project/formatter/BaseFormatter.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,MAAM,OAAgB,aAAa;IAmBjC;;;;OAIG;IACH,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAWD;;;;;OAKG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CAGF","sourcesContent":["import { ManipulationSettings } from \"ts-morph\";\r\n\r\nimport { FileFormatter } from \"./FileFormatter.js\";\r\n\r\n/**\r\n * Abstract formatter.\r\n *\r\n * @export\r\n * @abstract\r\n * @class Formatter\r\n */\r\nexport abstract class BaseFormatter implements FileFormatter {\r\n /**\r\n * Path of the output file.\r\n *\r\n * @protected\r\n * @type {string}\r\n * @memberof Formatter\r\n */\r\n protected output: string;\r\n\r\n /**\r\n * Initialized ts-morph manipulation settings for project creation.\r\n *\r\n * @protected\r\n * @type {Partial<ManipulationSettings>}\r\n * @memberof Formatter\r\n */\r\n protected settings!: Partial<ManipulationSettings>;\r\n\r\n /**\r\n * Default constructor\r\n * @param {string} output Path of the output file\r\n * @memberof Formatter\r\n */\r\n constructor(output: string) {\r\n this.output = output;\r\n }\r\n\r\n /**\r\n * Initializes the formatter.\r\n *\r\n * @abstract\r\n * @returns {Promise<BaseFormatter>} Initialized formatter\r\n * @memberof Formatter\r\n */\r\n public abstract init(): Promise<BaseFormatter>;\r\n\r\n /**\r\n * Returns initialized ts-morph manipuation settings.\r\n *\r\n * @returns {Promise<Partial<ManipulationSettings>>} ts-morph manipulation settings\r\n * @memberof Formatter\r\n */\r\n public getSettings(): Partial<ManipulationSettings> {\r\n return this.settings;\r\n }\r\n\r\n public abstract format(source: string): Promise<string>;\r\n}\r\n"]}
|