@odata2ts/odata2ts 0.23.1 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/lib/FactoryFunctionModel.d.ts +13 -13
  3. package/lib/FactoryFunctionModel.js +2 -2
  4. package/lib/FactoryFunctionModel.js.map +1 -1
  5. package/lib/NamingModel.d.ts +182 -182
  6. package/lib/NamingModel.js +11 -11
  7. package/lib/NamingModel.js.map +1 -1
  8. package/lib/OptionModel.d.ts +228 -223
  9. package/lib/OptionModel.js +23 -23
  10. package/lib/OptionModel.js.map +1 -1
  11. package/lib/app.d.ts +8 -8
  12. package/lib/app.js +67 -63
  13. package/lib/app.js.map +1 -1
  14. package/lib/cli.d.ts +3 -3
  15. package/lib/cli.js +153 -153
  16. package/lib/data-model/DataModel.d.ts +88 -85
  17. package/lib/data-model/DataModel.js +141 -134
  18. package/lib/data-model/DataModel.js.map +1 -1
  19. package/lib/data-model/DataModelDigestion.d.ts +48 -44
  20. package/lib/data-model/DataModelDigestion.js +299 -274
  21. package/lib/data-model/DataModelDigestion.js.map +1 -1
  22. package/lib/data-model/DataModelDigestionV2.d.ts +10 -10
  23. package/lib/data-model/DataModelDigestionV2.js +210 -200
  24. package/lib/data-model/DataModelDigestionV2.js.map +1 -1
  25. package/lib/data-model/DataModelDigestionV4.d.ts +3 -3
  26. package/lib/data-model/DataModelDigestionV4.js +197 -195
  27. package/lib/data-model/DataModelDigestionV4.js.map +1 -1
  28. package/lib/data-model/DataTypeModel.d.ts +102 -102
  29. package/lib/data-model/DataTypeModel.js +8 -8
  30. package/lib/data-model/DataTypeModel.js.map +1 -1
  31. package/lib/data-model/NamingHelper.d.ts +57 -55
  32. package/lib/data-model/NamingHelper.js +231 -214
  33. package/lib/data-model/NamingHelper.js.map +1 -1
  34. package/lib/data-model/ServiceConfigHelper.d.ts +21 -21
  35. package/lib/data-model/ServiceConfigHelper.js +113 -113
  36. package/lib/data-model/edmx/ODataEdmxModelBase.d.ts +92 -80
  37. package/lib/data-model/edmx/ODataEdmxModelBase.js +2 -2
  38. package/lib/data-model/edmx/ODataEdmxModelBase.js.map +1 -1
  39. package/lib/data-model/edmx/ODataEdmxModelV3.d.ts +63 -63
  40. package/lib/data-model/edmx/ODataEdmxModelV3.js +2 -2
  41. package/lib/data-model/edmx/ODataEdmxModelV4.d.ts +67 -67
  42. package/lib/data-model/edmx/ODataEdmxModelV4.js +2 -2
  43. package/lib/defaultConfig.d.ts +9 -9
  44. package/lib/defaultConfig.js +165 -164
  45. package/lib/defaultConfig.js.map +1 -1
  46. package/lib/evaluateConfig.d.ts +25 -25
  47. package/lib/evaluateConfig.js +82 -82
  48. package/lib/generator/ImportContainer.d.ts +16 -16
  49. package/lib/generator/ImportContainer.js +91 -91
  50. package/lib/generator/ModelGenerator.d.ts +2 -2
  51. package/lib/generator/ModelGenerator.js +211 -183
  52. package/lib/generator/ModelGenerator.js.map +1 -1
  53. package/lib/generator/QueryObjectGenerator.d.ts +2 -2
  54. package/lib/generator/QueryObjectGenerator.js +239 -239
  55. package/lib/generator/ServiceGenerator.d.ts +8 -8
  56. package/lib/generator/ServiceGenerator.js +422 -422
  57. package/lib/generator/index.d.ts +3 -3
  58. package/lib/generator/index.js +9 -9
  59. package/lib/index.d.ts +3 -3
  60. package/lib/index.js +6 -6
  61. package/lib/project/ProjectManager.d.ts +30 -30
  62. package/lib/project/ProjectManager.js +177 -175
  63. package/lib/project/ProjectManager.js.map +1 -1
  64. package/lib/project/formatter/BaseFormatter.d.ts +49 -49
  65. package/lib/project/formatter/BaseFormatter.js +30 -30
  66. package/lib/project/formatter/FileFormatter.d.ts +16 -16
  67. package/lib/project/formatter/FileFormatter.js +2 -2
  68. package/lib/project/formatter/NoopFormatter.d.ts +29 -29
  69. package/lib/project/formatter/NoopFormatter.js +42 -42
  70. package/lib/project/formatter/PrettierFormatter.d.ts +46 -46
  71. package/lib/project/formatter/PrettierFormatter.js +92 -92
  72. package/lib/project/formatter/index.d.ts +2 -2
  73. package/lib/project/formatter/index.js +14 -14
  74. package/lib/project/logger/logFilePath.d.ts +1 -1
  75. package/lib/project/logger/logFilePath.js +12 -12
  76. package/lib/run-cli.d.ts +2 -2
  77. package/lib/run-cli.js +6 -6
  78. package/package.json +27 -28
@@ -1,3 +1,3 @@
1
- export { generateModels } from "./ModelGenerator";
2
- export { generateQueryObjects } from "./QueryObjectGenerator";
3
- export { generateServices } from "./ServiceGenerator";
1
+ export { generateModels } from "./ModelGenerator";
2
+ export { generateQueryObjects } from "./QueryObjectGenerator";
3
+ export { generateServices } from "./ServiceGenerator";
@@ -1,10 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateServices = exports.generateQueryObjects = exports.generateModels = void 0;
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
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateServices = exports.generateQueryObjects = exports.generateModels = void 0;
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; } });
10
10
  //# sourceMappingURL=index.js.map
package/lib/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./OptionModel";
2
- export * from "./NamingModel";
3
- export * from "./defaultConfig";
1
+ export * from "./OptionModel";
2
+ export * from "./NamingModel";
3
+ export * from "./defaultConfig";
package/lib/index.js CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./OptionModel"), exports);
5
- tslib_1.__exportStar(require("./NamingModel"), exports);
6
- tslib_1.__exportStar(require("./defaultConfig"), exports);
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./OptionModel"), exports);
5
+ tslib_1.__exportStar(require("./NamingModel"), exports);
6
+ tslib_1.__exportStar(require("./defaultConfig"), exports);
7
7
  //# sourceMappingURL=index.js.map
@@ -1,30 +1,30 @@
1
- import { CompilerOptions, SourceFile } from "ts-morph";
2
- import { ProjectFiles } from "../data-model/DataModel";
3
- import { EmitModes } from "../OptionModel";
4
- import { FileFormatter } from "./formatter/FileFormatter";
5
- export declare function createProjectManager(projectFiles: ProjectFiles, outputDir: string, emitMode: EmitModes, usePrettier: boolean, tsConfigPath?: string): Promise<ProjectManager>;
6
- export declare class ProjectManager {
7
- private projectFiles;
8
- private outputDir;
9
- private emitMode;
10
- private formatter;
11
- private project;
12
- private files;
13
- private serviceFiles;
14
- constructor(projectFiles: ProjectFiles, outputDir: string, emitMode: EmitModes, formatter: FileFormatter, compilerOptions: CompilerOptions | undefined);
15
- private createFile;
16
- createModelFile(): Promise<SourceFile>;
17
- getModelFile(): SourceFile;
18
- createQObjectFile(): Promise<SourceFile>;
19
- getQObjectFile(): SourceFile;
20
- createMainServiceFile(): Promise<SourceFile>;
21
- getMainServiceFile(): SourceFile;
22
- getServiceDir(): string;
23
- cleanServiceDir(): Promise<void>;
24
- createServiceFile(name: string): Promise<SourceFile>;
25
- getServiceFiles(): SourceFile[];
26
- writeFiles(): Promise<void>;
27
- private emitJsFiles;
28
- private emitTsFiles;
29
- private formatAndWriteFile;
30
- }
1
+ import { CompilerOptions, SourceFile } from "ts-morph";
2
+ import { ProjectFiles } from "../data-model/DataModel";
3
+ import { EmitModes } from "../OptionModel";
4
+ import { FileFormatter } from "./formatter/FileFormatter";
5
+ export declare function createProjectManager(projectFiles: ProjectFiles, outputDir: string, emitMode: EmitModes, usePrettier: boolean, tsConfigPath?: string): Promise<ProjectManager>;
6
+ export declare class ProjectManager {
7
+ private projectFiles;
8
+ private outputDir;
9
+ private emitMode;
10
+ private formatter;
11
+ private project;
12
+ private files;
13
+ private serviceFiles;
14
+ constructor(projectFiles: ProjectFiles, outputDir: string, emitMode: EmitModes, formatter: FileFormatter, compilerOptions: CompilerOptions | undefined);
15
+ private createFile;
16
+ createModelFile(): Promise<SourceFile>;
17
+ getModelFile(): SourceFile;
18
+ createQObjectFile(): Promise<SourceFile>;
19
+ getQObjectFile(): SourceFile;
20
+ createMainServiceFile(): Promise<SourceFile>;
21
+ getMainServiceFile(): SourceFile;
22
+ getServiceDir(): string;
23
+ cleanServiceDir(): Promise<void>;
24
+ createServiceFile(name: string): Promise<SourceFile>;
25
+ getServiceFiles(): SourceFile[];
26
+ writeFiles(): Promise<void>;
27
+ private emitJsFiles;
28
+ private emitTsFiles;
29
+ private formatAndWriteFile;
30
+ }
@@ -1,176 +1,178 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProjectManager = exports.createProjectManager = void 0;
4
- const tslib_1 = require("tslib");
5
- const path = tslib_1.__importStar(require("path"));
6
- const fs_extra_1 = require("fs-extra");
7
- const ts_morph_1 = require("ts-morph");
8
- const tsconfig_loader_1 = tslib_1.__importDefault(require("tsconfig-loader"));
9
- const OptionModel_1 = require("../OptionModel");
10
- const formatter_1 = require("./formatter");
11
- function createProjectManager(projectFiles, outputDir, emitMode, usePrettier, tsConfigPath = "tsconfig.json") {
12
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
13
- const generateDeclarations = [OptionModel_1.EmitModes.js_dts, OptionModel_1.EmitModes.dts].includes(emitMode);
14
- const conf = (0, tsconfig_loader_1.default)({ filename: tsConfigPath });
15
- const formatter = yield (0, formatter_1.createFormatter)(outputDir, usePrettier);
16
- const _a = (conf === null || conf === void 0 ? void 0 : conf.tsConfig.compilerOptions) || {}, {
17
- // ignored props
18
- noEmit, // we always want to emit
19
- importsNotUsedAsValues, // type is missing
20
- jsx, plugins,
21
- // mapped props
22
- moduleResolution, lib, module, newLine, target } = _a, passThrough = tslib_1.__rest(_a, ["noEmit", "importsNotUsedAsValues", "jsx", "plugins", "moduleResolution", "lib", "module", "newLine", "target"]);
23
- const compilerOpts = Object.assign(Object.assign({}, passThrough), { outDir: outputDir, declaration: generateDeclarations, moduleResolution: getModuleResolutionKind(moduleResolution), module: getModuleKind(module), target: getTarget(target), lib: lib, newLine: (newLine === null || newLine === void 0 ? void 0 : newLine.toLowerCase()) === "crlf"
24
- ? ts_morph_1.NewLineKind.CarriageReturnLineFeed
25
- : (newLine === null || newLine === void 0 ? void 0 : newLine.toLowerCase()) === "lf"
26
- ? ts_morph_1.NewLineKind.LineFeed
27
- : undefined });
28
- return new ProjectManager(projectFiles, outputDir, emitMode, formatter, compilerOpts);
29
- });
30
- }
31
- exports.createProjectManager = createProjectManager;
32
- function getModuleResolutionKind(moduleResolution) {
33
- const modRes = typeof moduleResolution === "string"
34
- ? moduleResolution.toLowerCase() === "node"
35
- ? "nodejs"
36
- : moduleResolution.toLowerCase()
37
- : undefined;
38
- const matchedKey = Object.keys(ts_morph_1.ModuleResolutionKind).find((mk) => mk.toLowerCase() === modRes);
39
- return matchedKey ? ts_morph_1.ModuleResolutionKind[matchedKey] : undefined;
40
- }
41
- function getModuleKind(module) {
42
- const mod = typeof module === "string" ? module.toLowerCase() : undefined;
43
- const matchedKey = Object.keys(ts_morph_1.ModuleKind).find((mk) => mk.toLowerCase() === mod);
44
- return matchedKey ? ts_morph_1.ModuleKind[matchedKey] : undefined;
45
- }
46
- function getTarget(target) {
47
- const t = typeof target === "string" ? target.toLowerCase() : undefined;
48
- const matchedKey = Object.keys(ts_morph_1.ScriptTarget).find((st) => st.toLowerCase() === t);
49
- return matchedKey ? ts_morph_1.ScriptTarget[matchedKey] : undefined;
50
- }
51
- const STATIC_SERVICE_DIR = "service";
52
- class ProjectManager {
53
- constructor(projectFiles, outputDir, emitMode, formatter, compilerOptions) {
54
- this.projectFiles = projectFiles;
55
- this.outputDir = outputDir;
56
- this.emitMode = emitMode;
57
- this.formatter = formatter;
58
- this.files = {};
59
- this.serviceFiles = [];
60
- this.formatAndWriteFile = (file) => tslib_1.__awaiter(this, void 0, void 0, function* () {
61
- const fileName = file.getFilePath();
62
- const content = file.getFullText();
63
- try {
64
- const formatted = yield this.formatter.format(content);
65
- try {
66
- return (0, fs_extra_1.writeFile)(fileName, formatted);
67
- }
68
- catch (writeError) {
69
- console.error(`Failed to write file [/${fileName}]`, writeError);
70
- process.exit(3);
71
- }
72
- }
73
- catch (formattingError) {
74
- console.error("Formatting failed");
75
- yield (0, fs_extra_1.writeFile)("error.log", formattingError);
76
- process.exit(99);
77
- }
78
- });
79
- // Create ts-morph project
80
- this.project = new ts_morph_1.Project({
81
- manipulationSettings: this.formatter.getSettings(),
82
- skipAddingFilesFromTsConfig: true,
83
- compilerOptions,
84
- });
85
- }
86
- createFile(name) {
87
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
88
- const fileName = path.join(this.outputDir, `${name}.ts`);
89
- yield (0, fs_extra_1.remove)(fileName);
90
- return this.project.createSourceFile(fileName);
91
- });
92
- }
93
- createModelFile() {
94
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
95
- this.files.model = yield this.createFile(this.projectFiles.model);
96
- return this.getModelFile();
97
- });
98
- }
99
- getModelFile() {
100
- return this.files.model;
101
- }
102
- createQObjectFile() {
103
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
104
- this.files.qobject = yield this.createFile(this.projectFiles.qObject);
105
- return this.getQObjectFile();
106
- });
107
- }
108
- getQObjectFile() {
109
- return this.files.qobject;
110
- }
111
- createMainServiceFile() {
112
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
113
- this.files.mainService = yield this.createFile(this.projectFiles.service);
114
- return this.getMainServiceFile();
115
- });
116
- }
117
- getMainServiceFile() {
118
- return this.files.mainService;
119
- }
120
- getServiceDir() {
121
- return path.join(this.outputDir, STATIC_SERVICE_DIR);
122
- }
123
- cleanServiceDir() {
124
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
125
- return (0, fs_extra_1.emptyDir)(this.getServiceDir());
126
- });
127
- }
128
- createServiceFile(name) {
129
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
130
- const file = yield this.createFile(path.join(STATIC_SERVICE_DIR, name));
131
- this.serviceFiles.push(file);
132
- return file;
133
- });
134
- }
135
- getServiceFiles() {
136
- return this.serviceFiles;
137
- }
138
- writeFiles() {
139
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
140
- switch (this.emitMode) {
141
- case OptionModel_1.EmitModes.js:
142
- case OptionModel_1.EmitModes.js_dts:
143
- yield this.emitJsFiles();
144
- break;
145
- case OptionModel_1.EmitModes.dts:
146
- yield this.emitJsFiles(true);
147
- break;
148
- case OptionModel_1.EmitModes.ts:
149
- yield this.emitTsFiles();
150
- break;
151
- default:
152
- throw new Error(`Emit mode "${this.emitMode}" is invalid!`);
153
- }
154
- });
155
- }
156
- emitJsFiles(declarationOnly) {
157
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
158
- console.log(declarationOnly
159
- ? "Emitting declaration files"
160
- : `Emitting JS files (${this.emitMode === OptionModel_1.EmitModes.js_dts ? "including" : "without"} declaration files)`);
161
- yield this.project.emit({ emitOnlyDtsFiles: !!declarationOnly });
162
- /* for (const diagnostic of this.project.getPreEmitDiagnostics()) {
163
- console.log(diagnostic.getMessageText());
164
- } */
165
- });
166
- }
167
- emitTsFiles() {
168
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
169
- const files = [this.getModelFile(), this.getQObjectFile(), this.getMainServiceFile(), ...this.getServiceFiles()];
170
- console.log(`Emitting ${files.length} TS files`);
171
- return Promise.all([...files.filter((file) => !!file).map(this.formatAndWriteFile)]);
172
- });
173
- }
174
- }
175
- exports.ProjectManager = ProjectManager;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectManager = exports.createProjectManager = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const promises_1 = require("fs/promises");
6
+ const path = tslib_1.__importStar(require("path"));
7
+ const fs_extra_1 = require("fs-extra");
8
+ const ts_morph_1 = require("ts-morph");
9
+ const tsconfig_loader_1 = tslib_1.__importDefault(require("tsconfig-loader"));
10
+ const typescript_1 = tslib_1.__importDefault(require("typescript"));
11
+ const OptionModel_1 = require("../OptionModel");
12
+ const formatter_1 = require("./formatter");
13
+ function createProjectManager(projectFiles, outputDir, emitMode, usePrettier, tsConfigPath = "tsconfig.json") {
14
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
15
+ const generateDeclarations = OptionModel_1.EmitModes.js_dts === emitMode || OptionModel_1.EmitModes.dts === emitMode;
16
+ const conf = (0, tsconfig_loader_1.default)({ filename: tsConfigPath });
17
+ const formatter = yield (0, formatter_1.createFormatter)(outputDir, usePrettier);
18
+ const _a = (conf === null || conf === void 0 ? void 0 : conf.tsConfig.compilerOptions) || {}, {
19
+ // ignored props
20
+ noEmit, // we always want to emit
21
+ importsNotUsedAsValues, // type is missing
22
+ jsx, plugins,
23
+ // mapped props
24
+ moduleResolution, lib, module, newLine, target } = _a, passThrough = tslib_1.__rest(_a, ["noEmit", "importsNotUsedAsValues", "jsx", "plugins", "moduleResolution", "lib", "module", "newLine", "target"]);
25
+ const compilerOpts = Object.assign(Object.assign({}, passThrough), { outDir: outputDir, declaration: generateDeclarations, moduleResolution: getModuleResolutionKind(moduleResolution), module: getModuleKind(module), target: getTarget(target), lib: lib, newLine: (newLine === null || newLine === void 0 ? void 0 : newLine.toLowerCase()) === "crlf"
26
+ ? ts_morph_1.NewLineKind.CarriageReturnLineFeed
27
+ : (newLine === null || newLine === void 0 ? void 0 : newLine.toLowerCase()) === "lf"
28
+ ? ts_morph_1.NewLineKind.LineFeed
29
+ : undefined });
30
+ return new ProjectManager(projectFiles, outputDir, emitMode, formatter, compilerOpts);
31
+ });
32
+ }
33
+ exports.createProjectManager = createProjectManager;
34
+ function getModuleResolutionKind(moduleResolution) {
35
+ const modRes = typeof moduleResolution === "string"
36
+ ? moduleResolution.toLowerCase() === "node"
37
+ ? "nodejs"
38
+ : moduleResolution.toLowerCase()
39
+ : undefined;
40
+ const matchedKey = Object.keys(typescript_1.default.ModuleResolutionKind).find((mk) => mk.toLowerCase() === modRes);
41
+ return matchedKey ? typescript_1.default.ModuleResolutionKind[matchedKey] : undefined;
42
+ }
43
+ function getModuleKind(module) {
44
+ const mod = typeof module === "string" ? module.toLowerCase() : undefined;
45
+ const matchedKey = Object.keys(typescript_1.default.ModuleKind).find((mk) => mk.toLowerCase() === mod);
46
+ return matchedKey ? typescript_1.default.ModuleKind[matchedKey] : undefined;
47
+ }
48
+ function getTarget(target) {
49
+ const t = typeof target === "string" ? target.toLowerCase() : undefined;
50
+ const matchedKey = Object.keys(typescript_1.default.ScriptTarget).find((st) => st.toLowerCase() === t);
51
+ return matchedKey ? typescript_1.default.ScriptTarget[matchedKey] : undefined;
52
+ }
53
+ const STATIC_SERVICE_DIR = "service";
54
+ class ProjectManager {
55
+ constructor(projectFiles, outputDir, emitMode, formatter, compilerOptions) {
56
+ this.projectFiles = projectFiles;
57
+ this.outputDir = outputDir;
58
+ this.emitMode = emitMode;
59
+ this.formatter = formatter;
60
+ this.files = {};
61
+ this.serviceFiles = [];
62
+ this.formatAndWriteFile = (file) => tslib_1.__awaiter(this, void 0, void 0, function* () {
63
+ const fileName = file.getFilePath();
64
+ const content = file.getFullText();
65
+ try {
66
+ const formatted = yield this.formatter.format(content);
67
+ try {
68
+ return (0, promises_1.writeFile)(fileName, formatted);
69
+ }
70
+ catch (writeError) {
71
+ console.error(`Failed to write file [/${fileName}]`, writeError);
72
+ process.exit(3);
73
+ }
74
+ }
75
+ catch (formattingError) {
76
+ console.error("Formatting failed");
77
+ yield (0, promises_1.writeFile)("error.log", (formattingError === null || formattingError === void 0 ? void 0 : formattingError.toString()) || "no error message!");
78
+ process.exit(99);
79
+ }
80
+ });
81
+ // Create ts-morph project
82
+ this.project = new ts_morph_1.Project({
83
+ manipulationSettings: this.formatter.getSettings(),
84
+ skipAddingFilesFromTsConfig: true,
85
+ compilerOptions,
86
+ });
87
+ }
88
+ createFile(name) {
89
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
90
+ const fileName = path.join(this.outputDir, `${name}.ts`);
91
+ yield (0, fs_extra_1.remove)(fileName);
92
+ return this.project.createSourceFile(fileName);
93
+ });
94
+ }
95
+ createModelFile() {
96
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
97
+ this.files.model = yield this.createFile(this.projectFiles.model);
98
+ return this.getModelFile();
99
+ });
100
+ }
101
+ getModelFile() {
102
+ return this.files.model;
103
+ }
104
+ createQObjectFile() {
105
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
106
+ this.files.qobject = yield this.createFile(this.projectFiles.qObject);
107
+ return this.getQObjectFile();
108
+ });
109
+ }
110
+ getQObjectFile() {
111
+ return this.files.qobject;
112
+ }
113
+ createMainServiceFile() {
114
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
115
+ this.files.mainService = yield this.createFile(this.projectFiles.service);
116
+ return this.getMainServiceFile();
117
+ });
118
+ }
119
+ getMainServiceFile() {
120
+ return this.files.mainService;
121
+ }
122
+ getServiceDir() {
123
+ return path.join(this.outputDir, STATIC_SERVICE_DIR);
124
+ }
125
+ cleanServiceDir() {
126
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
127
+ return (0, fs_extra_1.emptyDir)(this.getServiceDir());
128
+ });
129
+ }
130
+ createServiceFile(name) {
131
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
132
+ const file = yield this.createFile(path.join(STATIC_SERVICE_DIR, name));
133
+ this.serviceFiles.push(file);
134
+ return file;
135
+ });
136
+ }
137
+ getServiceFiles() {
138
+ return this.serviceFiles;
139
+ }
140
+ writeFiles() {
141
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
142
+ switch (this.emitMode) {
143
+ case OptionModel_1.EmitModes.js:
144
+ case OptionModel_1.EmitModes.js_dts:
145
+ yield this.emitJsFiles();
146
+ break;
147
+ case OptionModel_1.EmitModes.dts:
148
+ yield this.emitJsFiles(true);
149
+ break;
150
+ case OptionModel_1.EmitModes.ts:
151
+ yield this.emitTsFiles();
152
+ break;
153
+ default:
154
+ throw new Error(`Emit mode "${this.emitMode}" is invalid!`);
155
+ }
156
+ });
157
+ }
158
+ emitJsFiles(declarationOnly) {
159
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
160
+ console.log(declarationOnly
161
+ ? "Emitting declaration files"
162
+ : `Emitting JS files (${this.emitMode === OptionModel_1.EmitModes.js_dts ? "including" : "without"} declaration files)`);
163
+ yield this.project.emit({ emitOnlyDtsFiles: !!declarationOnly });
164
+ /* for (const diagnostic of this.project.getPreEmitDiagnostics()) {
165
+ console.log(diagnostic.getMessageText());
166
+ } */
167
+ });
168
+ }
169
+ emitTsFiles() {
170
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
171
+ const files = [this.getModelFile(), this.getQObjectFile(), this.getMainServiceFile(), ...this.getServiceFiles()];
172
+ console.log(`Emitting ${files.length} TS files`);
173
+ return Promise.all([...files.filter((file) => !!file).map(this.formatAndWriteFile)]);
174
+ });
175
+ }
176
+ }
177
+ exports.ProjectManager = ProjectManager;
176
178
  //# sourceMappingURL=ProjectManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectManager.js","sourceRoot":"","sources":["../../src/project/ProjectManager.ts"],"names":[],"mappings":";;;;AAAA,mDAA6B;AAE7B,uCAAuD;AACvD,uCAQkB;AAClB,8EAAmC;AAGnC,gDAA2C;AAC3C,2CAA8C;AAG9C,SAAsB,oBAAoB,CACxC,YAA0B,EAC1B,SAAiB,EACjB,QAAmB,EACnB,WAAoB,EACpB,eAAuB,eAAe;;QAEtC,MAAM,oBAAoB,GAAG,CAAC,uBAAS,CAAC,MAAM,EAAE,uBAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,IAAA,yBAAI,EAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,IAAA,2BAAe,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEhE,MAAM,KAaF,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,eAAe,KAAI,EAAE,EAblC;QACJ,gBAAgB;QAChB,MAAM,EAAE,yBAAyB;QACjC,sBAAsB,EAAE,kBAAkB;QAC1C,GAAG,EACH,OAAO;QACP,eAAe;QACf,gBAAgB,EAChB,GAAG,EACH,MAAM,EACN,OAAO,EACP,MAAM,OAEgC,EADnC,WAAW,sBAZV,gHAaL,CAAuC,CAAC;QAEzC,MAAM,YAAY,mCACb,WAAW,KACd,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,oBAAoB,EACjC,gBAAgB,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,EAC3D,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EACzB,GAAG,EAAE,GAAe,EACpB,OAAO,EACL,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EAAE,MAAK,MAAM;gBAC/B,CAAC,CAAC,sBAAW,CAAC,sBAAsB;gBACpC,CAAC,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EAAE,MAAK,IAAI;oBACjC,CAAC,CAAC,sBAAW,CAAC,QAAQ;oBACtB,CAAC,CAAC,SAAS,GAChB,CAAC;QAEF,OAAO,IAAI,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IACxF,CAAC;CAAA;AA3CD,oDA2CC;AAED,SAAS,uBAAuB,CAC9B,gBAA0D;IAE1D,MAAM,MAAM,GACV,OAAO,gBAAgB,KAAK,QAAQ;QAClC,CAAC,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,MAAM;YACzC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,gBAAgB,CAAC,WAAW,EAAE;QAClC,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,+BAAoB,CAAC,CAAC,IAAI,CACvD,CAAC,EAAE,EAA2C,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,CAC7E,CAAC;IACF,OAAO,UAAU,CAAC,CAAC,CAAC,+BAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,SAAS,aAAa,CAAC,MAAgD;IACrE,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAiC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;IACjH,OAAO,UAAU,CAAC,CAAC,CAAC,qBAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED,SAAS,SAAS,CAAC,MAAgD;IACjE,MAAM,CAAC,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAmC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IACnH,OAAO,UAAU,CAAC,CAAC,CAAC,uBAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC,MAAa,cAAc;IAMzB,YACU,YAA0B,EAC1B,SAAiB,EACjB,QAAmB,EACnB,SAAwB,EAChC,eAA4C;QAJpC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAW;QACnB,cAAS,GAAT,SAAS,CAAe;QAP1B,UAAK,GAAmC,EAAE,CAAC;QAC3C,iBAAY,GAAsB,EAAE,CAAC;QA0GrC,uBAAkB,GAAG,CAAO,IAAgB,EAAE,EAAE;YACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAEnC,IAAI;gBACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEvD,IAAI;oBACF,OAAO,IAAA,oBAAS,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;iBACvC;gBAAC,OAAO,UAAU,EAAE;oBACnB,OAAO,CAAC,KAAK,CAAC,0BAA0B,QAAQ,GAAG,EAAE,UAAU,CAAC,CAAC;oBACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjB;aACF;YAAC,OAAO,eAAe,EAAE;gBACxB,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACnC,MAAM,IAAA,oBAAS,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAClB;QACH,CAAC,CAAA,CAAC;QAnHA,0BAA0B;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAO,CAAC;YACzB,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YAClD,2BAA2B,EAAE,IAAI;YACjC,eAAe;SAChB,CAAC,CAAC;IACL,CAAC;IAEa,UAAU,CAAC,IAAY;;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;YACzD,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;KAAA;IAEY,eAAe;;YAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7B,CAAC;KAAA;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAEY,iBAAiB;;YAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;QAC/B,CAAC;KAAA;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B,CAAC;IAEY,qBAAqB;;YAChC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACnC,CAAC;KAAA;IAEM,kBAAkB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAChC,CAAC;IAEM,aAAa;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACvD,CAAC;IAEY,eAAe;;YAC1B,OAAO,IAAA,mBAAQ,EAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,CAAC;KAAA;IAEY,iBAAiB,CAAC,IAAY;;YACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7B,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEY,UAAU;;YACrB,QAAQ,IAAI,CAAC,QAAQ,EAAE;gBACrB,KAAK,uBAAS,CAAC,EAAE,CAAC;gBAClB,KAAK,uBAAS,CAAC,MAAM;oBACnB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;oBACzB,MAAM;gBACR,KAAK,uBAAS,CAAC,GAAG;oBAChB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAC7B,MAAM;gBACR,KAAK,uBAAS,CAAC,EAAE;oBACf,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;oBACzB,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,QAAQ,eAAe,CAAC,CAAC;aAC/D;QACH,CAAC;KAAA;IAEa,WAAW,CAAC,eAAyB;;YACjD,OAAO,CAAC,GAAG,CACT,eAAe;gBACb,CAAC,CAAC,4BAA4B;gBAC9B,CAAC,CAAC,sBAAsB,IAAI,CAAC,QAAQ,KAAK,uBAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,qBAAqB,CAC5G,CAAC;YAEF,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YAEjE;;gBAEI;QACN,CAAC;KAAA;IAEa,WAAW;;YACvB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;YACjH,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,MAAM,WAAW,CAAC,CAAC;YACjD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACvF,CAAC;KAAA;CAqBF;AAjID,wCAiIC","sourcesContent":["import * as path from \"path\";\r\n\r\nimport { emptyDir, remove, writeFile } from \"fs-extra\";\r\nimport {\r\n CompilerOptions,\r\n ModuleKind,\r\n ModuleResolutionKind,\r\n NewLineKind,\r\n Project,\r\n ScriptTarget,\r\n SourceFile,\r\n} from \"ts-morph\";\r\nimport load from \"tsconfig-loader\";\r\n\r\nimport { ProjectFiles } from \"../data-model/DataModel\";\r\nimport { EmitModes } from \"../OptionModel\";\r\nimport { createFormatter } from \"./formatter\";\r\nimport { FileFormatter } from \"./formatter/FileFormatter\";\r\n\r\nexport async function createProjectManager(\r\n projectFiles: ProjectFiles,\r\n outputDir: string,\r\n emitMode: EmitModes,\r\n usePrettier: boolean,\r\n tsConfigPath: string = \"tsconfig.json\"\r\n): Promise<ProjectManager> {\r\n const generateDeclarations = [EmitModes.js_dts, EmitModes.dts].includes(emitMode);\r\n const conf = load({ filename: tsConfigPath });\r\n const formatter = await createFormatter(outputDir, usePrettier);\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 ...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 lib: lib as string[],\r\n newLine:\r\n newLine?.toLowerCase() === \"crlf\"\r\n ? NewLineKind.CarriageReturnLineFeed\r\n : newLine?.toLowerCase() === \"lf\"\r\n ? NewLineKind.LineFeed\r\n : undefined,\r\n };\r\n\r\n return new ProjectManager(projectFiles, outputDir, emitMode, formatter, compilerOpts);\r\n}\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(ModuleResolutionKind).find(\r\n (mk): mk is keyof typeof ModuleResolutionKind => mk.toLowerCase() === modRes\r\n );\r\n return matchedKey ? ModuleResolutionKind[matchedKey] : 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(ModuleKind).find((mk): mk is keyof typeof ModuleKind => mk.toLowerCase() === mod);\r\n return matchedKey ? ModuleKind[matchedKey] : 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(ScriptTarget).find((st): st is keyof typeof ScriptTarget => st.toLowerCase() === t);\r\n return matchedKey ? ScriptTarget[matchedKey] : undefined;\r\n}\r\n\r\nconst STATIC_SERVICE_DIR = \"service\";\r\n\r\nexport class ProjectManager {\r\n private project!: Project;\r\n\r\n private files: { [name: string]: SourceFile } = {};\r\n private serviceFiles: Array<SourceFile> = [];\r\n\r\n constructor(\r\n private projectFiles: ProjectFiles,\r\n private outputDir: string,\r\n private emitMode: EmitModes,\r\n private formatter: FileFormatter,\r\n compilerOptions: CompilerOptions | undefined\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\r\n private async createFile(name: string) {\r\n const fileName = path.join(this.outputDir, `${name}.ts`);\r\n await remove(fileName);\r\n return this.project.createSourceFile(fileName);\r\n }\r\n\r\n public async createModelFile() {\r\n this.files.model = await this.createFile(this.projectFiles.model);\r\n return this.getModelFile();\r\n }\r\n\r\n public getModelFile() {\r\n return this.files.model;\r\n }\r\n\r\n public async createQObjectFile() {\r\n this.files.qobject = await this.createFile(this.projectFiles.qObject);\r\n return this.getQObjectFile();\r\n }\r\n\r\n public getQObjectFile() {\r\n return this.files.qobject;\r\n }\r\n\r\n public async createMainServiceFile() {\r\n this.files.mainService = await this.createFile(this.projectFiles.service);\r\n return this.getMainServiceFile();\r\n }\r\n\r\n public getMainServiceFile() {\r\n return this.files.mainService;\r\n }\r\n\r\n public getServiceDir() {\r\n return path.join(this.outputDir, STATIC_SERVICE_DIR);\r\n }\r\n\r\n public async cleanServiceDir() {\r\n return emptyDir(this.getServiceDir());\r\n }\r\n\r\n public async createServiceFile(name: string) {\r\n const file = await this.createFile(path.join(STATIC_SERVICE_DIR, name));\r\n this.serviceFiles.push(file);\r\n\r\n return file;\r\n }\r\n\r\n public getServiceFiles() {\r\n return this.serviceFiles;\r\n }\r\n\r\n public async writeFiles() {\r\n switch (this.emitMode) {\r\n case EmitModes.js:\r\n case EmitModes.js_dts:\r\n await this.emitJsFiles();\r\n break;\r\n case EmitModes.dts:\r\n await this.emitJsFiles(true);\r\n break;\r\n case EmitModes.ts:\r\n await this.emitTsFiles();\r\n break;\r\n default:\r\n throw new Error(`Emit mode \"${this.emitMode}\" is invalid!`);\r\n }\r\n }\r\n\r\n private async emitJsFiles(declarationOnly?: boolean) {\r\n console.log(\r\n declarationOnly\r\n ? \"Emitting declaration files\"\r\n : `Emitting JS files (${this.emitMode === EmitModes.js_dts ? \"including\" : \"without\"} declaration files)`\r\n );\r\n\r\n await this.project.emit({ emitOnlyDtsFiles: !!declarationOnly });\r\n\r\n /* for (const diagnostic of this.project.getPreEmitDiagnostics()) {\r\n console.log(diagnostic.getMessageText());\r\n } */\r\n }\r\n\r\n private async emitTsFiles() {\r\n const files = [this.getModelFile(), this.getQObjectFile(), this.getMainServiceFile(), ...this.getServiceFiles()];\r\n console.log(`Emitting ${files.length} TS files`);\r\n return Promise.all([...files.filter((file) => !!file).map(this.formatAndWriteFile)]);\r\n }\r\n\r\n private formatAndWriteFile = async (file: SourceFile) => {\r\n const fileName = file.getFilePath();\r\n const content = file.getFullText();\r\n\r\n try {\r\n const formatted = await this.formatter.format(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\");\r\n await writeFile(\"error.log\", formattingError);\r\n process.exit(99);\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 { writeFile } from \"fs/promises\";\r\nimport * as path from \"path\";\r\n\r\nimport { emptyDir, remove } from \"fs-extra\";\r\nimport {\r\n CompilerOptions,\r\n ModuleKind,\r\n ModuleResolutionKind,\r\n NewLineKind,\r\n Project,\r\n ScriptTarget,\r\n SourceFile,\r\n} from \"ts-morph\";\r\nimport load from \"tsconfig-loader\";\r\nimport ts from \"typescript\";\r\n\r\nimport { ProjectFiles } from \"../data-model/DataModel\";\r\nimport { EmitModes } from \"../OptionModel\";\r\nimport { createFormatter } from \"./formatter\";\r\nimport { FileFormatter } from \"./formatter/FileFormatter\";\r\n\r\nexport async function createProjectManager(\r\n projectFiles: ProjectFiles,\r\n outputDir: string,\r\n emitMode: EmitModes,\r\n usePrettier: boolean,\r\n tsConfigPath: string = \"tsconfig.json\"\r\n): Promise<ProjectManager> {\r\n const generateDeclarations = EmitModes.js_dts === emitMode || EmitModes.dts === emitMode;\r\n const conf = load({ filename: tsConfigPath });\r\n const formatter = await createFormatter(outputDir, usePrettier);\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 ...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 lib: lib as string[],\r\n newLine:\r\n newLine?.toLowerCase() === \"crlf\"\r\n ? NewLineKind.CarriageReturnLineFeed\r\n : newLine?.toLowerCase() === \"lf\"\r\n ? NewLineKind.LineFeed\r\n : undefined,\r\n };\r\n\r\n return new ProjectManager(projectFiles, outputDir, emitMode, formatter, compilerOpts);\r\n}\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\r\nconst STATIC_SERVICE_DIR = \"service\";\r\n\r\nexport class ProjectManager {\r\n private project!: Project;\r\n\r\n private files: { [name: string]: SourceFile } = {};\r\n private serviceFiles: Array<SourceFile> = [];\r\n\r\n constructor(\r\n private projectFiles: ProjectFiles,\r\n private outputDir: string,\r\n private emitMode: EmitModes,\r\n private formatter: FileFormatter,\r\n compilerOptions: CompilerOptions | undefined\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\r\n private async createFile(name: string) {\r\n const fileName = path.join(this.outputDir, `${name}.ts`);\r\n await remove(fileName);\r\n return this.project.createSourceFile(fileName);\r\n }\r\n\r\n public async createModelFile() {\r\n this.files.model = await this.createFile(this.projectFiles.model);\r\n return this.getModelFile();\r\n }\r\n\r\n public getModelFile() {\r\n return this.files.model;\r\n }\r\n\r\n public async createQObjectFile() {\r\n this.files.qobject = await this.createFile(this.projectFiles.qObject);\r\n return this.getQObjectFile();\r\n }\r\n\r\n public getQObjectFile() {\r\n return this.files.qobject;\r\n }\r\n\r\n public async createMainServiceFile() {\r\n this.files.mainService = await this.createFile(this.projectFiles.service);\r\n return this.getMainServiceFile();\r\n }\r\n\r\n public getMainServiceFile() {\r\n return this.files.mainService;\r\n }\r\n\r\n public getServiceDir() {\r\n return path.join(this.outputDir, STATIC_SERVICE_DIR);\r\n }\r\n\r\n public async cleanServiceDir() {\r\n return emptyDir(this.getServiceDir());\r\n }\r\n\r\n public async createServiceFile(name: string) {\r\n const file = await this.createFile(path.join(STATIC_SERVICE_DIR, name));\r\n this.serviceFiles.push(file);\r\n\r\n return file;\r\n }\r\n\r\n public getServiceFiles() {\r\n return this.serviceFiles;\r\n }\r\n\r\n public async writeFiles() {\r\n switch (this.emitMode) {\r\n case EmitModes.js:\r\n case EmitModes.js_dts:\r\n await this.emitJsFiles();\r\n break;\r\n case EmitModes.dts:\r\n await this.emitJsFiles(true);\r\n break;\r\n case EmitModes.ts:\r\n await this.emitTsFiles();\r\n break;\r\n default:\r\n throw new Error(`Emit mode \"${this.emitMode}\" is invalid!`);\r\n }\r\n }\r\n\r\n private async emitJsFiles(declarationOnly?: boolean) {\r\n console.log(\r\n declarationOnly\r\n ? \"Emitting declaration files\"\r\n : `Emitting JS files (${this.emitMode === EmitModes.js_dts ? \"including\" : \"without\"} declaration files)`\r\n );\r\n\r\n await this.project.emit({ emitOnlyDtsFiles: !!declarationOnly });\r\n\r\n /* for (const diagnostic of this.project.getPreEmitDiagnostics()) {\r\n console.log(diagnostic.getMessageText());\r\n } */\r\n }\r\n\r\n private async emitTsFiles() {\r\n const files = [this.getModelFile(), this.getQObjectFile(), this.getMainServiceFile(), ...this.getServiceFiles()];\r\n console.log(`Emitting ${files.length} TS files`);\r\n return Promise.all([...files.filter((file) => !!file).map(this.formatAndWriteFile)]);\r\n }\r\n\r\n private formatAndWriteFile = async (file: SourceFile) => {\r\n const fileName = file.getFilePath();\r\n const content = file.getFullText();\r\n\r\n try {\r\n const formatted = await this.formatter.format(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\");\r\n await writeFile(\"error.log\", formattingError?.toString() || \"no error message!\");\r\n process.exit(99);\r\n }\r\n };\r\n}\r\n"]}