firebase-contract 0.1.0-rc.5 → 0.1.0-rc.6
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 +122 -82
- package/dist/lib/_internal/compiler/compiler.d.ts +5 -4
- package/dist/lib/_internal/compiler/compiler.d.ts.map +1 -1
- package/dist/lib/_internal/compiler/compiler.js +151 -23
- package/dist/lib/_internal/generators/api/api-dto-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/api/api-dto-generator.js +3 -1
- package/dist/lib/_internal/generators/api/api-types-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/api/api-types-generator.js +8 -5
- package/dist/lib/_internal/generators/api/api-validation-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/api/api-validation-generator.js +5 -2
- package/dist/lib/_internal/generators/api/task-payload-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/api/task-payload-generator.js +3 -1
- package/dist/lib/_internal/generators/generator.d.ts +16 -0
- package/dist/lib/_internal/generators/generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/generator.js +7 -1
- package/dist/lib/_internal/generators/support/naming.d.ts +1 -0
- package/dist/lib/_internal/generators/support/naming.d.ts.map +1 -1
- package/dist/lib/_internal/generators/support/naming.js +3 -0
- package/dist/lib/_internal/ir/build-ir.d.ts.map +1 -1
- package/dist/lib/_internal/ir/build-ir.js +2 -0
- package/dist/lib/_internal/ir/ir.d.ts +2 -0
- package/dist/lib/_internal/ir/ir.d.ts.map +1 -1
- package/dist/lib/_internal/parser/parse.d.ts.map +1 -1
- package/dist/lib/_internal/parser/parse.js +149 -16
- package/dist/lib/_internal/parser/raw-document.d.ts +34 -7
- package/dist/lib/_internal/parser/raw-document.d.ts.map +1 -1
- package/dist/lib/cli/commands/generate.js +1 -1
- package/dist/lib/cli/commands/init.d.ts.map +1 -1
- package/dist/lib/cli/commands/init.js +5 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,36 +32,49 @@ Provides the `firebase-contract` (alias `fbc`) CLI and a programmatic API.
|
|
|
32
32
|
```bash
|
|
33
33
|
fbc init # scaffold contract.yml + firebase-contract.json
|
|
34
34
|
fbc validate # parse, resolve imports, semantically validate
|
|
35
|
-
fbc generate # run every
|
|
35
|
+
fbc generate # run every generator declared across the contract graph
|
|
36
36
|
fbc inspect # print the normalized IR (debugging)
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
### One-command generation
|
|
40
40
|
|
|
41
|
-
Each contract file
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
generate:
|
|
47
|
-
- { out: src, generators: [data-connect-graphql-split] }
|
|
48
|
-
- { out: ., generators: [sql-migrations] }
|
|
49
|
-
```
|
|
41
|
+
Each contract file declares the generators it uses in a top-level
|
|
42
|
+
`generators:` block — a name plus an output template. Declaring a
|
|
43
|
+
**document-scoped** generator (typescript-split, zod-split, …) runs it once for
|
|
44
|
+
that yml; **api-scoped** generators (api-types, api-validation, api-dto,
|
|
45
|
+
task-payloads) run for the entries that opt in (see below):
|
|
50
46
|
|
|
51
47
|
```yaml
|
|
52
48
|
# contract.yml (root)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
project:
|
|
50
|
+
aliases:
|
|
51
|
+
"#contracts/*": libs/contracts/src/* # out templates may target aliases
|
|
52
|
+
generators:
|
|
53
|
+
- { generator: typescript-split, out: "#contracts" }
|
|
54
|
+
- { generator: api-types, out: "#contracts/api-types/{api-name}" }
|
|
56
55
|
imports:
|
|
57
56
|
- ./apps/shop/data-connect/schema.yml
|
|
58
57
|
```
|
|
59
58
|
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
```yaml
|
|
60
|
+
# apps/shop/data-connect/schema.yml
|
|
61
|
+
generators:
|
|
62
|
+
- { generator: data-connect-graphql-split, out: src }
|
|
63
|
+
- { generator: sql-migrations, out: . }
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
- `out` resolves relative to the declaring yml; `#alias/...` prefixes resolve
|
|
67
|
+
through the **root** yml's `project.aliases` (relative to the root).
|
|
68
|
+
- Api-scoped templates may use `{api-name}` (kebab-cased name) and `{path}`
|
|
69
|
+
(REST path with `{param}` segments dropped).
|
|
70
|
+
- Entries reference declarations by name — nearest first (same yml → root).
|
|
71
|
+
|
|
72
|
+
`fbc generate contract.yml` materializes **all** declared outputs across the
|
|
73
|
+
whole import graph in one run. Passing `-o`/`-g` switches to single-target mode
|
|
62
74
|
(`fbc generate <entry> -o <dir> -g typescript,zod`), and
|
|
63
75
|
`firebase-contract.json` (`entry`, `outDir`, `generators`) can hold defaults.
|
|
64
76
|
|
|
77
|
+
|
|
65
78
|
### Generated-file headers
|
|
66
79
|
|
|
67
80
|
By default no banner is emitted. Opt in per run or per contract:
|
|
@@ -162,24 +175,24 @@ models:
|
|
|
162
175
|
|
|
163
176
|
| option | meaning |
|
|
164
177
|
| ----------------------------------- | -------------------------------------------------------- |
|
|
165
|
-
| `type` | scalar name, or an enum/model name |
|
|
166
|
-
| `optional` | value may be absent (`field?`) |
|
|
167
|
-
| `list` | value is an array of `type` |
|
|
168
|
-
| `id` | marks the (single) primary identifier |
|
|
169
|
-
| `unique` | field-level unique → `@unique` |
|
|
170
|
-
| `relation` | model-typed field is a foreign-key relation (see below) |
|
|
171
|
-
| `col` | Data Connect column dataType (Int64 PKs default to `bigserial`) |
|
|
172
|
-
| `default` | `@default(expr: …)` on the DC column |
|
|
173
|
-
| `literal` | pin to one literal value (union discriminant tags) |
|
|
174
|
-
| `nullable` | value may be `null` (`.nullable()` / `\| null`) |
|
|
175
|
-
| `description` | doc comment carried into generated output |
|
|
176
|
-
| `jsdoc` | render the description as a JSDoc block (Firestore fields) |
|
|
178
|
+
| `type` | document | scalar name, or an enum/model name |
|
|
179
|
+
| `optional` | document | value may be absent (`field?`) |
|
|
180
|
+
| `list` | document | value is an array of `type` |
|
|
181
|
+
| `id` | document | marks the (single) primary identifier |
|
|
182
|
+
| `unique` | document | field-level unique → `@unique` |
|
|
183
|
+
| `relation` | document | model-typed field is a foreign-key relation (see below) |
|
|
184
|
+
| `col` | document | Data Connect column dataType (Int64 PKs default to `bigserial`) |
|
|
185
|
+
| `default` | document | `@default(expr: …)` on the DC column |
|
|
186
|
+
| `literal` | document | pin to one literal value (union discriminant tags) |
|
|
187
|
+
| `nullable` | document | value may be `null` (`.nullable()` / `\| null`) |
|
|
188
|
+
| `description` | document | doc comment carried into generated output |
|
|
189
|
+
| `jsdoc` | document | render the description as a JSDoc block (Firestore fields) |
|
|
177
190
|
| **constraints** → | |
|
|
178
|
-
| `min` / `max` | numeric bounds |
|
|
179
|
-
| `minLength` / `maxLength` | string/array length bounds |
|
|
180
|
-
| `nonempty` | non-empty string/array |
|
|
181
|
-
| `pattern` | regex the string must match |
|
|
182
|
-
| `email` / `url` | string format |
|
|
191
|
+
| `min` / `max` | document | numeric bounds |
|
|
192
|
+
| `minLength` / `maxLength` | document | string/array length bounds |
|
|
193
|
+
| `nonempty` | document | non-empty string/array |
|
|
194
|
+
| `pattern` | document | regex the string must match |
|
|
195
|
+
| `email` / `url` | document | string format |
|
|
183
196
|
|
|
184
197
|
Constraints flow into the Zod schemas, the API request validation, and the
|
|
185
198
|
class-validator DTOs.
|
|
@@ -188,14 +201,14 @@ class-validator DTOs.
|
|
|
188
201
|
|
|
189
202
|
| option | meaning |
|
|
190
203
|
| ------------ | ------------------------------------------------------------------ |
|
|
191
|
-
| `key` | composite primary key field names (else the `id: true` field) |
|
|
192
|
-
| `table` | table name override (default: snake_case pluralization) |
|
|
193
|
-
| `gqlName` | GraphQL type name override |
|
|
194
|
-
| `fsName` | Firestore-side rename (avoid collisions with table models) |
|
|
195
|
-
| `directives` | `multi` = each type-level directive on its own line |
|
|
196
|
-
| `footer` | trailing comment block after the closing `}` in the schema file |
|
|
197
|
-
| `indexes` | composite `@index`/`@unique` (`{ fields, name?, unique?, expand? }` — `expand` renders args one per line) |
|
|
198
|
-
| `sql` | raw SQL constraints (see [SQL migrations](#sql-migrations)) |
|
|
204
|
+
| `key` | document | composite primary key field names (else the `id: true` field) |
|
|
205
|
+
| `table` | document | table name override (default: snake_case pluralization) |
|
|
206
|
+
| `gqlName` | document | GraphQL type name override |
|
|
207
|
+
| `fsName` | document | Firestore-side rename (avoid collisions with table models) |
|
|
208
|
+
| `directives` | document | `multi` = each type-level directive on its own line |
|
|
209
|
+
| `footer` | document | trailing comment block after the closing `}` in the schema file |
|
|
210
|
+
| `indexes` | document | composite `@index`/`@unique` (`{ fields, name?, unique?, expand? }` — `expand` renders args one per line) |
|
|
211
|
+
| `sql` | document | raw SQL constraints (see [SQL migrations](#sql-migrations)) |
|
|
199
212
|
|
|
200
213
|
### Embedded vs relation
|
|
201
214
|
|
|
@@ -273,14 +286,14 @@ Everything below exists to reproduce real hand-written `.gql` files byte-for-byt
|
|
|
273
286
|
|
|
274
287
|
| option | meaning |
|
|
275
288
|
| --- | --- |
|
|
276
|
-
| `gqlName` | rendered operation name (the yml key stays unique across services) |
|
|
277
|
-
| `footer` | trailing `# …` comment block after the operation |
|
|
278
|
-
| `raw` | emit the operation body verbatim (multi-model queries, `_or` keyset cursors — field checks are skipped) |
|
|
279
|
-
| `single: id \| key` | single-row lookup (`product(id: $id)` / `product(key: { … })`) |
|
|
280
|
-
| `keyArg` / `keyVars` | update/delete key argument form and variable renames |
|
|
281
|
-
| `whereAnd: true` | render conditions as an `_and: [ … ]` array |
|
|
282
|
-
| `entityDir` | override the `operations/<entity>/` output directory |
|
|
283
|
-
| `style` | formatting hints: `signature`, `args`, `data`, `orderBy`, `auth`, `key`, `and`, `where` (`inline`/`multi`/`compact`/`bare`) |
|
|
289
|
+
| `gqlName` | document | rendered operation name (the yml key stays unique across services) |
|
|
290
|
+
| `footer` | document | trailing `# …` comment block after the operation |
|
|
291
|
+
| `raw` | document | emit the operation body verbatim (multi-model queries, `_or` keyset cursors — field checks are skipped) |
|
|
292
|
+
| `single: id \| document | key` | single-row lookup (`product(id: $id)` / `product(key: { … })`) |
|
|
293
|
+
| `keyArg` / `keyVars` | document | update/delete key argument form and variable renames |
|
|
294
|
+
| `whereAnd: true` | document | render conditions as an `_and: [ … ]` array |
|
|
295
|
+
| `entityDir` | document | override the `operations/<entity>/` output directory |
|
|
296
|
+
| `style` | document | formatting hints: `signature`, `args`, `data`, `orderBy`, `auth`, `key`, `and`, `where` (`inline`/`multi`/`compact`/`bare`) |
|
|
284
297
|
|
|
285
298
|
Inputs support `var` (variable rename), `required` (override optionality),
|
|
286
299
|
`literal` (fixed value, no variable), `flat` (write the FK column directly),
|
|
@@ -296,11 +309,13 @@ name as long as their connector sets don't overlap.
|
|
|
296
309
|
|
|
297
310
|
## API endpoints
|
|
298
311
|
|
|
299
|
-
Model application endpoints
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
(`
|
|
303
|
-
|
|
312
|
+
Model application endpoints in three kind-implied sections — `apis:` (https /
|
|
313
|
+
callable, keyed by REST path), `tasks:` (Cloud Tasks), and `events:` (Pub/Sub).
|
|
314
|
+
The api-scoped generators — request/response types (`api-types`),
|
|
315
|
+
request-validation Zod (`api-validation`), class-validator DTOs (`api-dto`),
|
|
316
|
+
and payload contracts (`task-payloads`) — run for the entries that opt in via
|
|
317
|
+
the section `defaults` or the entry's own `generators:`. A payload references a
|
|
318
|
+
model or declares inline fields; a void response maps to `void`.
|
|
304
319
|
|
|
305
320
|
```yaml
|
|
306
321
|
envelopes:
|
|
@@ -310,9 +325,10 @@ envelopes:
|
|
|
310
325
|
opId: string
|
|
311
326
|
enqueuedAt: int
|
|
312
327
|
|
|
313
|
-
|
|
328
|
+
tasks: # Cloud Tasks (kind implied)
|
|
329
|
+
defaults:
|
|
330
|
+
generators: [task-payloads] # section default: applies to entries below
|
|
314
331
|
createCatalog:
|
|
315
|
-
kind: task # product | callable | https | pubsub
|
|
316
332
|
envelope: RetryTaskPayload # wraps the product data
|
|
317
333
|
maxAttempts: 3
|
|
318
334
|
request:
|
|
@@ -322,17 +338,31 @@ apis:
|
|
|
322
338
|
response:
|
|
323
339
|
void: true
|
|
324
340
|
|
|
341
|
+
events: # Pub/Sub (kind implied)
|
|
325
342
|
generateAiResponse:
|
|
326
|
-
kind: pubsub
|
|
327
343
|
topic: ai-review-generate-response
|
|
328
344
|
timeoutSeconds: 540
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
345
|
+
generators: [task-payloads]
|
|
346
|
+
|
|
347
|
+
apis: # https/callable, keyed by REST path
|
|
348
|
+
defaults:
|
|
349
|
+
generators: [api-types, api-validation]
|
|
350
|
+
/shops/{slug}:
|
|
351
|
+
operationId: getShopBySlug
|
|
352
|
+
kind: callable # https (default) | callable
|
|
332
353
|
request: { fields: { slug: { type: string, nonempty: true } } }
|
|
333
354
|
response: { model: Shop }
|
|
355
|
+
generators: # entry-level wins over section defaults;
|
|
356
|
+
- api-types # an inline out overrides the declared template
|
|
357
|
+
- { generator: api-dto, out: "src/entries/{path}" }
|
|
334
358
|
```
|
|
335
359
|
|
|
360
|
+
Generator application resolves in two tiers — the section `defaults`
|
|
361
|
+
(`apis:/tasks:/events:` → `defaults.generators`) and the entry's own
|
|
362
|
+
`generators:` (which replaces the defaults). `apis:` keys must be REST paths
|
|
363
|
+
(`/...`) with an `operationId`; tasks and Pub/Sub events live in their own
|
|
364
|
+
sections.
|
|
365
|
+
|
|
336
366
|
For `createCatalog` this yields `CreateCatalogTaskData`, `CreateCatalogTaskPayload =
|
|
337
367
|
RetryTaskPayload<CreateCatalogTaskData>`, and `CREATE_CATALOG_MAX_ATTEMPTS`, plus the
|
|
338
368
|
request types, Zod schema, and DTO.
|
|
@@ -446,6 +476,8 @@ project:
|
|
|
446
476
|
idCodec:
|
|
447
477
|
minLength: 8
|
|
448
478
|
alphabet: <your-shuffled-sqids-alphabet>
|
|
479
|
+
aliases:
|
|
480
|
+
"#contracts/*": libs/contracts/src/*
|
|
449
481
|
```
|
|
450
482
|
|
|
451
483
|
- `services` (`name`/`database`) feed the `FIRESTORE_DATABASES` constants in the
|
|
@@ -454,6 +486,9 @@ project:
|
|
|
454
486
|
`id-codecs` generator also emits a self-contained `id-core.ts` (the
|
|
455
487
|
encode/decode primitives), so nothing about id encoding lives outside the
|
|
456
488
|
contract.
|
|
489
|
+
- `aliases` maps `#alias/...` out-template prefixes to paths relative to the
|
|
490
|
+
**root** yml, so imported contracts can target shared libs without relative
|
|
491
|
+
path gymnastics (longest prefix wins).
|
|
457
492
|
- `codebases` / service `location` + `connectors` are consumed by the optional
|
|
458
493
|
`config` generator (preview), which emits per-service `dataconnect.yaml`,
|
|
459
494
|
per-connector `connector.yaml`, and the `FIRESTORE_DATABASES` /
|
|
@@ -465,32 +500,37 @@ project:
|
|
|
465
500
|
|
|
466
501
|
# Generators
|
|
467
502
|
|
|
468
|
-
| name | output | notes |
|
|
469
|
-
| ------------------------ | ----------------------------- | ------------------------------------------------------ |
|
|
470
|
-
| `typescript` | `types.ts` | interfaces + const/union enums |
|
|
471
|
-
| `typescript-split` | `types/<table>.ts` + `types.ts` barrel | one file per table; enums/embedded objects co-located |
|
|
472
|
-
| `zod` | `schemas.ts` | `z.object` schemas (constraints, `z.lazy` model refs) |
|
|
473
|
-
| `zod-split` | `schemas/<table>.ts` + `schemas.ts` barrel | split variant of `zod` |
|
|
474
|
-
| `data-connect-graphql` | `schema.gql` | `type … @table(name, key)`; `@col`/`@unique`/`@index`/`@default` |
|
|
475
|
-
| `data-connect-graphql-split` | `schema/<table>.gql` | same schema, one file per table (enums co-located) |
|
|
476
|
-
| `data-connect-operations`| `<connector>/operations.gql` + `.ts` | queries/mutations (where ops, orderBy, limit, aggregate, exprs, inc), per connector |
|
|
477
|
-
| `data-connect-operations-split` | `<connector>/operations/<entity>/{queries,mutations}.gql` | real Data Connect repo layout; shared types stay in `typescript`/`zod` outputs |
|
|
478
|
-
| `data-connect-adapter` | `data-connect-adapters.ts` | convert `Any` rows ⇄ logical types |
|
|
479
|
-
| `firestore-types` | `firestore-types.ts` | naive TS types with Firestore `Timestamp` (all models) |
|
|
480
|
-
| `firestore` | `firestore.ts` | Firestore projection Zod schemas (derived, denormalized) |
|
|
481
|
-
| `firestore-split` | `firestore/<collection>.ts` + `firestore.ts` barrel | one file per projection; `_meta_` under `firestore/_/`; DC-schema `.pick()` reuse; `FIRESTORE_DATABASES` constants in the barrel |
|
|
482
|
-
| `api-types` | `api-types.ts` | endpoint request/response types |
|
|
483
|
-
| `api-validation` | `api-validation.ts` | endpoint request-validation Zod |
|
|
484
|
-
| `api-dto` | `api-dtos.ts` | class-validator DTO classes |
|
|
485
|
-
| `task-payloads` | `task-payloads.ts` | envelopes + `*TaskData`/`*TaskPayload` + constants |
|
|
486
|
-
| `sql-migrations` | `migrations/constraints.sql` | composite FK / CHECK / index SQL |
|
|
487
|
-
| `id-codecs` | `id-codecs.ts` (+ `id-core.ts`) | typed per-entity id encode/decode wrappers; emits the Sqids primitives when `project.idCodec` is set |
|
|
488
|
-
| `unions` | `unions.ts` | Zod discriminated unions + TS union types |
|
|
489
|
-
| `config` | `dataconnect.yaml`, `connector.yaml`, `constants.ts` | DC configs + sync constants (preview — see [Project config](#project-config)) |
|
|
503
|
+
| name | scope | output | notes |
|
|
504
|
+
| ------------------------ | -------- | ----------------------------- | ------------------------------------------------------ |
|
|
505
|
+
| `typescript` | document | `types.ts` | interfaces + const/union enums |
|
|
506
|
+
| `typescript-split` | document | `types/<table>.ts` + `types.ts` barrel | one file per table; enums/embedded objects co-located |
|
|
507
|
+
| `zod` | document | `schemas.ts` | `z.object` schemas (constraints, `z.lazy` model refs) |
|
|
508
|
+
| `zod-split` | document | `schemas/<table>.ts` + `schemas.ts` barrel | split variant of `zod` |
|
|
509
|
+
| `data-connect-graphql` | document | `schema.gql` | `type … @table(name, key)`; `@col`/`@unique`/`@index`/`@default` |
|
|
510
|
+
| `data-connect-graphql-split` | document | `schema/<table>.gql` | same schema, one file per table (enums co-located) |
|
|
511
|
+
| `data-connect-operations`| document | `<connector>/operations.gql` + `.ts` | queries/mutations (where ops, orderBy, limit, aggregate, exprs, inc), per connector |
|
|
512
|
+
| `data-connect-operations-split` | document | `<connector>/operations/<entity>/{queries,mutations}.gql` | real Data Connect repo layout; shared types stay in `typescript`/`zod` outputs |
|
|
513
|
+
| `data-connect-adapter` | document | `data-connect-adapters.ts` | convert `Any` rows ⇄ logical types |
|
|
514
|
+
| `firestore-types` | document | `firestore-types.ts` | naive TS types with Firestore `Timestamp` (all models) |
|
|
515
|
+
| `firestore` | document | `firestore.ts` | Firestore projection Zod schemas (derived, denormalized) |
|
|
516
|
+
| `firestore-split` | document | `firestore/<collection>.ts` + `firestore.ts` barrel | one file per projection; `_meta_` under `firestore/_/`; DC-schema `.pick()` reuse; `FIRESTORE_DATABASES` constants in the barrel |
|
|
517
|
+
| `api-types` | api | `api-types.ts` | endpoint request/response types |
|
|
518
|
+
| `api-validation` | api | `api-validation.ts` | endpoint request-validation Zod |
|
|
519
|
+
| `api-dto` | api | `api-dtos.ts` | class-validator DTO classes |
|
|
520
|
+
| `task-payloads` | api | `task-payloads.ts` | envelopes + `*TaskData`/`*TaskPayload` + constants |
|
|
521
|
+
| `sql-migrations` | document | `migrations/constraints.sql` | composite FK / CHECK / index SQL |
|
|
522
|
+
| `id-codecs` | document | `id-codecs.ts` (+ `id-core.ts`) | typed per-entity id encode/decode wrappers; emits the Sqids primitives when `project.idCodec` is set |
|
|
523
|
+
| `unions` | document | `unions.ts` | Zod discriminated unions + TS union types |
|
|
524
|
+
| `config` | document | `dataconnect.yaml`, `connector.yaml`, `constants.ts` | DC configs + sync constants (preview — see [Project config](#project-config)) |
|
|
490
525
|
|
|
491
526
|
Each generator emits nothing when its section is absent, so a small contract
|
|
492
527
|
produces a small output. Select a subset with `-g`.
|
|
493
528
|
|
|
529
|
+
**Scope** decides how a `generators:` declaration takes effect: `document`
|
|
530
|
+
generators run once for the yml that declares them; `api` generators run only
|
|
531
|
+
for the entries that apply them (section `defaults.generators` → entry
|
|
532
|
+
`generators:`, entry wins).
|
|
533
|
+
|
|
494
534
|
### The `Any` boundary
|
|
495
535
|
|
|
496
536
|
Data Connect stores JSON and embedded objects as the `Any` scalar, erasing the
|
|
@@ -518,7 +558,7 @@ const result = generate('contract.yml', {
|
|
|
518
558
|
write: true,
|
|
519
559
|
})
|
|
520
560
|
|
|
521
|
-
// Every
|
|
561
|
+
// Every generator declared across the import graph:
|
|
522
562
|
const all = generateAll('contract.yml', { write: true })
|
|
523
563
|
```
|
|
524
564
|
|
|
@@ -43,10 +43,11 @@ export interface GenerateAllResult {
|
|
|
43
43
|
ok: boolean;
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
|
-
* Run every
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
46
|
+
* Run every generator declared across the entry contract and its (transitive)
|
|
47
|
+
* imports — the one-command flow: each contract file declares its generators
|
|
48
|
+
* (`generators:` + section defaults / entry applications) and
|
|
49
|
+
* `fbc generate <root>` materializes all of them. Output dirs resolve relative
|
|
50
|
+
* to the declaring yml (or the root yml for `#alias/...` templates).
|
|
50
51
|
*/
|
|
51
52
|
export declare const generateAll: (entryPath: string, options?: {
|
|
52
53
|
registry?: GeneratorRegistry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/compiler/compiler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAA;AAEhE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/compiler/compiler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAA;AAEhE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAU,WAAW,EAAqC,MAAM,2BAA2B,CAAA;AAElG,OAAO,EAAkB,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAG3E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAG5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAE7D,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,EAAE,CAAA;IACN,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,WAAW,MAAM,EAAE,UAAS,cAAmB,KAAG,aAUzE,CAAA;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,MAAM,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,KAAK,EAAE,aAAa,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,oBAAoB,EAAE,CAAA;IAC/B,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,EAAE,EAAE,OAAO,CAAA;CACZ;AAwJD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,WAAW,MAAM,EACjB,UAAS;IAAE,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAO,KACjH,iBA0CF,CAAA;AAED,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,mEAAmE;IACnE,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,aAAa,EAAE,KAAG,SAUlD,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,EAAE,CAAA;IACN,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,oFAAoF;IACpF,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,0DAA0D;IAC1D,EAAE,EAAE,OAAO,CAAA;CACZ;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,WAAW,MAAM,EAAE,SAAS,eAAe,KAAG,cAuCtE,CAAA"}
|
|
@@ -7,6 +7,7 @@ import { createFsLoader } from '../resolver/module-loader.js';
|
|
|
7
7
|
import { validateIr } from '../validation/validate.js';
|
|
8
8
|
import { createDefaultRegistry } from '../generators/index.js';
|
|
9
9
|
import { toHeaderComment } from '../generators/support/header.js';
|
|
10
|
+
import { kebabCase } from '../generators/support/naming.js';
|
|
10
11
|
/**
|
|
11
12
|
* Run the front end of the pipeline: resolve imports, build the IR, and run
|
|
12
13
|
* semantic validation. Generators are intentionally not involved here — the CLI
|
|
@@ -24,11 +25,125 @@ export const compile = (entryPath, options = {}) => {
|
|
|
24
25
|
diagnostics: [...importDiagnostics, ...buildDiagnostics, ...validationDiagnostics],
|
|
25
26
|
};
|
|
26
27
|
};
|
|
28
|
+
const OUT_PLACEHOLDER_RE = /\{(api-name|path)\}/;
|
|
29
|
+
/** `apis:/tasks:/events:` section a raw api belongs to (drives the section defaults lookup). */
|
|
30
|
+
const sectionOf = (api) => {
|
|
31
|
+
if (api.kind === 'task')
|
|
32
|
+
return 'tasks';
|
|
33
|
+
if (api.kind === 'pubsub')
|
|
34
|
+
return 'events';
|
|
35
|
+
return 'apis';
|
|
36
|
+
};
|
|
37
|
+
/** Drop `{param}` segments from a REST path and join the rest (`/ai-models/{id}` → `ai-models`). */
|
|
38
|
+
const pathSegments = (apiPath) => apiPath
|
|
39
|
+
.split('/')
|
|
40
|
+
.filter(segment => segment.length > 0 && !(segment.startsWith('{') && segment.endsWith('}')))
|
|
41
|
+
.join('/');
|
|
42
|
+
const expandOutTemplate = (template, api, diagnostics, source) => {
|
|
43
|
+
if (!OUT_PLACEHOLDER_RE.test(template))
|
|
44
|
+
return template;
|
|
45
|
+
if (!api) {
|
|
46
|
+
diagnostics.push(error('INVALID_OUT_TEMPLATE', `"${template}" uses api placeholders but the generator is document-scoped (${source})`));
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
let out = template.replaceAll('{api-name}', kebabCase(api.name));
|
|
50
|
+
if (out.includes('{path}')) {
|
|
51
|
+
if (!api.path) {
|
|
52
|
+
diagnostics.push(error('INVALID_OUT_TEMPLATE', `"${template}" uses {path} but api "${api.name}" has no REST path (${source})`));
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
out = out.replaceAll('{path}', pathSegments(api.path));
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Resolve an out template to an absolute directory. `#alias/...` prefixes are
|
|
61
|
+
* matched against the root document's `project.aliases` (longest prefix wins)
|
|
62
|
+
* and resolve relative to the root yml; everything else resolves relative to
|
|
63
|
+
* the declaring yml — same as the legacy `generate:` form.
|
|
64
|
+
*/
|
|
65
|
+
const resolveOutDir = (out, declaringDoc, rootDoc, diagnostics) => {
|
|
66
|
+
if (!out.startsWith('#')) {
|
|
67
|
+
return join(dirname(declaringDoc.filePath), out);
|
|
68
|
+
}
|
|
69
|
+
const aliases = rootDoc.project?.aliases ?? {};
|
|
70
|
+
const candidates = Object.entries(aliases)
|
|
71
|
+
.map(([pattern, target]) => ({ prefix: pattern.endsWith('/*') ? pattern.slice(0, -2) : pattern, pattern, target }))
|
|
72
|
+
.filter(({ prefix }) => out === prefix || out.startsWith(`${prefix}/`))
|
|
73
|
+
.sort((a, b) => b.prefix.length - a.prefix.length);
|
|
74
|
+
const match = candidates[0];
|
|
75
|
+
if (!match) {
|
|
76
|
+
diagnostics.push(error('UNKNOWN_ALIAS', `No project.aliases entry matches "${out}" (declare it in the root contract)`));
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const rest = out.slice(match.prefix.length).replace(/^\//, '');
|
|
80
|
+
const targetBase = match.target.endsWith('/*') ? match.target.slice(0, -2) : match.target;
|
|
81
|
+
return join(dirname(rootDoc.filePath), targetBase, rest);
|
|
82
|
+
};
|
|
83
|
+
/** Find a generator declaration by name — nearest first: the declaring yml, then the root yml. */
|
|
84
|
+
const findGeneratorDecl = (name, doc, rootDoc) => doc.generatorDecls?.find(decl => decl.generator === name) ??
|
|
85
|
+
rootDoc.generatorDecls?.find(decl => decl.generator === name);
|
|
86
|
+
/**
|
|
87
|
+
* Build generator jobs from the declaration/application DSL:
|
|
88
|
+
* - api-scoped generators run for entries that opt in (section `defaults` →
|
|
89
|
+
* entry `generators:`, entry wins; no file-level tier by design)
|
|
90
|
+
* - document-scoped generators run once per yml that declares them
|
|
91
|
+
*/
|
|
92
|
+
const buildGeneratorJobs = (doc, rootDoc, registry, diagnostics) => {
|
|
93
|
+
const jobs = [];
|
|
94
|
+
const grouped = new Map();
|
|
95
|
+
for (const [apiName, rawApi] of Object.entries(doc.apis)) {
|
|
96
|
+
const uses = rawApi.generators ?? doc.sectionDefaults?.[sectionOf(rawApi)];
|
|
97
|
+
for (const use of uses ?? []) {
|
|
98
|
+
const decl = findGeneratorDecl(use.generator, doc, rootDoc);
|
|
99
|
+
const template = use.out ?? decl?.out;
|
|
100
|
+
if (template === undefined) {
|
|
101
|
+
diagnostics.push(error('UNKNOWN_GENERATOR_DECL', `Api "${apiName}" applies generator "${use.generator}" but no declaration with an "out" was found (${doc.filePath})`));
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const api = { name: apiName, ...(rawApi.path !== undefined ? { path: rawApi.path } : {}) };
|
|
105
|
+
const expanded = expandOutTemplate(template, api, diagnostics, doc.filePath);
|
|
106
|
+
if (expanded === undefined)
|
|
107
|
+
continue;
|
|
108
|
+
const outDir = resolveOutDir(expanded, doc, rootDoc, diagnostics);
|
|
109
|
+
if (outDir === undefined)
|
|
110
|
+
continue;
|
|
111
|
+
const key = `${use.generator}\u0000${outDir}`;
|
|
112
|
+
const existing = grouped.get(key);
|
|
113
|
+
if (existing) {
|
|
114
|
+
existing.apiNames?.push(apiName);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const job = { source: doc.filePath, generatorName: use.generator, outDir, apiNames: [apiName] };
|
|
118
|
+
grouped.set(key, job);
|
|
119
|
+
jobs.push(job);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
for (const decl of doc.generatorDecls ?? []) {
|
|
124
|
+
const generator = registry.get(decl.generator);
|
|
125
|
+
if (!generator) {
|
|
126
|
+
diagnostics.push(error('UNKNOWN_GENERATOR', `Unknown generator "${decl.generator}" (${doc.filePath})`));
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
if ((generator.scope ?? 'document') === 'api')
|
|
130
|
+
continue; // applied via entries, not by declaration
|
|
131
|
+
const expanded = expandOutTemplate(decl.out, undefined, diagnostics, doc.filePath);
|
|
132
|
+
if (expanded === undefined)
|
|
133
|
+
continue;
|
|
134
|
+
const outDir = resolveOutDir(expanded, doc, rootDoc, diagnostics);
|
|
135
|
+
if (outDir === undefined)
|
|
136
|
+
continue;
|
|
137
|
+
jobs.push({ source: doc.filePath, generatorName: decl.generator, outDir });
|
|
138
|
+
}
|
|
139
|
+
return jobs;
|
|
140
|
+
};
|
|
27
141
|
/**
|
|
28
|
-
* Run every
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
142
|
+
* Run every generator declared across the entry contract and its (transitive)
|
|
143
|
+
* imports — the one-command flow: each contract file declares its generators
|
|
144
|
+
* (`generators:` + section defaults / entry applications) and
|
|
145
|
+
* `fbc generate <root>` materializes all of them. Output dirs resolve relative
|
|
146
|
+
* to the declaring yml (or the root yml for `#alias/...` templates).
|
|
32
147
|
*/
|
|
33
148
|
export const generateAll = (entryPath, options = {}) => {
|
|
34
149
|
const { documents, diagnostics } = compile(entryPath, options);
|
|
@@ -38,27 +153,40 @@ export const generateAll = (entryPath, options = {}) => {
|
|
|
38
153
|
const collected = [...diagnostics];
|
|
39
154
|
const targets = [];
|
|
40
155
|
let ok = true;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
...(options.context ? { context: options.context } : {}),
|
|
50
|
-
...(options.loader ? { loader: options.loader } : {}),
|
|
51
|
-
});
|
|
52
|
-
// Per-target compiles revisit shared imports; keep only new diagnostics.
|
|
53
|
-
for (const diagnostic of result.diagnostics) {
|
|
54
|
-
if (!collected.some(d => d.code === diagnostic.code && d.message === diagnostic.message)) {
|
|
55
|
-
collected.push(diagnostic);
|
|
56
|
-
}
|
|
156
|
+
const registry = options.registry ?? createDefaultRegistry();
|
|
157
|
+
// Import order puts dependencies first, so the entry (root) document is last.
|
|
158
|
+
const rootDoc = documents[documents.length - 1];
|
|
159
|
+
const mergeDiagnostics = (incoming) => {
|
|
160
|
+
// Per-target compiles revisit shared imports; keep only new diagnostics.
|
|
161
|
+
for (const diagnostic of incoming) {
|
|
162
|
+
if (!collected.some(d => d.code === diagnostic.code && d.message === diagnostic.message)) {
|
|
163
|
+
collected.push(diagnostic);
|
|
57
164
|
}
|
|
58
|
-
if (!result.ok)
|
|
59
|
-
ok = false;
|
|
60
|
-
targets.push({ source: doc.filePath, outDir, generators: output.generators, files: result.files });
|
|
61
165
|
}
|
|
166
|
+
};
|
|
167
|
+
const runTarget = (doc, outDir, generators, apiNames) => {
|
|
168
|
+
const result = generate(doc.filePath, {
|
|
169
|
+
outDir,
|
|
170
|
+
generators,
|
|
171
|
+
registry,
|
|
172
|
+
write: options.write,
|
|
173
|
+
context: { ...options.context, ...(apiNames ? { apiNames } : {}) },
|
|
174
|
+
...(options.loader ? { loader: options.loader } : {}),
|
|
175
|
+
});
|
|
176
|
+
mergeDiagnostics(result.diagnostics);
|
|
177
|
+
if (!result.ok)
|
|
178
|
+
ok = false;
|
|
179
|
+
targets.push({ source: doc.filePath, outDir, generators, files: result.files });
|
|
180
|
+
};
|
|
181
|
+
for (const doc of documents) {
|
|
182
|
+
// Declaration/application DSL (`generators:` + section defaults / entry `generators:`).
|
|
183
|
+
const jobDiagnostics = [];
|
|
184
|
+
for (const job of buildGeneratorJobs(doc, rootDoc, registry, jobDiagnostics)) {
|
|
185
|
+
runTarget(doc, job.outDir, [job.generatorName], job.apiNames);
|
|
186
|
+
}
|
|
187
|
+
mergeDiagnostics(jobDiagnostics);
|
|
188
|
+
if (hasErrors(jobDiagnostics))
|
|
189
|
+
ok = false;
|
|
62
190
|
}
|
|
63
191
|
return { targets, diagnostics: collected, ok };
|
|
64
192
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-dto-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/api/api-dto-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,
|
|
1
|
+
{"version":3,"file":"api-dto-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/api/api-dto-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,EAAgC,MAAM,iBAAiB,CAAA;AA0GxF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAO,SAmBvC,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { findModel } from '../../ir/ir.js';
|
|
2
2
|
import { pascalCase, singleQuote } from '../support/naming.js';
|
|
3
3
|
import { isRelation, relationFkName } from '../support/relations.js';
|
|
4
|
+
import { selectApis } from '../generator.js';
|
|
4
5
|
import { headerBlocks } from '../support/header.js';
|
|
5
6
|
const SCALAR_TS = {
|
|
6
7
|
string: 'string',
|
|
@@ -127,10 +128,11 @@ const renderDto = (ir, api, used) => {
|
|
|
127
128
|
*/
|
|
128
129
|
export const createApiDtoGenerator = () => ({
|
|
129
130
|
name: 'api-dto',
|
|
131
|
+
scope: 'api',
|
|
130
132
|
description: 'class-validator DTO classes for API requests',
|
|
131
133
|
generate(ir, context) {
|
|
132
134
|
// DTO は HTTP リクエストボディ用 — task / pubsub のペイロードは task-payloads が担う。
|
|
133
|
-
const httpApis = ir.apis.filter(api => api.kind === 'https' || api.kind === 'callable');
|
|
135
|
+
const httpApis = selectApis(ir.apis, context).filter(api => api.kind === 'https' || api.kind === 'callable');
|
|
134
136
|
if (httpApis.length === 0) {
|
|
135
137
|
return [];
|
|
136
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-types-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/api/api-types-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,
|
|
1
|
+
{"version":3,"file":"api-types-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/api/api-types-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,EAAgC,MAAM,iBAAiB,CAAA;AA8ExF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAO,SA0BzC,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { pascalCase } from '../support/naming.js';
|
|
2
2
|
import { isRelation, relationFkName, relationFkType } from '../support/relations.js';
|
|
3
|
+
import { selectApis } from '../generator.js';
|
|
3
4
|
import { headerBlocks } from '../support/header.js';
|
|
4
5
|
const SCALAR_TS = {
|
|
5
6
|
string: 'string',
|
|
@@ -48,7 +49,7 @@ const renderPayloadType = (ir, payload, typeName) => {
|
|
|
48
49
|
const fields = payload.fields.map(field => renderField(ir, field)).join('\n');
|
|
49
50
|
return `export interface ${typeName} {\n${fields}\n}`;
|
|
50
51
|
};
|
|
51
|
-
const collectImports = (ir) => {
|
|
52
|
+
const collectImports = (ir, apis) => {
|
|
52
53
|
const names = new Set();
|
|
53
54
|
const add = (payload) => {
|
|
54
55
|
if (payload.model)
|
|
@@ -62,7 +63,7 @@ const collectImports = (ir) => {
|
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
65
|
};
|
|
65
|
-
for (const api of
|
|
66
|
+
for (const api of apis) {
|
|
66
67
|
add(api.request);
|
|
67
68
|
add(api.response);
|
|
68
69
|
}
|
|
@@ -84,16 +85,18 @@ const apiComment = (api) => {
|
|
|
84
85
|
export const createApiTypesGenerator = () => ({
|
|
85
86
|
name: 'api-types',
|
|
86
87
|
description: 'API request/response TypeScript types',
|
|
88
|
+
scope: 'api',
|
|
87
89
|
generate(ir, context) {
|
|
88
|
-
|
|
90
|
+
const apis = selectApis(ir.apis, context);
|
|
91
|
+
if (apis.length === 0) {
|
|
89
92
|
return [];
|
|
90
93
|
}
|
|
91
94
|
const blocks = [...headerBlocks(context)];
|
|
92
|
-
const imports = collectImports(ir);
|
|
95
|
+
const imports = collectImports(ir, apis);
|
|
93
96
|
if (imports.length > 0) {
|
|
94
97
|
blocks.push(`import type { ${imports.join(', ')} } from './types'`);
|
|
95
98
|
}
|
|
96
|
-
for (const api of
|
|
99
|
+
for (const api of apis) {
|
|
97
100
|
const pascal = pascalCase(api.name);
|
|
98
101
|
blocks.push([
|
|
99
102
|
apiComment(api),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-validation-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/api/api-validation-generator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,SAAS,
|
|
1
|
+
{"version":3,"file":"api-validation-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/api/api-validation-generator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,SAAS,EAAgC,MAAM,iBAAiB,CAAA;AAuExF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,QAAO,SAe9C,CAAA"}
|
|
@@ -2,6 +2,7 @@ import { findModel } from '../../ir/ir.js';
|
|
|
2
2
|
import { pascalCase, singleQuote } from '../support/naming.js';
|
|
3
3
|
import { isRelation, relationFkName, relationFkType } from '../support/relations.js';
|
|
4
4
|
import { zodConstraints } from '../support/constraints.js';
|
|
5
|
+
import { selectApis } from '../generator.js';
|
|
5
6
|
import { headerBlocks } from '../support/header.js';
|
|
6
7
|
const SCALAR_ZOD = {
|
|
7
8
|
string: 'z.string()',
|
|
@@ -80,12 +81,14 @@ const renderRequestSchema = (ir, api) => {
|
|
|
80
81
|
export const createApiValidationGenerator = () => ({
|
|
81
82
|
name: 'api-validation',
|
|
82
83
|
description: 'API request-validation Zod schemas',
|
|
84
|
+
scope: 'api',
|
|
83
85
|
generate(ir, context) {
|
|
84
|
-
|
|
86
|
+
const apis = selectApis(ir.apis, context);
|
|
87
|
+
if (apis.length === 0) {
|
|
85
88
|
return [];
|
|
86
89
|
}
|
|
87
90
|
const blocks = [...headerBlocks(context), "import { z } from 'zod'"];
|
|
88
|
-
for (const api of
|
|
91
|
+
for (const api of apis) {
|
|
89
92
|
blocks.push(renderRequestSchema(ir, api));
|
|
90
93
|
}
|
|
91
94
|
return [{ path: 'api-validation.ts', content: `${blocks.join('\n\n')}\n` }];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-payload-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/api/task-payload-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,
|
|
1
|
+
{"version":3,"file":"task-payload-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/api/task-payload-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,EAAgC,MAAM,iBAAiB,CAAA;AAyExF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAAO,SAsB5C,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { findModel } from '../../ir/ir.js';
|
|
2
2
|
import { constantCase, pascalCase, singleQuote } from '../support/naming.js';
|
|
3
3
|
import { isRelation, relationFkName, relationFkType } from '../support/relations.js';
|
|
4
|
+
import { selectApis } from '../generator.js';
|
|
4
5
|
import { headerBlocks } from '../support/header.js';
|
|
5
6
|
const SCALAR_TS = {
|
|
6
7
|
string: 'string',
|
|
@@ -76,9 +77,10 @@ const collectImports = (ir, tasks) => {
|
|
|
76
77
|
*/
|
|
77
78
|
export const createTaskPayloadGenerator = () => ({
|
|
78
79
|
name: 'task-payloads',
|
|
80
|
+
scope: 'api',
|
|
79
81
|
description: 'Cloud Task/Pub-Sub payload envelopes, data/payload types, and constants',
|
|
80
82
|
generate(ir, context) {
|
|
81
|
-
const tasks = ir.apis.filter(isTask);
|
|
83
|
+
const tasks = selectApis(ir.apis, context).filter(isTask);
|
|
82
84
|
if (ir.envelopes.length === 0 && tasks.length === 0) {
|
|
83
85
|
return [];
|
|
84
86
|
}
|
|
@@ -7,6 +7,12 @@ export interface GeneratedFile {
|
|
|
7
7
|
export interface GeneratorContext {
|
|
8
8
|
/** Optional banner prepended to each generated file. */
|
|
9
9
|
header?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Api-scoped generation: restrict output to these api names. `undefined`
|
|
12
|
+
* keeps the legacy behavior (all apis in the IR). Set by the compiler when
|
|
13
|
+
* entries opt into a generator via section defaults / entry `generators:`.
|
|
14
|
+
*/
|
|
15
|
+
apiNames?: string[];
|
|
10
16
|
}
|
|
11
17
|
/**
|
|
12
18
|
* A code generator turns the IR into one or more output files. Implementations
|
|
@@ -18,6 +24,16 @@ export interface Generator {
|
|
|
18
24
|
/** Unique key used to select the generator from the CLI/registry. */
|
|
19
25
|
readonly name: string;
|
|
20
26
|
readonly description?: string;
|
|
27
|
+
/**
|
|
28
|
+
* `api`: output follows per-entry applications (section defaults → entry).
|
|
29
|
+
* `document` (default): declaring the generator in a yml's `generators:`
|
|
30
|
+
* block runs it once for that yml.
|
|
31
|
+
*/
|
|
32
|
+
readonly scope?: 'api' | 'document';
|
|
21
33
|
generate(ir: Ir, context?: GeneratorContext): GeneratedFile[];
|
|
22
34
|
}
|
|
35
|
+
/** Narrow `ir.apis` to the compiler-selected subset (no-op without a filter). */
|
|
36
|
+
export declare const selectApis: <T extends {
|
|
37
|
+
name: string;
|
|
38
|
+
}>(apis: T[], context?: GeneratorContext) => T[];
|
|
23
39
|
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/generators/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/generators/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,UAAU,CAAA;IACnC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,EAAE,CAAA;CAC9D;AAED,iFAAiF;AACjF,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,gBAAgB,KAAG,CAAC,EAI/F,CAAA"}
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
/** Narrow `ir.apis` to the compiler-selected subset (no-op without a filter). */
|
|
2
|
+
export const selectApis = (apis, context) => {
|
|
3
|
+
if (!context?.apiNames)
|
|
4
|
+
return apis;
|
|
5
|
+
const allowed = new Set(context.apiNames);
|
|
6
|
+
return apis.filter(api => allowed.has(api.name));
|
|
7
|
+
};
|
|
@@ -3,6 +3,7 @@ export declare const pascalCase: (value: string) => string;
|
|
|
3
3
|
export declare const camelCase: (value: string) => string;
|
|
4
4
|
export declare const constantCase: (value: string) => string;
|
|
5
5
|
export declare const snakeCase: (value: string) => string;
|
|
6
|
+
export declare const kebabCase: (value: string) => string;
|
|
6
7
|
/** Naive English pluralization sufficient for table naming. */
|
|
7
8
|
export declare const pluralize: (value: string) => string;
|
|
8
9
|
/** Escape a string for use inside a single-quoted TypeScript literal. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/support/naming.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAU1E,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAG9B,CAAA;AAEb,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAGzC,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAG/B,CAAA;AAEd,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAG5B,CAAA;AAEd,+DAA+D;AAC/D,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAIzC,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAAkE,CAAA"}
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/support/naming.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAU1E,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAG9B,CAAA;AAEb,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAGzC,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAG/B,CAAA;AAEd,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAG5B,CAAA;AAEd,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAG5B,CAAA;AAEd,+DAA+D;AAC/D,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAIzC,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAAkE,CAAA"}
|
|
@@ -18,6 +18,9 @@ export const constantCase = (value) => words(value)
|
|
|
18
18
|
export const snakeCase = (value) => words(value)
|
|
19
19
|
.map(word => word.toLowerCase())
|
|
20
20
|
.join('_');
|
|
21
|
+
export const kebabCase = (value) => words(value)
|
|
22
|
+
.map(word => word.toLowerCase())
|
|
23
|
+
.join('-');
|
|
21
24
|
/** Naive English pluralization sufficient for table naming. */
|
|
22
25
|
export const pluralize = (value) => {
|
|
23
26
|
if (/[^aeiou]y$/.test(value))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-ir.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/ir/build-ir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAS,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAGL,WAAW,EAIZ,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAGL,EAAE,EAgBH,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,EAAE,CAAA;IACN,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B;
|
|
1
|
+
{"version":3,"file":"build-ir.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/ir/build-ir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAS,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAGL,WAAW,EAIZ,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAGL,EAAE,EAgBH,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,EAAE,CAAA;IACN,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B;AAqLD;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAAI,WAAW,WAAW,EAAE,KAAG,aAqQlD,CAAA"}
|
|
@@ -139,6 +139,8 @@ const buildApi = (name, raw, sourceFile, enumNames, modelNames) => {
|
|
|
139
139
|
};
|
|
140
140
|
if (raw.method !== undefined)
|
|
141
141
|
api.method = raw.method;
|
|
142
|
+
if (raw.path !== undefined)
|
|
143
|
+
api.path = raw.path;
|
|
142
144
|
if (raw.description !== undefined)
|
|
143
145
|
api.description = raw.description;
|
|
144
146
|
if (raw.envelope !== undefined ||
|
|
@@ -302,6 +302,8 @@ export interface IrApi {
|
|
|
302
302
|
kind: ApiKind;
|
|
303
303
|
/** HTTP method for `https` endpoints. */
|
|
304
304
|
method?: string;
|
|
305
|
+
/** REST path when declared via the path-keyed `apis:` section. */
|
|
306
|
+
path?: string;
|
|
305
307
|
request: IrApiPayload;
|
|
306
308
|
response: IrApiPayload;
|
|
307
309
|
/** Delivery config for `task`/`pubsub` kinds. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/ir/ir.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/ir/ir.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/parse.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,WAAW,
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/parse.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,WAAW,EAaZ,MAAM,mBAAmB,CAAA;AA2hB1B;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,EAAE,UAAU,MAAM,KAAG,WA4MjE,CAAA"}
|
|
@@ -396,16 +396,87 @@ const normalizeApiPayload = (raw, filePath, path) => {
|
|
|
396
396
|
}
|
|
397
397
|
return payload;
|
|
398
398
|
};
|
|
399
|
-
const
|
|
399
|
+
const normalizeGeneratorUse = (raw, filePath, path) => {
|
|
400
|
+
if (typeof raw === 'string')
|
|
401
|
+
return { generator: raw };
|
|
402
|
+
if (!isObject(raw) || typeof raw.generator !== 'string') {
|
|
403
|
+
return fail(`"${path}" must be a generator name or { generator, out? }`, filePath, path);
|
|
404
|
+
}
|
|
405
|
+
const use = { generator: raw.generator };
|
|
406
|
+
if (raw.out !== undefined)
|
|
407
|
+
use.out = String(raw.out);
|
|
408
|
+
return use;
|
|
409
|
+
};
|
|
410
|
+
const normalizeGeneratorUses = (raw, filePath, path) => {
|
|
411
|
+
if (!Array.isArray(raw)) {
|
|
412
|
+
return fail(`"${path}" must be an array of generator applications`, filePath, path);
|
|
413
|
+
}
|
|
414
|
+
return raw.map((entry, i) => normalizeGeneratorUse(entry, filePath, `${path}[${i}]`));
|
|
415
|
+
};
|
|
416
|
+
/** Reserved key inside `apis:/tasks:/events:` holding section-level defaults. */
|
|
417
|
+
const SECTION_DEFAULTS_KEY = 'defaults';
|
|
418
|
+
const normalizeSectionDefaults = (raw, filePath, section) => {
|
|
400
419
|
if (!isObject(raw)) {
|
|
401
|
-
return fail(`
|
|
420
|
+
return fail(`"${section}.${SECTION_DEFAULTS_KEY}" must be an object`, filePath, `${section}.${SECTION_DEFAULTS_KEY}`);
|
|
402
421
|
}
|
|
403
|
-
if (
|
|
404
|
-
return
|
|
422
|
+
if (raw.generators === undefined)
|
|
423
|
+
return [];
|
|
424
|
+
return normalizeGeneratorUses(raw.generators, filePath, `${section}.${SECTION_DEFAULTS_KEY}.generators`);
|
|
425
|
+
};
|
|
426
|
+
/**
|
|
427
|
+
* Path-keyed api entry (`apis:` section, key starts with `/`): kind defaults to
|
|
428
|
+
* `https` (or `callable` when declared), `operationId` names the generated types.
|
|
429
|
+
*/
|
|
430
|
+
const normalizePathApi = (raw, filePath, pathKey) => {
|
|
431
|
+
if (!isObject(raw)) {
|
|
432
|
+
return fail(`Api "${pathKey}" must be an object`, filePath, `apis.${pathKey}`);
|
|
433
|
+
}
|
|
434
|
+
if (typeof raw.operationId !== 'string' || raw.operationId.length === 0) {
|
|
435
|
+
return fail(`Api "${pathKey}" is missing a string "operationId" (used as the generated name)`, filePath, `apis.${pathKey}.operationId`);
|
|
436
|
+
}
|
|
437
|
+
const kind = raw.kind === undefined ? 'https' : String(raw.kind);
|
|
438
|
+
if (kind !== 'https' && kind !== 'callable') {
|
|
439
|
+
return fail(`Api "${pathKey}" kind must be https|callable (tasks/events have their own sections)`, filePath, `apis.${pathKey}.kind`);
|
|
405
440
|
}
|
|
406
|
-
const api = { kind:
|
|
441
|
+
const api = { kind, path: pathKey };
|
|
407
442
|
if (raw.method !== undefined)
|
|
408
443
|
api.method = String(raw.method);
|
|
444
|
+
if (raw.description !== undefined)
|
|
445
|
+
api.description = String(raw.description);
|
|
446
|
+
api.request = normalizeApiPayload(raw.request, filePath, `apis.${pathKey}.request`);
|
|
447
|
+
api.response = normalizeApiPayload(raw.response, filePath, `apis.${pathKey}.response`);
|
|
448
|
+
if (raw.generators !== undefined) {
|
|
449
|
+
api.generators = normalizeGeneratorUses(raw.generators, filePath, `apis.${pathKey}.generators`);
|
|
450
|
+
}
|
|
451
|
+
return { name: raw.operationId, api };
|
|
452
|
+
};
|
|
453
|
+
/** `tasks:` section entry — a Cloud Task api (kind is implied, key is the name). */
|
|
454
|
+
const normalizeTask = (raw, filePath, name) => {
|
|
455
|
+
if (!isObject(raw)) {
|
|
456
|
+
return fail(`Task "${name}" must be an object`, filePath, `tasks.${name}`);
|
|
457
|
+
}
|
|
458
|
+
const api = { kind: 'task' };
|
|
459
|
+
if (raw.description !== undefined)
|
|
460
|
+
api.description = String(raw.description);
|
|
461
|
+
if (raw.envelope !== undefined)
|
|
462
|
+
api.envelope = String(raw.envelope);
|
|
463
|
+
if (raw.maxAttempts !== undefined)
|
|
464
|
+
api.maxAttempts = Number(raw.maxAttempts);
|
|
465
|
+
if (raw.timeoutSeconds !== undefined)
|
|
466
|
+
api.timeoutSeconds = Number(raw.timeoutSeconds);
|
|
467
|
+
api.request = normalizeApiPayload(raw.request, filePath, `tasks.${name}.request`);
|
|
468
|
+
api.response = normalizeApiPayload(raw.response, filePath, `tasks.${name}.response`);
|
|
469
|
+
if (raw.generators !== undefined) {
|
|
470
|
+
api.generators = normalizeGeneratorUses(raw.generators, filePath, `tasks.${name}.generators`);
|
|
471
|
+
}
|
|
472
|
+
return api;
|
|
473
|
+
};
|
|
474
|
+
/** `events:` section entry — a Pub/Sub api (kind is implied, key is the name). */
|
|
475
|
+
const normalizeEvent = (raw, filePath, name) => {
|
|
476
|
+
if (!isObject(raw)) {
|
|
477
|
+
return fail(`Event "${name}" must be an object`, filePath, `events.${name}`);
|
|
478
|
+
}
|
|
479
|
+
const api = { kind: 'pubsub' };
|
|
409
480
|
if (raw.description !== undefined)
|
|
410
481
|
api.description = String(raw.description);
|
|
411
482
|
if (raw.envelope !== undefined)
|
|
@@ -416,8 +487,11 @@ const normalizeApi = (raw, filePath, name) => {
|
|
|
416
487
|
api.timeoutSeconds = Number(raw.timeoutSeconds);
|
|
417
488
|
if (raw.topic !== undefined)
|
|
418
489
|
api.topic = String(raw.topic);
|
|
419
|
-
api.request = normalizeApiPayload(raw.request, filePath, `
|
|
420
|
-
api.response = normalizeApiPayload(raw.response, filePath, `
|
|
490
|
+
api.request = normalizeApiPayload(raw.request, filePath, `events.${name}.request`);
|
|
491
|
+
api.response = normalizeApiPayload(raw.response, filePath, `events.${name}.response`);
|
|
492
|
+
if (raw.generators !== undefined) {
|
|
493
|
+
api.generators = normalizeGeneratorUses(raw.generators, filePath, `events.${name}.generators`);
|
|
494
|
+
}
|
|
421
495
|
return api;
|
|
422
496
|
};
|
|
423
497
|
const normalizeEnvelope = (raw, filePath, name) => {
|
|
@@ -523,6 +597,16 @@ const normalizeProject = (raw, filePath) => {
|
|
|
523
597
|
idCodec.alphabet = String(raw.idCodec.alphabet);
|
|
524
598
|
project.idCodec = idCodec;
|
|
525
599
|
}
|
|
600
|
+
if (raw.aliases !== undefined) {
|
|
601
|
+
if (!isObject(raw.aliases)) {
|
|
602
|
+
return fail('"project.aliases" must be a mapping of alias → path', filePath, 'project.aliases');
|
|
603
|
+
}
|
|
604
|
+
const aliases = {};
|
|
605
|
+
for (const [alias, target] of Object.entries(raw.aliases)) {
|
|
606
|
+
aliases[alias] = String(target);
|
|
607
|
+
}
|
|
608
|
+
project.aliases = aliases;
|
|
609
|
+
}
|
|
526
610
|
return project;
|
|
527
611
|
};
|
|
528
612
|
/**
|
|
@@ -612,12 +696,55 @@ export const parseContract = (content, filePath) => {
|
|
|
612
696
|
}
|
|
613
697
|
}
|
|
614
698
|
const apis = {};
|
|
699
|
+
const sectionDefaults = {};
|
|
700
|
+
const addApi = (name, api, section) => {
|
|
701
|
+
if (apis[name] !== undefined) {
|
|
702
|
+
fail(`Api "${name}" is declared more than once across apis/tasks/events`, filePath, `${section}.${name}`);
|
|
703
|
+
}
|
|
704
|
+
apis[name] = api;
|
|
705
|
+
};
|
|
615
706
|
if (doc.apis !== undefined) {
|
|
616
707
|
if (!isObject(doc.apis)) {
|
|
617
708
|
return fail('"apis" must be a mapping', filePath, 'apis');
|
|
618
709
|
}
|
|
619
|
-
for (const [
|
|
620
|
-
|
|
710
|
+
for (const [key, raw] of Object.entries(doc.apis)) {
|
|
711
|
+
if (key === SECTION_DEFAULTS_KEY) {
|
|
712
|
+
sectionDefaults.apis = normalizeSectionDefaults(raw, filePath, 'apis');
|
|
713
|
+
}
|
|
714
|
+
else if (key.startsWith('/')) {
|
|
715
|
+
// Path-keyed REST form: the key is the route, `operationId` names the api.
|
|
716
|
+
const { name, api } = normalizePathApi(raw, filePath, key);
|
|
717
|
+
addApi(name, api, 'apis');
|
|
718
|
+
}
|
|
719
|
+
else {
|
|
720
|
+
fail(`"apis" keys must be REST paths starting with "/" (tasks/events have their own sections): "${key}"`, filePath, `apis.${key}`);
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
if (doc.tasks !== undefined) {
|
|
725
|
+
if (!isObject(doc.tasks)) {
|
|
726
|
+
return fail('"tasks" must be a mapping', filePath, 'tasks');
|
|
727
|
+
}
|
|
728
|
+
for (const [name, raw] of Object.entries(doc.tasks)) {
|
|
729
|
+
if (name === SECTION_DEFAULTS_KEY) {
|
|
730
|
+
sectionDefaults.tasks = normalizeSectionDefaults(raw, filePath, 'tasks');
|
|
731
|
+
}
|
|
732
|
+
else {
|
|
733
|
+
addApi(name, normalizeTask(raw, filePath, name), 'tasks');
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
if (doc.events !== undefined) {
|
|
738
|
+
if (!isObject(doc.events)) {
|
|
739
|
+
return fail('"events" must be a mapping', filePath, 'events');
|
|
740
|
+
}
|
|
741
|
+
for (const [name, raw] of Object.entries(doc.events)) {
|
|
742
|
+
if (name === SECTION_DEFAULTS_KEY) {
|
|
743
|
+
sectionDefaults.events = normalizeSectionDefaults(raw, filePath, 'events');
|
|
744
|
+
}
|
|
745
|
+
else {
|
|
746
|
+
addApi(name, normalizeEvent(raw, filePath, name), 'events');
|
|
747
|
+
}
|
|
621
748
|
}
|
|
622
749
|
}
|
|
623
750
|
const firestore = {};
|
|
@@ -667,16 +794,22 @@ export const parseContract = (content, filePath) => {
|
|
|
667
794
|
if (typeof doc.header === 'string') {
|
|
668
795
|
contract.header = doc.header;
|
|
669
796
|
}
|
|
670
|
-
if (doc.
|
|
671
|
-
if (!Array.isArray(doc.
|
|
672
|
-
return fail('"
|
|
797
|
+
if (doc.generators !== undefined) {
|
|
798
|
+
if (!Array.isArray(doc.generators)) {
|
|
799
|
+
return fail('"generators" must be an array of { generator, out } declarations', filePath, 'generators');
|
|
673
800
|
}
|
|
674
|
-
contract.
|
|
675
|
-
if (!isObject(entry) || typeof entry.
|
|
676
|
-
return fail(`
|
|
801
|
+
contract.generatorDecls = doc.generators.map((entry, i) => {
|
|
802
|
+
if (!isObject(entry) || typeof entry.generator !== 'string') {
|
|
803
|
+
return fail(`generators[${i}] needs a string "generator"`, filePath, `generators[${i}]`);
|
|
804
|
+
}
|
|
805
|
+
if (typeof entry.out !== 'string') {
|
|
806
|
+
return fail(`generators[${i}] needs a string "out"`, filePath, `generators[${i}].out`);
|
|
677
807
|
}
|
|
678
|
-
return {
|
|
808
|
+
return { generator: entry.generator, out: entry.out };
|
|
679
809
|
});
|
|
680
810
|
}
|
|
811
|
+
if (Object.keys(sectionDefaults).length > 0) {
|
|
812
|
+
contract.sectionDefaults = sectionDefaults;
|
|
813
|
+
}
|
|
681
814
|
return contract;
|
|
682
815
|
};
|
|
@@ -157,12 +157,37 @@ export interface RawApi {
|
|
|
157
157
|
description?: string;
|
|
158
158
|
kind: string;
|
|
159
159
|
method?: string;
|
|
160
|
+
/** REST path when declared under the path-keyed `apis:` section (e.g. `/ai-models/{model-id}`). */
|
|
161
|
+
path?: string;
|
|
160
162
|
request?: RawApiPayload;
|
|
161
163
|
response?: RawApiPayload;
|
|
162
164
|
envelope?: string;
|
|
163
165
|
maxAttempts?: number;
|
|
164
166
|
timeoutSeconds?: number;
|
|
165
167
|
topic?: string;
|
|
168
|
+
/** Entry-level generator applications (overrides the section defaults). */
|
|
169
|
+
generators?: RawGeneratorUse[];
|
|
170
|
+
}
|
|
171
|
+
/** Top-level generator declaration: registry id + default output template. */
|
|
172
|
+
export interface RawGeneratorDecl {
|
|
173
|
+
generator: string;
|
|
174
|
+
/**
|
|
175
|
+
* Output template relative to the declaring yml. Supports `{api-name}` /
|
|
176
|
+
* `{path}` placeholders (api-scoped generators) and `#alias/...` prefixes
|
|
177
|
+
* resolved through the root document's `project.aliases`.
|
|
178
|
+
*/
|
|
179
|
+
out: string;
|
|
180
|
+
}
|
|
181
|
+
/** Generator application on a section default or an entry (name ref + optional out override). */
|
|
182
|
+
export interface RawGeneratorUse {
|
|
183
|
+
generator: string;
|
|
184
|
+
out?: string;
|
|
185
|
+
}
|
|
186
|
+
/** Per-section generator defaults (`apis:/tasks:/events:` → `defaults.generators`). */
|
|
187
|
+
export interface RawSectionDefaults {
|
|
188
|
+
apis?: RawGeneratorUse[];
|
|
189
|
+
tasks?: RawGeneratorUse[];
|
|
190
|
+
events?: RawGeneratorUse[];
|
|
166
191
|
}
|
|
167
192
|
export interface RawEnvelope {
|
|
168
193
|
description?: string;
|
|
@@ -200,17 +225,19 @@ export interface RawProject {
|
|
|
200
225
|
minLength?: number;
|
|
201
226
|
alphabet?: string;
|
|
202
227
|
};
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
228
|
+
/**
|
|
229
|
+
* Output path aliases resolved against the root yml's directory, e.g.
|
|
230
|
+
* `"#contracts/*": "libs/contracts/src/*"`. Used by `generators[].out`.
|
|
231
|
+
*/
|
|
232
|
+
aliases?: Record<string, string>;
|
|
208
233
|
}
|
|
209
234
|
export interface RawContract {
|
|
210
235
|
/** Absolute path of the source file. */
|
|
211
236
|
filePath: string;
|
|
212
|
-
/**
|
|
213
|
-
|
|
237
|
+
/** Generator declarations from this file's top-level `generators:` block. */
|
|
238
|
+
generatorDecls?: RawGeneratorDecl[];
|
|
239
|
+
/** Section-level generator defaults (`apis:/tasks:/events:` → `defaults`). */
|
|
240
|
+
sectionDefaults?: RawSectionDefaults;
|
|
214
241
|
version: number;
|
|
215
242
|
/** Raw header text prepended to generated files (`default` = built-in banner). */
|
|
216
243
|
header?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-document.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/raw-document.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"raw-document.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/raw-document.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@ export const registerGenerate = (program) => {
|
|
|
32
32
|
const header = flags.header === true ? DEFAULT_HEADER : typeof flags.header === 'string' ? toHeaderComment(flags.header) : undefined;
|
|
33
33
|
const registry = createDefaultRegistry();
|
|
34
34
|
const context = header !== undefined ? { header } : undefined;
|
|
35
|
-
// Without -o/-g, run every
|
|
35
|
+
// Without -o/-g, run every generator declared in the contract
|
|
36
36
|
// graph — the one-command flow. Flags switch back to single-target mode.
|
|
37
37
|
const explicit = flags.outDir !== undefined || flags.generators !== undefined || config.outDir !== undefined || config.generators !== undefined;
|
|
38
38
|
if (!explicit) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/lib/cli/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/lib/cli/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqEnC,eAAO,MAAM,YAAY,GAAI,SAAS,OAAO,KAAG,IAgB/C,CAAA"}
|
|
@@ -3,6 +3,11 @@ import { resolve } from 'node:path';
|
|
|
3
3
|
import { CONFIG_FILENAME } from '../config.js';
|
|
4
4
|
const EXAMPLE_CONTRACT = `version: 1
|
|
5
5
|
|
|
6
|
+
# Declare generators once (name + output template); entries opt in below.
|
|
7
|
+
generators:
|
|
8
|
+
- { generator: typescript, out: generated }
|
|
9
|
+
- { generator: zod, out: generated }
|
|
10
|
+
|
|
6
11
|
enums:
|
|
7
12
|
ProductStatus:
|
|
8
13
|
description: Lifecycle state of a product
|