@odata2ts/odata2ts 0.18.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 (97) hide show
  1. package/CHANGELOG.md +601 -0
  2. package/LICENSE +21 -0
  3. package/README.md +129 -0
  4. package/lib/FactoryFunctionModel.d.ts +13 -0
  5. package/lib/FactoryFunctionModel.js +3 -0
  6. package/lib/FactoryFunctionModel.js.map +1 -0
  7. package/lib/NamingModel.d.ts +191 -0
  8. package/lib/NamingModel.js +12 -0
  9. package/lib/NamingModel.js.map +1 -0
  10. package/lib/OptionModel.d.ts +208 -0
  11. package/lib/OptionModel.js +24 -0
  12. package/lib/OptionModel.js.map +1 -0
  13. package/lib/app.d.ts +8 -0
  14. package/lib/app.js +61 -0
  15. package/lib/app.js.map +1 -0
  16. package/lib/cli.d.ts +3 -0
  17. package/lib/cli.js +154 -0
  18. package/lib/cli.js.map +1 -0
  19. package/lib/data-model/DataModel.d.ts +68 -0
  20. package/lib/data-model/DataModel.js +114 -0
  21. package/lib/data-model/DataModel.js.map +1 -0
  22. package/lib/data-model/DataModelDigestion.d.ts +43 -0
  23. package/lib/data-model/DataModelDigestion.js +224 -0
  24. package/lib/data-model/DataModelDigestion.js.map +1 -0
  25. package/lib/data-model/DataModelDigestionV2.d.ts +10 -0
  26. package/lib/data-model/DataModelDigestionV2.js +201 -0
  27. package/lib/data-model/DataModelDigestionV2.js.map +1 -0
  28. package/lib/data-model/DataModelDigestionV4.d.ts +3 -0
  29. package/lib/data-model/DataModelDigestionV4.js +196 -0
  30. package/lib/data-model/DataModelDigestionV4.js.map +1 -0
  31. package/lib/data-model/DataTypeModel.d.ts +102 -0
  32. package/lib/data-model/DataTypeModel.js +9 -0
  33. package/lib/data-model/DataTypeModel.js.map +1 -0
  34. package/lib/data-model/NamingHelper.d.ts +57 -0
  35. package/lib/data-model/NamingHelper.js +225 -0
  36. package/lib/data-model/NamingHelper.js.map +1 -0
  37. package/lib/data-model/ServiceConfigHelper.d.ts +13 -0
  38. package/lib/data-model/ServiceConfigHelper.js +63 -0
  39. package/lib/data-model/ServiceConfigHelper.js.map +1 -0
  40. package/lib/data-model/edmx/ODataEdmxModelBase.d.ts +79 -0
  41. package/lib/data-model/edmx/ODataEdmxModelBase.js +3 -0
  42. package/lib/data-model/edmx/ODataEdmxModelBase.js.map +1 -0
  43. package/lib/data-model/edmx/ODataEdmxModelV3.d.ts +63 -0
  44. package/lib/data-model/edmx/ODataEdmxModelV3.js +3 -0
  45. package/lib/data-model/edmx/ODataEdmxModelV3.js.map +1 -0
  46. package/lib/data-model/edmx/ODataEdmxModelV4.d.ts +67 -0
  47. package/lib/data-model/edmx/ODataEdmxModelV4.js +3 -0
  48. package/lib/data-model/edmx/ODataEdmxModelV4.js.map +1 -0
  49. package/lib/defaultConfig.d.ts +9 -0
  50. package/lib/defaultConfig.js +176 -0
  51. package/lib/defaultConfig.js.map +1 -0
  52. package/lib/evaluateConfig.d.ts +25 -0
  53. package/lib/evaluateConfig.js +78 -0
  54. package/lib/evaluateConfig.js.map +1 -0
  55. package/lib/generator/ImportContainer.d.ts +16 -0
  56. package/lib/generator/ImportContainer.js +92 -0
  57. package/lib/generator/ImportContainer.js.map +1 -0
  58. package/lib/generator/ModelGenerator.d.ts +2 -0
  59. package/lib/generator/ModelGenerator.js +178 -0
  60. package/lib/generator/ModelGenerator.js.map +1 -0
  61. package/lib/generator/QueryObjectGenerator.d.ts +2 -0
  62. package/lib/generator/QueryObjectGenerator.js +234 -0
  63. package/lib/generator/QueryObjectGenerator.js.map +1 -0
  64. package/lib/generator/ServiceGenerator.d.ts +5 -0
  65. package/lib/generator/ServiceGenerator.js +412 -0
  66. package/lib/generator/ServiceGenerator.js.map +1 -0
  67. package/lib/generator/index.d.ts +3 -0
  68. package/lib/generator/index.js +10 -0
  69. package/lib/generator/index.js.map +1 -0
  70. package/lib/index.d.ts +3 -0
  71. package/lib/index.js +7 -0
  72. package/lib/index.js.map +1 -0
  73. package/lib/project/ProjectManager.d.ts +30 -0
  74. package/lib/project/ProjectManager.js +177 -0
  75. package/lib/project/ProjectManager.js.map +1 -0
  76. package/lib/project/formatter/BaseFormatter.d.ts +49 -0
  77. package/lib/project/formatter/BaseFormatter.js +31 -0
  78. package/lib/project/formatter/BaseFormatter.js.map +1 -0
  79. package/lib/project/formatter/FileFormatter.d.ts +16 -0
  80. package/lib/project/formatter/FileFormatter.js +3 -0
  81. package/lib/project/formatter/FileFormatter.js.map +1 -0
  82. package/lib/project/formatter/NoopFormatter.d.ts +29 -0
  83. package/lib/project/formatter/NoopFormatter.js +43 -0
  84. package/lib/project/formatter/NoopFormatter.js.map +1 -0
  85. package/lib/project/formatter/PrettierFormatter.d.ts +46 -0
  86. package/lib/project/formatter/PrettierFormatter.js +93 -0
  87. package/lib/project/formatter/PrettierFormatter.js.map +1 -0
  88. package/lib/project/formatter/index.d.ts +2 -0
  89. package/lib/project/formatter/index.js +15 -0
  90. package/lib/project/formatter/index.js.map +1 -0
  91. package/lib/project/logger/logFilePath.d.ts +1 -0
  92. package/lib/project/logger/logFilePath.js +13 -0
  93. package/lib/project/logger/logFilePath.js.map +1 -0
  94. package/lib/run-cli.d.ts +2 -0
  95. package/lib/run-cli.js +7 -0
  96. package/lib/run-cli.js.map +1 -0
  97. package/package.json +91 -0
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMinimalConfig = exports.getDefaultConfig = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const deepmerge_1 = tslib_1.__importDefault(require("deepmerge"));
6
+ const NamingModel_1 = require("./NamingModel");
7
+ const OptionModel_1 = require("./OptionModel");
8
+ /**
9
+ * The default configuration.
10
+ */
11
+ const defaultConfig = {
12
+ mode: OptionModel_1.Modes.all,
13
+ emitMode: OptionModel_1.EmitModes.js_dts,
14
+ debug: false,
15
+ prettier: false,
16
+ tsconfig: "tsconfig.json",
17
+ converters: [],
18
+ skipEditableModels: false,
19
+ skipIdModels: false,
20
+ skipOperations: false,
21
+ disableAutoManagedKey: false,
22
+ allowRenaming: false,
23
+ naming: {
24
+ models: {
25
+ namingStrategy: NamingModel_1.NamingStrategies.PASCAL_CASE,
26
+ propNamingStrategy: NamingModel_1.NamingStrategies.CAMEL_CASE,
27
+ editableModels: {
28
+ prefix: "Editable",
29
+ suffix: "",
30
+ applyModelNaming: true,
31
+ },
32
+ idModels: {
33
+ prefix: "",
34
+ suffix: "Id",
35
+ applyModelNaming: true,
36
+ },
37
+ operationParamModels: {
38
+ prefix: "",
39
+ suffix: "Params",
40
+ applyModelNaming: true,
41
+ },
42
+ fileName: {
43
+ namingStrategy: NamingModel_1.NamingStrategies.PASCAL_CASE,
44
+ prefix: "",
45
+ suffix: "Model",
46
+ },
47
+ },
48
+ queryObjects: {
49
+ namingStrategy: NamingModel_1.NamingStrategies.PASCAL_CASE,
50
+ propNamingStrategy: NamingModel_1.NamingStrategies.CAMEL_CASE,
51
+ prefix: "Q",
52
+ suffix: "",
53
+ idFunctions: {
54
+ prefix: "",
55
+ suffix: "Id",
56
+ },
57
+ fileName: {
58
+ namingStrategy: NamingModel_1.NamingStrategies.PASCAL_CASE,
59
+ prefix: "Q",
60
+ suffix: "",
61
+ },
62
+ },
63
+ services: {
64
+ prefix: "",
65
+ suffix: "Service",
66
+ namingStrategy: NamingModel_1.NamingStrategies.PASCAL_CASE,
67
+ main: {
68
+ applyServiceNaming: true,
69
+ },
70
+ collection: {
71
+ prefix: "",
72
+ suffix: "Collection",
73
+ applyServiceNaming: true,
74
+ },
75
+ serviceResolverFunction: {
76
+ namingStrategy: NamingModel_1.NamingStrategies.CAMEL_CASE,
77
+ prefix: "create",
78
+ suffix: "serviceResolver",
79
+ },
80
+ operations: {
81
+ namingStrategy: NamingModel_1.NamingStrategies.CAMEL_CASE,
82
+ },
83
+ relatedServiceGetter: {
84
+ namingStrategy: NamingModel_1.NamingStrategies.CAMEL_CASE,
85
+ prefix: "navTo",
86
+ suffix: "",
87
+ },
88
+ privateProps: {
89
+ namingStrategy: NamingModel_1.NamingStrategies.CAMEL_CASE,
90
+ prefix: "_",
91
+ suffix: "",
92
+ },
93
+ publicProps: {
94
+ namingStrategy: NamingModel_1.NamingStrategies.PASCAL_CASE,
95
+ },
96
+ },
97
+ },
98
+ propertiesByName: [],
99
+ // entitiesByName: [],
100
+ };
101
+ const { models, queryObjects, services } = defaultConfig.naming;
102
+ const minimalNamingConfig = {
103
+ models: {
104
+ fileName: {
105
+ prefix: models.fileName.prefix,
106
+ suffix: models.fileName.suffix,
107
+ },
108
+ idModels: {
109
+ applyModelNaming: true,
110
+ prefix: models.idModels.prefix,
111
+ suffix: models.idModels.suffix,
112
+ },
113
+ editableModels: {
114
+ applyModelNaming: true,
115
+ prefix: models.editableModels.prefix,
116
+ suffix: models.editableModels.suffix,
117
+ },
118
+ operationParamModels: {
119
+ applyModelNaming: true,
120
+ prefix: models.operationParamModels.prefix,
121
+ suffix: models.operationParamModels.suffix,
122
+ },
123
+ },
124
+ queryObjects: {
125
+ prefix: queryObjects.prefix,
126
+ suffix: queryObjects.suffix,
127
+ fileName: {
128
+ prefix: queryObjects.fileName.prefix,
129
+ suffix: queryObjects.fileName.suffix,
130
+ },
131
+ idFunctions: {
132
+ prefix: queryObjects.idFunctions.prefix,
133
+ suffix: queryObjects.idFunctions.suffix,
134
+ },
135
+ },
136
+ services: {
137
+ prefix: services.prefix,
138
+ suffix: services.suffix,
139
+ main: {
140
+ applyServiceNaming: true,
141
+ },
142
+ collection: {
143
+ applyServiceNaming: true,
144
+ prefix: services.collection.prefix,
145
+ suffix: services.collection.suffix,
146
+ },
147
+ privateProps: {
148
+ prefix: services.privateProps.prefix,
149
+ suffix: services.privateProps.suffix,
150
+ },
151
+ relatedServiceGetter: {
152
+ prefix: services.relatedServiceGetter.prefix,
153
+ suffix: services.relatedServiceGetter.suffix,
154
+ },
155
+ serviceResolverFunction: {
156
+ prefix: services.serviceResolverFunction.prefix,
157
+ suffix: services.serviceResolverFunction.suffix,
158
+ },
159
+ },
160
+ };
161
+ /**
162
+ * Creates a defensive copy of the default config.
163
+ */
164
+ function getDefaultConfig() {
165
+ return (0, deepmerge_1.default)(defaultConfig, {});
166
+ }
167
+ exports.getDefaultConfig = getDefaultConfig;
168
+ /**
169
+ * Creates a defensive copy of the minimal config: minimal in respect to naming.
170
+ */
171
+ function getMinimalConfig() {
172
+ const { naming } = defaultConfig, passThrough = tslib_1.__rest(defaultConfig, ["naming"]);
173
+ return (0, deepmerge_1.default)(passThrough, { naming: minimalNamingConfig });
174
+ }
175
+ exports.getMinimalConfig = getMinimalConfig;
176
+ //# sourceMappingURL=defaultConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultConfig.js","sourceRoot":"","sources":["../src/defaultConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { CliOptions, ConfigFileOptions, RunOptions } from "./OptionModel";
2
+ /**
3
+ * Provides default values and evaluates the various config file and CLI options.
4
+ * This function always returns a list of RunOptions,
5
+ * whereby each item represents one generation run / one service.
6
+ *
7
+ * Configurations are merged in the following order (last one wins):
8
+ * - default values
9
+ * - config file: base settings
10
+ * - config file: service specific settings
11
+ * - CLI options
12
+ *
13
+ * If the CLI options specify source and output, then the service config is completely ignored and only the
14
+ * base settings are applied from the config file.
15
+ *
16
+ * If the CLI options do not specify source and output, but do specify services, then these services must
17
+ * exist in the config file and each service must supply values for source and output as a minimum.
18
+ *
19
+ * If the CLI options neither entail source nor services, then at least one service must be configured in the
20
+ * config file. All configured services are returned.
21
+ *
22
+ * @param cliOpts CLI passed options
23
+ * @param configOpts config file options
24
+ */
25
+ export declare function evaluateConfigOptions(cliOpts: CliOptions, configOpts: ConfigFileOptions | undefined): Array<RunOptions>;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.evaluateConfigOptions = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const deepmerge_1 = tslib_1.__importDefault(require("deepmerge"));
6
+ const defaultConfig_1 = require("./defaultConfig");
7
+ const OptionModel_1 = require("./OptionModel");
8
+ /**
9
+ * Provides default values and evaluates the various config file and CLI options.
10
+ * This function always returns a list of RunOptions,
11
+ * whereby each item represents one generation run / one service.
12
+ *
13
+ * Configurations are merged in the following order (last one wins):
14
+ * - default values
15
+ * - config file: base settings
16
+ * - config file: service specific settings
17
+ * - CLI options
18
+ *
19
+ * If the CLI options specify source and output, then the service config is completely ignored and only the
20
+ * base settings are applied from the config file.
21
+ *
22
+ * If the CLI options do not specify source and output, but do specify services, then these services must
23
+ * exist in the config file and each service must supply values for source and output as a minimum.
24
+ *
25
+ * If the CLI options neither entail source nor services, then at least one service must be configured in the
26
+ * config file. All configured services are returned.
27
+ *
28
+ * @param cliOpts CLI passed options
29
+ * @param configOpts config file options
30
+ */
31
+ function evaluateConfigOptions(cliOpts, configOpts) {
32
+ var _a;
33
+ const defaultConfig = ((_a = configOpts === null || configOpts === void 0 ? void 0 : configOpts.naming) === null || _a === void 0 ? void 0 : _a.minimalDefaults) ? (0, defaultConfig_1.getMinimalConfig)() : (0, defaultConfig_1.getDefaultConfig)();
34
+ // No config file
35
+ if (!configOpts) {
36
+ if (!cliOpts.source || !cliOpts.output) {
37
+ throw new Error("Without any configuration file options --source and --output must be specified!");
38
+ }
39
+ return [(0, deepmerge_1.default)(defaultConfig, cliOpts)];
40
+ }
41
+ const { services: cliServices, source, output } = cliOpts, cliBaseOpts = tslib_1.__rest(cliOpts, ["services", "source", "output"]);
42
+ const { services: confServices } = configOpts, confBaseOpts = tslib_1.__rest(configOpts, ["services"]);
43
+ // No configurations of services in config file
44
+ // or CLI opts specify source and output => ignore service config
45
+ if ((source && output) || !confServices) {
46
+ if (!source || !output) {
47
+ throw new Error("No services were configured in config file, so options --source and --output must be specified!");
48
+ }
49
+ const merged = deepmerge_1.default.all([defaultConfig, confBaseOpts, cliOpts]);
50
+ return [safeGuardSkippingOptions(merged)];
51
+ }
52
+ // Either services are specified or we use all configured services
53
+ const servicesToUse = (cliServices === null || cliServices === void 0 ? void 0 : cliServices.length) ? cliServices : Object.keys(confServices);
54
+ return servicesToUse.map((s) => {
55
+ var _a, _b;
56
+ const service = confServices[s];
57
+ if (!service) {
58
+ throw new Error(`Specified service "${s}" doesn't exist in configuration!`);
59
+ }
60
+ const serviceDefault = ((_a = service.naming) === null || _a === void 0 ? void 0 : _a.minimalDefaults) && !((_b = configOpts === null || configOpts === void 0 ? void 0 : configOpts.naming) === null || _b === void 0 ? void 0 : _b.minimalDefaults) ? (0, defaultConfig_1.getMinimalConfig)() : defaultConfig;
61
+ const merged = deepmerge_1.default.all([serviceDefault, confBaseOpts, service, cliBaseOpts]);
62
+ return safeGuardSkippingOptions(merged);
63
+ });
64
+ }
65
+ exports.evaluateConfigOptions = evaluateConfigOptions;
66
+ /**
67
+ * Make sure that skipping options are deactivated for service generation.
68
+ * @param options
69
+ */
70
+ function safeGuardSkippingOptions(options) {
71
+ if (options.mode === OptionModel_1.Modes.service || options.mode === OptionModel_1.Modes.all) {
72
+ options.skipEditableModels = false;
73
+ options.skipIdModels = false;
74
+ options.skipOperations = false;
75
+ }
76
+ return options;
77
+ }
78
+ //# sourceMappingURL=evaluateConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluateConfig.js","sourceRoot":"","sources":["../src/evaluateConfig.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AAElC,mDAAqE;AACrE,+CAAiF;AAEjF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAgB,qBAAqB,CACnC,OAAmB,EACnB,UAAyC;;IAEzC,MAAM,aAAa,GAAG,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,eAAe,EAAC,CAAC,CAAC,IAAA,gCAAgB,GAAE,CAAC,CAAC,CAAC,IAAA,gCAAgB,GAAE,CAAC;IACpG,iBAAiB;IACjB,IAAI,CAAC,UAAU,EAAE;QACf,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;SACpG;QACD,OAAO,CAAC,IAAA,mBAAS,EAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;KAC5C;IAED,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,KAAqB,OAAO,EAAvB,WAAW,kBAAK,OAAO,EAAnE,gCAAyD,CAAU,CAAC;IAC1E,MAAM,EAAE,QAAQ,EAAE,YAAY,KAAsB,UAAU,EAA3B,YAAY,kBAAK,UAAU,EAAxD,YAA2C,CAAa,CAAC;IAE/D,+CAA+C;IAC/C,iEAAiE;IACjE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE;QACvC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;SACH;QACD,MAAM,MAAM,GAAG,mBAAS,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC,CAAe,CAAC;QACnF,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;KAC3C;IAED,kEAAkE;IAClE,MAAM,aAAa,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpF,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;;QAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,mCAAmC,CAAC,CAAC;SAC7E;QACD,MAAM,cAAc,GAClB,CAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,eAAe,KAAI,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,eAAe,CAAA,CAAC,CAAC,CAAC,IAAA,gCAAgB,GAAE,CAAC,CAAC,CAAC,aAAa,CAAC;QAC/G,MAAM,MAAM,GAAG,mBAAS,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC,CAAe,CAAC;QACjG,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAxCD,sDAwCC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,OAAmB;IACnD,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAK,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAK,CAAC,GAAG,EAAE;QAChE,OAAO,CAAC,kBAAkB,GAAG,KAAK,CAAC;QACnC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;QAC7B,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC;KAChC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { ImportDeclarationStructure } from "ts-morph";
2
+ import { ProjectFiles } from "../data-model/DataModel";
3
+ export declare class ImportContainer {
4
+ private mapping;
5
+ private container;
6
+ constructor(fileNames: ProjectFiles);
7
+ addFromCore(...names: Array<string>): void;
8
+ addFromQObject(...names: Array<string>): void;
9
+ addFromClientApi(...names: Array<string>): void;
10
+ addFromService(...names: Array<string>): void;
11
+ addGeneratedModel(...names: Array<string>): void;
12
+ addGeneratedQObject(...names: Array<string>): void;
13
+ addCustomType(moduleName: string, typeName: string): void;
14
+ addGeneratedService(key: string, ...names: Array<string>): void;
15
+ getImportDeclarations(fromSubPath?: boolean): Array<ImportDeclarationStructure>;
16
+ }
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImportContainer = void 0;
4
+ const tslib_1 = require("tslib");
5
+ class ImportContainer {
6
+ constructor(fileNames) {
7
+ this.mapping = {
8
+ core: { moduleName: "@odata2ts/odata-core", isRelative: false },
9
+ qobjects: { moduleName: "@odata2ts/odata-query-objects", isRelative: false },
10
+ clientApi: { moduleName: "@odata2ts/odata-client-api", isRelative: false },
11
+ service: { moduleName: "@odata2ts/odata-service", isRelative: false },
12
+ genModel: { moduleName: "", isRelative: true },
13
+ genQObjects: { moduleName: "", isRelative: true },
14
+ };
15
+ this.container = {
16
+ core: new Set(),
17
+ qobjects: new Set(),
18
+ clientApi: new Set(),
19
+ service: new Set(),
20
+ genModel: new Set(),
21
+ genQObjects: new Set(),
22
+ genServices: {},
23
+ customTypes: new Map(),
24
+ };
25
+ this.mapping.genModel.moduleName = fileNames.model;
26
+ this.mapping.genQObjects.moduleName = fileNames.qObject;
27
+ }
28
+ addFromCore(...names) {
29
+ names.forEach((n) => this.container.core.add(n));
30
+ }
31
+ addFromQObject(...names) {
32
+ names.forEach((n) => this.container.qobjects.add(n));
33
+ }
34
+ addFromClientApi(...names) {
35
+ names.forEach((n) => this.container.clientApi.add(n));
36
+ }
37
+ addFromService(...names) {
38
+ names.forEach((n) => this.container.service.add(n));
39
+ }
40
+ addGeneratedModel(...names) {
41
+ names.forEach((n) => this.container.genModel.add(n));
42
+ }
43
+ addGeneratedQObject(...names) {
44
+ names.forEach((n) => this.container.genQObjects.add(n));
45
+ }
46
+ addCustomType(moduleName, typeName) {
47
+ let importList = this.container.customTypes.get(moduleName);
48
+ if (!importList) {
49
+ importList = new Set();
50
+ this.container.customTypes.set(moduleName, importList);
51
+ }
52
+ importList.add(typeName);
53
+ }
54
+ addGeneratedService(key, ...names) {
55
+ let serv = this.container.genServices[key];
56
+ if (!serv) {
57
+ serv = new Set();
58
+ this.container.genServices[key] = serv;
59
+ }
60
+ names.forEach((n) => serv.add(n));
61
+ }
62
+ getImportDeclarations(fromSubPath = false) {
63
+ const _a = this.container, { genServices, customTypes } = _a, standardImports = tslib_1.__rest(_a, ["genServices", "customTypes"]);
64
+ return [
65
+ ...[...customTypes.keys()]
66
+ .filter((key) => { var _a; return !!((_a = customTypes.get(key)) === null || _a === void 0 ? void 0 : _a.size); })
67
+ .map((key) => {
68
+ return {
69
+ namedImports: [...customTypes.get(key)],
70
+ moduleSpecifier: key,
71
+ };
72
+ }),
73
+ ...Object.entries(standardImports)
74
+ .filter(([key, values]) => !!values.size)
75
+ .map(([key, values]) => {
76
+ const mapping = this.mapping[key];
77
+ return {
78
+ namedImports: [...values],
79
+ moduleSpecifier: `${mapping.isRelative ? `${fromSubPath ? ".." : "."}/` : ""}${mapping.moduleName}`,
80
+ };
81
+ }),
82
+ ...Object.entries(genServices).map(([key, values]) => {
83
+ return {
84
+ namedImports: [...values],
85
+ moduleSpecifier: (fromSubPath ? "./" : "./service/") + key,
86
+ };
87
+ }),
88
+ ];
89
+ }
90
+ }
91
+ exports.ImportContainer = ImportContainer;
92
+ //# sourceMappingURL=ImportContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImportContainer.js","sourceRoot":"","sources":["../../src/generator/ImportContainer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { EntityBasedGeneratorFunction } from "../FactoryFunctionModel";
2
+ export declare const generateModels: EntityBasedGeneratorFunction;
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateModels = void 0;
4
+ const ImportContainer_1 = require("./ImportContainer");
5
+ const generateModels = (dataModel, sourceFile, version, options, namingHelper) => {
6
+ const generator = new ModelGenerator(dataModel, sourceFile, version, options, namingHelper);
7
+ return generator.generate();
8
+ };
9
+ exports.generateModels = generateModels;
10
+ const DEFERRED_CONTENT = "DeferredContent";
11
+ class ModelGenerator {
12
+ constructor(dataModel, sourceFile, version, options, namingHelper) {
13
+ this.dataModel = dataModel;
14
+ this.sourceFile = sourceFile;
15
+ this.version = version;
16
+ this.options = options;
17
+ this.namingHelper = namingHelper;
18
+ }
19
+ generate() {
20
+ this.importContainer = new ImportContainer_1.ImportContainer(this.namingHelper.getFileNames());
21
+ this.generateEnums();
22
+ this.generateModels();
23
+ if (!this.options.skipOperations) {
24
+ this.generateUnboundOperationParams();
25
+ }
26
+ }
27
+ generateEnums() {
28
+ this.dataModel.getEnums().forEach((et) => {
29
+ this.sourceFile.addEnum({
30
+ name: et.name,
31
+ isExported: true,
32
+ members: et.members.map((mem) => ({ name: mem, initializer: `"${mem}"` })),
33
+ });
34
+ });
35
+ }
36
+ generateModels() {
37
+ this.dataModel.getModels().forEach((model) => {
38
+ this.generateModel(model);
39
+ if (!this.options.skipIdModels) {
40
+ this.generateIdModel(model);
41
+ }
42
+ if (!this.options.skipEditableModels) {
43
+ this.generateEditableModel(model);
44
+ }
45
+ if (!this.options.skipOperations) {
46
+ this.generateBoundOperationParams(model.name);
47
+ }
48
+ });
49
+ this.dataModel.getComplexTypes().forEach((model) => {
50
+ this.generateModel(model);
51
+ if (!this.options.skipEditableModels) {
52
+ this.generateEditableModel(model);
53
+ }
54
+ });
55
+ this.sourceFile.addImportDeclarations(this.importContainer.getImportDeclarations());
56
+ }
57
+ generateModel(model) {
58
+ this.sourceFile.addInterface({
59
+ name: model.name,
60
+ isExported: true,
61
+ properties: model.props.map((p) => {
62
+ const isEntity = p.dataType == "ModelType" /* ModelType */;
63
+ return {
64
+ name: p.name,
65
+ type: this.getPropType(p),
66
+ // props for entities or entity collections are not added in V4 if not explicitly expanded
67
+ hasQuestionToken: this.dataModel.isV4() && isEntity,
68
+ };
69
+ }),
70
+ extends: model.baseClasses,
71
+ });
72
+ }
73
+ getPropType(prop) {
74
+ const isEntity = prop.dataType == "ModelType" /* ModelType */;
75
+ // V2 entity special: deferred content
76
+ let suffix = "";
77
+ if (isEntity && this.dataModel.isV2()) {
78
+ this.importContainer.addFromCore(DEFERRED_CONTENT);
79
+ suffix = ` | ${DEFERRED_CONTENT}`;
80
+ }
81
+ // custom types which require type imports => possible via converters
82
+ else if (prop.typeModule) {
83
+ this.importContainer.addCustomType(prop.typeModule, prop.type);
84
+ }
85
+ // Collections
86
+ if (prop.isCollection) {
87
+ return `Array<${prop.type}>` + suffix;
88
+ }
89
+ // primitive, enum & complex types
90
+ return prop.type + (prop.required ? "" : " | null") + suffix;
91
+ }
92
+ generateIdModel(model) {
93
+ if (!model.generateId) {
94
+ return;
95
+ }
96
+ const singleType = model.keys.length === 1 ? `${model.keys[0].type} | ` : "";
97
+ const keyTypes = model.keys.map((keyProp) => `${keyProp.name}: ${this.getPropType(keyProp)}`).join(",");
98
+ const type = `${singleType}{${keyTypes}}`;
99
+ this.sourceFile.addTypeAlias({
100
+ name: model.idModelName,
101
+ isExported: true,
102
+ type,
103
+ });
104
+ }
105
+ generateEditableModel(model) {
106
+ const entityTypes = ["ModelType" /* ModelType */, "ComplexType" /* ComplexType */];
107
+ const allProps = [...model.baseProps, ...model.props].filter((p) => !p.managed);
108
+ const requiredProps = allProps
109
+ .filter((p) => p.required && !entityTypes.includes(p.dataType))
110
+ .map((p) => `"${p.name}"`)
111
+ .join(" | ");
112
+ const optionalProps = allProps
113
+ .filter((p) => !p.required && !entityTypes.includes(p.dataType))
114
+ .map((p) => `"${p.name}"`)
115
+ .join(" | ");
116
+ const complexProps = allProps.filter((p) => p.dataType === "ComplexType" /* ComplexType */);
117
+ const extendsClause = [
118
+ requiredProps ? `Pick<${model.name}, ${requiredProps}>` : null,
119
+ optionalProps ? `Partial<Pick<${model.name}, ${optionalProps}>>` : null,
120
+ ].filter((e) => !!e);
121
+ this.sourceFile.addInterface({
122
+ name: model.editableName,
123
+ isExported: true,
124
+ extends: extendsClause,
125
+ properties: !complexProps
126
+ ? undefined
127
+ : complexProps.map((p) => {
128
+ return {
129
+ name: p.name,
130
+ type: this.getEditablePropType(p),
131
+ // optional props don't need to be specified in editable model
132
+ // also, entities would require deep insert func => we make it optional for now
133
+ hasQuestionToken: !p.required || p.dataType === "ModelType" /* ModelType */,
134
+ };
135
+ }),
136
+ });
137
+ }
138
+ getEditablePropType(prop) {
139
+ const type = prop.dataType === "ModelType" /* ModelType */
140
+ ? this.dataModel.getModel(prop.type).editableName
141
+ : prop.dataType === "ComplexType" /* ComplexType */
142
+ ? this.dataModel.getComplexType(prop.type).editableName
143
+ : prop.type;
144
+ // Collections
145
+ if (prop.isCollection) {
146
+ return `Array<${type}>`;
147
+ }
148
+ // primitive, enum & complex types
149
+ return type + (prop.required ? "" : " | null");
150
+ }
151
+ generateUnboundOperationParams() {
152
+ this.dataModel.getUnboundOperationTypes().forEach((operation) => {
153
+ this.generateOperationParams(operation);
154
+ });
155
+ }
156
+ generateBoundOperationParams(entityName) {
157
+ this.dataModel.getOperationTypeByBinding(entityName).forEach((operation) => {
158
+ this.generateOperationParams(operation);
159
+ });
160
+ }
161
+ generateOperationParams(operation) {
162
+ if (!operation.parameters.length) {
163
+ return;
164
+ }
165
+ this.sourceFile.addInterface({
166
+ name: operation.paramsModelName,
167
+ isExported: true,
168
+ properties: operation.parameters.map((p) => {
169
+ return {
170
+ name: p.name,
171
+ type: this.getPropType(p),
172
+ hasQuestionToken: !p.required,
173
+ };
174
+ }),
175
+ });
176
+ }
177
+ }
178
+ //# sourceMappingURL=ModelGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelGenerator.js","sourceRoot":"","sources":["../../src/generator/ModelGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { EntityBasedGeneratorFunction } from "../FactoryFunctionModel";
2
+ export declare const generateQueryObjects: EntityBasedGeneratorFunction;