@odata-effect/odata-effect-generator 0.1.2 → 0.2.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/README.md +223 -5
- package/dist/cjs/Cli.js +6 -2
- package/dist/cjs/Cli.js.map +1 -1
- package/dist/cjs/generator/Generator.js +33 -15
- package/dist/cjs/generator/Generator.js.map +1 -1
- package/dist/cjs/generator/IndexGenerator.js +19 -73
- package/dist/cjs/generator/IndexGenerator.js.map +1 -1
- package/dist/cjs/generator/NamingHelper.js +4 -1
- package/dist/cjs/generator/NamingHelper.js.map +1 -1
- package/dist/cjs/generator/NavigationGenerator.js +338 -0
- package/dist/cjs/generator/NavigationGenerator.js.map +1 -0
- package/dist/cjs/generator/OperationsGenerator.js +384 -0
- package/dist/cjs/generator/OperationsGenerator.js.map +1 -0
- package/dist/cjs/generator/QueryModelsGenerator.js +2 -2
- package/dist/cjs/generator/QueryModelsGenerator.js.map +1 -1
- package/dist/cjs/generator/ServiceFnGenerator.js +1 -1
- package/dist/cjs/generator/ServiceFnGenerator.js.map +1 -1
- package/dist/cjs/generator/ServiceFnPromiseGenerator.js +2 -2
- package/dist/cjs/generator/ServiceFnPromiseGenerator.js.map +1 -1
- package/dist/dts/Cli.d.ts.map +1 -1
- package/dist/dts/generator/Generator.d.ts +2 -0
- package/dist/dts/generator/Generator.d.ts.map +1 -1
- package/dist/dts/generator/IndexGenerator.d.ts.map +1 -1
- package/dist/dts/generator/NamingHelper.d.ts.map +1 -1
- package/dist/dts/generator/NavigationGenerator.d.ts +55 -0
- package/dist/dts/generator/NavigationGenerator.d.ts.map +1 -0
- package/dist/dts/generator/OperationsGenerator.d.ts +50 -0
- package/dist/dts/generator/OperationsGenerator.d.ts.map +1 -0
- package/dist/esm/Cli.js +6 -2
- package/dist/esm/Cli.js.map +1 -1
- package/dist/esm/generator/Generator.js +33 -15
- package/dist/esm/generator/Generator.js.map +1 -1
- package/dist/esm/generator/IndexGenerator.js +19 -73
- package/dist/esm/generator/IndexGenerator.js.map +1 -1
- package/dist/esm/generator/NamingHelper.js +4 -1
- package/dist/esm/generator/NamingHelper.js.map +1 -1
- package/dist/esm/generator/NavigationGenerator.js +330 -0
- package/dist/esm/generator/NavigationGenerator.js.map +1 -0
- package/dist/esm/generator/OperationsGenerator.js +375 -0
- package/dist/esm/generator/OperationsGenerator.js.map +1 -0
- package/dist/esm/generator/QueryModelsGenerator.js +2 -2
- package/dist/esm/generator/QueryModelsGenerator.js.map +1 -1
- package/dist/esm/generator/ServiceFnGenerator.js +1 -1
- package/dist/esm/generator/ServiceFnGenerator.js.map +1 -1
- package/dist/esm/generator/ServiceFnPromiseGenerator.js +2 -2
- package/dist/esm/generator/ServiceFnPromiseGenerator.js.map +1 -1
- package/generator/NavigationGenerator/package.json +6 -0
- package/generator/OperationsGenerator/package.json +6 -0
- package/package.json +17 -1
- package/src/Cli.ts +8 -2
- package/src/generator/Generator.ts +43 -13
- package/src/generator/IndexGenerator.ts +21 -74
- package/src/generator/NamingHelper.ts +6 -1
- package/src/generator/NavigationGenerator.ts +451 -0
- package/src/generator/OperationsGenerator.ts +481 -0
- package/src/generator/QueryModelsGenerator.ts +2 -2
- package/src/generator/ServiceFnGenerator.ts +1 -1
- package/src/generator/ServiceFnPromiseGenerator.ts +2 -2
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generator for type-safe, tree-shakable navigation path builders.
|
|
3
|
+
*
|
|
4
|
+
* Generates branded path types and navigation functions that can be composed
|
|
5
|
+
* with pipe() for type-safe OData path construction.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { pipe } from "effect"
|
|
10
|
+
* import { People, byKey, trips, planItems, asFlight } from "./PathBuilders"
|
|
11
|
+
*
|
|
12
|
+
* const path = pipe(
|
|
13
|
+
* People,
|
|
14
|
+
* byKey("russellwhyte"),
|
|
15
|
+
* trips,
|
|
16
|
+
* byKey(0),
|
|
17
|
+
* planItems,
|
|
18
|
+
* asFlight
|
|
19
|
+
* )
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
import type { DataModel } from "../model/DataModel.js";
|
|
25
|
+
/**
|
|
26
|
+
* Get the path builders module name.
|
|
27
|
+
*/
|
|
28
|
+
export declare const getPathBuildersModuleName: () => string;
|
|
29
|
+
/**
|
|
30
|
+
* Generated navigation file.
|
|
31
|
+
*
|
|
32
|
+
* @since 1.0.0
|
|
33
|
+
* @category types
|
|
34
|
+
*/
|
|
35
|
+
export interface GeneratedNavigationFile {
|
|
36
|
+
readonly fileName: string;
|
|
37
|
+
readonly content: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Result of navigation generation.
|
|
41
|
+
*
|
|
42
|
+
* @since 1.0.0
|
|
43
|
+
* @category types
|
|
44
|
+
*/
|
|
45
|
+
export interface NavigationGenerationResult {
|
|
46
|
+
readonly navigationFiles: ReadonlyArray<GeneratedNavigationFile>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Generate navigation builders.
|
|
50
|
+
*
|
|
51
|
+
* @since 1.0.0
|
|
52
|
+
* @category generation
|
|
53
|
+
*/
|
|
54
|
+
export declare const generateNavigations: (dataModel: DataModel) => NavigationGenerationResult;
|
|
55
|
+
//# sourceMappingURL=NavigationGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavigationGenerator.d.ts","sourceRoot":"","sources":["../../../src/generator/NavigationGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EACV,SAAS,EAEV,MAAM,uBAAuB,CAAA;AA+B9B;;GAEG;AACH,eAAO,MAAM,yBAAyB,QAAO,MAAwB,CAAA;AAErE;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAA;CACjE;AA2FD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,WAAW,SAAS,KAAG,0BAU1D,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generator for OData operations (FunctionImports, Functions, Actions).
|
|
3
|
+
*
|
|
4
|
+
* OData V2: FunctionImports
|
|
5
|
+
* OData V4: Functions (GET, no side effects) and Actions (POST, with side effects)
|
|
6
|
+
*
|
|
7
|
+
* @since 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
import type { DataModel, OperationModel } from "../model/DataModel.js";
|
|
10
|
+
/**
|
|
11
|
+
* Get the function name for an operation.
|
|
12
|
+
*
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
* @category naming
|
|
15
|
+
*/
|
|
16
|
+
export declare const getOperationFunctionName: (operation: OperationModel) => string;
|
|
17
|
+
/**
|
|
18
|
+
* Get the operations module name.
|
|
19
|
+
*
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
* @category naming
|
|
22
|
+
*/
|
|
23
|
+
export declare const getOperationsModuleName: () => string;
|
|
24
|
+
/**
|
|
25
|
+
* Generated operations file.
|
|
26
|
+
*
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
* @category types
|
|
29
|
+
*/
|
|
30
|
+
export interface GeneratedOperationsFile {
|
|
31
|
+
readonly fileName: string;
|
|
32
|
+
readonly content: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Result of operations generation.
|
|
36
|
+
*
|
|
37
|
+
* @since 1.0.0
|
|
38
|
+
* @category types
|
|
39
|
+
*/
|
|
40
|
+
export interface OperationsGenerationResult {
|
|
41
|
+
readonly operationsFile: GeneratedOperationsFile | null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Generate the operations file.
|
|
45
|
+
*
|
|
46
|
+
* @since 1.0.0
|
|
47
|
+
* @category generation
|
|
48
|
+
*/
|
|
49
|
+
export declare const generateOperations: (dataModel: DataModel) => OperationsGenerationResult;
|
|
50
|
+
//# sourceMappingURL=OperationsGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OperationsGenerator.d.ts","sourceRoot":"","sources":["../../../src/generator/OperationsGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AA2BtE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,WAAW,cAAc,KAAG,MAEpE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,QAAO,MAAsB,CAAA;AAEjE;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,cAAc,EAAE,uBAAuB,GAAG,IAAI,CAAA;CACxD;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,WAAW,SAAS,KAAG,0BAgBzD,CAAA"}
|
package/dist/esm/Cli.js
CHANGED
|
@@ -22,6 +22,7 @@ const outputDir = /*#__PURE__*/Args.path({
|
|
|
22
22
|
const serviceName = /*#__PURE__*/Options.text("service-name").pipe(Options.optional, /*#__PURE__*/Options.withDescription("Override service name (defaults to EntityContainer name)"));
|
|
23
23
|
const packageName = /*#__PURE__*/Options.text("package-name").pipe(Options.optional, /*#__PURE__*/Options.withDescription("NPM package name (defaults to @template/<service-name>-effect)"));
|
|
24
24
|
const force = /*#__PURE__*/Options.boolean("force").pipe(/*#__PURE__*/Options.withDefault(false), /*#__PURE__*/Options.withDescription("Overwrite existing files"));
|
|
25
|
+
const filesOnly = /*#__PURE__*/Options.boolean("files-only").pipe(/*#__PURE__*/Options.withDefault(false), /*#__PURE__*/Options.withDescription("Generate only source files (no package.json, tsconfig, etc.) directly in output-dir"));
|
|
25
26
|
// ============================================================================
|
|
26
27
|
// Generate Command
|
|
27
28
|
// ============================================================================
|
|
@@ -30,13 +31,15 @@ const generateCommand = /*#__PURE__*/Command.make("generate", {
|
|
|
30
31
|
outputDir,
|
|
31
32
|
serviceName,
|
|
32
33
|
packageName,
|
|
33
|
-
force
|
|
34
|
+
force,
|
|
35
|
+
filesOnly
|
|
34
36
|
}).pipe(/*#__PURE__*/Command.withDescription("Generate Effect OData client from metadata"), /*#__PURE__*/Command.withHandler(({
|
|
35
37
|
force: forceOverwrite,
|
|
36
38
|
metadataPath: metaPath,
|
|
37
39
|
outputDir: outDir,
|
|
38
40
|
packageName: pkgName,
|
|
39
|
-
serviceName: svcName
|
|
41
|
+
serviceName: svcName,
|
|
42
|
+
filesOnly: onlyFiles
|
|
40
43
|
}) => Effect.gen(function* () {
|
|
41
44
|
const fs = yield* FileSystem.FileSystem;
|
|
42
45
|
yield* Console.log(`Reading metadata from: ${metaPath}`);
|
|
@@ -60,6 +63,7 @@ const generateCommand = /*#__PURE__*/Command.make("generate", {
|
|
|
60
63
|
const config = {
|
|
61
64
|
outputDir: outDir,
|
|
62
65
|
force: forceOverwrite,
|
|
66
|
+
filesOnly: onlyFiles,
|
|
63
67
|
...(svcName._tag === "Some" ? {
|
|
64
68
|
serviceName: svcName.value
|
|
65
69
|
} : {}),
|
package/dist/esm/Cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cli.js","names":["Args","Command","Options","FileSystem","Console","Effect","digestMetadata","generate","parseODataMetadata","metadataPath","path","name","pipe","withDescription","outputDir","serviceName","text","optional","packageName","force","boolean","withDefault","generateCommand","make","withHandler","forceOverwrite","metaPath","outDir","pkgName","svcName","gen","fs","log","metadataContent","readFileString","mapError","error","Error","edmx","dataModel","version","namespace","entityTypes","size","complexTypes","enumTypes","entitySets","config","_tag","value","rootCommand","withSubcommands","cli","run"],"sources":["../../src/Cli.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAKA,SAASA,IAAI,EAAEC,OAAO,EAAEC,OAAO,QAAQ,aAAa;AACpD,OAAO,KAAKC,UAAU,MAAM,6BAA6B;AACzD,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,QAAQ,QAAQ,0BAA0B;AACnD,SAASC,kBAAkB,QAAQ,uBAAuB;AAE1D;AACA;AACA;AAEA,MAAMC,YAAY,gBAAGT,IAAI,CAACU,IAAI,CAAC;EAAEC,IAAI,EAAE;AAAe,CAAE,CAAC,CAACC,IAAI,cAC5DZ,IAAI,CAACa,eAAe,CAAC,iCAAiC,CAAC,CACxD;AAED,MAAMC,SAAS,gBAAGd,IAAI,CAACU,IAAI,CAAC;EAAEC,IAAI,EAAE;AAAY,CAAE,CAAC,CAACC,IAAI,cACtDZ,IAAI,CAACa,eAAe,CAAC,0CAA0C,CAAC,CACjE;AAED,MAAME,WAAW,gBAAGb,OAAO,CAACc,IAAI,CAAC,cAAc,CAAC,CAACJ,IAAI,CACnDV,OAAO,CAACe,QAAQ,eAChBf,OAAO,CAACW,eAAe,CAAC,0DAA0D,CAAC,CACpF;AAED,MAAMK,WAAW,gBAAGhB,OAAO,CAACc,IAAI,CAAC,cAAc,CAAC,CAACJ,IAAI,CACnDV,OAAO,CAACe,QAAQ,eAChBf,OAAO,CAACW,eAAe,CAAC,gEAAgE,CAAC,CAC1F;AAED,MAAMM,KAAK,gBAAGjB,OAAO,CAACkB,OAAO,CAAC,OAAO,CAAC,CAACR,IAAI,cACzCV,OAAO,CAACmB,WAAW,CAAC,KAAK,CAAC,eAC1BnB,OAAO,CAACW,eAAe,CAAC,0BAA0B,CAAC,CACpD;AAED;AACA;AACA;AAEA,
|
|
1
|
+
{"version":3,"file":"Cli.js","names":["Args","Command","Options","FileSystem","Console","Effect","digestMetadata","generate","parseODataMetadata","metadataPath","path","name","pipe","withDescription","outputDir","serviceName","text","optional","packageName","force","boolean","withDefault","filesOnly","generateCommand","make","withHandler","forceOverwrite","metaPath","outDir","pkgName","svcName","onlyFiles","gen","fs","log","metadataContent","readFileString","mapError","error","Error","edmx","dataModel","version","namespace","entityTypes","size","complexTypes","enumTypes","entitySets","config","_tag","value","rootCommand","withSubcommands","cli","run"],"sources":["../../src/Cli.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -9,6 +9,8 @@ import * as Effect from "effect/Effect";
|
|
|
9
9
|
import * as Schema from "effect/Schema";
|
|
10
10
|
import { generateIndex } from "./IndexGenerator.js";
|
|
11
11
|
import { generateModels } from "./ModelsGenerator.js";
|
|
12
|
+
import { generateNavigations } from "./NavigationGenerator.js";
|
|
13
|
+
import { generateOperations } from "./OperationsGenerator.js";
|
|
12
14
|
import { generatePackageJson, generateTsconfig, generateTsconfigBuild, generateTsconfigSrc, generateTsconfigTest, generateVitestConfig } from "./PackageGenerator.js";
|
|
13
15
|
import { generateQueryModels } from "./QueryModelsGenerator.js";
|
|
14
16
|
import { generateServiceFns } from "./ServiceFnGenerator.js";
|
|
@@ -35,6 +37,9 @@ export const generate = (dataModel, config) => Effect.gen(function* () {
|
|
|
35
37
|
const outputDir = config.outputDir;
|
|
36
38
|
const serviceName = config.serviceName ?? dataModel.serviceName;
|
|
37
39
|
const packageName = config.packageName ?? `@template/${serviceName.toLowerCase()}-effect`;
|
|
40
|
+
const filesOnly = config.filesOnly ?? false;
|
|
41
|
+
// When filesOnly is true, output directly to outputDir; otherwise use outputDir/src
|
|
42
|
+
const sourceDir = filesOnly ? outputDir : path.join(outputDir, "src");
|
|
38
43
|
const packageConfig = {
|
|
39
44
|
packageName,
|
|
40
45
|
serviceName
|
|
@@ -43,31 +48,43 @@ export const generate = (dataModel, config) => Effect.gen(function* () {
|
|
|
43
48
|
const serviceResult = generateServiceFns(dataModel);
|
|
44
49
|
// Generate Promise-based service function files
|
|
45
50
|
const promiseServiceResult = generatePromiseServiceFns(dataModel);
|
|
46
|
-
// Generate
|
|
47
|
-
const
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
// Generate operations file (FunctionImports, Functions, Actions)
|
|
52
|
+
const operationsResult = generateOperations(dataModel);
|
|
53
|
+
// Generate navigation builders
|
|
54
|
+
const navigationResult = generateNavigations(dataModel);
|
|
55
|
+
// Generate source files
|
|
56
|
+
const sourceFiles = [{
|
|
57
|
+
path: path.join(sourceDir, "Models.ts"),
|
|
51
58
|
content: generateModels(dataModel)
|
|
52
59
|
}, {
|
|
53
|
-
path: path.join(
|
|
60
|
+
path: path.join(sourceDir, "QueryModels.ts"),
|
|
54
61
|
content: generateQueryModels(dataModel)
|
|
55
62
|
},
|
|
56
63
|
// Individual entity service function files (tree-shakable)
|
|
57
64
|
...serviceResult.entityServices.map(svc => ({
|
|
58
|
-
path: path.join(
|
|
65
|
+
path: path.join(sourceDir, svc.fileName),
|
|
59
66
|
content: svc.content
|
|
60
67
|
})),
|
|
61
68
|
// Promise-based entity service function files
|
|
62
69
|
...promiseServiceResult.entityServices.map(svc => ({
|
|
63
|
-
path: path.join(
|
|
70
|
+
path: path.join(sourceDir, svc.fileName),
|
|
64
71
|
content: svc.content
|
|
72
|
+
})),
|
|
73
|
+
// Operations file (only if there are unbound operations)
|
|
74
|
+
...(operationsResult.operationsFile ? [{
|
|
75
|
+
path: path.join(sourceDir, operationsResult.operationsFile.fileName),
|
|
76
|
+
content: operationsResult.operationsFile.content
|
|
77
|
+
}] : []),
|
|
78
|
+
// Navigation builder files
|
|
79
|
+
...navigationResult.navigationFiles.map(nav => ({
|
|
80
|
+
path: path.join(sourceDir, nav.fileName),
|
|
81
|
+
content: nav.content
|
|
65
82
|
})), {
|
|
66
|
-
path: path.join(
|
|
83
|
+
path: path.join(sourceDir, "index.ts"),
|
|
67
84
|
content: generateIndex(dataModel)
|
|
68
|
-
}
|
|
69
|
-
// Package configuration files
|
|
70
|
-
{
|
|
85
|
+
}];
|
|
86
|
+
// Package configuration files (only when not filesOnly)
|
|
87
|
+
const packageFiles = filesOnly ? [] : [{
|
|
71
88
|
path: path.join(outputDir, "package.json"),
|
|
72
89
|
content: generatePackageJson(dataModel, packageConfig)
|
|
73
90
|
}, {
|
|
@@ -86,11 +103,12 @@ export const generate = (dataModel, config) => Effect.gen(function* () {
|
|
|
86
103
|
path: path.join(outputDir, "vitest.config.ts"),
|
|
87
104
|
content: generateVitestConfig()
|
|
88
105
|
}];
|
|
89
|
-
|
|
90
|
-
|
|
106
|
+
const files = [...sourceFiles, ...packageFiles];
|
|
107
|
+
// Create output directory
|
|
108
|
+
yield* fs.makeDirectory(sourceDir, {
|
|
91
109
|
recursive: true
|
|
92
110
|
}).pipe(Effect.mapError(error => new GeneratorError({
|
|
93
|
-
message: `Failed to create output directory: ${
|
|
111
|
+
message: `Failed to create output directory: ${sourceDir}`,
|
|
94
112
|
cause: error
|
|
95
113
|
})));
|
|
96
114
|
// Write all files
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Generator.js","names":["FileSystem","Path","Effect","Schema","generateIndex","generateModels","generatePackageJson","generateTsconfig","generateTsconfigBuild","generateTsconfigSrc","generateTsconfigTest","generateVitestConfig","generateQueryModels","generateServiceFns","generatePromiseServiceFns","GeneratorError","TaggedError","message","String","cause","optional","Unknown","generate","dataModel","config","gen","fs","path","outputDir","serviceName","packageName","toLowerCase","packageConfig","serviceResult","promiseServiceResult","
|
|
1
|
+
{"version":3,"file":"Generator.js","names":["FileSystem","Path","Effect","Schema","generateIndex","generateModels","generateNavigations","generateOperations","generatePackageJson","generateTsconfig","generateTsconfigBuild","generateTsconfigSrc","generateTsconfigTest","generateVitestConfig","generateQueryModels","generateServiceFns","generatePromiseServiceFns","GeneratorError","TaggedError","message","String","cause","optional","Unknown","generate","dataModel","config","gen","fs","path","outputDir","serviceName","packageName","toLowerCase","filesOnly","sourceDir","join","packageConfig","serviceResult","promiseServiceResult","operationsResult","navigationResult","sourceFiles","content","entityServices","map","svc","fileName","operationsFile","navigationFiles","nav","packageFiles","files","makeDirectory","recursive","pipe","mapError","error","file","force","exists","logWarning","writeFileString","logInfo"],"sources":["../../../src/generator/Generator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { getEditableTypeName, getIdTypeName, getQueryFactoryName, getQueryInstanceName, getQueryInterfaceName, getServiceClassName } from "./NamingHelper.js";
|
|
2
|
+
import { getPathBuildersModuleName } from "./NavigationGenerator.js";
|
|
3
|
+
import { getOperationsModuleName } from "./OperationsGenerator.js";
|
|
2
4
|
import { getPromiseServiceName } from "./ServiceFnPromiseGenerator.js";
|
|
3
5
|
/**
|
|
4
6
|
* Generate the index.ts file content.
|
|
@@ -41,90 +43,34 @@ export const generateIndex = dataModel => {
|
|
|
41
43
|
const isLast = i === modelExports.length - 1;
|
|
42
44
|
lines.push(` ${modelExports[i]}${isLast ? "" : ","}`);
|
|
43
45
|
}
|
|
44
|
-
lines.push(`} from "./Models
|
|
45
|
-
lines.push(``);
|
|
46
|
-
// Re-export OData infrastructure
|
|
47
|
-
const isV4 = dataModel.version === "V4";
|
|
48
|
-
lines.push(`// Re-export OData infrastructure from @odata-effect/odata-effect`);
|
|
49
|
-
lines.push(`export {`);
|
|
50
|
-
lines.push(` // Errors`);
|
|
51
|
-
if (!isV4) {
|
|
52
|
-
lines.push(` SapErrorDetail,`);
|
|
53
|
-
lines.push(` SapErrorResolution,`);
|
|
54
|
-
lines.push(` SapApplication,`);
|
|
55
|
-
lines.push(` SapInnerError,`);
|
|
56
|
-
lines.push(` SapErrorMessage,`);
|
|
57
|
-
lines.push(` SapErrorBody,`);
|
|
58
|
-
lines.push(` SapErrorResponse,`);
|
|
59
|
-
lines.push(` SapError,`);
|
|
60
|
-
}
|
|
61
|
-
lines.push(` ODataError,`);
|
|
62
|
-
lines.push(` EntityNotFoundError,`);
|
|
63
|
-
lines.push(` ParseError,`);
|
|
64
|
-
if (isV4) {
|
|
65
|
-
// V4 exports
|
|
66
|
-
lines.push(` // OData V4`);
|
|
67
|
-
lines.push(` ODataV4,`);
|
|
68
|
-
lines.push(` ODataV4CollectionResponse,`);
|
|
69
|
-
lines.push(` ODataV4ValueResponse,`);
|
|
70
|
-
lines.push(` ODataV4Annotations,`);
|
|
71
|
-
lines.push(` ODataV4ClientConfig,`);
|
|
72
|
-
lines.push(` buildEntityPathV4,`);
|
|
73
|
-
lines.push(` type ODataV4QueryOptions,`);
|
|
74
|
-
lines.push(` type ODataV4RequestOptions,`);
|
|
75
|
-
lines.push(` type ODataV4ClientConfigService,`);
|
|
76
|
-
lines.push(` type PagedResultV4,`);
|
|
77
|
-
} else {
|
|
78
|
-
// V2 exports
|
|
79
|
-
lines.push(` // OData V2`);
|
|
80
|
-
lines.push(` OData,`);
|
|
81
|
-
lines.push(` ODataSingleResponse,`);
|
|
82
|
-
lines.push(` ODataCollectionResponse,`);
|
|
83
|
-
lines.push(` ODataCollectionResponseWithMeta,`);
|
|
84
|
-
lines.push(` ODataValueResponse,`);
|
|
85
|
-
lines.push(` EntityMetadata,`);
|
|
86
|
-
lines.push(` MediaMetadata,`);
|
|
87
|
-
lines.push(` DeferredContent,`);
|
|
88
|
-
lines.push(` ODataClientConfig,`);
|
|
89
|
-
lines.push(` buildEntityPath,`);
|
|
90
|
-
lines.push(` DEFAULT_HEADERS,`);
|
|
91
|
-
lines.push(` MERGE_HEADERS,`);
|
|
92
|
-
lines.push(` type ODataQueryOptions,`);
|
|
93
|
-
lines.push(` type ODataRequestOptions,`);
|
|
94
|
-
lines.push(` type ODataClientConfigService,`);
|
|
95
|
-
lines.push(` type PagedResult,`);
|
|
96
|
-
}
|
|
97
|
-
lines.push(` // Query Builder`);
|
|
98
|
-
lines.push(` FilterExpression,`);
|
|
99
|
-
lines.push(` StringPath,`);
|
|
100
|
-
lines.push(` NumberPath,`);
|
|
101
|
-
lines.push(` BooleanPath,`);
|
|
102
|
-
lines.push(` DateTimePath,`);
|
|
103
|
-
lines.push(` EntityPath,`);
|
|
104
|
-
lines.push(` CollectionPath,`);
|
|
105
|
-
lines.push(` QueryBuilder,`);
|
|
106
|
-
lines.push(` createQueryPaths,`);
|
|
107
|
-
lines.push(` createQueryBuilder,`);
|
|
108
|
-
lines.push(` type FieldToPath,`);
|
|
109
|
-
lines.push(` type QueryPaths,`);
|
|
110
|
-
lines.push(` type SelectableKeys,`);
|
|
111
|
-
lines.push(` type ExpandableKeys,`);
|
|
112
|
-
lines.push(` type BuiltQuery`);
|
|
113
|
-
lines.push(`} from "@odata-effect/odata-effect"`);
|
|
46
|
+
lines.push(`} from "./Models"`);
|
|
114
47
|
lines.push(``);
|
|
115
48
|
// Individual Entity Services (tree-shakable module namespace re-exports)
|
|
116
49
|
lines.push(`// Individual Entity Services (tree-shakable)`);
|
|
117
50
|
for (const entitySet of dataModel.entitySets.values()) {
|
|
118
51
|
const serviceClassName = getServiceClassName(entitySet.name);
|
|
119
|
-
lines.push(`export * as ${serviceClassName} from "./${serviceClassName}
|
|
52
|
+
lines.push(`export * as ${serviceClassName} from "./${serviceClassName}"`);
|
|
120
53
|
}
|
|
121
54
|
lines.push(``);
|
|
122
55
|
// Promise-based Entity Services (for non-Effect environments)
|
|
123
56
|
lines.push(`// Promise-based Entity Services (for non-Effect environments)`);
|
|
124
57
|
for (const entitySet of dataModel.entitySets.values()) {
|
|
125
58
|
const promiseServiceName = getPromiseServiceName(entitySet.name);
|
|
126
|
-
lines.push(`export * as ${promiseServiceName} from "./${promiseServiceName}
|
|
59
|
+
lines.push(`export * as ${promiseServiceName} from "./${promiseServiceName}"`);
|
|
60
|
+
}
|
|
61
|
+
lines.push(``);
|
|
62
|
+
// Operations (FunctionImports, Functions, Actions) - only if there are unbound operations
|
|
63
|
+
const hasUnboundOperations = Array.from(dataModel.operations.values()).some(op => !op.isBound);
|
|
64
|
+
if (hasUnboundOperations) {
|
|
65
|
+
lines.push(`// Operations (FunctionImports, Functions, Actions)`);
|
|
66
|
+
const operationsModuleName = getOperationsModuleName();
|
|
67
|
+
lines.push(`export * as ${operationsModuleName} from "./${operationsModuleName}"`);
|
|
68
|
+
lines.push(``);
|
|
127
69
|
}
|
|
70
|
+
// Path Builders (tree-shakable navigation)
|
|
71
|
+
lines.push(`// Path Builders (tree-shakable navigation)`);
|
|
72
|
+
const pathBuildersModuleName = getPathBuildersModuleName();
|
|
73
|
+
lines.push(`export * from "./${pathBuildersModuleName}"`);
|
|
128
74
|
lines.push(``);
|
|
129
75
|
// Query Models
|
|
130
76
|
lines.push(`// Query Models`);
|
|
@@ -151,7 +97,7 @@ export const generateIndex = dataModel => {
|
|
|
151
97
|
const isLast = i === queryExports.length - 1;
|
|
152
98
|
lines.push(` ${queryExports[i]}${isLast ? "" : ","}`);
|
|
153
99
|
}
|
|
154
|
-
lines.push(`} from "./QueryModels
|
|
100
|
+
lines.push(`} from "./QueryModels"`);
|
|
155
101
|
return lines.join("\n");
|
|
156
102
|
};
|
|
157
103
|
//# sourceMappingURL=IndexGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexGenerator.js","names":["getEditableTypeName","getIdTypeName","getQueryFactoryName","getQueryInstanceName","getQueryInterfaceName","getServiceClassName","getPromiseServiceName","generateIndex","dataModel","lines","push","serviceName","modelExports","enumType","enumTypes","values","name","complexType","complexTypes","entityType","entityTypes","keys","length","i","isLast","
|
|
1
|
+
{"version":3,"file":"IndexGenerator.js","names":["getEditableTypeName","getIdTypeName","getQueryFactoryName","getQueryInstanceName","getQueryInterfaceName","getServiceClassName","getPathBuildersModuleName","getOperationsModuleName","getPromiseServiceName","generateIndex","dataModel","lines","push","serviceName","modelExports","enumType","enumTypes","values","name","complexType","complexTypes","entityType","entityTypes","keys","length","i","isLast","entitySet","entitySets","serviceClassName","promiseServiceName","hasUnboundOperations","Array","from","operations","some","op","isBound","operationsModuleName","pathBuildersModuleName","queryExports","get","entityTypeFqName","join"],"sources":["../../../src/generator/IndexGenerator.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -76,10 +76,13 @@ export const getServiceClassName = entitySetName => {
|
|
|
76
76
|
// Remove trailing 's' if present to singularize
|
|
77
77
|
let singular = entitySetName;
|
|
78
78
|
if (singular.endsWith("ies")) {
|
|
79
|
+
// "Categories" -> "Category"
|
|
79
80
|
singular = singular.slice(0, -3) + "y";
|
|
80
|
-
} else if (singular.endsWith("
|
|
81
|
+
} else if (singular.endsWith("xes") || singular.endsWith("ches") || singular.endsWith("shes") || singular.endsWith("sses") || singular.endsWith("zes")) {
|
|
82
|
+
// "Boxes" -> "Box", "Beaches" -> "Beach", etc.
|
|
81
83
|
singular = singular.slice(0, -2);
|
|
82
84
|
} else if (singular.endsWith("s") && !singular.endsWith("ss")) {
|
|
85
|
+
// "Products" -> "Product", "Airlines" -> "Airline"
|
|
83
86
|
singular = singular.slice(0, -1);
|
|
84
87
|
}
|
|
85
88
|
return `${toPascalCase(singular)}Service`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NamingHelper.js","names":["toPascalCase","str","replace","_","char","toUpperCase","toCamelCase","pascal","charAt","toLowerCase","slice","toValidIdentifier","test","getPropertyName","odataName","getClassName","getServiceClassName","entitySetName","singular","endsWith","getQueryInterfaceName","typeName","getQueryInstanceName","getQueryFactoryName","getEditableTypeName","getIdTypeName"],"sources":["../../../src/generator/NamingHelper.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAMA;;;;;;;;;;AAUA,OAAO,MAAMA,YAAY,GAAIC,GAAW,IAAY;EAClD,OAAOA,GAAG,CACPC,OAAO,CAAC,UAAU,EAAE,CAACC,CAAC,EAAEC,IAAI,KAAKA,IAAI,CAACC,WAAW,EAAE,CAAC,CACpDH,OAAO,CAAC,MAAM,EAAGE,IAAI,IAAKA,IAAI,CAACC,WAAW,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;;;;;AAUA,OAAO,MAAMC,WAAW,GAAIL,GAAW,IAAY;EACjD,MAAMM,MAAM,GAAGP,YAAY,CAACC,GAAG,CAAC;EAChC,OAAOM,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,EAAE,GAAGF,MAAM,CAACG,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;AAOA,OAAO,MAAMC,iBAAiB,GAAIV,GAAW,IAAY;EACvD;EACA,IAAI,QAAQ,CAACW,IAAI,CAACX,GAAG,CAAC,EAAE;IACtB,OAAO,IAAIA,GAAG,EAAE;EAClB;EACA;EACA,OAAOA,GAAG,CAACC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;AAC5C,CAAC;AAED;;;;;;AAMA,OAAO,MAAMW,eAAe,GAAIC,SAAiB,IAAY;EAC3D,OAAOR,WAAW,CAACK,iBAAiB,CAACG,SAAS,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;AAMA,OAAO,MAAMC,YAAY,GAAID,SAAiB,IAAY;EACxD,OAAOd,YAAY,CAACW,iBAAiB,CAACG,SAAS,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;AASA,OAAO,MAAME,mBAAmB,GAAIC,aAAqB,IAAY;EACnE;EACA,IAAIC,QAAQ,GAAGD,aAAa;EAC5B,IAAIC,QAAQ,CAACC,QAAQ,CAAC,KAAK,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"NamingHelper.js","names":["toPascalCase","str","replace","_","char","toUpperCase","toCamelCase","pascal","charAt","toLowerCase","slice","toValidIdentifier","test","getPropertyName","odataName","getClassName","getServiceClassName","entitySetName","singular","endsWith","getQueryInterfaceName","typeName","getQueryInstanceName","getQueryFactoryName","getEditableTypeName","getIdTypeName"],"sources":["../../../src/generator/NamingHelper.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|