@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
package/README.md
CHANGED
|
@@ -26,16 +26,234 @@ odata-effect-gen generate ./metadata.xml ./generated
|
|
|
26
26
|
- `--service-name`: Override service name (defaults to EntityContainer name)
|
|
27
27
|
- `--package-name`: NPM package name (defaults to @template/<service-name>-effect)
|
|
28
28
|
- `--force`: Overwrite existing files
|
|
29
|
+
- `--files-only`: Generate only source files directly in output-dir (no package.json, tsconfig, src/ subdirectory)
|
|
29
30
|
|
|
30
31
|
## Generated Code
|
|
31
32
|
|
|
32
33
|
The generator produces:
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
| File | Description |
|
|
36
|
+
|------|-------------|
|
|
37
|
+
| `Models.ts` | Schema classes for entities and complex types |
|
|
38
|
+
| `QueryModels.ts` | Type-safe query paths for filtering and ordering |
|
|
39
|
+
| `*Service.ts` | Effect-based CRUD service functions for each entity set |
|
|
40
|
+
| `*ServicePromise.ts` | Promise-based wrappers for non-Effect environments |
|
|
41
|
+
| `PathBuilders.ts` | Tree-shakable navigation path builders |
|
|
42
|
+
| `Operations.ts` | Functions/Actions (if present in metadata) |
|
|
43
|
+
| `index.ts` | Re-exports all generated code |
|
|
44
|
+
|
|
45
|
+
## Two Ways to Query Data
|
|
46
|
+
|
|
47
|
+
The generator provides two complementary approaches for querying OData services:
|
|
48
|
+
|
|
49
|
+
### 1. Service Functions (Direct Operations)
|
|
50
|
+
|
|
51
|
+
Best for simple CRUD operations on a single entity set:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import { ProductService } from "./generated"
|
|
55
|
+
|
|
56
|
+
// Get all products
|
|
57
|
+
const products = yield* ProductService.getAll()
|
|
58
|
+
|
|
59
|
+
// Get by ID
|
|
60
|
+
const product = yield* ProductService.getById(123)
|
|
61
|
+
|
|
62
|
+
// Create
|
|
63
|
+
const newProduct = yield* ProductService.create({ name: "Widget", price: 9.99 })
|
|
64
|
+
|
|
65
|
+
// Update
|
|
66
|
+
yield* ProductService.update(123, { price: 12.99 })
|
|
67
|
+
|
|
68
|
+
// Delete
|
|
69
|
+
yield* ProductService.delete(123)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 2. Path Builders (Pipe-based Navigation)
|
|
73
|
+
|
|
74
|
+
Best for navigating relationships with full type safety. Uses branded types to ensure you can only navigate to valid properties:
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import { pipe } from "effect"
|
|
78
|
+
import {
|
|
79
|
+
People, byKey, trips, planItems, asFlight, bestFriend,
|
|
80
|
+
fetchCollection, fetchOne
|
|
81
|
+
} from "./generated"
|
|
82
|
+
import { Person, Trip, Flight } from "./generated"
|
|
83
|
+
|
|
84
|
+
// Navigate through relationships with pipe()
|
|
85
|
+
const flights = yield* pipe(
|
|
86
|
+
People, // Path<PersonModel, true> - collection
|
|
87
|
+
byKey("russellwhyte"), // Path<PersonModel, false> - single entity
|
|
88
|
+
trips, // Path<TripModel, true> - collection
|
|
89
|
+
byKey(0), // Path<TripModel, false> - single entity
|
|
90
|
+
planItems, // Path<PlanItemModel, true>
|
|
91
|
+
asFlight, // Path<FlightModel, true> - type cast
|
|
92
|
+
fetchCollection(Flight) // Execute the query
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
// Get a single entity
|
|
96
|
+
const person = yield* pipe(
|
|
97
|
+
People,
|
|
98
|
+
byKey("russellwhyte"),
|
|
99
|
+
fetchOne(Person)
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
// Navigate to a single related entity
|
|
103
|
+
const friend = yield* pipe(
|
|
104
|
+
People,
|
|
105
|
+
byKey("russellwhyte"),
|
|
106
|
+
bestFriend,
|
|
107
|
+
fetchOne(Person)
|
|
108
|
+
)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Type Safety with Branded Types
|
|
112
|
+
|
|
113
|
+
The path builders use branded types to ensure type-safe navigation at compile time:
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
// Path<TEntity, IsCollection> tracks what entity type you're "at"
|
|
117
|
+
type Path<TEntity, IsCollection extends boolean = false> = string & {
|
|
118
|
+
readonly _entity: TEntity
|
|
119
|
+
readonly _collection: IsCollection
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// TypeScript prevents invalid navigation:
|
|
123
|
+
|
|
124
|
+
// ✅ Valid - trips is a navigation property on Person
|
|
125
|
+
pipe(People, byKey("russell"), trips)
|
|
126
|
+
|
|
127
|
+
// ❌ Compile error - planItems is on Trip, not Person
|
|
128
|
+
pipe(People, byKey("russell"), planItems)
|
|
129
|
+
|
|
130
|
+
// ❌ Compile error - can't byKey on a single entity (not a collection)
|
|
131
|
+
pipe(People, byKey("russell"), byKey("other"))
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Path Builder Features
|
|
135
|
+
|
|
136
|
+
| Feature | Example |
|
|
137
|
+
|---------|---------|
|
|
138
|
+
| Entity set root | `People` → `Path<PersonModel, true>` |
|
|
139
|
+
| Key access | `byKey("id")` → converts collection to single |
|
|
140
|
+
| Navigation | `trips` → type-safe navigation to related entity |
|
|
141
|
+
| Type casting | `asFlight` → filter to derived type |
|
|
142
|
+
| Terminal ops | `fetchCollection(Schema)`, `fetchOne(Schema)` |
|
|
143
|
+
|
|
144
|
+
### Tree-Shaking
|
|
145
|
+
|
|
146
|
+
Path builders are fully tree-shakable. Each navigation function is a separate export:
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
// Only import what you use - unused navigation functions are removed by bundler
|
|
150
|
+
import { People, byKey, trips } from "./generated"
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Comparison with odata2ts
|
|
154
|
+
|
|
155
|
+
If you're familiar with odata2ts, here's how the APIs compare:
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
// odata2ts (method chaining)
|
|
159
|
+
const response = await trippinService
|
|
160
|
+
.people("russellwhyte")
|
|
161
|
+
.trips(0)
|
|
162
|
+
.planItems()
|
|
163
|
+
.asFlightCollectionService()
|
|
164
|
+
.query()
|
|
165
|
+
|
|
166
|
+
// odata-effect (pipe composition)
|
|
167
|
+
const flights = yield* pipe(
|
|
168
|
+
People,
|
|
169
|
+
byKey("russellwhyte"),
|
|
170
|
+
trips,
|
|
171
|
+
byKey(0),
|
|
172
|
+
planItems,
|
|
173
|
+
asFlight,
|
|
174
|
+
fetchCollection(Flight)
|
|
175
|
+
)
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Query Options
|
|
179
|
+
|
|
180
|
+
Both service functions and path builders support OData query options:
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
// With service functions
|
|
184
|
+
const products = yield* ProductService.getAll({
|
|
185
|
+
$filter: "price gt 10",
|
|
186
|
+
$orderby: "name",
|
|
187
|
+
$top: 10,
|
|
188
|
+
$select: "id,name,price"
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
// With path builders (via fetchCollection/fetchOne)
|
|
192
|
+
const myTrips = yield* pipe(
|
|
193
|
+
People,
|
|
194
|
+
byKey("russellwhyte"),
|
|
195
|
+
trips,
|
|
196
|
+
(path) => fetchCollection(Trip)(path, {
|
|
197
|
+
$filter: "budget gt 1000",
|
|
198
|
+
$orderby: "startsAt desc"
|
|
199
|
+
})
|
|
200
|
+
)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Type-Safe Query Building
|
|
204
|
+
|
|
205
|
+
Use the generated `QueryModels` for type-safe filter and orderby construction:
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
import { productQuery } from "./generated"
|
|
209
|
+
|
|
210
|
+
const query = productQuery()
|
|
211
|
+
.filter(q => q.price.gt(10).and(q.name.contains("Widget")))
|
|
212
|
+
.orderBy(q => q.name.asc())
|
|
213
|
+
.select("id", "name", "price")
|
|
214
|
+
.top(10)
|
|
215
|
+
.build()
|
|
216
|
+
|
|
217
|
+
const products = yield* ProductService.getAll(query)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Promise-Based Usage
|
|
221
|
+
|
|
222
|
+
For non-Effect environments, use the Promise-based service functions:
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
import { createODataRuntime } from "@odata-effect/odata-effect-promise"
|
|
226
|
+
import { ProductServicePromise } from "./generated"
|
|
227
|
+
|
|
228
|
+
const runtime = createODataRuntime({
|
|
229
|
+
baseUrl: "https://api.example.com",
|
|
230
|
+
servicePath: "/odata/v4/"
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
// All operations return Promises
|
|
234
|
+
const products = await ProductServicePromise.getAll(runtime)
|
|
235
|
+
const product = await ProductServicePromise.getById(runtime, 123)
|
|
236
|
+
|
|
237
|
+
// Don't forget to dispose when done
|
|
238
|
+
await runtime.dispose()
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Operations (Functions & Actions)
|
|
242
|
+
|
|
243
|
+
If your OData service defines FunctionImports (V2) or Functions/Actions (V4), they are generated in `Operations.ts`:
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
import { Operations } from "./generated"
|
|
247
|
+
|
|
248
|
+
// V2 FunctionImport
|
|
249
|
+
const result = yield* Operations.getProductsByRating({ rating: 5 })
|
|
250
|
+
|
|
251
|
+
// V4 Function (no side effects)
|
|
252
|
+
const airport = yield* Operations.getNearestAirport({ lat: 51.5, lon: -0.1 })
|
|
253
|
+
|
|
254
|
+
// V4 Action (may have side effects)
|
|
255
|
+
yield* Operations.resetDataSource()
|
|
256
|
+
```
|
|
39
257
|
|
|
40
258
|
## License
|
|
41
259
|
|
package/dist/cjs/Cli.js
CHANGED
|
@@ -30,6 +30,7 @@ const outputDir = /*#__PURE__*/_cli.Args.path({
|
|
|
30
30
|
const serviceName = /*#__PURE__*/_cli.Options.text("service-name").pipe(_cli.Options.optional, /*#__PURE__*/_cli.Options.withDescription("Override service name (defaults to EntityContainer name)"));
|
|
31
31
|
const packageName = /*#__PURE__*/_cli.Options.text("package-name").pipe(_cli.Options.optional, /*#__PURE__*/_cli.Options.withDescription("NPM package name (defaults to @template/<service-name>-effect)"));
|
|
32
32
|
const force = /*#__PURE__*/_cli.Options.boolean("force").pipe(/*#__PURE__*/_cli.Options.withDefault(false), /*#__PURE__*/_cli.Options.withDescription("Overwrite existing files"));
|
|
33
|
+
const filesOnly = /*#__PURE__*/_cli.Options.boolean("files-only").pipe(/*#__PURE__*/_cli.Options.withDefault(false), /*#__PURE__*/_cli.Options.withDescription("Generate only source files (no package.json, tsconfig, etc.) directly in output-dir"));
|
|
33
34
|
// ============================================================================
|
|
34
35
|
// Generate Command
|
|
35
36
|
// ============================================================================
|
|
@@ -38,13 +39,15 @@ const generateCommand = /*#__PURE__*/_cli.Command.make("generate", {
|
|
|
38
39
|
outputDir,
|
|
39
40
|
serviceName,
|
|
40
41
|
packageName,
|
|
41
|
-
force
|
|
42
|
+
force,
|
|
43
|
+
filesOnly
|
|
42
44
|
}).pipe(/*#__PURE__*/_cli.Command.withDescription("Generate Effect OData client from metadata"), /*#__PURE__*/_cli.Command.withHandler(({
|
|
43
45
|
force: forceOverwrite,
|
|
44
46
|
metadataPath: metaPath,
|
|
45
47
|
outputDir: outDir,
|
|
46
48
|
packageName: pkgName,
|
|
47
|
-
serviceName: svcName
|
|
49
|
+
serviceName: svcName,
|
|
50
|
+
filesOnly: onlyFiles
|
|
48
51
|
}) => Effect.gen(function* () {
|
|
49
52
|
const fs = yield* FileSystem.FileSystem;
|
|
50
53
|
yield* Console.log(`Reading metadata from: ${metaPath}`);
|
|
@@ -68,6 +71,7 @@ const generateCommand = /*#__PURE__*/_cli.Command.make("generate", {
|
|
|
68
71
|
const config = {
|
|
69
72
|
outputDir: outDir,
|
|
70
73
|
force: forceOverwrite,
|
|
74
|
+
filesOnly: onlyFiles,
|
|
71
75
|
...(svcName._tag === "Some" ? {
|
|
72
76
|
serviceName: svcName.value
|
|
73
77
|
} : {}),
|
package/dist/cjs/Cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cli.js","names":["_cli","require","FileSystem","_interopRequireWildcard","Console","Effect","_Digester","_Generator","_XmlParser","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","metadataPath","Args","path","name","pipe","withDescription","outputDir","serviceName","Options","text","optional","packageName","force","boolean","withDefault","generateCommand","Command","make","withHandler","forceOverwrite","metaPath","outDir","pkgName","svcName","gen","fs","log","metadataContent","readFileString","mapError","error","Error","edmx","parseODataMetadata","dataModel","digestMetadata","version","namespace","entityTypes","size","complexTypes","enumTypes","entitySets","config","_tag","value","generate","rootCommand","withSubcommands","cli","exports","run"],"sources":["../../src/Cli.ts"],"sourcesContent":[null],"mappings":";;;;;;AAKA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAD,uBAAA,CAAAF,OAAA;AACA,IAAAI,MAAA,GAAAF,uBAAA,CAAAF,OAAA;AAEA,IAAAK,SAAA,GAAAL,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;AACA,IAAAO,UAAA,GAAAP,OAAA;AAA0D,SAAAE,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,CAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAZ1D;;;;;;AAcA;AACA;AACA;AAEA,MAAMkB,YAAY,gBAAGC,SAAI,CAACC,IAAI,CAAC;EAAEC,IAAI,EAAE;AAAe,CAAE,CAAC,CAACC,IAAI,cAC5DH,SAAI,CAACI,eAAe,CAAC,iCAAiC,CAAC,CACxD;AAED,MAAMC,SAAS,gBAAGL,SAAI,CAACC,IAAI,CAAC;EAAEC,IAAI,EAAE;AAAY,CAAE,CAAC,CAACC,IAAI,cACtDH,SAAI,CAACI,eAAe,CAAC,0CAA0C,CAAC,CACjE;AAED,MAAME,WAAW,gBAAGC,YAAO,CAACC,IAAI,CAAC,cAAc,CAAC,CAACL,IAAI,CACnDI,YAAO,CAACE,QAAQ,eAChBF,YAAO,CAACH,eAAe,CAAC,0DAA0D,CAAC,CACpF;AAED,MAAMM,WAAW,gBAAGH,YAAO,CAACC,IAAI,CAAC,cAAc,CAAC,CAACL,IAAI,CACnDI,YAAO,CAACE,QAAQ,eAChBF,YAAO,CAACH,eAAe,CAAC,gEAAgE,CAAC,CAC1F;AAED,MAAMO,KAAK,gBAAGJ,YAAO,CAACK,OAAO,CAAC,OAAO,CAAC,CAACT,IAAI,cACzCI,YAAO,CAACM,WAAW,CAAC,KAAK,CAAC,eAC1BN,YAAO,CAACH,eAAe,CAAC,0BAA0B,CAAC,CACpD;AAED;AACA;AACA;AAEA,
|
|
1
|
+
{"version":3,"file":"Cli.js","names":["_cli","require","FileSystem","_interopRequireWildcard","Console","Effect","_Digester","_Generator","_XmlParser","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","metadataPath","Args","path","name","pipe","withDescription","outputDir","serviceName","Options","text","optional","packageName","force","boolean","withDefault","filesOnly","generateCommand","Command","make","withHandler","forceOverwrite","metaPath","outDir","pkgName","svcName","onlyFiles","gen","fs","log","metadataContent","readFileString","mapError","error","Error","edmx","parseODataMetadata","dataModel","digestMetadata","version","namespace","entityTypes","size","complexTypes","enumTypes","entitySets","config","_tag","value","generate","rootCommand","withSubcommands","cli","exports","run"],"sources":["../../src/Cli.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -10,6 +10,8 @@ var Effect = _interopRequireWildcard(require("effect/Effect"));
|
|
|
10
10
|
var Schema = _interopRequireWildcard(require("effect/Schema"));
|
|
11
11
|
var _IndexGenerator = require("./IndexGenerator.js");
|
|
12
12
|
var _ModelsGenerator = require("./ModelsGenerator.js");
|
|
13
|
+
var _NavigationGenerator = require("./NavigationGenerator.js");
|
|
14
|
+
var _OperationsGenerator = require("./OperationsGenerator.js");
|
|
13
15
|
var _PackageGenerator = require("./PackageGenerator.js");
|
|
14
16
|
var _QueryModelsGenerator = require("./QueryModelsGenerator.js");
|
|
15
17
|
var _ServiceFnGenerator = require("./ServiceFnGenerator.js");
|
|
@@ -44,6 +46,9 @@ const generate = (dataModel, config) => Effect.gen(function* () {
|
|
|
44
46
|
const outputDir = config.outputDir;
|
|
45
47
|
const serviceName = config.serviceName ?? dataModel.serviceName;
|
|
46
48
|
const packageName = config.packageName ?? `@template/${serviceName.toLowerCase()}-effect`;
|
|
49
|
+
const filesOnly = config.filesOnly ?? false;
|
|
50
|
+
// When filesOnly is true, output directly to outputDir; otherwise use outputDir/src
|
|
51
|
+
const sourceDir = filesOnly ? outputDir : path.join(outputDir, "src");
|
|
47
52
|
const packageConfig = {
|
|
48
53
|
packageName,
|
|
49
54
|
serviceName
|
|
@@ -52,31 +57,43 @@ const generate = (dataModel, config) => Effect.gen(function* () {
|
|
|
52
57
|
const serviceResult = (0, _ServiceFnGenerator.generateServiceFns)(dataModel);
|
|
53
58
|
// Generate Promise-based service function files
|
|
54
59
|
const promiseServiceResult = (0, _ServiceFnPromiseGenerator.generatePromiseServiceFns)(dataModel);
|
|
55
|
-
// Generate
|
|
56
|
-
const
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
// Generate operations file (FunctionImports, Functions, Actions)
|
|
61
|
+
const operationsResult = (0, _OperationsGenerator.generateOperations)(dataModel);
|
|
62
|
+
// Generate navigation builders
|
|
63
|
+
const navigationResult = (0, _NavigationGenerator.generateNavigations)(dataModel);
|
|
64
|
+
// Generate source files
|
|
65
|
+
const sourceFiles = [{
|
|
66
|
+
path: path.join(sourceDir, "Models.ts"),
|
|
60
67
|
content: (0, _ModelsGenerator.generateModels)(dataModel)
|
|
61
68
|
}, {
|
|
62
|
-
path: path.join(
|
|
69
|
+
path: path.join(sourceDir, "QueryModels.ts"),
|
|
63
70
|
content: (0, _QueryModelsGenerator.generateQueryModels)(dataModel)
|
|
64
71
|
},
|
|
65
72
|
// Individual entity service function files (tree-shakable)
|
|
66
73
|
...serviceResult.entityServices.map(svc => ({
|
|
67
|
-
path: path.join(
|
|
74
|
+
path: path.join(sourceDir, svc.fileName),
|
|
68
75
|
content: svc.content
|
|
69
76
|
})),
|
|
70
77
|
// Promise-based entity service function files
|
|
71
78
|
...promiseServiceResult.entityServices.map(svc => ({
|
|
72
|
-
path: path.join(
|
|
79
|
+
path: path.join(sourceDir, svc.fileName),
|
|
73
80
|
content: svc.content
|
|
81
|
+
})),
|
|
82
|
+
// Operations file (only if there are unbound operations)
|
|
83
|
+
...(operationsResult.operationsFile ? [{
|
|
84
|
+
path: path.join(sourceDir, operationsResult.operationsFile.fileName),
|
|
85
|
+
content: operationsResult.operationsFile.content
|
|
86
|
+
}] : []),
|
|
87
|
+
// Navigation builder files
|
|
88
|
+
...navigationResult.navigationFiles.map(nav => ({
|
|
89
|
+
path: path.join(sourceDir, nav.fileName),
|
|
90
|
+
content: nav.content
|
|
74
91
|
})), {
|
|
75
|
-
path: path.join(
|
|
92
|
+
path: path.join(sourceDir, "index.ts"),
|
|
76
93
|
content: (0, _IndexGenerator.generateIndex)(dataModel)
|
|
77
|
-
}
|
|
78
|
-
// Package configuration files
|
|
79
|
-
{
|
|
94
|
+
}];
|
|
95
|
+
// Package configuration files (only when not filesOnly)
|
|
96
|
+
const packageFiles = filesOnly ? [] : [{
|
|
80
97
|
path: path.join(outputDir, "package.json"),
|
|
81
98
|
content: (0, _PackageGenerator.generatePackageJson)(dataModel, packageConfig)
|
|
82
99
|
}, {
|
|
@@ -95,11 +112,12 @@ const generate = (dataModel, config) => Effect.gen(function* () {
|
|
|
95
112
|
path: path.join(outputDir, "vitest.config.ts"),
|
|
96
113
|
content: (0, _PackageGenerator.generateVitestConfig)()
|
|
97
114
|
}];
|
|
98
|
-
|
|
99
|
-
|
|
115
|
+
const files = [...sourceFiles, ...packageFiles];
|
|
116
|
+
// Create output directory
|
|
117
|
+
yield* fs.makeDirectory(sourceDir, {
|
|
100
118
|
recursive: true
|
|
101
119
|
}).pipe(Effect.mapError(error => new GeneratorError({
|
|
102
|
-
message: `Failed to create output directory: ${
|
|
120
|
+
message: `Failed to create output directory: ${sourceDir}`,
|
|
103
121
|
cause: error
|
|
104
122
|
})));
|
|
105
123
|
// Write all files
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Generator.js","names":["FileSystem","_interopRequireWildcard","require","Path","Effect","Schema","_IndexGenerator","_ModelsGenerator","_PackageGenerator","_QueryModelsGenerator","_ServiceFnGenerator","_ServiceFnPromiseGenerator","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","GeneratorError","TaggedError","message","String","cause","optional","Unknown","exports","generate","dataModel","config","gen","fs","path","outputDir","serviceName","packageName","toLowerCase","packageConfig","serviceResult","generateServiceFns","promiseServiceResult","generatePromiseServiceFns","
|
|
1
|
+
{"version":3,"file":"Generator.js","names":["FileSystem","_interopRequireWildcard","require","Path","Effect","Schema","_IndexGenerator","_ModelsGenerator","_NavigationGenerator","_OperationsGenerator","_PackageGenerator","_QueryModelsGenerator","_ServiceFnGenerator","_ServiceFnPromiseGenerator","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","GeneratorError","TaggedError","message","String","cause","optional","Unknown","exports","generate","dataModel","config","gen","fs","path","outputDir","serviceName","packageName","toLowerCase","filesOnly","sourceDir","join","packageConfig","serviceResult","generateServiceFns","promiseServiceResult","generatePromiseServiceFns","operationsResult","generateOperations","navigationResult","generateNavigations","sourceFiles","content","generateModels","generateQueryModels","entityServices","map","svc","fileName","operationsFile","navigationFiles","nav","generateIndex","packageFiles","generatePackageJson","generateTsconfig","generateTsconfigSrc","generateTsconfigTest","generateTsconfigBuild","generateVitestConfig","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":[]}
|
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.generateIndex = void 0;
|
|
7
7
|
var _NamingHelper = require("./NamingHelper.js");
|
|
8
|
+
var _NavigationGenerator = require("./NavigationGenerator.js");
|
|
9
|
+
var _OperationsGenerator = require("./OperationsGenerator.js");
|
|
8
10
|
var _ServiceFnPromiseGenerator = require("./ServiceFnPromiseGenerator.js");
|
|
9
11
|
/**
|
|
10
12
|
* Generate the index.ts file content.
|
|
@@ -47,90 +49,34 @@ const generateIndex = dataModel => {
|
|
|
47
49
|
const isLast = i === modelExports.length - 1;
|
|
48
50
|
lines.push(` ${modelExports[i]}${isLast ? "" : ","}`);
|
|
49
51
|
}
|
|
50
|
-
lines.push(`} from "./Models
|
|
51
|
-
lines.push(``);
|
|
52
|
-
// Re-export OData infrastructure
|
|
53
|
-
const isV4 = dataModel.version === "V4";
|
|
54
|
-
lines.push(`// Re-export OData infrastructure from @odata-effect/odata-effect`);
|
|
55
|
-
lines.push(`export {`);
|
|
56
|
-
lines.push(` // Errors`);
|
|
57
|
-
if (!isV4) {
|
|
58
|
-
lines.push(` SapErrorDetail,`);
|
|
59
|
-
lines.push(` SapErrorResolution,`);
|
|
60
|
-
lines.push(` SapApplication,`);
|
|
61
|
-
lines.push(` SapInnerError,`);
|
|
62
|
-
lines.push(` SapErrorMessage,`);
|
|
63
|
-
lines.push(` SapErrorBody,`);
|
|
64
|
-
lines.push(` SapErrorResponse,`);
|
|
65
|
-
lines.push(` SapError,`);
|
|
66
|
-
}
|
|
67
|
-
lines.push(` ODataError,`);
|
|
68
|
-
lines.push(` EntityNotFoundError,`);
|
|
69
|
-
lines.push(` ParseError,`);
|
|
70
|
-
if (isV4) {
|
|
71
|
-
// V4 exports
|
|
72
|
-
lines.push(` // OData V4`);
|
|
73
|
-
lines.push(` ODataV4,`);
|
|
74
|
-
lines.push(` ODataV4CollectionResponse,`);
|
|
75
|
-
lines.push(` ODataV4ValueResponse,`);
|
|
76
|
-
lines.push(` ODataV4Annotations,`);
|
|
77
|
-
lines.push(` ODataV4ClientConfig,`);
|
|
78
|
-
lines.push(` buildEntityPathV4,`);
|
|
79
|
-
lines.push(` type ODataV4QueryOptions,`);
|
|
80
|
-
lines.push(` type ODataV4RequestOptions,`);
|
|
81
|
-
lines.push(` type ODataV4ClientConfigService,`);
|
|
82
|
-
lines.push(` type PagedResultV4,`);
|
|
83
|
-
} else {
|
|
84
|
-
// V2 exports
|
|
85
|
-
lines.push(` // OData V2`);
|
|
86
|
-
lines.push(` OData,`);
|
|
87
|
-
lines.push(` ODataSingleResponse,`);
|
|
88
|
-
lines.push(` ODataCollectionResponse,`);
|
|
89
|
-
lines.push(` ODataCollectionResponseWithMeta,`);
|
|
90
|
-
lines.push(` ODataValueResponse,`);
|
|
91
|
-
lines.push(` EntityMetadata,`);
|
|
92
|
-
lines.push(` MediaMetadata,`);
|
|
93
|
-
lines.push(` DeferredContent,`);
|
|
94
|
-
lines.push(` ODataClientConfig,`);
|
|
95
|
-
lines.push(` buildEntityPath,`);
|
|
96
|
-
lines.push(` DEFAULT_HEADERS,`);
|
|
97
|
-
lines.push(` MERGE_HEADERS,`);
|
|
98
|
-
lines.push(` type ODataQueryOptions,`);
|
|
99
|
-
lines.push(` type ODataRequestOptions,`);
|
|
100
|
-
lines.push(` type ODataClientConfigService,`);
|
|
101
|
-
lines.push(` type PagedResult,`);
|
|
102
|
-
}
|
|
103
|
-
lines.push(` // Query Builder`);
|
|
104
|
-
lines.push(` FilterExpression,`);
|
|
105
|
-
lines.push(` StringPath,`);
|
|
106
|
-
lines.push(` NumberPath,`);
|
|
107
|
-
lines.push(` BooleanPath,`);
|
|
108
|
-
lines.push(` DateTimePath,`);
|
|
109
|
-
lines.push(` EntityPath,`);
|
|
110
|
-
lines.push(` CollectionPath,`);
|
|
111
|
-
lines.push(` QueryBuilder,`);
|
|
112
|
-
lines.push(` createQueryPaths,`);
|
|
113
|
-
lines.push(` createQueryBuilder,`);
|
|
114
|
-
lines.push(` type FieldToPath,`);
|
|
115
|
-
lines.push(` type QueryPaths,`);
|
|
116
|
-
lines.push(` type SelectableKeys,`);
|
|
117
|
-
lines.push(` type ExpandableKeys,`);
|
|
118
|
-
lines.push(` type BuiltQuery`);
|
|
119
|
-
lines.push(`} from "@odata-effect/odata-effect"`);
|
|
52
|
+
lines.push(`} from "./Models"`);
|
|
120
53
|
lines.push(``);
|
|
121
54
|
// Individual Entity Services (tree-shakable module namespace re-exports)
|
|
122
55
|
lines.push(`// Individual Entity Services (tree-shakable)`);
|
|
123
56
|
for (const entitySet of dataModel.entitySets.values()) {
|
|
124
57
|
const serviceClassName = (0, _NamingHelper.getServiceClassName)(entitySet.name);
|
|
125
|
-
lines.push(`export * as ${serviceClassName} from "./${serviceClassName}
|
|
58
|
+
lines.push(`export * as ${serviceClassName} from "./${serviceClassName}"`);
|
|
126
59
|
}
|
|
127
60
|
lines.push(``);
|
|
128
61
|
// Promise-based Entity Services (for non-Effect environments)
|
|
129
62
|
lines.push(`// Promise-based Entity Services (for non-Effect environments)`);
|
|
130
63
|
for (const entitySet of dataModel.entitySets.values()) {
|
|
131
64
|
const promiseServiceName = (0, _ServiceFnPromiseGenerator.getPromiseServiceName)(entitySet.name);
|
|
132
|
-
lines.push(`export * as ${promiseServiceName} from "./${promiseServiceName}
|
|
65
|
+
lines.push(`export * as ${promiseServiceName} from "./${promiseServiceName}"`);
|
|
66
|
+
}
|
|
67
|
+
lines.push(``);
|
|
68
|
+
// Operations (FunctionImports, Functions, Actions) - only if there are unbound operations
|
|
69
|
+
const hasUnboundOperations = Array.from(dataModel.operations.values()).some(op => !op.isBound);
|
|
70
|
+
if (hasUnboundOperations) {
|
|
71
|
+
lines.push(`// Operations (FunctionImports, Functions, Actions)`);
|
|
72
|
+
const operationsModuleName = (0, _OperationsGenerator.getOperationsModuleName)();
|
|
73
|
+
lines.push(`export * as ${operationsModuleName} from "./${operationsModuleName}"`);
|
|
74
|
+
lines.push(``);
|
|
133
75
|
}
|
|
76
|
+
// Path Builders (tree-shakable navigation)
|
|
77
|
+
lines.push(`// Path Builders (tree-shakable navigation)`);
|
|
78
|
+
const pathBuildersModuleName = (0, _NavigationGenerator.getPathBuildersModuleName)();
|
|
79
|
+
lines.push(`export * from "./${pathBuildersModuleName}"`);
|
|
134
80
|
lines.push(``);
|
|
135
81
|
// Query Models
|
|
136
82
|
lines.push(`// Query Models`);
|
|
@@ -157,7 +103,7 @@ const generateIndex = dataModel => {
|
|
|
157
103
|
const isLast = i === queryExports.length - 1;
|
|
158
104
|
lines.push(` ${queryExports[i]}${isLast ? "" : ","}`);
|
|
159
105
|
}
|
|
160
|
-
lines.push(`} from "./QueryModels
|
|
106
|
+
lines.push(`} from "./QueryModels"`);
|
|
161
107
|
return lines.join("\n");
|
|
162
108
|
};
|
|
163
109
|
exports.generateIndex = generateIndex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexGenerator.js","names":["_NamingHelper","require","_ServiceFnPromiseGenerator","generateIndex","dataModel","lines","push","serviceName","modelExports","enumType","enumTypes","values","name","complexType","complexTypes","getEditableTypeName","entityType","entityTypes","keys","length","getIdTypeName","i","isLast","
|
|
1
|
+
{"version":3,"file":"IndexGenerator.js","names":["_NamingHelper","require","_NavigationGenerator","_OperationsGenerator","_ServiceFnPromiseGenerator","generateIndex","dataModel","lines","push","serviceName","modelExports","enumType","enumTypes","values","name","complexType","complexTypes","getEditableTypeName","entityType","entityTypes","keys","length","getIdTypeName","i","isLast","entitySet","entitySets","serviceClassName","getServiceClassName","promiseServiceName","getPromiseServiceName","hasUnboundOperations","Array","from","operations","some","op","isBound","operationsModuleName","getOperationsModuleName","pathBuildersModuleName","getPathBuildersModuleName","queryExports","getQueryInstanceName","getQueryInterfaceName","get","entityTypeFqName","getQueryFactoryName","join","exports"],"sources":["../../../src/generator/IndexGenerator.ts"],"sourcesContent":[null],"mappings":";;;;;;AAMA,IAAAA,aAAA,GAAAC,OAAA;AAQA,IAAAC,oBAAA,GAAAD,OAAA;AACA,IAAAE,oBAAA,GAAAF,OAAA;AACA,IAAAG,0BAAA,GAAAH,OAAA;AAEA;;;;;;AAMO,MAAMI,aAAa,GAAIC,SAAoB,IAAY;EAC5D,MAAMC,KAAK,GAAkB,EAAE;EAE/B;EACAA,KAAK,CAACC,IAAI,CAAC,KAAK,CAAC;EACjBD,KAAK,CAACC,IAAI,CAAC,oCAAoCF,SAAS,CAACG,WAAW,WAAW,CAAC;EAChFF,KAAK,CAACC,IAAI,CAAC,mCAAmC,CAAC;EAC/CD,KAAK,CAACC,IAAI,CAAC,IAAI,CAAC;EAChBD,KAAK,CAACC,IAAI,CAAC,iBAAiB,CAAC;EAC7BD,KAAK,CAACC,IAAI,CAAC,KAAK,CAAC;EACjBD,KAAK,CAACC,IAAI,CAAC,EAAE,CAAC;EAEd;EACAD,KAAK,CAACC,IAAI,CAAC,WAAW,CAAC;EACvBD,KAAK,CAACC,IAAI,CAAC,UAAU,CAAC;EAEtB,MAAME,YAAY,GAAkB,EAAE;EAEtC;EACA,KAAK,MAAMC,QAAQ,IAAIL,SAAS,CAACM,SAAS,CAACC,MAAM,EAAE,EAAE;IACnDH,YAAY,CAACF,IAAI,CAACG,QAAQ,CAACG,IAAI,CAAC;EAClC;EAEA;EACA,KAAK,MAAMC,WAAW,IAAIT,SAAS,CAACU,YAAY,CAACH,MAAM,EAAE,EAAE;IACzDH,YAAY,CAACF,IAAI,CAACO,WAAW,CAACD,IAAI,CAAC;IACnCJ,YAAY,CAACF,IAAI,CAAC,IAAAS,iCAAmB,EAACF,WAAW,CAACD,IAAI,CAAC,CAAC;EAC1D;EAEA;EACA,KAAK,MAAMI,UAAU,IAAIZ,SAAS,CAACa,WAAW,CAACN,MAAM,EAAE,EAAE;IACvDH,YAAY,CAACF,IAAI,CAACU,UAAU,CAACJ,IAAI,CAAC;IAClC,IAAII,UAAU,CAACE,IAAI,CAACC,MAAM,GAAG,CAAC,EAAE;MAC9BX,YAAY,CAACF,IAAI,CAAC,IAAAc,2BAAa,EAACJ,UAAU,CAACJ,IAAI,CAAC,CAAC;IACnD;IACAJ,YAAY,CAACF,IAAI,CAAC,IAAAS,iCAAmB,EAACC,UAAU,CAACJ,IAAI,CAAC,CAAC;EACzD;EAEA,KAAK,IAAIS,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,YAAY,CAACW,MAAM,EAAEE,CAAC,EAAE,EAAE;IAC5C,MAAMC,MAAM,GAAGD,CAAC,KAAKb,YAAY,CAACW,MAAM,GAAG,CAAC;IAC5Cd,KAAK,CAACC,IAAI,CAAC,KAAKE,YAAY,CAACa,CAAC,CAAC,GAAGC,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;EACxD;EAEAjB,KAAK,CAACC,IAAI,CAAC,mBAAmB,CAAC;EAC/BD,KAAK,CAACC,IAAI,CAAC,EAAE,CAAC;EAEd;EACAD,KAAK,CAACC,IAAI,CAAC,+CAA+C,CAAC;EAC3D,KAAK,MAAMiB,SAAS,IAAInB,SAAS,CAACoB,UAAU,CAACb,MAAM,EAAE,EAAE;IACrD,MAAMc,gBAAgB,GAAG,IAAAC,iCAAmB,EAACH,SAAS,CAACX,IAAI,CAAC;IAC5DP,KAAK,CAACC,IAAI,CAAC,eAAemB,gBAAgB,YAAYA,gBAAgB,GAAG,CAAC;EAC5E;EACApB,KAAK,CAACC,IAAI,CAAC,EAAE,CAAC;EAEd;EACAD,KAAK,CAACC,IAAI,CAAC,gEAAgE,CAAC;EAC5E,KAAK,MAAMiB,SAAS,IAAInB,SAAS,CAACoB,UAAU,CAACb,MAAM,EAAE,EAAE;IACrD,MAAMgB,kBAAkB,GAAG,IAAAC,gDAAqB,EAACL,SAAS,CAACX,IAAI,CAAC;IAChEP,KAAK,CAACC,IAAI,CAAC,eAAeqB,kBAAkB,YAAYA,kBAAkB,GAAG,CAAC;EAChF;EACAtB,KAAK,CAACC,IAAI,CAAC,EAAE,CAAC;EAEd;EACA,MAAMuB,oBAAoB,GAAGC,KAAK,CAACC,IAAI,CAAC3B,SAAS,CAAC4B,UAAU,CAACrB,MAAM,EAAE,CAAC,CAACsB,IAAI,CAAEC,EAAE,IAAK,CAACA,EAAE,CAACC,OAAO,CAAC;EAChG,IAAIN,oBAAoB,EAAE;IACxBxB,KAAK,CAACC,IAAI,CAAC,qDAAqD,CAAC;IACjE,MAAM8B,oBAAoB,GAAG,IAAAC,4CAAuB,GAAE;IACtDhC,KAAK,CAACC,IAAI,CAAC,eAAe8B,oBAAoB,YAAYA,oBAAoB,GAAG,CAAC;IAClF/B,KAAK,CAACC,IAAI,CAAC,EAAE,CAAC;EAChB;EAEA;EACAD,KAAK,CAACC,IAAI,CAAC,6CAA6C,CAAC;EACzD,MAAMgC,sBAAsB,GAAG,IAAAC,8CAAyB,GAAE;EAC1DlC,KAAK,CAACC,IAAI,CAAC,oBAAoBgC,sBAAsB,GAAG,CAAC;EACzDjC,KAAK,CAACC,IAAI,CAAC,EAAE,CAAC;EAEd;EACAD,KAAK,CAACC,IAAI,CAAC,iBAAiB,CAAC;EAC7BD,KAAK,CAACC,IAAI,CAAC,UAAU,CAAC;EAEtB,MAAMkC,YAAY,GAAkB,EAAE;EAEtC;EACA,KAAK,MAAM3B,WAAW,IAAIT,SAAS,CAACU,YAAY,CAACH,MAAM,EAAE,EAAE;IACzD6B,YAAY,CAAClC,IAAI,CAAC,IAAAmC,kCAAoB,EAAC5B,WAAW,CAACD,IAAI,CAAC,CAAC;IACzD4B,YAAY,CAAClC,IAAI,CAAC,QAAQ,IAAAoC,mCAAqB,EAAC7B,WAAW,CAACD,IAAI,CAAC,EAAE,CAAC;EACtE;EAEA;EACA,KAAK,MAAMI,UAAU,IAAIZ,SAAS,CAACa,WAAW,CAACN,MAAM,EAAE,EAAE;IACvD6B,YAAY,CAAClC,IAAI,CAAC,IAAAmC,kCAAoB,EAACzB,UAAU,CAACJ,IAAI,CAAC,CAAC;IACxD4B,YAAY,CAAClC,IAAI,CAAC,QAAQ,IAAAoC,mCAAqB,EAAC1B,UAAU,CAACJ,IAAI,CAAC,EAAE,CAAC;EACrE;EAEA;EACA,KAAK,MAAMW,SAAS,IAAInB,SAAS,CAACoB,UAAU,CAACb,MAAM,EAAE,EAAE;IACrD,MAAMK,UAAU,GAAGZ,SAAS,CAACa,WAAW,CAAC0B,GAAG,CAACpB,SAAS,CAACqB,gBAAgB,CAAC;IACxE,IAAI5B,UAAU,EAAE;MACdwB,YAAY,CAAClC,IAAI,CAAC,IAAAuC,iCAAmB,EAAC7B,UAAU,CAACJ,IAAI,CAAC,CAAC;IACzD;EACF;EAEA,KAAK,IAAIS,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmB,YAAY,CAACrB,MAAM,EAAEE,CAAC,EAAE,EAAE;IAC5C,MAAMC,MAAM,GAAGD,CAAC,KAAKmB,YAAY,CAACrB,MAAM,GAAG,CAAC;IAC5Cd,KAAK,CAACC,IAAI,CAAC,KAAKkC,YAAY,CAACnB,CAAC,CAAC,GAAGC,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;EACxD;EAEAjB,KAAK,CAACC,IAAI,CAAC,wBAAwB,CAAC;EAEpC,OAAOD,KAAK,CAACyC,IAAI,CAAC,IAAI,CAAC;AACzB,CAAC;AAAAC,OAAA,CAAA5C,aAAA,GAAAA,aAAA","ignoreList":[]}
|
|
@@ -87,10 +87,13 @@ const getServiceClassName = entitySetName => {
|
|
|
87
87
|
// Remove trailing 's' if present to singularize
|
|
88
88
|
let singular = entitySetName;
|
|
89
89
|
if (singular.endsWith("ies")) {
|
|
90
|
+
// "Categories" -> "Category"
|
|
90
91
|
singular = singular.slice(0, -3) + "y";
|
|
91
|
-
} else if (singular.endsWith("
|
|
92
|
+
} else if (singular.endsWith("xes") || singular.endsWith("ches") || singular.endsWith("shes") || singular.endsWith("sses") || singular.endsWith("zes")) {
|
|
93
|
+
// "Boxes" -> "Box", "Beaches" -> "Beach", etc.
|
|
92
94
|
singular = singular.slice(0, -2);
|
|
93
95
|
} else if (singular.endsWith("s") && !singular.endsWith("ss")) {
|
|
96
|
+
// "Products" -> "Product", "Airlines" -> "Airline"
|
|
94
97
|
singular = singular.slice(0, -1);
|
|
95
98
|
}
|
|
96
99
|
return `${toPascalCase(singular)}Service`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NamingHelper.js","names":["toPascalCase","str","replace","_","char","toUpperCase","exports","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;;;;;;;;;;AAUO,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;;;;;;;;;;AAAAC,OAAA,CAAAN,YAAA,GAAAA,YAAA;AAUO,MAAMO,WAAW,GAAIN,GAAW,IAAY;EACjD,MAAMO,MAAM,GAAGR,YAAY,CAACC,GAAG,CAAC;EAChC,OAAOO,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,EAAE,GAAGF,MAAM,CAACG,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;AAAAL,OAAA,CAAAC,WAAA,GAAAA,WAAA;AAOO,MAAMK,iBAAiB,GAAIX,GAAW,IAAY;EACvD;EACA,IAAI,QAAQ,CAACY,IAAI,CAACZ,GAAG,CAAC,EAAE;IACtB,OAAO,IAAIA,GAAG,EAAE;EAClB;EACA;EACA,OAAOA,GAAG,CAACC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;AAC5C,CAAC;AAED;;;;;;AAAAI,OAAA,CAAAM,iBAAA,GAAAA,iBAAA;AAMO,MAAME,eAAe,GAAIC,SAAiB,IAAY;EAC3D,OAAOR,WAAW,CAACK,iBAAiB,CAACG,SAAS,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;AAAAT,OAAA,CAAAQ,eAAA,GAAAA,eAAA;AAMO,MAAME,YAAY,GAAID,SAAiB,IAAY;EACxD,OAAOf,YAAY,CAACY,iBAAiB,CAACG,SAAS,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;AAAAT,OAAA,CAAAU,YAAA,GAAAA,YAAA;AASO,MAAMC,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","exports","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":[]}
|