firebase-contract 0.1.0-rc.4 → 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.
Files changed (30) hide show
  1. package/README.md +122 -82
  2. package/dist/lib/_internal/compiler/compiler.d.ts +5 -4
  3. package/dist/lib/_internal/compiler/compiler.d.ts.map +1 -1
  4. package/dist/lib/_internal/compiler/compiler.js +151 -23
  5. package/dist/lib/_internal/generators/api/api-dto-generator.d.ts.map +1 -1
  6. package/dist/lib/_internal/generators/api/api-dto-generator.js +19 -5
  7. package/dist/lib/_internal/generators/api/api-types-generator.d.ts.map +1 -1
  8. package/dist/lib/_internal/generators/api/api-types-generator.js +8 -5
  9. package/dist/lib/_internal/generators/api/api-validation-generator.d.ts.map +1 -1
  10. package/dist/lib/_internal/generators/api/api-validation-generator.js +5 -2
  11. package/dist/lib/_internal/generators/api/task-payload-generator.d.ts.map +1 -1
  12. package/dist/lib/_internal/generators/api/task-payload-generator.js +3 -1
  13. package/dist/lib/_internal/generators/generator.d.ts +16 -0
  14. package/dist/lib/_internal/generators/generator.d.ts.map +1 -1
  15. package/dist/lib/_internal/generators/generator.js +7 -1
  16. package/dist/lib/_internal/generators/support/naming.d.ts +1 -0
  17. package/dist/lib/_internal/generators/support/naming.d.ts.map +1 -1
  18. package/dist/lib/_internal/generators/support/naming.js +3 -0
  19. package/dist/lib/_internal/ir/build-ir.d.ts.map +1 -1
  20. package/dist/lib/_internal/ir/build-ir.js +2 -0
  21. package/dist/lib/_internal/ir/ir.d.ts +2 -0
  22. package/dist/lib/_internal/ir/ir.d.ts.map +1 -1
  23. package/dist/lib/_internal/parser/parse.d.ts.map +1 -1
  24. package/dist/lib/_internal/parser/parse.js +149 -16
  25. package/dist/lib/_internal/parser/raw-document.d.ts +34 -7
  26. package/dist/lib/_internal/parser/raw-document.d.ts.map +1 -1
  27. package/dist/lib/cli/commands/generate.js +1 -1
  28. package/dist/lib/cli/commands/init.d.ts.map +1 -1
  29. package/dist/lib/cli/commands/init.js +5 -0
  30. 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 `generate:` target declared in the contract graph
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 can declare its own outputs in a `generate:` section —
42
- out dirs are relative to that yml file:
43
-
44
- ```yaml
45
- # apps/shop/data-connect/schema.yml
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
- generate:
54
- - out: libs/contracts/src
55
- generators: [typescript-split, zod-split, firestore-split, id-codecs]
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
- `fbc generate contract.yml` then materializes **all** targets across the whole
61
- import graph in one run. Passing `-o`/`-g` switches to single-target mode
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 (Cloud Task / callable / https / pubsub). Generates
300
- request/response types (`api-types`), request-validation Zod (`api-validation`),
301
- class-validator DTOs (`api-dto`), and — for `task`/`pubsub` — payload contracts
302
- (`task-payloads`). A payload references a model or declares inline fields; a void
303
- response maps to `void`.
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
- apis:
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
- getShopBySlug:
331
- kind: callable
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 `generate:` target declared across the import graph:
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 `generate:` target declared across the entry contract and its
47
- * (transitive) imports — the one-command flow: each contract file states where
48
- * its own outputs go, and `fbc generate <root>` materializes all of them.
49
- * Output dirs resolve relative to the declaring yml file.
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,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,OAAO,EAAkB,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAG3E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAE5E,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;AAED;;;;;GAKG;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,iBA8BF,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"}
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 `generate:` target declared across the entry contract and its
29
- * (transitive) imports — the one-command flow: each contract file states where
30
- * its own outputs go, and `fbc generate <root>` materializes all of them.
31
- * Output dirs resolve relative to the declaring yml file.
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
- for (const doc of documents) {
42
- for (const output of doc.outputs ?? []) {
43
- const outDir = join(dirname(doc.filePath), output.out);
44
- const result = generate(doc.filePath, {
45
- outDir,
46
- generators: output.generators,
47
- registry: options.registry,
48
- write: options.write,
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,EAAoB,MAAM,iBAAiB,CAAA;AAiG5E;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAO,SAgBvC,CAAA"}
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',
@@ -94,21 +95,31 @@ const decoratorsFor = (ir, field, used) => {
94
95
  }
95
96
  return out;
96
97
  };
98
+ const jsdoc = (description, indent) => {
99
+ if (!description)
100
+ return '';
101
+ const lines = description.split('\n');
102
+ if (lines.length === 1)
103
+ return `${indent}/** ${lines[0]} */\n`;
104
+ return `${indent}/**\n${lines.map(line => `${indent} * ${line}`.trimEnd()).join('\n')}\n${indent} */\n`;
105
+ };
97
106
  const renderDto = (ir, api, used) => {
98
107
  const fields = payloadFields(ir, api.request);
99
108
  const className = `${pascalCase(api.name)}Dto`;
109
+ const doc = jsdoc(api.description, '');
100
110
  if (api.request.isVoid || fields.length === 0) {
101
- return `export class ${className} {}`;
111
+ return `${doc}export class ${className} {}`;
102
112
  }
103
113
  const members = fields
104
114
  .map(field => {
105
115
  const name = isRelation(field) ? relationFkName(field) : field.name;
106
116
  const decorators = decoratorsFor(ir, field, used).join('\n');
107
117
  const mark = field.optional ? '?' : '!';
108
- return `${decorators}\n ${name}${mark}: ${propType(ir, field)}`;
118
+ const nullable = field.nullable ? ' | null' : '';
119
+ return `${jsdoc(field.description, ' ')}${decorators}\n ${name}${mark}: ${propType(ir, field)}${nullable}`;
109
120
  })
110
121
  .join('\n\n');
111
- return `export class ${className} {\n${members}\n}`;
122
+ return `${doc}export class ${className} {\n${members}\n}`;
112
123
  };
113
124
  /**
114
125
  * Generates class-validator DTO classes for API endpoint requests, mirroring the
@@ -117,13 +128,16 @@ const renderDto = (ir, api, used) => {
117
128
  */
118
129
  export const createApiDtoGenerator = () => ({
119
130
  name: 'api-dto',
131
+ scope: 'api',
120
132
  description: 'class-validator DTO classes for API requests',
121
133
  generate(ir, context) {
122
- if (ir.apis.length === 0) {
134
+ // DTO は HTTP リクエストボディ用 — task / pubsub のペイロードは task-payloads が担う。
135
+ const httpApis = selectApis(ir.apis, context).filter(api => api.kind === 'https' || api.kind === 'callable');
136
+ if (httpApis.length === 0) {
123
137
  return [];
124
138
  }
125
139
  const used = new Set();
126
- const dtoBlocks = ir.apis.map(api => renderDto(ir, api, used));
140
+ const dtoBlocks = httpApis.map(api => renderDto(ir, api, used));
127
141
  const blocks = [...headerBlocks(context)];
128
142
  if (used.size > 0) {
129
143
  blocks.push(`import { ${[...used].sort().join(', ')} } from 'class-validator'`);
@@ -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,EAAoB,MAAM,iBAAiB,CAAA;AA8E5E;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAO,SAwBzC,CAAA"}
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 ir.apis) {
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
- if (ir.apis.length === 0) {
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 ir.apis) {
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,EAAoB,MAAM,iBAAiB,CAAA;AAuE5E;;;GAGG;AACH,eAAO,MAAM,4BAA4B,QAAO,SAa9C,CAAA"}
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
- if (ir.apis.length === 0) {
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 ir.apis) {
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,EAAoB,MAAM,iBAAiB,CAAA;AAyE5E;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAAO,SAqB5C,CAAA"}
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;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,EAAE,CAAA;CAC9D"}
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
- export {};
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;AAoLD;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAAI,WAAW,WAAW,EAAE,KAAG,aAqQlD,CAAA"}
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,EAUZ,MAAM,mBAAmB,CAAA;AAyc1B;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,EAAE,UAAU,MAAM,KAAG,WA+JjE,CAAA"}
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 normalizeApi = (raw, filePath, name) => {
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(`Api "${name}" must be an object`, filePath, `apis.${name}`);
420
+ return fail(`"${section}.${SECTION_DEFAULTS_KEY}" must be an object`, filePath, `${section}.${SECTION_DEFAULTS_KEY}`);
402
421
  }
403
- if (typeof raw.kind !== 'string') {
404
- return fail(`Api "${name}" is missing a string "kind" (callable|https|task|pubsub)`, filePath, `apis.${name}.kind`);
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: raw.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, `apis.${name}.request`);
420
- api.response = normalizeApiPayload(raw.response, filePath, `apis.${name}.response`);
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 [name, raw] of Object.entries(doc.apis)) {
620
- apis[name] = normalizeApi(raw, filePath, name);
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.generate !== undefined) {
671
- if (!Array.isArray(doc.generate)) {
672
- return fail('"generate" must be an array of { out, generators } entries', filePath, 'generate');
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.outputs = doc.generate.map((entry, i) => {
675
- if (!isObject(entry) || typeof entry.out !== 'string') {
676
- return fail(`generate[${i}] needs a string "out"`, filePath, `generate[${i}]`);
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 { out: entry.out, generators: asStringArray(entry.generators, filePath, `generate[${i}].generators`) };
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
- /** A declared generation target: run `generators` into `out` (relative to the yml). */
205
- export interface RawOutputTarget {
206
- out: string;
207
- generators: string[];
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
- /** Generation targets declared in this file's `generate:` section. */
213
- outputs?: RawOutputTarget[];
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 `generate:` target declared in the contract
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;AAgEnC,eAAO,MAAM,YAAY,GAAI,SAAS,OAAO,KAAG,IAgB/C,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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "firebase-contract",
3
- "version": "0.1.0-rc.4",
3
+ "version": "0.1.0-rc.6",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "firebase-contract": "./dist/lib/cli/index.js",