firebase-contract 0.1.0-rc.14 → 0.1.0-rc.16
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 +84 -39
- package/dist/lib/_internal/generators/firestore/firestore-projection-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/firestore/firestore-projection-generator.js +3 -20
- package/dist/lib/_internal/generators/firestore/firestore-split-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/firestore/firestore-split-generator.js +66 -44
- package/dist/lib/_internal/generators/support/split.d.ts.map +1 -1
- package/dist/lib/_internal/generators/support/split.js +2 -1
- package/dist/lib/_internal/generators/typescript/typescript-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/typescript/typescript-generator.js +4 -2
- package/dist/lib/_internal/generators/zod/zod-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/zod/zod-generator.js +2 -1
- package/dist/lib/_internal/ir/build-ir.d.ts.map +1 -1
- package/dist/lib/_internal/ir/build-ir.js +31 -1
- package/dist/lib/_internal/ir/ir.d.ts +18 -4
- package/dist/lib/_internal/ir/ir.d.ts.map +1 -1
- package/dist/lib/_internal/ir/ir.js +1 -0
- package/dist/lib/_internal/parser/parse.d.ts.map +1 -1
- package/dist/lib/_internal/parser/parse.js +37 -5
- package/dist/lib/_internal/parser/raw-document.d.ts +18 -1
- package/dist/lib/_internal/parser/raw-document.d.ts.map +1 -1
- package/dist/lib/_internal/validation/rules.d.ts +8 -1
- package/dist/lib/_internal/validation/rules.d.ts.map +1 -1
- package/dist/lib/_internal/validation/rules.js +16 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ From one contract, generate:
|
|
|
10
10
|
- **Zod** validation schemas
|
|
11
11
|
- **Data Connect** GraphQL schema (`@table`, keys, directives), query/mutation
|
|
12
12
|
operations (routed per connector), and `Any`↔logical adapters
|
|
13
|
-
- **Firestore** projection schemas (denormalized read model
|
|
13
|
+
- **Firestore** projection schemas (denormalized read model; shared field groups via fragments)
|
|
14
14
|
- **API** request/response types, request-validation Zod, and class-validator DTOs
|
|
15
15
|
- **Cloud Task / Pub/Sub** payload envelopes + delivery constants
|
|
16
16
|
- **SQL migrations** for constraints Data Connect can't express (composite FKs,
|
|
@@ -245,8 +245,10 @@ export type ProductStatusKey = keyof typeof PRODUCT_STATUS
|
|
|
245
245
|
export type ProductStatus = (typeof PRODUCT_STATUS)[ProductStatusKey]
|
|
246
246
|
```
|
|
247
247
|
|
|
248
|
-
|
|
249
|
-
|
|
248
|
+
For a plain `'OPEN' | 'DONE' | 'DISABLED'` union instead, construct the
|
|
249
|
+
TypeScript generator with `enumStyle: 'union'` via the programmatic API
|
|
250
|
+
(`createTypeScriptGenerator({ enumStyle: 'union' })`). This is a build-time
|
|
251
|
+
generator option, not a YAML contract field.
|
|
250
252
|
|
|
251
253
|
## Models
|
|
252
254
|
|
|
@@ -281,24 +283,24 @@ models:
|
|
|
281
283
|
|
|
282
284
|
| option | meaning |
|
|
283
285
|
| ----------------------------------- | -------------------------------------------------------- |
|
|
284
|
-
| `type` |
|
|
285
|
-
| `optional` |
|
|
286
|
-
| `list` |
|
|
287
|
-
| `id` |
|
|
288
|
-
| `unique` |
|
|
289
|
-
| `relation` |
|
|
290
|
-
| `col` |
|
|
291
|
-
| `default` |
|
|
292
|
-
| `literal` |
|
|
293
|
-
| `nullable` |
|
|
294
|
-
| `description` |
|
|
295
|
-
| `jsdoc` |
|
|
286
|
+
| `type` | scalar name, or an enum/model name |
|
|
287
|
+
| `optional` | value may be absent (`field?`) |
|
|
288
|
+
| `list` | value is an array of `type` |
|
|
289
|
+
| `id` | marks the (single) primary identifier |
|
|
290
|
+
| `unique` | field-level unique → `@unique` |
|
|
291
|
+
| `relation` | model-typed field is a foreign-key relation (see below) |
|
|
292
|
+
| `col` | Data Connect column dataType (Int64 PKs default to `bigserial`) |
|
|
293
|
+
| `default` | `@default(expr: …)` on the DC column |
|
|
294
|
+
| `literal` | pin to one literal value (union discriminant tags) |
|
|
295
|
+
| `nullable` | value may be `null` (`.nullable()` / `\| null`) |
|
|
296
|
+
| `description` | doc comment carried into generated output |
|
|
297
|
+
| `jsdoc` | render the description as a JSDoc block (Firestore fields) |
|
|
296
298
|
| **constraints** → | |
|
|
297
|
-
| `min` / `max` |
|
|
298
|
-
| `minLength` / `maxLength` |
|
|
299
|
-
| `nonempty` |
|
|
300
|
-
| `pattern` |
|
|
301
|
-
| `email` / `url` |
|
|
299
|
+
| `min` / `max` | numeric bounds |
|
|
300
|
+
| `minLength` / `maxLength` | string/array length bounds |
|
|
301
|
+
| `nonempty` | non-empty string/array |
|
|
302
|
+
| `pattern` | regex the string must match |
|
|
303
|
+
| `email` / `url` | string format |
|
|
302
304
|
|
|
303
305
|
Constraints flow into the Zod schemas, the API request validation, and the
|
|
304
306
|
class-validator DTOs.
|
|
@@ -307,14 +309,14 @@ class-validator DTOs.
|
|
|
307
309
|
|
|
308
310
|
| option | meaning |
|
|
309
311
|
| ------------ | ------------------------------------------------------------------ |
|
|
310
|
-
| `key` |
|
|
311
|
-
| `table` |
|
|
312
|
-
| `gqlName` |
|
|
313
|
-
| `fsName` |
|
|
314
|
-
| `directives` |
|
|
315
|
-
| `footer` |
|
|
316
|
-
| `indexes` |
|
|
317
|
-
| `sql` |
|
|
312
|
+
| `key` | composite primary key field names (else the `id: true` field) |
|
|
313
|
+
| `table` | table name override (default: snake_case pluralization) |
|
|
314
|
+
| `gqlName` | GraphQL type name override |
|
|
315
|
+
| `fsName` | Firestore-side rename (avoid collisions with table models) |
|
|
316
|
+
| `directives` | `multi` = each type-level directive on its own line |
|
|
317
|
+
| `footer` | trailing comment block after the closing `}` in the schema file |
|
|
318
|
+
| `indexes` | composite `@index`/`@unique` (`{ fields, name?, unique?, expand? }` — `expand` renders args one per line) |
|
|
319
|
+
| `sql` | raw SQL constraints (see [SQL migrations](#sql-migrations)) |
|
|
318
320
|
|
|
319
321
|
### Embedded vs relation
|
|
320
322
|
|
|
@@ -392,14 +394,14 @@ Everything below exists to reproduce real hand-written `.gql` files byte-for-byt
|
|
|
392
394
|
|
|
393
395
|
| option | meaning |
|
|
394
396
|
| --- | --- |
|
|
395
|
-
| `gqlName` |
|
|
396
|
-
| `footer` |
|
|
397
|
-
| `raw` |
|
|
398
|
-
| `single: id \|
|
|
399
|
-
| `keyArg` / `keyVars` |
|
|
400
|
-
| `whereAnd: true` |
|
|
401
|
-
| `entityDir` |
|
|
402
|
-
| `style` |
|
|
397
|
+
| `gqlName` | rendered operation name (the yml key stays unique across services) |
|
|
398
|
+
| `footer` | trailing `# …` comment block after the operation |
|
|
399
|
+
| `raw` | emit the operation body verbatim (multi-model queries, `_or` keyset cursors — field checks are skipped) |
|
|
400
|
+
| `single: id \| key` | single-row lookup (`product(id: $id)` / `product(key: { … })`) |
|
|
401
|
+
| `keyArg` / `keyVars` | update/delete key argument form and variable renames |
|
|
402
|
+
| `whereAnd: true` | render conditions as an `_and: [ … ]` array |
|
|
403
|
+
| `entityDir` | override the `operations/<entity>/` output directory |
|
|
404
|
+
| `style` | formatting hints: `signature`, `args`, `data`, `orderBy`, `auth`, `key`, `and`, `where` (`inline`/`multi`/`compact`/`bare`) |
|
|
403
405
|
|
|
404
406
|
Inputs support `var` (variable rename), `required` (override optionality),
|
|
405
407
|
`literal` (fixed value, no variable), `flat` (write the FK column directly),
|
|
@@ -481,9 +483,9 @@ reality automatically:
|
|
|
481
483
|
|
|
482
484
|
- **relations → resolved string ids** (`ownerUser` → `ownerUserId: z.string()`)
|
|
483
485
|
- **timestamps → `z.date()`**, optional fields → `.nullable()`
|
|
484
|
-
- a **`_meta_`** consistency envelope is attached (opt out with `meta: false`)
|
|
485
486
|
- `pick` / `omit` select which base fields survive
|
|
486
487
|
- inline `fields` add denormalized data (flattened DAG edges, stringified JSON)
|
|
488
|
+
- `extends: [<fragment>…]` splices shared fields in (see **Fragments** below)
|
|
487
489
|
|
|
488
490
|
```yaml
|
|
489
491
|
firestore:
|
|
@@ -517,7 +519,6 @@ export const ShopSchema = DcShopSchema.pick({
|
|
|
517
519
|
}).extend({
|
|
518
520
|
createdAt: z.date(),
|
|
519
521
|
updatedAt: z.date().nullable(),
|
|
520
|
-
_meta_: _Meta_Schema,
|
|
521
522
|
})
|
|
522
523
|
```
|
|
523
524
|
|
|
@@ -534,6 +535,50 @@ Additional projection options:
|
|
|
534
535
|
- FS-only enums render as frozen consts (`REVIEW_STATE` + `ReviewStateSchema`),
|
|
535
536
|
co-located with the first projection that references them
|
|
536
537
|
|
|
538
|
+
### Fragments (`fragments:` + `extends:`)
|
|
539
|
+
|
|
540
|
+
A **fragment** is a named group of fields declared once and spliced into
|
|
541
|
+
consumers via `extends: [<name>…]` — the way to share a common field across
|
|
542
|
+
many projections (a consistency `_meta_` envelope, audit columns, …) without a
|
|
543
|
+
tool-imposed convention. The fragment field's name, type, and which docs carry
|
|
544
|
+
it are all yours.
|
|
545
|
+
|
|
546
|
+
The value objects a fragment references can be **pinned** to a fixed split
|
|
547
|
+
output via `out` (+ optional `file`) on the model declaration. A pinned value
|
|
548
|
+
object is *placement-scoped*: emitted only at that location (dependency-ordered,
|
|
549
|
+
with an `index.ts` barrel), imported by consumers via that directory, and
|
|
550
|
+
excluded from the default `typescript`/`zod` barrels — so it lives purely in the
|
|
551
|
+
firestore output. This is what lets a shared envelope sit under `firestore/_/`.
|
|
552
|
+
|
|
553
|
+
```yaml
|
|
554
|
+
models:
|
|
555
|
+
MetaOp:
|
|
556
|
+
out: firestore/_ # → firestore/_/_meta_.ts (+ firestore/_/index.ts)
|
|
557
|
+
file: _meta_.ts
|
|
558
|
+
fields:
|
|
559
|
+
id: { type: string }
|
|
560
|
+
Meta:
|
|
561
|
+
out: firestore/_
|
|
562
|
+
file: _meta_.ts
|
|
563
|
+
fields:
|
|
564
|
+
scope: { type: float, nullable: true }
|
|
565
|
+
op: { type: MetaOp, nullable: true }
|
|
566
|
+
|
|
567
|
+
fragments:
|
|
568
|
+
meta:
|
|
569
|
+
fields:
|
|
570
|
+
_meta_: { type: Meta }
|
|
571
|
+
|
|
572
|
+
firestore:
|
|
573
|
+
Shop:
|
|
574
|
+
from: Shop
|
|
575
|
+
extends: [meta] # appends `_meta_: MetaSchema` (imported from './_')
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
`extends` referencing a fragment that is not declared is an `UNKNOWN_FRAGMENT`
|
|
579
|
+
error, not a silent no-op — a typo like `extends: [metaa]` fails generation
|
|
580
|
+
rather than quietly dropping the shared fields.
|
|
581
|
+
|
|
537
582
|
## Discriminated unions
|
|
538
583
|
|
|
539
584
|
```yaml
|
|
@@ -617,7 +662,7 @@ project:
|
|
|
617
662
|
| `data-connect-operations`| document | `<connector>/operations.gql` + `.ts`; `split: true` → `<connector>/operations/<entity>/{queries,mutations}.gql` | queries/mutations (where ops, orderBy, limit, aggregate, exprs, inc), per connector; split matches the real Data Connect repo layout |
|
|
618
663
|
| `data-connect-adapter` | document | `data-connect-adapters.ts` | convert `Any` rows ⇄ logical types |
|
|
619
664
|
| `firestore-types` | document | `firestore-types.ts` | naive TS types with Firestore `Timestamp` (all models) |
|
|
620
|
-
| `firestore` | document | `firestore.ts`; `split: true` → `firestore/<collection>.ts` + barrel | Firestore projection Zod schemas (derived, denormalized);
|
|
665
|
+
| `firestore` | document | `firestore.ts`; `split: true` → `firestore/<collection>.ts` + barrel | Firestore projection Zod schemas (derived, denormalized); `extends` fragments, pinned value objects under their `out` (e.g. `firestore/_/`), DC-schema `.pick()` reuse, `FIRESTORE_DATABASES` constants in the barrel |
|
|
621
666
|
| `api-types` | api | `api-types.ts` | endpoint request/response types |
|
|
622
667
|
| `api-validation` | api | `api-validation.ts` | endpoint request-validation Zod |
|
|
623
668
|
| `api-dto` | api | `<operation>.dto.ts` per api | class-validator DTO classes (NestJS `dto/` convention) |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore-projection-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/firestore/firestore-projection-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"firestore-projection-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/firestore/firestore-projection-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AA4E5E;;;;;;;GAOG;AACH,eAAO,MAAM,kCAAkC,QAAO,SAiBnD,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { findModel } from '../../ir/ir.js';
|
|
1
|
+
import { findFragment, findModel } from '../../ir/ir.js';
|
|
2
2
|
import { singleQuote } from '../support/naming.js';
|
|
3
3
|
import { isRelation, relationFkName } from '../support/relations.js';
|
|
4
4
|
import { headerBlocks } from '../support/header.js';
|
|
@@ -18,19 +18,6 @@ const SCALAR_ZOD = {
|
|
|
18
18
|
json: 'z.unknown()',
|
|
19
19
|
id: 'z.string()',
|
|
20
20
|
};
|
|
21
|
-
const META_BLOCK = [
|
|
22
|
-
'export const _Meta_OperationSchema = z.object({',
|
|
23
|
-
' id: z.string(),',
|
|
24
|
-
' identifierId: z.string(),',
|
|
25
|
-
' updatedAt: z.number(),',
|
|
26
|
-
'})',
|
|
27
|
-
'export const _Meta_Schema = z.object({',
|
|
28
|
-
' scope: z.number().nullable(),',
|
|
29
|
-
' sys: z.number().nullable(),',
|
|
30
|
-
' op: _Meta_OperationSchema.nullable(),',
|
|
31
|
-
'})',
|
|
32
|
-
'export type _Meta_ = z.infer<typeof _Meta_Schema>',
|
|
33
|
-
].join('\n');
|
|
34
21
|
const fsField = (ir, field) => {
|
|
35
22
|
const name = isRelation(field) ? relationFkName(field) : field.name;
|
|
36
23
|
let schema;
|
|
@@ -69,7 +56,8 @@ const effectiveFields = (ir, doc) => {
|
|
|
69
56
|
const { name, schema } = fsField(ir, field);
|
|
70
57
|
entries.set(name, schema);
|
|
71
58
|
}
|
|
72
|
-
|
|
59
|
+
const added = [...doc.fields, ...doc.extends.flatMap(name => findFragment(ir, name)?.fields ?? [])];
|
|
60
|
+
for (const field of added) {
|
|
73
61
|
const { name, schema } = fsField(ir, field);
|
|
74
62
|
entries.set(name, schema);
|
|
75
63
|
}
|
|
@@ -82,8 +70,6 @@ const renderDoc = (ir, doc) => {
|
|
|
82
70
|
else if (doc.description)
|
|
83
71
|
lines.push(`// ${doc.description}`);
|
|
84
72
|
const fields = effectiveFields(ir, doc).map(field => ` ${field.name}: ${field.schema},`);
|
|
85
|
-
if (doc.meta)
|
|
86
|
-
fields.push(' _meta_: _Meta_Schema,');
|
|
87
73
|
lines.push(`export const ${doc.name}Schema = z.object({\n${fields.join('\n')}\n})`);
|
|
88
74
|
lines.push(`export type ${doc.name} = z.infer<typeof ${doc.name}Schema>`);
|
|
89
75
|
return lines.join('\n');
|
|
@@ -104,9 +90,6 @@ export const createFirestoreProjectionGenerator = () => withSplitVariant({
|
|
|
104
90
|
return [];
|
|
105
91
|
}
|
|
106
92
|
const blocks = [...headerBlocks(context), "import { z } from 'zod'"];
|
|
107
|
-
if (ir.firestore.some(doc => doc.meta)) {
|
|
108
|
-
blocks.push(META_BLOCK);
|
|
109
|
-
}
|
|
110
93
|
for (const doc of ir.firestore) {
|
|
111
94
|
blocks.push(renderDoc(ir, doc));
|
|
112
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore-split-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/firestore/firestore-split-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"firestore-split-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/firestore/firestore-split-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AAoN5E;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,QAAO,SAiL5C,CAAA"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import { findEnum, findModel } from '../../ir/ir.js';
|
|
1
|
+
import { findEnum, findFragment, findModel } from '../../ir/ir.js';
|
|
2
2
|
import { zodConstraints } from '../support/constraints.js';
|
|
3
3
|
import { headerBlocks } from '../support/header.js';
|
|
4
4
|
import { camelCase, constantCase, pluralize, singleQuote } from '../support/naming.js';
|
|
5
5
|
import { isRelation, relationFkName } from '../support/relations.js';
|
|
6
6
|
import { collectDeps, kebabCase, tableNameOf } from '../support/split.js';
|
|
7
7
|
import { outputFile } from '../support/templates.js';
|
|
8
|
+
/** Fields spliced into a projection by its `extends` fragments (in declared order). */
|
|
9
|
+
const fragmentFieldsOf = (ir, doc) => doc.extends.flatMap(name => findFragment(ir, name)?.fields ?? []);
|
|
10
|
+
/** True for a placement-pinned value object (emitted at its own `out`, not co-located). */
|
|
11
|
+
const isPinnedModel = (ir, name) => findModel(ir, name)?.out !== undefined;
|
|
12
|
+
/** Import path (dir barrel) from a `firestore/<name>.ts` doc to a pinned model's `out` dir. */
|
|
13
|
+
const pinnedImportPath = (out) => `./${out.startsWith('firestore/') ? out.slice('firestore/'.length) : out}`;
|
|
8
14
|
// Projection-level scalars: timestamps become dates, ids/relations become
|
|
9
15
|
// resolved (hashids-encoded) string ids.
|
|
10
16
|
const SCALAR_FS = {
|
|
@@ -24,36 +30,6 @@ const SCALAR_EMBEDDED = {
|
|
|
24
30
|
int: 'z.number().int()',
|
|
25
31
|
int64: 'z.number().int()',
|
|
26
32
|
};
|
|
27
|
-
const META_FILE = `import { z } from 'zod'
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Cloud Task 整合性管理用の operation 識別子メタ。
|
|
31
|
-
* 整合性回復 (reconciliation) 処理の最新世代を表す。
|
|
32
|
-
*/
|
|
33
|
-
export const _Meta_OperationSchema = z.object({
|
|
34
|
-
/** opId (operation id) */
|
|
35
|
-
id: z.string(),
|
|
36
|
-
/** 整合性回復処理の識別子 */
|
|
37
|
-
identifierId: z.string(),
|
|
38
|
-
/** unixtime (最終更新) */
|
|
39
|
-
updatedAt: z.number(),
|
|
40
|
-
})
|
|
41
|
-
export type _Meta_Operation = z.infer<typeof _Meta_OperationSchema>
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* 全 Firestore document に付ける整合性管理メタ。
|
|
45
|
-
*
|
|
46
|
-
* - \`scope\`: app hosting 経由で set される unixtime
|
|
47
|
-
* - \`sys\`: cloud functions / cloud task 経由で set される unixtime
|
|
48
|
-
* - \`op\`: cloud task で set される operation メタ
|
|
49
|
-
*/
|
|
50
|
-
export const _Meta_Schema = z.object({
|
|
51
|
-
scope: z.number().nullable(),
|
|
52
|
-
sys: z.number().nullable(),
|
|
53
|
-
op: _Meta_OperationSchema.nullable(),
|
|
54
|
-
})
|
|
55
|
-
export type _Meta_ = z.infer<typeof _Meta_Schema>
|
|
56
|
-
`;
|
|
57
33
|
const lineComments = (description, indent) => description ? description.split('\n').map(line => `${indent}// ${line}`.trimEnd()) : [];
|
|
58
34
|
const jsdoc = (description, indent) => {
|
|
59
35
|
if (!description)
|
|
@@ -216,7 +192,7 @@ const effectiveFields = (ir, doc) => {
|
|
|
216
192
|
entries.set(name, { comments: [], entry: ` ${name}: ${schema},`, name, pickable });
|
|
217
193
|
roots.push(field);
|
|
218
194
|
}
|
|
219
|
-
for (const field of doc.fields) {
|
|
195
|
+
for (const field of [...doc.fields, ...fragmentFieldsOf(ir, doc)]) {
|
|
220
196
|
const { name, schema } = overrideFieldSchema(ir, field);
|
|
221
197
|
const comments = field.jsdoc ? jsdoc(field.description, ' ') : lineComments(field.description, ' ');
|
|
222
198
|
entries.set(name, { comments, entry: ` ${name}: ${schema},`, name, pickable: false });
|
|
@@ -249,7 +225,9 @@ export const createFirestoreSplitLayout = () => ({
|
|
|
249
225
|
const pseudo = { name: `__${doc.name}`, fields: roots, key: [], indexes: [] };
|
|
250
226
|
const collected = collectDeps(ir, [pseudo]);
|
|
251
227
|
const included = (doc.include ?? []).filter(name => !collected.models.includes(name));
|
|
252
|
-
|
|
228
|
+
// Pinned value objects are emitted at their own `out`, never co-located.
|
|
229
|
+
const models = [...included, ...collected.models].filter(name => !isPinnedModel(ir, name));
|
|
230
|
+
const deps = { enums: collected.enums, models };
|
|
253
231
|
docDeps.set(doc.name, deps);
|
|
254
232
|
const moduleName = docModuleName(doc);
|
|
255
233
|
for (const name of deps.enums)
|
|
@@ -285,8 +263,23 @@ export const createFirestoreSplitLayout = () => ({
|
|
|
285
263
|
const importLines = [...external.entries()]
|
|
286
264
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
287
265
|
.map(([home, symbols]) => `import { ${[...symbols].sort().join(', ')} } from './${home}'`);
|
|
288
|
-
|
|
289
|
-
|
|
266
|
+
// Pinned value objects directly referenced by this doc: imported from their out-dir barrel.
|
|
267
|
+
const { roots } = effectiveFields(ir, doc);
|
|
268
|
+
const pinnedImports = new Map();
|
|
269
|
+
for (const field of roots) {
|
|
270
|
+
if (field.type.kind === 'model' && isPinnedModel(ir, field.type.name)) {
|
|
271
|
+
const model = findModel(ir, field.type.name);
|
|
272
|
+
if (!model?.out)
|
|
273
|
+
continue;
|
|
274
|
+
const from = pinnedImportPath(model.out);
|
|
275
|
+
const set = pinnedImports.get(from) ?? new Set();
|
|
276
|
+
set.add(`${fsModelName(ir, field.type.name)}Schema`);
|
|
277
|
+
pinnedImports.set(from, set);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
for (const [from, symbols] of [...pinnedImports.entries()].sort(([a], [b]) => a.localeCompare(b))) {
|
|
281
|
+
importLines.unshift(`import { ${[...symbols].sort().join(', ')} } from '${from}'`);
|
|
282
|
+
}
|
|
290
283
|
// Fields whose Zod chain is identical to the Data Connect schema are
|
|
291
284
|
// picked from it (single definition); only representation changes extend.
|
|
292
285
|
const baseModel = doc.from ? findModel(ir, doc.from) : undefined;
|
|
@@ -330,8 +323,6 @@ export const createFirestoreSplitLayout = () => ({
|
|
|
330
323
|
lines.push(...field.comments);
|
|
331
324
|
lines.push(field.entry);
|
|
332
325
|
}
|
|
333
|
-
if (doc.meta)
|
|
334
|
-
lines.push(' _meta_: _Meta_Schema,');
|
|
335
326
|
lines.push('})');
|
|
336
327
|
}
|
|
337
328
|
else {
|
|
@@ -340,17 +331,48 @@ export const createFirestoreSplitLayout = () => ({
|
|
|
340
331
|
lines.push(...field.comments);
|
|
341
332
|
lines.push(field.entry);
|
|
342
333
|
}
|
|
343
|
-
if (doc.meta)
|
|
344
|
-
lines.push(' _meta_: _Meta_Schema,');
|
|
345
334
|
lines.push('})');
|
|
346
335
|
}
|
|
347
336
|
lines.push(`export type ${doc.name} = z.infer<typeof ${doc.name}Schema>`);
|
|
348
337
|
blocks.push(lines.join('\n'));
|
|
349
338
|
files.push({ path: `firestore/${moduleName}.ts`, content: `${blocks.join('\n\n')}\n` });
|
|
350
339
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
340
|
+
// Pinned value objects: emitted at their own `out` (grouped per out+file),
|
|
341
|
+
// dependencies first, with an index barrel. These replace the former
|
|
342
|
+
// hardcoded `_meta_` envelope — the shape now lives entirely in the contract.
|
|
343
|
+
const pinDirs = [];
|
|
344
|
+
const pinGroups = new Map();
|
|
345
|
+
for (const model of ir.models) {
|
|
346
|
+
if (model.out === undefined)
|
|
347
|
+
continue;
|
|
348
|
+
const file = model.file ?? 'index.ts';
|
|
349
|
+
const key = `${model.out}${file}`;
|
|
350
|
+
const group = pinGroups.get(key) ?? { out: model.out, file, models: [] };
|
|
351
|
+
group.models.push(model);
|
|
352
|
+
pinGroups.set(key, group);
|
|
353
|
+
}
|
|
354
|
+
for (const { out, file, models } of pinGroups.values()) {
|
|
355
|
+
// Order so a referenced value object is declared before its referrer (same file).
|
|
356
|
+
const ordered = [];
|
|
357
|
+
const placed = new Set();
|
|
358
|
+
const place = (m) => {
|
|
359
|
+
if (placed.has(m.name))
|
|
360
|
+
return;
|
|
361
|
+
placed.add(m.name);
|
|
362
|
+
for (const dep of collectDeps(ir, [m]).models) {
|
|
363
|
+
const depModel = models.find(x => x.name === dep);
|
|
364
|
+
if (depModel)
|
|
365
|
+
place(depModel);
|
|
366
|
+
}
|
|
367
|
+
ordered.push(m);
|
|
368
|
+
};
|
|
369
|
+
for (const m of models)
|
|
370
|
+
place(m);
|
|
371
|
+
const body = ['import { z }' + " from 'zod'", ...ordered.map(m => renderEmbeddedModel(ir, m))].join('\n\n');
|
|
372
|
+
const base = file.replace(/\.ts$/, '');
|
|
373
|
+
files.push({ path: `${out}/${file}`, content: `${body}\n` });
|
|
374
|
+
files.push({ path: `${out}/index.ts`, content: `export * from './${base}'\n` });
|
|
375
|
+
pinDirs.push(out);
|
|
354
376
|
}
|
|
355
377
|
// Barrel: database name constants (when the project defines services) + re-exports.
|
|
356
378
|
const barrel = [...headerBlocks(context)];
|
|
@@ -367,8 +389,8 @@ export const createFirestoreSplitLayout = () => ({
|
|
|
367
389
|
].join('\n'));
|
|
368
390
|
}
|
|
369
391
|
const exportLines = ir.firestore.map(doc => `export * from './firestore/${docModuleName(doc)}'`);
|
|
370
|
-
|
|
371
|
-
exportLines.push(`export * from '
|
|
392
|
+
for (const out of pinDirs)
|
|
393
|
+
exportLines.push(`export * from './${out}'`);
|
|
372
394
|
barrel.push(['// Zod schema / TypeScript 型のエクスポート', ...exportLines].join('\n'));
|
|
373
395
|
files.push({ path: outputFile(context, 'firestore.ts'), content: `${barrel.join('\n\n')}\n` });
|
|
374
396
|
return files;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/support/split.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,EAAE,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAIvD,qEAAqE;AACrE,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,OAAiE,CAAA;AAE1G,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,MAAyD,CAAA;AAEtG,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAA6C,CAAA;AAavF,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,8DAA8D;IAC9D,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,IAAI,EAAE,EAAE,OAAO,OAAO,EAAE,KAAG,UAuBtD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,OAAO,EAAE,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAavE,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,qDAAqD;IACrD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,oDAAoD;IACpD,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,IAAI,EAAE,KAAG,
|
|
1
|
+
{"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/support/split.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,EAAE,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAIvD,qEAAqE;AACrE,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,OAAiE,CAAA;AAE1G,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,MAAyD,CAAA;AAEtG,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAA6C,CAAA;AAavF,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,8DAA8D;IAC9D,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,IAAI,EAAE,EAAE,OAAO,OAAO,EAAE,KAAG,UAuBtD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,OAAO,EAAE,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAavE,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,qDAAqD;IACrD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,oDAAoD;IACpD,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,IAAI,EAAE,KAAG,WAgBpC,CAAA"}
|
|
@@ -90,7 +90,8 @@ export const splitGroups = (ir) => {
|
|
|
90
90
|
}
|
|
91
91
|
const leftoverEnums = ir.enums.map(e => e.name).filter(name => !enumHome.has(name));
|
|
92
92
|
const leftoverModels = ir.models
|
|
93
|
-
|
|
93
|
+
// Pinned value objects are emitted at their own `out`, never in the default barrels.
|
|
94
|
+
.filter(model => !isTable(model) && model.out === undefined)
|
|
94
95
|
.map(model => model.name)
|
|
95
96
|
.filter(name => !modelHome.has(name));
|
|
96
97
|
return { tables, enumHome, modelHome, leftoverEnums, leftoverModels };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/typescript/typescript-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AAO5E,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GAAI,UAAS,0BAA+B,KAAG,
|
|
1
|
+
{"version":3,"file":"typescript-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/typescript/typescript-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AAO5E,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GAAI,UAAS,0BAA+B,KAAG,SA4BpF,CAAA"}
|
|
@@ -17,13 +17,15 @@ export const createTypeScriptGenerator = (options = {}) => {
|
|
|
17
17
|
description: 'TypeScript interfaces and enum const/union types',
|
|
18
18
|
generate(ir, context) {
|
|
19
19
|
const blocks = [...headerBlocks(context)];
|
|
20
|
-
|
|
20
|
+
// Pinned value objects (models with `out`) are firestore-scoped: excluded here.
|
|
21
|
+
const models = ir.models.filter(model => model.out === undefined);
|
|
22
|
+
if (usesJson(models)) {
|
|
21
23
|
blocks.push(JSON_TYPE);
|
|
22
24
|
}
|
|
23
25
|
for (const irEnum of ir.enums) {
|
|
24
26
|
blocks.push(enumStyle === 'const' ? renderEnumConst(irEnum) : renderEnumUnion(irEnum));
|
|
25
27
|
}
|
|
26
|
-
for (const model of
|
|
28
|
+
for (const model of models) {
|
|
27
29
|
blocks.push(renderModel(model, ir));
|
|
28
30
|
}
|
|
29
31
|
return [{ path: outputFile(context, 'types.ts'), content: `${blocks.join('\n\n')}\n` }];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/zod/zod-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AAO5E;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAO,
|
|
1
|
+
{"version":3,"file":"zod-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/zod/zod-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AAO5E;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAO,SAqBnC,CAAA"}
|
|
@@ -16,7 +16,8 @@ export const createZodGenerator = () => withSplitVariant({
|
|
|
16
16
|
for (const irEnum of ir.enums) {
|
|
17
17
|
blocks.push(renderEnum(irEnum));
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
// Pinned value objects (models with `out`) are firestore-scoped: excluded here.
|
|
20
|
+
for (const model of ir.models.filter(model => model.out === undefined)) {
|
|
20
21
|
blocks.push(renderModel(model, ir));
|
|
21
22
|
}
|
|
22
23
|
return [{ path: outputFile(context, 'schemas.ts'), content: `${blocks.join('\n\n')}\n` }];
|
|
@@ -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,EAAkB,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAGL,WAAW,EAIZ,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAGL,EAAE,
|
|
1
|
+
{"version":3,"file":"build-ir.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/ir/build-ir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAGL,WAAW,EAIZ,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAGL,EAAE,EAiBH,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,EAAE,CAAA;IACN,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B;AAyPD;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAAI,WAAW,WAAW,EAAE,KAAG,aAkSlD,CAAA"}
|
|
@@ -222,7 +222,7 @@ const buildFirestoreDoc = (name, raw, sourceFile, enumNames, modelNames) => {
|
|
|
222
222
|
pick: raw.pick ?? [],
|
|
223
223
|
omit: raw.omit ?? [],
|
|
224
224
|
fields,
|
|
225
|
-
|
|
225
|
+
extends: raw.extends ?? [],
|
|
226
226
|
sourceFile,
|
|
227
227
|
};
|
|
228
228
|
if (raw.from !== undefined)
|
|
@@ -309,6 +309,10 @@ export const buildIr = (documents) => {
|
|
|
309
309
|
})),
|
|
310
310
|
sourceFile: doc.filePath,
|
|
311
311
|
};
|
|
312
|
+
if (raw.out !== undefined)
|
|
313
|
+
model.out = raw.out;
|
|
314
|
+
if (raw.file !== undefined)
|
|
315
|
+
model.file = raw.file;
|
|
312
316
|
if (raw.description !== undefined)
|
|
313
317
|
model.description = raw.description;
|
|
314
318
|
if (raw.table !== undefined)
|
|
@@ -447,6 +451,31 @@ export const buildIr = (documents) => {
|
|
|
447
451
|
envelope.description = raw.description;
|
|
448
452
|
envelopes.push(envelope);
|
|
449
453
|
}
|
|
454
|
+
const fragmentSources = new Map();
|
|
455
|
+
for (const doc of documents) {
|
|
456
|
+
for (const name of Object.keys(doc.fragments)) {
|
|
457
|
+
if (fragmentSources.has(name)) {
|
|
458
|
+
diagnostics.push(error('DUPLICATE_DEFINITION', `Fragment "${name}" is defined more than once`, {
|
|
459
|
+
file: doc.filePath,
|
|
460
|
+
path: `fragments.${name}`,
|
|
461
|
+
}));
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
fragmentSources.set(name, doc);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
const fragments = [];
|
|
468
|
+
for (const [name, doc] of fragmentSources) {
|
|
469
|
+
const raw = doc.fragments[name];
|
|
470
|
+
const fragment = {
|
|
471
|
+
name,
|
|
472
|
+
fields: Object.entries(raw.fields).map(([fieldName, rawField]) => buildField(fieldName, rawField, enumNames, modelNames)),
|
|
473
|
+
sourceFile: doc.filePath,
|
|
474
|
+
};
|
|
475
|
+
if (raw.description !== undefined)
|
|
476
|
+
fragment.description = raw.description;
|
|
477
|
+
fragments.push(fragment);
|
|
478
|
+
}
|
|
450
479
|
let header;
|
|
451
480
|
for (const doc of documents) {
|
|
452
481
|
if (doc.header !== undefined) {
|
|
@@ -479,6 +508,7 @@ export const buildIr = (documents) => {
|
|
|
479
508
|
firestore,
|
|
480
509
|
unions,
|
|
481
510
|
envelopes,
|
|
511
|
+
fragments,
|
|
482
512
|
...(project ? { project } : {}),
|
|
483
513
|
...(header !== undefined ? { header } : {}),
|
|
484
514
|
},
|
|
@@ -121,6 +121,10 @@ export interface IrModel {
|
|
|
121
121
|
fsName?: string;
|
|
122
122
|
/** Composite unique/index constraints (Data Connect `@unique`/`@index`). */
|
|
123
123
|
indexes: IrIndex[];
|
|
124
|
+
/** Placement-pinned split output dir (relative to the generator `out`); firestore-scoped value object. */
|
|
125
|
+
out?: string;
|
|
126
|
+
/** File name for a placement-pinned value object. */
|
|
127
|
+
file?: string;
|
|
124
128
|
/** Absolute path of the file this model was defined in. */
|
|
125
129
|
sourceFile?: string;
|
|
126
130
|
}
|
|
@@ -322,8 +326,9 @@ export interface IrEnvelope {
|
|
|
322
326
|
* A Firestore projection document. Firestore is a denormalized read model, so a
|
|
323
327
|
* projection *derives* from a Data Connect model (`from`) and then diverges:
|
|
324
328
|
* fields are picked/omitted, relations become resolved string ids, timestamps
|
|
325
|
-
* become dates, a `_meta_` envelope
|
|
326
|
-
* (e.g. flattened DAG edges) are
|
|
329
|
+
* become dates, fragments (e.g. a shared `_meta_` envelope) are spliced in via
|
|
330
|
+
* `extends`, and extra denormalized fields (e.g. flattened DAG edges) are
|
|
331
|
+
* declared inline.
|
|
327
332
|
*/
|
|
328
333
|
export interface IrFirestoreDoc {
|
|
329
334
|
name: string;
|
|
@@ -338,14 +343,21 @@ export interface IrFirestoreDoc {
|
|
|
338
343
|
omit: string[];
|
|
339
344
|
/** Added or overriding projection-specific fields. */
|
|
340
345
|
fields: IrField[];
|
|
341
|
-
/**
|
|
342
|
-
|
|
346
|
+
/** Fragment names whose fields are appended to this projection. */
|
|
347
|
+
extends: string[];
|
|
343
348
|
/** Embedded models to host in this projection file even when unreferenced. */
|
|
344
349
|
include?: string[];
|
|
345
350
|
/** Verbatim TypeScript helpers emitted into the projection file. */
|
|
346
351
|
helpers?: string;
|
|
347
352
|
sourceFile?: string;
|
|
348
353
|
}
|
|
354
|
+
/** A reusable named group of fields, spliced into consumers via `extends`. */
|
|
355
|
+
export interface IrFragment {
|
|
356
|
+
name: string;
|
|
357
|
+
description?: string;
|
|
358
|
+
fields: IrField[];
|
|
359
|
+
sourceFile?: string;
|
|
360
|
+
}
|
|
349
361
|
/** A discriminated union of model variants keyed by a shared discriminant field. */
|
|
350
362
|
export interface IrUnion {
|
|
351
363
|
name: string;
|
|
@@ -383,12 +395,14 @@ export interface Ir {
|
|
|
383
395
|
firestore: IrFirestoreDoc[];
|
|
384
396
|
unions: IrUnion[];
|
|
385
397
|
envelopes: IrEnvelope[];
|
|
398
|
+
fragments: IrFragment[];
|
|
386
399
|
project?: IrProject;
|
|
387
400
|
/** Raw header text from the contract (`default` = built-in banner). */
|
|
388
401
|
header?: string;
|
|
389
402
|
}
|
|
390
403
|
export declare const findModel: (ir: Ir, name: string) => IrModel | undefined;
|
|
391
404
|
export declare const findEnum: (ir: Ir, name: string) => IrEnum | undefined;
|
|
405
|
+
export declare const findFragment: (ir: Ir, name: string) => IrFragment | undefined;
|
|
392
406
|
/** The id field's scalar name of a model, used to type foreign keys. Defaults to `string`. */
|
|
393
407
|
export declare const idTypeOf: (ir: Ir, modelName: string) => ScalarType;
|
|
394
408
|
//# sourceMappingURL=ir.d.ts.map
|
|
@@ -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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"}
|
|
@@ -11,6 +11,7 @@ export const SCALAR_TYPES = ['string', 'int', 'int64', 'float', 'boolean', 'time
|
|
|
11
11
|
export const isScalarType = (name) => SCALAR_TYPES.includes(name);
|
|
12
12
|
export const findModel = (ir, name) => ir.models.find(model => model.name === name);
|
|
13
13
|
export const findEnum = (ir, name) => ir.enums.find(irEnum => irEnum.name === name);
|
|
14
|
+
export const findFragment = (ir, name) => ir.fragments.find(fragment => fragment.name === name);
|
|
14
15
|
/** The id field's scalar name of a model, used to type foreign keys. Defaults to `string`. */
|
|
15
16
|
export const idTypeOf = (ir, modelName) => {
|
|
16
17
|
const model = findModel(ir, modelName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/parse.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,UAAU,EAAS,MAAM,mBAAmB,CAAA;AAEpE,OAAO,EAGL,WAAW,
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/parse.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,UAAU,EAAS,MAAM,mBAAmB,CAAA;AAEpE,OAAO,EAGL,WAAW,EAcZ,MAAM,mBAAmB,CAAA;AAkoB1B;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,EAAE,UAAU,MAAM,EAAE,cAAc,UAAU,EAAE,KAAG,WAO7F,CAAA"}
|
|
@@ -86,12 +86,16 @@ const normalizeModel = (raw, filePath, name) => {
|
|
|
86
86
|
if (!isObject(fieldsRaw)) {
|
|
87
87
|
return fail(`Model "${name}" is missing a "fields" object`, filePath, `models.${name}.fields`);
|
|
88
88
|
}
|
|
89
|
-
checkKeys(raw, ['fields', 'description', 'key', 'table', 'gqlName', 'directives', 'footer', 'fsName', 'indexes', 'sql'], filePath, `models.${name}`);
|
|
89
|
+
checkKeys(raw, ['fields', 'description', 'key', 'table', 'gqlName', 'directives', 'footer', 'fsName', 'indexes', 'sql', 'out', 'file'], filePath, `models.${name}`);
|
|
90
90
|
const fields = {};
|
|
91
91
|
for (const [fieldName, fieldRaw] of Object.entries(fieldsRaw)) {
|
|
92
92
|
fields[fieldName] = normalizeField(fieldRaw, filePath, `models.${name}.fields.${fieldName}`);
|
|
93
93
|
}
|
|
94
94
|
const model = { fields };
|
|
95
|
+
if (raw.out !== undefined)
|
|
96
|
+
model.out = String(raw.out);
|
|
97
|
+
if (raw.file !== undefined)
|
|
98
|
+
model.file = String(raw.file);
|
|
95
99
|
if (raw.description !== undefined)
|
|
96
100
|
model.description = String(raw.description);
|
|
97
101
|
if (raw.key !== undefined)
|
|
@@ -590,7 +594,7 @@ const normalizeFirestoreDoc = (raw, filePath, name) => {
|
|
|
590
594
|
if (!isObject(raw)) {
|
|
591
595
|
return fail(`Firestore doc "${name}" must be an object`, filePath, `firestore.${name}`);
|
|
592
596
|
}
|
|
593
|
-
checkKeys(raw, ['from', 'collection', 'description', '
|
|
597
|
+
checkKeys(raw, ['from', 'collection', 'description', 'extends', 'helpers', 'include', 'pick', 'omit', 'fields'], filePath, `firestore.${name}`);
|
|
594
598
|
const doc = {};
|
|
595
599
|
if (raw.from !== undefined)
|
|
596
600
|
doc.from = String(raw.from);
|
|
@@ -598,8 +602,8 @@ const normalizeFirestoreDoc = (raw, filePath, name) => {
|
|
|
598
602
|
doc.collection = String(raw.collection);
|
|
599
603
|
if (raw.description !== undefined)
|
|
600
604
|
doc.description = String(raw.description);
|
|
601
|
-
if (raw.
|
|
602
|
-
doc.
|
|
605
|
+
if (raw.extends !== undefined)
|
|
606
|
+
doc.extends = asStringArray(raw.extends, filePath, `firestore.${name}.extends`);
|
|
603
607
|
if (raw.helpers !== undefined)
|
|
604
608
|
doc.helpers = String(raw.helpers);
|
|
605
609
|
if (raw.include !== undefined)
|
|
@@ -618,6 +622,23 @@ const normalizeFirestoreDoc = (raw, filePath, name) => {
|
|
|
618
622
|
}
|
|
619
623
|
return doc;
|
|
620
624
|
};
|
|
625
|
+
const normalizeFragment = (raw, filePath, name) => {
|
|
626
|
+
if (!isObject(raw)) {
|
|
627
|
+
return fail(`Fragment "${name}" must be an object`, filePath, `fragments.${name}`);
|
|
628
|
+
}
|
|
629
|
+
if (!isObject(raw.fields)) {
|
|
630
|
+
return fail(`Fragment "${name}" is missing a "fields" object`, filePath, `fragments.${name}.fields`);
|
|
631
|
+
}
|
|
632
|
+
checkKeys(raw, ['fields', 'description'], filePath, `fragments.${name}`);
|
|
633
|
+
const fields = {};
|
|
634
|
+
for (const [fieldName, fieldRaw] of Object.entries(raw.fields)) {
|
|
635
|
+
fields[fieldName] = normalizeField(fieldRaw, filePath, `fragments.${name}.fields.${fieldName}`);
|
|
636
|
+
}
|
|
637
|
+
const fragment = { fields };
|
|
638
|
+
if (raw.description !== undefined)
|
|
639
|
+
fragment.description = String(raw.description);
|
|
640
|
+
return fragment;
|
|
641
|
+
};
|
|
621
642
|
const normalizeUnion = (raw, filePath, name) => {
|
|
622
643
|
if (!isObject(raw)) {
|
|
623
644
|
return fail(`Union "${name}" must be an object`, filePath, `unions.${name}`);
|
|
@@ -728,12 +749,13 @@ const parseContractInner = (content, filePath) => {
|
|
|
728
749
|
firestore: {},
|
|
729
750
|
unions: {},
|
|
730
751
|
envelopes: {},
|
|
752
|
+
fragments: {},
|
|
731
753
|
};
|
|
732
754
|
}
|
|
733
755
|
if (!isObject(doc)) {
|
|
734
756
|
return fail('Contract root must be a mapping', filePath);
|
|
735
757
|
}
|
|
736
|
-
checkKeys(doc, ['imports', 'defaults', 'header', 'project', 'generators', 'enums', 'models', 'operations', 'apis', 'tasks', 'events', 'firestore', 'unions', 'envelopes'], filePath, '(root)');
|
|
758
|
+
checkKeys(doc, ['imports', 'defaults', 'header', 'project', 'generators', 'enums', 'models', 'operations', 'apis', 'tasks', 'events', 'firestore', 'unions', 'envelopes', 'fragments'], filePath, '(root)');
|
|
737
759
|
const imports = [];
|
|
738
760
|
if (doc.imports !== undefined) {
|
|
739
761
|
if (!Array.isArray(doc.imports)) {
|
|
@@ -866,6 +888,15 @@ const parseContractInner = (content, filePath) => {
|
|
|
866
888
|
envelopes[name] = normalizeEnvelope(raw, filePath, name);
|
|
867
889
|
}
|
|
868
890
|
}
|
|
891
|
+
const fragments = {};
|
|
892
|
+
if (doc.fragments !== undefined) {
|
|
893
|
+
if (!isObject(doc.fragments)) {
|
|
894
|
+
return fail('"fragments" must be a mapping', filePath, 'fragments');
|
|
895
|
+
}
|
|
896
|
+
for (const [name, raw] of Object.entries(doc.fragments)) {
|
|
897
|
+
fragments[name] = normalizeFragment(raw, filePath, name);
|
|
898
|
+
}
|
|
899
|
+
}
|
|
869
900
|
const contract = {
|
|
870
901
|
filePath,
|
|
871
902
|
imports,
|
|
@@ -877,6 +908,7 @@ const parseContractInner = (content, filePath) => {
|
|
|
877
908
|
firestore,
|
|
878
909
|
unions,
|
|
879
910
|
envelopes,
|
|
911
|
+
fragments,
|
|
880
912
|
};
|
|
881
913
|
if (doc.project !== undefined) {
|
|
882
914
|
contract.project = normalizeProject(doc.project, filePath);
|
|
@@ -69,6 +69,16 @@ export interface RawModel {
|
|
|
69
69
|
fsName?: string;
|
|
70
70
|
indexes?: RawIndex[];
|
|
71
71
|
sql?: RawSqlConstraints;
|
|
72
|
+
/**
|
|
73
|
+
* Pin this value-object's split output to a fixed directory (relative to the
|
|
74
|
+
* generator `out`), e.g. `_` → `firestore/_/…`. A model with `out` is a
|
|
75
|
+
* placement-scoped value object: it is emitted only at this location by the
|
|
76
|
+
* owning split generator (firestore) and excluded from the default
|
|
77
|
+
* typescript/zod barrels. Split layouts only.
|
|
78
|
+
*/
|
|
79
|
+
out?: string;
|
|
80
|
+
/** File name for a placement-pinned value object (default: the `out` dir's index style). */
|
|
81
|
+
file?: string;
|
|
72
82
|
}
|
|
73
83
|
export interface RawOperation {
|
|
74
84
|
description?: string;
|
|
@@ -212,12 +222,18 @@ export interface RawFirestoreDoc {
|
|
|
212
222
|
pick?: string[];
|
|
213
223
|
omit?: string[];
|
|
214
224
|
fields?: Record<string, RawField>;
|
|
215
|
-
|
|
225
|
+
/** Fragments to splice into this projection (their fields are appended). */
|
|
226
|
+
extends?: string[];
|
|
216
227
|
/** Embedded models to host in this projection file even when unreferenced. */
|
|
217
228
|
include?: string[];
|
|
218
229
|
/** Verbatim TypeScript helpers emitted into the projection file. */
|
|
219
230
|
helpers?: string;
|
|
220
231
|
}
|
|
232
|
+
/** A reusable named group of fields, spliced into a consumer via `extends`. */
|
|
233
|
+
export interface RawFragment {
|
|
234
|
+
description?: string;
|
|
235
|
+
fields: Record<string, RawField>;
|
|
236
|
+
}
|
|
221
237
|
export interface RawUnion {
|
|
222
238
|
description?: string;
|
|
223
239
|
discriminant: string;
|
|
@@ -264,5 +280,6 @@ export interface RawContract {
|
|
|
264
280
|
firestore: Record<string, RawFirestoreDoc>;
|
|
265
281
|
unions: Record<string, RawUnion>;
|
|
266
282
|
envelopes: Record<string, RawEnvelope>;
|
|
283
|
+
fragments: Record<string, RawFragment>;
|
|
267
284
|
}
|
|
268
285
|
//# sourceMappingURL=raw-document.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-document.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/raw-document.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACxE,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;CACnE;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAChC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAA;IACpB,GAAG,CAAC,EAAE,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"raw-document.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/raw-document.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACxE,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;CACnE;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAChC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAA;IACpB,GAAG,CAAC,EAAE,iBAAiB,CAAA;IACvB;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4FAA4F;IAC5F,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;IACvK,8DAA8D;IAC9D,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;IACjI,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACrG,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC1C,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IACtE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAC/C,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,GAAG,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACvC,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1I;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACjC,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,MAAM;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mGAAmG;IACnG,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;CAC/B;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAA;IACX,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qFAAqF;IACrF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,8FAA8F;AAC9F,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,uFAAuF;AACvF,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,eAAe,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,eAAe,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACjC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,2EAA2E;IAC3E,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACnC,8EAA8E;IAC9E,eAAe,CAAC,EAAE,kBAAkB,CAAA;IACpC,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;CACvC"}
|
|
@@ -28,6 +28,13 @@ export declare const apis: ValidationRule;
|
|
|
28
28
|
export declare const firestore: ValidationRule;
|
|
29
29
|
/** Union variants must be known models, each carrying the discriminant field. */
|
|
30
30
|
export declare const unions: ValidationRule;
|
|
31
|
+
/**
|
|
32
|
+
* A firestore doc's `extends` must reference a declared fragment. An unknown
|
|
33
|
+
* name would otherwise resolve to no fields and silently drop the shared
|
|
34
|
+
* columns (`extends: [metaa]` → no `_meta_`), the exact silent-coercion class
|
|
35
|
+
* the contract-is-truth rules exist to kill.
|
|
36
|
+
*/
|
|
37
|
+
export declare const fragmentRefs: ValidationRule;
|
|
31
38
|
/**
|
|
32
39
|
* Type names must be unique within every output namespace — the export surface
|
|
33
40
|
* where generated identifiers converge (a split layout still merges into one
|
|
@@ -40,7 +47,7 @@ export declare const unions: ValidationRule;
|
|
|
40
47
|
* - zod schemas module: logical names and their `…Schema` companions
|
|
41
48
|
* - unions module: union names/schemas plus the variant schemas it imports
|
|
42
49
|
* - firestore module: doc names, co-located enums/embedded models under
|
|
43
|
-
* `fsName ?? name`, plus the `
|
|
50
|
+
* `fsName ?? name`, plus the `FIRESTORE_DATABASES` runtime
|
|
44
51
|
*
|
|
45
52
|
* GraphQL names are checked separately ({@link graphqlNameCollisions}) because
|
|
46
53
|
* that namespace is scoped per data-connect-graphql declaration, not global.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/validation/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,mBAAmB,CAAA;AAG9D,OAAO,
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/validation/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,mBAAmB,CAAA;AAG9D,OAAO,EAA2B,EAAE,EAAgB,MAAM,aAAa,CAAA;AAEvE;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,UAAU,EAAE,CAAA;AAIrD,uEAAuE;AACvE,eAAO,MAAM,eAAe,EAAE,cAU3B,CAAA;AAEH,6CAA6C;AAC7C,eAAO,MAAM,UAAU,EAAE,cAQpB,CAAA;AAEL,oCAAoC;AACpC,eAAO,MAAM,mBAAmB,EAAE,cAgB9B,CAAA;AAEJ,kFAAkF;AAClF,eAAO,MAAM,UAAU,EAAE,cAiCxB,CAAA;AAED,iFAAiF;AACjF,eAAO,MAAM,QAAQ,EAAE,cA+BnB,CAAA;AAEJ,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,cAkC9B,CAAA;AAEJ,mEAAmE;AACnE,eAAO,MAAM,cAAc,EAAE,cAU1B,CAAA;AAEH,mGAAmG;AACnG,eAAO,MAAM,UAAU,EAAE,cA+ErB,CAAA;AAEJ,uFAAuF;AACvF,eAAO,MAAM,IAAI,EAAE,cAYf,CAAA;AAEJ,wFAAwF;AACxF,eAAO,MAAM,SAAS,EAAE,cA+BpB,CAAA;AAEJ,iFAAiF;AACjF,eAAO,MAAM,MAAM,EAAE,cAoBjB,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,cAUxB,CAAA;AAaH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,cAAc,EAAE,cA+E5B,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAmBnC,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,cAAc,EAczC,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { error, warning } from '../diagnostics.js';
|
|
2
2
|
import { constantCase } from '../generators/support/naming.js';
|
|
3
3
|
import { isTable } from '../generators/support/split.js';
|
|
4
|
-
import { findModel } from '../ir/ir.js';
|
|
4
|
+
import { findFragment, findModel } from '../ir/ir.js';
|
|
5
5
|
const IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
6
6
|
/** Every field type must resolve to a known scalar, enum, or model. */
|
|
7
7
|
export const unresolvedTypes = ir => ir.models.flatMap(model => model.fields
|
|
@@ -269,6 +269,18 @@ export const unions = ir => ir.unions.flatMap(union => {
|
|
|
269
269
|
}
|
|
270
270
|
return diagnostics;
|
|
271
271
|
});
|
|
272
|
+
/**
|
|
273
|
+
* A firestore doc's `extends` must reference a declared fragment. An unknown
|
|
274
|
+
* name would otherwise resolve to no fields and silently drop the shared
|
|
275
|
+
* columns (`extends: [metaa]` → no `_meta_`), the exact silent-coercion class
|
|
276
|
+
* the contract-is-truth rules exist to kill.
|
|
277
|
+
*/
|
|
278
|
+
export const fragmentRefs = ir => ir.firestore.flatMap(doc => doc.extends
|
|
279
|
+
.filter(name => !findFragment(ir, name))
|
|
280
|
+
.map(name => error('UNKNOWN_FRAGMENT', `Firestore doc "${doc.name}" extends unknown fragment "${name}"`, {
|
|
281
|
+
file: doc.sourceFile,
|
|
282
|
+
path: `firestore.${doc.name}.extends`,
|
|
283
|
+
})));
|
|
272
284
|
const RESERVED_OWNER = 'the generated runtime';
|
|
273
285
|
/**
|
|
274
286
|
* Type names must be unique within every output namespace — the export surface
|
|
@@ -282,7 +294,7 @@ const RESERVED_OWNER = 'the generated runtime';
|
|
|
282
294
|
* - zod schemas module: logical names and their `…Schema` companions
|
|
283
295
|
* - unions module: union names/schemas plus the variant schemas it imports
|
|
284
296
|
* - firestore module: doc names, co-located enums/embedded models under
|
|
285
|
-
* `fsName ?? name`, plus the `
|
|
297
|
+
* `fsName ?? name`, plus the `FIRESTORE_DATABASES` runtime
|
|
286
298
|
*
|
|
287
299
|
* GraphQL names are checked separately ({@link graphqlNameCollisions}) because
|
|
288
300
|
* that namespace is scoped per data-connect-graphql declaration, not global.
|
|
@@ -342,7 +354,7 @@ export const nameCollisions = ir => {
|
|
|
342
354
|
// firestore module: doc schemas + co-located enums/embedded models under fsName-effective names.
|
|
343
355
|
// Tables are imported as `Dc…Schema` aliases, so they don't claim names here.
|
|
344
356
|
check('firestore', [
|
|
345
|
-
...['
|
|
357
|
+
...['FIRESTORE_DATABASES', 'FirestoreDatabaseKey', 'FirestoreDatabaseId'].map(identifier => ({ owner: RESERVED_OWNER, identifier, path: '(generated)' })),
|
|
346
358
|
...ir.firestore.flatMap(d => claim(`firestore doc "${d.name}"`, d.sourceFile, `firestore.${d.name}`, [d.name, `${d.name}Schema`])),
|
|
347
359
|
...ir.enums.flatMap(e => {
|
|
348
360
|
const fs = e.fsName ?? e.name;
|
|
@@ -397,5 +409,6 @@ export const DEFAULT_RULES = [
|
|
|
397
409
|
apis,
|
|
398
410
|
firestore,
|
|
399
411
|
unions,
|
|
412
|
+
fragmentRefs,
|
|
400
413
|
nameCollisions,
|
|
401
414
|
];
|