firebase-contract 0.1.0-rc.12 → 0.1.0-rc.13
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 +14 -5
- package/dist/lib/_internal/generators/support/split.d.ts +1 -1
- package/dist/lib/_internal/generators/support/split.js +1 -1
- package/dist/lib/_internal/generators/typescript/render.d.ts +15 -0
- package/dist/lib/_internal/generators/typescript/render.d.ts.map +1 -0
- package/dist/lib/_internal/generators/typescript/render.js +92 -0
- package/dist/lib/_internal/generators/typescript/typescript-generator.d.ts +2 -1
- package/dist/lib/_internal/generators/typescript/typescript-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/typescript/typescript-generator.js +5 -75
- package/dist/lib/_internal/generators/typescript/typescript-split-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/typescript/typescript-split-generator.js +2 -82
- package/dist/lib/_internal/generators/zod/render.d.ts +12 -0
- package/dist/lib/_internal/generators/zod/render.d.ts.map +1 -0
- package/dist/lib/_internal/generators/zod/render.js +59 -0
- package/dist/lib/_internal/generators/zod/zod-generator.d.ts +2 -1
- package/dist/lib/_internal/generators/zod/zod-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/zod/zod-generator.js +5 -52
- package/dist/lib/_internal/generators/zod/zod-split-generator.d.ts.map +1 -1
- package/dist/lib/_internal/generators/zod/zod-split-generator.js +2 -54
- package/dist/lib/_internal/ir/build-ir.d.ts.map +1 -1
- package/dist/lib/_internal/ir/build-ir.js +0 -2
- package/dist/lib/_internal/ir/ir.d.ts +0 -1
- package/dist/lib/_internal/ir/ir.d.ts.map +1 -1
- package/dist/lib/_internal/parser/parse.d.ts +5 -3
- package/dist/lib/_internal/parser/parse.d.ts.map +1 -1
- package/dist/lib/_internal/parser/parse.js +69 -12
- package/dist/lib/_internal/parser/raw-document.d.ts +0 -1
- package/dist/lib/_internal/parser/raw-document.d.ts.map +1 -1
- package/dist/lib/_internal/resolver/import-resolver.js +1 -1
- package/dist/lib/cli/commands/generate.d.ts.map +1 -1
- package/dist/lib/cli/commands/generate.js +6 -4
- package/dist/lib/cli/commands/init.d.ts.map +1 -1
- package/dist/lib/cli/commands/init.js +2 -18
- package/dist/lib/cli/config.d.ts +3 -2
- package/dist/lib/cli/config.d.ts.map +1 -1
- package/dist/lib/cli/config.js +3 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -123,8 +123,9 @@ generators:
|
|
|
123
123
|
|
|
124
124
|
`fbc generate contract.yml` materializes **all** declared outputs across the
|
|
125
125
|
whole import graph in one run. Passing `-o`/`-g` switches to single-target mode
|
|
126
|
-
(`fbc generate <entry> -o <dir> -g typescript,zod`)
|
|
127
|
-
|
|
126
|
+
(`fbc generate <entry> -o <dir> -g typescript,zod`). `firebase-contract.json`
|
|
127
|
+
holds only a default `entry` — output routing lives in the yml `generators:`
|
|
128
|
+
declarations, so a config file can never silently override them.
|
|
128
129
|
|
|
129
130
|
|
|
130
131
|
### Generated-file headers
|
|
@@ -193,8 +194,13 @@ firestore module is checked under `fsName ?? name` alongside doc names. A bare
|
|
|
193
194
|
type reference therefore always resolves to exactly one definition — use
|
|
194
195
|
`fbc where <Name>` to find it.
|
|
195
196
|
|
|
197
|
+
**Unknown keys are errors.** Every key the parser does not consume is an
|
|
198
|
+
`UNKNOWN_KEY` error (all reported in one pass), never silently dropped — a
|
|
199
|
+
typo like `optionnal:` must not quietly turn into a required field. There is
|
|
200
|
+
no `version:` field: nothing consumes one, so accepting it would only fake a
|
|
201
|
+
compatibility mechanism that does not exist.
|
|
202
|
+
|
|
196
203
|
```yaml
|
|
197
|
-
version: 1
|
|
198
204
|
imports:
|
|
199
205
|
- ./apps/shop/data-connect/schema.yml
|
|
200
206
|
- some-shared-package/contract.yml
|
|
@@ -487,8 +493,11 @@ firestore:
|
|
|
487
493
|
```
|
|
488
494
|
|
|
489
495
|
Emits Zod schemas + inferred types, mirroring a hand-written Firestore schema
|
|
490
|
-
library. (
|
|
491
|
-
|
|
496
|
+
library. (`firestore-types` is the zero-config entry point for projects that
|
|
497
|
+
have not written projections yet: it re-types *every* model with the Firestore
|
|
498
|
+
`Timestamp`, no `firestore:` section needed. Once you declare projections,
|
|
499
|
+
prefer the `firestore` generator — it is the one that understands
|
|
500
|
+
pick/omit/fsName/denormalized fields.)
|
|
492
501
|
|
|
493
502
|
With `firestore` + `split: true`, fields whose Zod chain is **identical** to the Data
|
|
494
503
|
Connect schema are reused via `.pick()` — only representation changes are
|
|
@@ -18,7 +18,7 @@ export declare const collectDeps: (ir: Ir, roots: IrModel[]) => HostedDeps;
|
|
|
18
18
|
/**
|
|
19
19
|
* Assign a unique module basename to every table. Two models may share a
|
|
20
20
|
* physical table name across services (e.g. both declare
|
|
21
|
-
* `
|
|
21
|
+
* `audit_logs`); the first keeps the table-derived name and
|
|
22
22
|
* later ones fall back to their model name so files never overwrite each other.
|
|
23
23
|
*/
|
|
24
24
|
export declare const assignModuleNames: (tables: IrModel[]) => Map<string, string>;
|
|
@@ -52,7 +52,7 @@ export const collectDeps = (ir, roots) => {
|
|
|
52
52
|
/**
|
|
53
53
|
* Assign a unique module basename to every table. Two models may share a
|
|
54
54
|
* physical table name across services (e.g. both declare
|
|
55
|
-
* `
|
|
55
|
+
* `audit_logs`); the first keeps the table-derived name and
|
|
56
56
|
* later ones fall back to their model name so files never overwrite each other.
|
|
57
57
|
*/
|
|
58
58
|
export const assignModuleNames = (tables) => {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Ir, IrEnum, IrField, IrModel, ScalarType } from '../../ir/ir.js';
|
|
2
|
+
/**
|
|
3
|
+
* Rendering shared by the bundled and split TypeScript layouts. Both layouts
|
|
4
|
+
* MUST go through these helpers so a contract setting (valueKeys, nullable,
|
|
5
|
+
* multi-line descriptions, …) means the same thing regardless of layout.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SCALAR_TS: Record<ScalarType, string>;
|
|
8
|
+
export declare const JSON_TYPE: string;
|
|
9
|
+
export declare const docLines: (description: string | undefined, indent: string) => string[];
|
|
10
|
+
export declare const renderField: (field: IrField, ir: Ir) => string;
|
|
11
|
+
export declare const renderEnumConst: (irEnum: IrEnum) => string;
|
|
12
|
+
export declare const renderEnumUnion: (irEnum: IrEnum) => string;
|
|
13
|
+
export declare const renderModel: (model: IrModel, ir: Ir) => string;
|
|
14
|
+
export declare const usesJson: (models: IrModel[]) => boolean;
|
|
15
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/typescript/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAa,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAIpF;;;;GAIG;AAEH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAUhD,CAAA;AAED,eAAO,MAAM,SAAS,QAQV,CAAA;AAcZ,eAAO,MAAM,QAAQ,GAAI,aAAa,MAAM,GAAG,SAAS,EAAE,QAAQ,MAAM,KAAG,MAAM,EAKhF,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,EAAE,IAAI,EAAE,KAAG,MAiBpD,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAchD,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAIhD,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,EAAE,IAAI,EAAE,KAAG,MAIpD,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,QAAQ,OAAO,EAAE,KAAG,OACiE,CAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { constantCase, singleQuote } from '../support/naming.js';
|
|
2
|
+
import { isRelation, relationFkName, relationFkType } from '../support/relations.js';
|
|
3
|
+
/**
|
|
4
|
+
* Rendering shared by the bundled and split TypeScript layouts. Both layouts
|
|
5
|
+
* MUST go through these helpers so a contract setting (valueKeys, nullable,
|
|
6
|
+
* multi-line descriptions, …) means the same thing regardless of layout.
|
|
7
|
+
*/
|
|
8
|
+
export const SCALAR_TS = {
|
|
9
|
+
string: 'string',
|
|
10
|
+
int: 'number',
|
|
11
|
+
int64: 'number',
|
|
12
|
+
float: 'number',
|
|
13
|
+
boolean: 'boolean',
|
|
14
|
+
timestamp: 'string',
|
|
15
|
+
date: 'string',
|
|
16
|
+
json: 'Json',
|
|
17
|
+
id: 'string',
|
|
18
|
+
};
|
|
19
|
+
export const JSON_TYPE = [
|
|
20
|
+
'export type Json =',
|
|
21
|
+
' | string',
|
|
22
|
+
' | number',
|
|
23
|
+
' | boolean',
|
|
24
|
+
' | null',
|
|
25
|
+
' | Json[]',
|
|
26
|
+
' | { [key: string]: Json }',
|
|
27
|
+
].join('\n');
|
|
28
|
+
const renderRef = (ref) => {
|
|
29
|
+
switch (ref.kind) {
|
|
30
|
+
case 'scalar':
|
|
31
|
+
return SCALAR_TS[ref.name];
|
|
32
|
+
case 'enum':
|
|
33
|
+
case 'model':
|
|
34
|
+
return ref.name;
|
|
35
|
+
default:
|
|
36
|
+
return 'unknown';
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
export const docLines = (description, indent) => {
|
|
40
|
+
if (!description)
|
|
41
|
+
return [];
|
|
42
|
+
const lines = description.split('\n');
|
|
43
|
+
if (lines.length === 1)
|
|
44
|
+
return [`${indent}/** ${lines[0]} */`];
|
|
45
|
+
return [`${indent}/**`, ...lines.map(line => `${indent} * ${line}`.trimEnd()), `${indent} */`];
|
|
46
|
+
};
|
|
47
|
+
export const renderField = (field, ir) => {
|
|
48
|
+
const optional = field.optional ? '?' : '';
|
|
49
|
+
const doc = docLines(field.description, ' ');
|
|
50
|
+
let entry;
|
|
51
|
+
if (field.literal !== undefined) {
|
|
52
|
+
const type = field.list ? `${singleQuote(field.literal)}[]` : singleQuote(field.literal);
|
|
53
|
+
entry = ` ${field.name}${optional}: ${type}`;
|
|
54
|
+
}
|
|
55
|
+
else if (isRelation(field)) {
|
|
56
|
+
const base = SCALAR_TS[relationFkType(ir, field)];
|
|
57
|
+
entry = ` ${relationFkName(field)}${optional}: ${field.list ? `${base}[]` : base}`;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const base = renderRef(field.type);
|
|
61
|
+
const type = field.list ? `${base}[]` : base;
|
|
62
|
+
const nullable = field.nullable ? ' | null' : '';
|
|
63
|
+
entry = ` ${field.name}${optional}: ${type}${nullable}`;
|
|
64
|
+
}
|
|
65
|
+
return [...doc, entry].join('\n');
|
|
66
|
+
};
|
|
67
|
+
export const renderEnumConst = (irEnum) => {
|
|
68
|
+
const doc = docLines(irEnum.description, '');
|
|
69
|
+
const constName = constantCase(irEnum.name);
|
|
70
|
+
const entries = irEnum.values
|
|
71
|
+
.map(value => ` ${irEnum.valueKeys?.[value] ?? constantCase(value)}: ${singleQuote(value)},`)
|
|
72
|
+
.join('\n');
|
|
73
|
+
return [
|
|
74
|
+
...doc,
|
|
75
|
+
`export const ${constName} = Object.freeze({`,
|
|
76
|
+
entries,
|
|
77
|
+
`} as const)`,
|
|
78
|
+
`export type ${irEnum.name}Key = keyof typeof ${constName}`,
|
|
79
|
+
`export type ${irEnum.name} = (typeof ${constName})[${irEnum.name}Key]`,
|
|
80
|
+
].join('\n');
|
|
81
|
+
};
|
|
82
|
+
export const renderEnumUnion = (irEnum) => {
|
|
83
|
+
const doc = docLines(irEnum.description, '');
|
|
84
|
+
const union = irEnum.values.map(value => singleQuote(value)).join(' | ') || 'never';
|
|
85
|
+
return [...doc, `export type ${irEnum.name} = ${union}`].join('\n');
|
|
86
|
+
};
|
|
87
|
+
export const renderModel = (model, ir) => {
|
|
88
|
+
const doc = docLines(model.description, '');
|
|
89
|
+
const fields = model.fields.map(field => renderField(field, ir)).join('\n');
|
|
90
|
+
return [...doc, `export interface ${model.name} {`, fields, '}'].join('\n');
|
|
91
|
+
};
|
|
92
|
+
export const usesJson = (models) => models.some(model => model.fields.some(field => field.type.kind === 'scalar' && field.type.name === 'json'));
|
|
@@ -12,7 +12,8 @@ export interface TypeScriptGeneratorOptions {
|
|
|
12
12
|
* Generates TypeScript types: an interface per model and, per enum, either a
|
|
13
13
|
* frozen const object (default — runtime values + `Key`/value types) or a
|
|
14
14
|
* plain string-literal union. This is the highest-priority
|
|
15
|
-
* generator and the shape other TS-facing generators reference.
|
|
15
|
+
* generator and the shape other TS-facing generators reference. Rendering is
|
|
16
|
+
* shared with the split layout (./render.js) so both emit identical members.
|
|
16
17
|
*/
|
|
17
18
|
export declare const createTypeScriptGenerator: (options?: TypeScriptGeneratorOptions) => Generator;
|
|
18
19
|
//# sourceMappingURL=typescript-generator.d.ts.map
|
|
@@ -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;
|
|
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,SA0BpF,CAAA"}
|
|
@@ -1,82 +1,14 @@
|
|
|
1
1
|
import { headerBlocks } from '../support/header.js';
|
|
2
2
|
import { withSplitVariant } from '../support/split-variant.js';
|
|
3
3
|
import { createTypeScriptSplitLayout } from './typescript-split-generator.js';
|
|
4
|
-
import { constantCase, singleQuote } from '../support/naming.js';
|
|
5
|
-
import { isRelation, relationFkName, relationFkType } from '../support/relations.js';
|
|
6
4
|
import { outputFile } from '../support/templates.js';
|
|
7
|
-
|
|
8
|
-
string: 'string',
|
|
9
|
-
int: 'number',
|
|
10
|
-
int64: 'number',
|
|
11
|
-
float: 'number',
|
|
12
|
-
boolean: 'boolean',
|
|
13
|
-
timestamp: 'string',
|
|
14
|
-
date: 'string',
|
|
15
|
-
json: 'Json',
|
|
16
|
-
id: 'string',
|
|
17
|
-
};
|
|
18
|
-
const JSON_TYPE = [
|
|
19
|
-
'export type Json =',
|
|
20
|
-
' | string',
|
|
21
|
-
' | number',
|
|
22
|
-
' | boolean',
|
|
23
|
-
' | null',
|
|
24
|
-
' | Json[]',
|
|
25
|
-
' | { [key: string]: Json }',
|
|
26
|
-
].join('\n');
|
|
27
|
-
const renderRef = (ref) => {
|
|
28
|
-
switch (ref.kind) {
|
|
29
|
-
case 'scalar':
|
|
30
|
-
return SCALAR_TS[ref.name];
|
|
31
|
-
case 'enum':
|
|
32
|
-
case 'model':
|
|
33
|
-
return ref.name;
|
|
34
|
-
default:
|
|
35
|
-
return 'unknown';
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
const renderFieldType = (field) => {
|
|
39
|
-
const base = renderRef(field.type);
|
|
40
|
-
return field.list ? `${base}[]` : base;
|
|
41
|
-
};
|
|
42
|
-
const renderField = (field, ir) => {
|
|
43
|
-
const optional = field.optional ? '?' : '';
|
|
44
|
-
const doc = field.description ? ` /** ${field.description} */\n` : '';
|
|
45
|
-
if (field.literal !== undefined) {
|
|
46
|
-
const type = field.list ? `${singleQuote(field.literal)}[]` : singleQuote(field.literal);
|
|
47
|
-
return `${doc} ${field.name}${optional}: ${type}`;
|
|
48
|
-
}
|
|
49
|
-
// Relation: expose the foreign-key id (matching the persisted/projected shape).
|
|
50
|
-
if (isRelation(field)) {
|
|
51
|
-
const base = SCALAR_TS[relationFkType(ir, field)];
|
|
52
|
-
const type = field.list ? `${base}[]` : base;
|
|
53
|
-
return `${doc} ${relationFkName(field)}${optional}: ${type}`;
|
|
54
|
-
}
|
|
55
|
-
return `${doc} ${field.name}${optional}: ${renderFieldType(field)}`;
|
|
56
|
-
};
|
|
57
|
-
const usesJson = (ir) => ir.models.some(model => model.fields.some(field => field.type.kind === 'scalar' && field.type.name === 'json'));
|
|
58
|
-
const renderEnumUnion = (irEnum) => {
|
|
59
|
-
const doc = irEnum.description ? `/** ${irEnum.description} */\n` : '';
|
|
60
|
-
const union = irEnum.values.map(value => singleQuote(value)).join(' | ') || 'never';
|
|
61
|
-
return `${doc}export type ${irEnum.name} = ${union}`;
|
|
62
|
-
};
|
|
63
|
-
const renderEnumConst = (irEnum) => {
|
|
64
|
-
const doc = irEnum.description ? `/** ${irEnum.description} */\n` : '';
|
|
65
|
-
const constName = constantCase(irEnum.name);
|
|
66
|
-
const entries = irEnum.values.map(value => ` ${constantCase(value)}: ${singleQuote(value)},`).join('\n');
|
|
67
|
-
return [
|
|
68
|
-
`${doc}export const ${constName} = Object.freeze({`,
|
|
69
|
-
entries,
|
|
70
|
-
`} as const)`,
|
|
71
|
-
`export type ${irEnum.name}Key = keyof typeof ${constName}`,
|
|
72
|
-
`export type ${irEnum.name} = (typeof ${constName})[${irEnum.name}Key]`,
|
|
73
|
-
].join('\n');
|
|
74
|
-
};
|
|
5
|
+
import { JSON_TYPE, renderEnumConst, renderEnumUnion, renderModel, usesJson } from './render.js';
|
|
75
6
|
/**
|
|
76
7
|
* Generates TypeScript types: an interface per model and, per enum, either a
|
|
77
8
|
* frozen const object (default — runtime values + `Key`/value types) or a
|
|
78
9
|
* plain string-literal union. This is the highest-priority
|
|
79
|
-
* generator and the shape other TS-facing generators reference.
|
|
10
|
+
* generator and the shape other TS-facing generators reference. Rendering is
|
|
11
|
+
* shared with the split layout (./render.js) so both emit identical members.
|
|
80
12
|
*/
|
|
81
13
|
export const createTypeScriptGenerator = (options = {}) => {
|
|
82
14
|
const enumStyle = options.enumStyle ?? 'const';
|
|
@@ -85,16 +17,14 @@ export const createTypeScriptGenerator = (options = {}) => {
|
|
|
85
17
|
description: 'TypeScript interfaces and enum const/union types',
|
|
86
18
|
generate(ir, context) {
|
|
87
19
|
const blocks = [...headerBlocks(context)];
|
|
88
|
-
if (usesJson(ir)) {
|
|
20
|
+
if (usesJson(ir.models)) {
|
|
89
21
|
blocks.push(JSON_TYPE);
|
|
90
22
|
}
|
|
91
23
|
for (const irEnum of ir.enums) {
|
|
92
24
|
blocks.push(enumStyle === 'const' ? renderEnumConst(irEnum) : renderEnumUnion(irEnum));
|
|
93
25
|
}
|
|
94
26
|
for (const model of ir.models) {
|
|
95
|
-
|
|
96
|
-
const fields = model.fields.map(field => renderField(field, ir)).join('\n');
|
|
97
|
-
blocks.push(`${doc}export interface ${model.name} {\n${fields}\n}`);
|
|
27
|
+
blocks.push(renderModel(model, ir));
|
|
98
28
|
}
|
|
99
29
|
return [{ path: outputFile(context, 'types.ts'), content: `${blocks.join('\n\n')}\n` }];
|
|
100
30
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript-split-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/typescript/typescript-split-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"typescript-split-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/typescript/typescript-split-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AAO5E;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,QAAO,SA0E7C,CAAA"}
|
|
@@ -1,89 +1,9 @@
|
|
|
1
1
|
import { findEnum, findModel } from '../../ir/ir.js';
|
|
2
2
|
import { headerBlocks } from '../support/header.js';
|
|
3
|
-
import {
|
|
4
|
-
import { isRelation, relationFkName, relationFkType } from '../support/relations.js';
|
|
3
|
+
import { isRelation } from '../support/relations.js';
|
|
5
4
|
import { assignModuleNames, collectDeps, splitGroups } from '../support/split.js';
|
|
6
5
|
import { outputFile } from '../support/templates.js';
|
|
7
|
-
|
|
8
|
-
string: 'string',
|
|
9
|
-
int: 'number',
|
|
10
|
-
int64: 'number',
|
|
11
|
-
float: 'number',
|
|
12
|
-
boolean: 'boolean',
|
|
13
|
-
timestamp: 'string',
|
|
14
|
-
date: 'string',
|
|
15
|
-
json: 'Json',
|
|
16
|
-
id: 'string',
|
|
17
|
-
};
|
|
18
|
-
const JSON_TYPE = [
|
|
19
|
-
'export type Json =',
|
|
20
|
-
' | string',
|
|
21
|
-
' | number',
|
|
22
|
-
' | boolean',
|
|
23
|
-
' | null',
|
|
24
|
-
' | Json[]',
|
|
25
|
-
' | { [key: string]: Json }',
|
|
26
|
-
].join('\n');
|
|
27
|
-
const renderRef = (ref) => {
|
|
28
|
-
switch (ref.kind) {
|
|
29
|
-
case 'scalar':
|
|
30
|
-
return SCALAR_TS[ref.name];
|
|
31
|
-
case 'enum':
|
|
32
|
-
case 'model':
|
|
33
|
-
return ref.name;
|
|
34
|
-
default:
|
|
35
|
-
return 'unknown';
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
const docLines = (description, indent) => {
|
|
39
|
-
if (!description)
|
|
40
|
-
return [];
|
|
41
|
-
const lines = description.split('\n');
|
|
42
|
-
if (lines.length === 1)
|
|
43
|
-
return [`${indent}/** ${lines[0]} */`];
|
|
44
|
-
return [`${indent}/**`, ...lines.map(line => `${indent} * ${line}`.trimEnd()), `${indent} */`];
|
|
45
|
-
};
|
|
46
|
-
const renderField = (field, ir) => {
|
|
47
|
-
const optional = field.optional ? '?' : '';
|
|
48
|
-
const doc = docLines(field.description, ' ');
|
|
49
|
-
let entry;
|
|
50
|
-
if (field.literal !== undefined) {
|
|
51
|
-
const type = field.list ? `${singleQuote(field.literal)}[]` : singleQuote(field.literal);
|
|
52
|
-
entry = ` ${field.name}${optional}: ${type}`;
|
|
53
|
-
}
|
|
54
|
-
else if (isRelation(field)) {
|
|
55
|
-
const base = SCALAR_TS[relationFkType(ir, field)];
|
|
56
|
-
entry = ` ${relationFkName(field)}${optional}: ${field.list ? `${base}[]` : base}`;
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
const base = renderRef(field.type);
|
|
60
|
-
const type = field.list ? `${base}[]` : base;
|
|
61
|
-
const nullable = field.nullable ? ' | null' : '';
|
|
62
|
-
entry = ` ${field.name}${optional}: ${type}${nullable}`;
|
|
63
|
-
}
|
|
64
|
-
return [...doc, entry].join('\n');
|
|
65
|
-
};
|
|
66
|
-
const renderEnumConst = (irEnum) => {
|
|
67
|
-
const doc = docLines(irEnum.description, '');
|
|
68
|
-
const constName = constantCase(irEnum.name);
|
|
69
|
-
const entries = irEnum.values
|
|
70
|
-
.map(value => ` ${irEnum.valueKeys?.[value] ?? constantCase(value)}: ${singleQuote(value)},`)
|
|
71
|
-
.join('\n');
|
|
72
|
-
return [
|
|
73
|
-
...doc,
|
|
74
|
-
`export const ${constName} = Object.freeze({`,
|
|
75
|
-
entries,
|
|
76
|
-
`} as const)`,
|
|
77
|
-
`export type ${irEnum.name}Key = keyof typeof ${constName}`,
|
|
78
|
-
`export type ${irEnum.name} = (typeof ${constName})[${irEnum.name}Key]`,
|
|
79
|
-
].join('\n');
|
|
80
|
-
};
|
|
81
|
-
const renderModel = (model, ir) => {
|
|
82
|
-
const doc = docLines(model.description, '');
|
|
83
|
-
const fields = model.fields.map(field => renderField(field, ir)).join('\n');
|
|
84
|
-
return [...doc, `export interface ${model.name} {`, fields, '}'].join('\n');
|
|
85
|
-
};
|
|
86
|
-
const usesJson = (models) => models.some(model => model.fields.some(field => field.type.kind === 'scalar' && field.type.name === 'json'));
|
|
6
|
+
import { JSON_TYPE, renderEnumConst, renderModel, usesJson } from './render.js';
|
|
87
7
|
/**
|
|
88
8
|
* Split variant of the TypeScript generator: one file per table at
|
|
89
9
|
* `types/<table-name>.ts` (kebab-case), with enums and embedded value objects
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Ir, IrEnum, IrField, IrModel, ScalarType } from '../../ir/ir.js';
|
|
2
|
+
/**
|
|
3
|
+
* Rendering shared by the bundled and split Zod layouts. Both layouts MUST go
|
|
4
|
+
* through these helpers so a contract setting (nullable, constraints, …) means
|
|
5
|
+
* the same thing regardless of layout.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SCALAR_ZOD: Record<ScalarType, string>;
|
|
8
|
+
export declare const schemaName: (name: string) => string;
|
|
9
|
+
export declare const renderFieldSchema: (field: IrField, ir: Ir) => string;
|
|
10
|
+
export declare const renderEnum: (irEnum: IrEnum) => string;
|
|
11
|
+
export declare const renderModel: (model: IrModel, ir: Ir) => string;
|
|
12
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/zod/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAa,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAKpF;;;;GAIG;AAEH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAUjD,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAyB,CAAA;AAgBnE,eAAO,MAAM,iBAAiB,GAAI,OAAO,OAAO,EAAE,IAAI,EAAE,KAAG,MAa1D,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,KAAG,MAM3C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,EAAE,IAAI,EAAE,KAAG,MAMpD,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { zodConstraints } from '../support/constraints.js';
|
|
2
|
+
import { singleQuote } from '../support/naming.js';
|
|
3
|
+
import { isRelation, relationFkName, relationFkType } from '../support/relations.js';
|
|
4
|
+
/**
|
|
5
|
+
* Rendering shared by the bundled and split Zod layouts. Both layouts MUST go
|
|
6
|
+
* through these helpers so a contract setting (nullable, constraints, …) means
|
|
7
|
+
* the same thing regardless of layout.
|
|
8
|
+
*/
|
|
9
|
+
export const SCALAR_ZOD = {
|
|
10
|
+
string: 'z.string()',
|
|
11
|
+
int: 'z.number().int()',
|
|
12
|
+
int64: 'z.number().int()',
|
|
13
|
+
float: 'z.number()',
|
|
14
|
+
boolean: 'z.boolean()',
|
|
15
|
+
timestamp: 'z.string().datetime()',
|
|
16
|
+
date: 'z.string()',
|
|
17
|
+
json: 'z.unknown()',
|
|
18
|
+
id: 'z.string()',
|
|
19
|
+
};
|
|
20
|
+
export const schemaName = (name) => `${name}Schema`;
|
|
21
|
+
const renderRef = (ref) => {
|
|
22
|
+
switch (ref.kind) {
|
|
23
|
+
case 'scalar':
|
|
24
|
+
return SCALAR_ZOD[ref.name];
|
|
25
|
+
case 'enum':
|
|
26
|
+
return schemaName(ref.name);
|
|
27
|
+
case 'model':
|
|
28
|
+
// Wrapped in z.lazy so declaration order and (cross-file) cycles never matter.
|
|
29
|
+
return `z.lazy(() => ${schemaName(ref.name)})`;
|
|
30
|
+
default:
|
|
31
|
+
return 'z.unknown()';
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
export const renderFieldSchema = (field, ir) => {
|
|
35
|
+
const isRel = isRelation(field);
|
|
36
|
+
const name = isRel ? relationFkName(field) : field.name;
|
|
37
|
+
const base = field.literal !== undefined
|
|
38
|
+
? `z.literal(${singleQuote(field.literal)})`
|
|
39
|
+
: isRel
|
|
40
|
+
? SCALAR_ZOD[relationFkType(ir, field)]
|
|
41
|
+
: renderRef(field.type);
|
|
42
|
+
const cons = zodConstraints(field);
|
|
43
|
+
let schema = field.list ? `z.array(${base})${cons}` : `${base}${cons}`;
|
|
44
|
+
if (field.nullable)
|
|
45
|
+
schema = `${schema}.nullable()`;
|
|
46
|
+
if (field.optional)
|
|
47
|
+
schema = `${schema}.optional()`;
|
|
48
|
+
return ` ${name}: ${schema},`;
|
|
49
|
+
};
|
|
50
|
+
export const renderEnum = (irEnum) => {
|
|
51
|
+
const values = irEnum.values.map(singleQuote).join(', ');
|
|
52
|
+
return (`export const ${schemaName(irEnum.name)} = z.enum([${values}])\n` +
|
|
53
|
+
`export type ${irEnum.name} = z.infer<typeof ${schemaName(irEnum.name)}>`);
|
|
54
|
+
};
|
|
55
|
+
export const renderModel = (model, ir) => {
|
|
56
|
+
const fields = model.fields.map(field => renderFieldSchema(field, ir)).join('\n');
|
|
57
|
+
return (`export const ${schemaName(model.name)} = z.object({\n${fields}\n})\n` +
|
|
58
|
+
`export type ${model.name} = z.infer<typeof ${schemaName(model.name)}>`);
|
|
59
|
+
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Generator } from '../generator.js';
|
|
2
2
|
/**
|
|
3
3
|
* Generates Zod schemas and the types inferred from them. Model references use
|
|
4
|
-
* `z.lazy` so the output is order- and cycle-independent.
|
|
4
|
+
* `z.lazy` so the output is order- and cycle-independent. Rendering is shared
|
|
5
|
+
* with the split layout (./render.js) so both emit identical members.
|
|
5
6
|
*/
|
|
6
7
|
export declare const createZodGenerator: () => Generator;
|
|
7
8
|
//# sourceMappingURL=zod-generator.d.ts.map
|
|
@@ -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;
|
|
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,SAoBnC,CAAA"}
|
|
@@ -1,55 +1,12 @@
|
|
|
1
1
|
import { headerBlocks } from '../support/header.js';
|
|
2
2
|
import { withSplitVariant } from '../support/split-variant.js';
|
|
3
3
|
import { createZodSplitLayout } from './zod-split-generator.js';
|
|
4
|
-
import { singleQuote } from '../support/naming.js';
|
|
5
|
-
import { isRelation, relationFkName, relationFkType } from '../support/relations.js';
|
|
6
|
-
import { zodConstraints } from '../support/constraints.js';
|
|
7
4
|
import { outputFile } from '../support/templates.js';
|
|
8
|
-
|
|
9
|
-
string: 'z.string()',
|
|
10
|
-
int: 'z.number().int()',
|
|
11
|
-
int64: 'z.number().int()',
|
|
12
|
-
float: 'z.number()',
|
|
13
|
-
boolean: 'z.boolean()',
|
|
14
|
-
timestamp: 'z.string().datetime()',
|
|
15
|
-
date: 'z.string()',
|
|
16
|
-
json: 'z.unknown()',
|
|
17
|
-
id: 'z.string()',
|
|
18
|
-
};
|
|
19
|
-
const schemaName = (name) => `${name}Schema`;
|
|
20
|
-
const renderRef = (ref) => {
|
|
21
|
-
switch (ref.kind) {
|
|
22
|
-
case 'scalar':
|
|
23
|
-
return SCALAR_ZOD[ref.name];
|
|
24
|
-
case 'enum':
|
|
25
|
-
// Enums are declared before models, so a direct reference is safe.
|
|
26
|
-
return schemaName(ref.name);
|
|
27
|
-
case 'model':
|
|
28
|
-
// Model references are wrapped in z.lazy so declaration order and cycles
|
|
29
|
-
// never matter.
|
|
30
|
-
return `z.lazy(() => ${schemaName(ref.name)})`;
|
|
31
|
-
default:
|
|
32
|
-
return 'z.unknown()';
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
const renderFieldSchema = (field, ir) => {
|
|
36
|
-
const isRel = isRelation(field);
|
|
37
|
-
const name = isRel ? relationFkName(field) : field.name;
|
|
38
|
-
const base = field.literal !== undefined
|
|
39
|
-
? `z.literal(${singleQuote(field.literal)})`
|
|
40
|
-
: isRel
|
|
41
|
-
? SCALAR_ZOD[relationFkType(ir, field)]
|
|
42
|
-
: renderRef(field.type);
|
|
43
|
-
const cons = zodConstraints(field);
|
|
44
|
-
let schema = field.list ? `z.array(${base})${cons}` : `${base}${cons}`;
|
|
45
|
-
if (field.optional) {
|
|
46
|
-
schema = `${schema}.optional()`;
|
|
47
|
-
}
|
|
48
|
-
return ` ${name}: ${schema},`;
|
|
49
|
-
};
|
|
5
|
+
import { renderEnum, renderModel } from './render.js';
|
|
50
6
|
/**
|
|
51
7
|
* Generates Zod schemas and the types inferred from them. Model references use
|
|
52
|
-
* `z.lazy` so the output is order- and cycle-independent.
|
|
8
|
+
* `z.lazy` so the output is order- and cycle-independent. Rendering is shared
|
|
9
|
+
* with the split layout (./render.js) so both emit identical members.
|
|
53
10
|
*/
|
|
54
11
|
export const createZodGenerator = () => withSplitVariant({
|
|
55
12
|
name: 'zod',
|
|
@@ -57,14 +14,10 @@ export const createZodGenerator = () => withSplitVariant({
|
|
|
57
14
|
generate(ir, context) {
|
|
58
15
|
const blocks = [...headerBlocks(context), "import { z } from 'zod'"];
|
|
59
16
|
for (const irEnum of ir.enums) {
|
|
60
|
-
|
|
61
|
-
blocks.push(`export const ${schemaName(irEnum.name)} = z.enum([${values}])\n` +
|
|
62
|
-
`export type ${irEnum.name} = z.infer<typeof ${schemaName(irEnum.name)}>`);
|
|
17
|
+
blocks.push(renderEnum(irEnum));
|
|
63
18
|
}
|
|
64
19
|
for (const model of ir.models) {
|
|
65
|
-
|
|
66
|
-
blocks.push(`export const ${schemaName(model.name)} = z.object({\n${fields}\n})\n` +
|
|
67
|
-
`export type ${model.name} = z.infer<typeof ${schemaName(model.name)}>`);
|
|
20
|
+
blocks.push(renderModel(model, ir));
|
|
68
21
|
}
|
|
69
22
|
return [{ path: outputFile(context, 'schemas.ts'), content: `${blocks.join('\n\n')}\n` }];
|
|
70
23
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-split-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/zod/zod-split-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"zod-split-generator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/_internal/generators/zod/zod-split-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AAO5E;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAAO,SAmEtC,CAAA"}
|
|
@@ -1,61 +1,9 @@
|
|
|
1
1
|
import { findEnum, findModel } from '../../ir/ir.js';
|
|
2
|
-
import { zodConstraints } from '../support/constraints.js';
|
|
3
2
|
import { headerBlocks } from '../support/header.js';
|
|
4
|
-
import {
|
|
5
|
-
import { isRelation, relationFkName, relationFkType } from '../support/relations.js';
|
|
3
|
+
import { isRelation } from '../support/relations.js';
|
|
6
4
|
import { assignModuleNames, collectDeps, splitGroups } from '../support/split.js';
|
|
7
5
|
import { outputFile } from '../support/templates.js';
|
|
8
|
-
|
|
9
|
-
string: 'z.string()',
|
|
10
|
-
int: 'z.number().int()',
|
|
11
|
-
int64: 'z.number().int()',
|
|
12
|
-
float: 'z.number()',
|
|
13
|
-
boolean: 'z.boolean()',
|
|
14
|
-
timestamp: 'z.string().datetime()',
|
|
15
|
-
date: 'z.string()',
|
|
16
|
-
json: 'z.unknown()',
|
|
17
|
-
id: 'z.string()',
|
|
18
|
-
};
|
|
19
|
-
const schemaName = (name) => `${name}Schema`;
|
|
20
|
-
const renderRef = (ref) => {
|
|
21
|
-
switch (ref.kind) {
|
|
22
|
-
case 'scalar':
|
|
23
|
-
return SCALAR_ZOD[ref.name];
|
|
24
|
-
case 'enum':
|
|
25
|
-
return schemaName(ref.name);
|
|
26
|
-
case 'model':
|
|
27
|
-
// Wrapped in z.lazy so declaration order and (cross-file) cycles never matter.
|
|
28
|
-
return `z.lazy(() => ${schemaName(ref.name)})`;
|
|
29
|
-
default:
|
|
30
|
-
return 'z.unknown()';
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
const renderFieldSchema = (field, ir) => {
|
|
34
|
-
const isRel = isRelation(field);
|
|
35
|
-
const name = isRel ? relationFkName(field) : field.name;
|
|
36
|
-
const base = field.literal !== undefined
|
|
37
|
-
? `z.literal(${singleQuote(field.literal)})`
|
|
38
|
-
: isRel
|
|
39
|
-
? SCALAR_ZOD[relationFkType(ir, field)]
|
|
40
|
-
: renderRef(field.type);
|
|
41
|
-
const cons = zodConstraints(field);
|
|
42
|
-
let schema = field.list ? `z.array(${base})${cons}` : `${base}${cons}`;
|
|
43
|
-
if (field.nullable)
|
|
44
|
-
schema = `${schema}.nullable()`;
|
|
45
|
-
if (field.optional)
|
|
46
|
-
schema = `${schema}.optional()`;
|
|
47
|
-
return ` ${name}: ${schema},`;
|
|
48
|
-
};
|
|
49
|
-
const renderEnum = (irEnum) => {
|
|
50
|
-
const values = irEnum.values.map(singleQuote).join(', ');
|
|
51
|
-
return (`export const ${schemaName(irEnum.name)} = z.enum([${values}])\n` +
|
|
52
|
-
`export type ${irEnum.name} = z.infer<typeof ${schemaName(irEnum.name)}>`);
|
|
53
|
-
};
|
|
54
|
-
const renderModel = (model, ir) => {
|
|
55
|
-
const fields = model.fields.map(field => renderFieldSchema(field, ir)).join('\n');
|
|
56
|
-
return (`export const ${schemaName(model.name)} = z.object({\n${fields}\n})\n` +
|
|
57
|
-
`export type ${model.name} = z.infer<typeof ${schemaName(model.name)}>`);
|
|
58
|
-
};
|
|
6
|
+
import { renderEnum, renderModel, schemaName } from './render.js';
|
|
59
7
|
/**
|
|
60
8
|
* Split variant of the Zod generator: one file per table at
|
|
61
9
|
* `schemas/<table-name>.ts` (kebab-case) with enums and embedded value objects
|
|
@@ -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;AAqLD;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAAI,WAAW,WAAW,EAAE,KAAG,
|
|
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,aAkQlD,CAAA"}
|
|
@@ -365,7 +365,6 @@ export const buildIr = (documents) => {
|
|
|
365
365
|
for (const [name, doc] of firestoreSources) {
|
|
366
366
|
firestore.push(buildFirestoreDoc(name, doc.firestore[name], doc.filePath, enumNames, modelNames));
|
|
367
367
|
}
|
|
368
|
-
const version = documents.length > 0 ? documents[documents.length - 1].version : 1;
|
|
369
368
|
const envelopeSources = new Map();
|
|
370
369
|
for (const doc of documents) {
|
|
371
370
|
for (const name of Object.keys(doc.envelopes)) {
|
|
@@ -416,7 +415,6 @@ export const buildIr = (documents) => {
|
|
|
416
415
|
}
|
|
417
416
|
return {
|
|
418
417
|
ir: {
|
|
419
|
-
version,
|
|
420
418
|
enums,
|
|
421
419
|
models,
|
|
422
420
|
operations,
|
|
@@ -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":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,YAAY,4FAA6F,CAAA;AAEtH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtD,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,IAAI,IAAI,UACA,CAAA;AAEpD,qEAAqE;AACrE,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACjC,6EAA6E;GAC3E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAExC,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,qCAAqC;IACrC,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,SAAS,CAAA;IACf,WAAW,EAAE,aAAa,CAAA;IAC1B,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,CAAA;IACjB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uCAAuC;IACvC,IAAI,EAAE,OAAO,CAAA;IACb,iDAAiD;IACjD,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,QAAQ,EAAE,OAAO,CAAA;IACjB,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,yDAAyD;AACzD,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACvE,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;CACjE;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,iFAAiF;IACjF,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,gFAAgF;IAChF,GAAG,CAAC,EAAE,gBAAgB,CAAA;IACtB,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC/B,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4EAA4E;IAC5E,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,CAAA;AAChD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AACtE,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEvD,wFAAwF;AACxF,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,CAAA;IACV,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8BAA8B;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qFAAqF;IACrF,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,+EAA+E;AAC/E,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,iGAAiG;IACjG,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yFAAyF;IACzF,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,mGAAmG;IACnG,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAA;IACnB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iGAAiG;IACjG,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,iCAAiC;AACjC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,KAAK,GAAG,MAAM,CAAA;CACpB;AAED,wCAAwC;AACxC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,6BAA6B;IAC7B,GAAG,EAAE,MAAM,EAAE,CAAA;CACd;AAED,sFAAsF;AACtF,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,aAAa,CAAA;IAC5B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,2DAA2D;IAC3D,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,SAAS,CAAA;IACf,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kEAAkE;IAClE,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,iCAAiC;IACjC,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,wDAAwD;IACxD,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,mCAAmC;IACnC,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,0DAA0D;IAC1D,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,uFAAuF;IACvF,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,CAAA;IACrB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,CAAA;IACrB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,sCAAsC;IACtC,SAAS,CAAC,EAAE,WAAW,CAAA;IACvB,kFAAkF;IAClF,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,0FAA0F;IAC1F,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACtC,wEAAwE;IACxE,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,8EAA8E;IAC9E,KAAK,CAAC,EAAE;QACN,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;QAC9B,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;QACzB,oGAAoG;QACpG,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;QACrC,6DAA6D;QAC7D,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;QAC1B,4DAA4D;QAC5D,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;QAC3B,wDAAwD;QACxD,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;QACxB,kFAAkF;QAClF,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;QACxB,sEAAsE;QACtE,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;KAC3B,CAAA;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE9D,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mDAAmD;IACnD,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,mDAAmD;IACnD,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,4EAA4E;AAC5E,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,OAAO,CAAA;IACb,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,YAAY,CAAA;IACtB,iDAAiD;IACjD,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,uGAAuG;AACvG,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+CAA+C;IAC/C,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,8BAA8B;IAC9B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,sDAAsD;IACtD,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,+DAA+D;IAC/D,IAAI,EAAE,OAAO,CAAA;IACb,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,oFAAoF;AACpF,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,wEAAwE;IACxE,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAClD,2EAA2E;IAC3E,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACpD;AAED,MAAM,WAAW,EAAE;IACjB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,UAAU,EAAE,WAAW,EAAE,CAAA;IACzB,IAAI,EAAE,KAAK,EAAE,CAAA;IACb,SAAS,EAAE,cAAc,EAAE,CAAA;IAC3B,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,SAAS,EAAE,UAAU,EAAE,CAAA;IACvB,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,SAAS,GAAI,IAAI,EAAE,EAAE,MAAM,MAAM,KAAG,OAAO,GAAG,SACb,CAAA;AAE9C,eAAO,MAAM,QAAQ,GAAI,IAAI,EAAE,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SACV,CAAA;AAE/C,8FAA8F;AAC9F,eAAO,MAAM,QAAQ,GAAI,IAAI,EAAE,EAAE,WAAW,MAAM,KAAG,UAOpD,CAAA"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { Diagnostic } from '../diagnostics.js';
|
|
1
2
|
import { RawContract } from './raw-document.js';
|
|
2
3
|
/**
|
|
3
4
|
* Parse a single YAML contract file into a {@link RawContract}. Shorthand forms
|
|
4
5
|
* are normalized here so downstream code sees one canonical shape. Syntax and
|
|
5
|
-
* structural problems throw a {@link ContractError};
|
|
6
|
-
*
|
|
6
|
+
* structural problems throw a {@link ContractError}; unknown keys are collected
|
|
7
|
+
* into `diagnostics` as UNKNOWN_KEY errors (all of them in one pass); semantic
|
|
8
|
+
* problems are left for validation.
|
|
7
9
|
*/
|
|
8
|
-
export declare const parseContract: (content: string, filePath: string) => RawContract;
|
|
10
|
+
export declare const parseContract: (content: string, filePath: string, diagnostics?: Diagnostic[]) => RawContract;
|
|
9
11
|
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/parse.ts"],"names":[],"mappings":"
|
|
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,EAaZ,MAAM,mBAAmB,CAAA;AA+mB1B;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,EAAE,UAAU,MAAM,EAAE,cAAc,UAAU,EAAE,KAAG,WAO7F,CAAA"}
|
|
@@ -4,6 +4,27 @@ const isObject = (value) => typeof value === 'object' && value !== null && !Arra
|
|
|
4
4
|
const fail = (message, filePath, path) => {
|
|
5
5
|
throw new ContractError(message, [error('PARSE_ERROR', message, { file: filePath, path })]);
|
|
6
6
|
};
|
|
7
|
+
/**
|
|
8
|
+
* Sink for UNKNOWN_KEY diagnostics, set for the duration of one parseContract
|
|
9
|
+
* call (the parser is synchronous, so there is no reentrancy). Collected keys
|
|
10
|
+
* become errors instead of throws so a single pass reports every typo at once.
|
|
11
|
+
*/
|
|
12
|
+
let unknownKeySink;
|
|
13
|
+
/**
|
|
14
|
+
* The contract is the single source of truth, so a key the parser would
|
|
15
|
+
* silently drop is either a typo about to change meaning (`optionnal:` making a
|
|
16
|
+
* field required) or dead weight lying about what the contract expresses.
|
|
17
|
+
* Either way it is an error, not a shrug.
|
|
18
|
+
*/
|
|
19
|
+
const checkKeys = (raw, known, filePath, path) => {
|
|
20
|
+
if (!unknownKeySink)
|
|
21
|
+
return;
|
|
22
|
+
for (const key of Object.keys(raw)) {
|
|
23
|
+
if (!known.includes(key)) {
|
|
24
|
+
unknownKeySink.push(error('UNKNOWN_KEY', `Unknown key "${key}" in ${path} — remove it or fix the typo`, { file: filePath, path: `${path}.${key}` }));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
7
28
|
const normalizeField = (raw, filePath, path) => {
|
|
8
29
|
// Shorthand: `title: string` — the value is the type name.
|
|
9
30
|
if (typeof raw === 'string') {
|
|
@@ -15,6 +36,7 @@ const normalizeField = (raw, filePath, path) => {
|
|
|
15
36
|
if (typeof raw.type !== 'string') {
|
|
16
37
|
return fail(`Field "${path}" is missing a string "type"`, filePath, path);
|
|
17
38
|
}
|
|
39
|
+
checkKeys(raw, ['type', 'optional', 'nullable', 'jsdoc', 'list', 'id', 'unique', 'relation', 'default', 'description', 'min', 'max', 'minLength', 'maxLength', 'pattern', 'nonempty', 'email', 'url', 'col', 'literal'], filePath, path);
|
|
18
40
|
const field = { type: raw.type };
|
|
19
41
|
if (raw.optional !== undefined)
|
|
20
42
|
field.optional = Boolean(raw.optional);
|
|
@@ -64,6 +86,7 @@ const normalizeModel = (raw, filePath, name) => {
|
|
|
64
86
|
if (!isObject(fieldsRaw)) {
|
|
65
87
|
return fail(`Model "${name}" is missing a "fields" object`, filePath, `models.${name}.fields`);
|
|
66
88
|
}
|
|
89
|
+
checkKeys(raw, ['fields', 'description', 'key', 'table', 'gqlName', 'directives', 'footer', 'fsName', 'indexes', 'sql'], filePath, `models.${name}`);
|
|
67
90
|
const fields = {};
|
|
68
91
|
for (const [fieldName, fieldRaw] of Object.entries(fieldsRaw)) {
|
|
69
92
|
fields[fieldName] = normalizeField(fieldRaw, filePath, `models.${name}.fields.${fieldName}`);
|
|
@@ -91,6 +114,7 @@ const normalizeModel = (raw, filePath, name) => {
|
|
|
91
114
|
if (!isObject(entry)) {
|
|
92
115
|
return fail(`Model "${name}" index #${i} must be an object`, filePath, `models.${name}.indexes`);
|
|
93
116
|
}
|
|
117
|
+
checkKeys(entry, ['fields', 'name', 'unique', 'expand'], filePath, `models.${name}.indexes[${i}]`);
|
|
94
118
|
const index = {
|
|
95
119
|
fields: asStringArray(entry.fields, filePath, `models.${name}.indexes[${i}].fields`),
|
|
96
120
|
};
|
|
@@ -108,6 +132,7 @@ const normalizeModel = (raw, filePath, name) => {
|
|
|
108
132
|
return fail(`Model "${name}" sql must be an object`, filePath, `models.${name}.sql`);
|
|
109
133
|
}
|
|
110
134
|
const sqlRaw = raw.sql;
|
|
135
|
+
checkKeys(sqlRaw, ['checks', 'foreignKeys', 'indexes'], filePath, `models.${name}.sql`);
|
|
111
136
|
const sql = {};
|
|
112
137
|
if (sqlRaw.checks !== undefined)
|
|
113
138
|
sql.checks = asStringArray(sqlRaw.checks, filePath, `models.${name}.sql.checks`);
|
|
@@ -119,6 +144,7 @@ const normalizeModel = (raw, filePath, name) => {
|
|
|
119
144
|
if (!isObject(entry) || typeof entry.references !== 'string') {
|
|
120
145
|
return fail(`Model "${name}" sql.foreignKeys[${i}] needs columns + references`, filePath, `models.${name}.sql.foreignKeys`);
|
|
121
146
|
}
|
|
147
|
+
checkKeys(entry, ['columns', 'references', 'name'], filePath, `models.${name}.sql.foreignKeys[${i}]`);
|
|
122
148
|
const fk = {
|
|
123
149
|
columns: asStringArray(entry.columns, filePath, `models.${name}.sql.foreignKeys[${i}].columns`),
|
|
124
150
|
references: entry.references,
|
|
@@ -136,6 +162,7 @@ const normalizeModel = (raw, filePath, name) => {
|
|
|
136
162
|
if (!isObject(entry)) {
|
|
137
163
|
return fail(`Model "${name}" sql.indexes[${i}] must be an object`, filePath, `models.${name}.sql.indexes`);
|
|
138
164
|
}
|
|
165
|
+
checkKeys(entry, ['columns', 'name', 'unique'], filePath, `models.${name}.sql.indexes[${i}]`);
|
|
139
166
|
const idx = {
|
|
140
167
|
columns: asStringArray(entry.columns, filePath, `models.${name}.sql.indexes[${i}].columns`),
|
|
141
168
|
};
|
|
@@ -157,11 +184,13 @@ const normalizeEnum = (raw, filePath, name) => {
|
|
|
157
184
|
if (!Array.isArray(raw.values)) {
|
|
158
185
|
return fail(`Enum "${name}" is missing a "values" array`, filePath, `enums.${name}.values`);
|
|
159
186
|
}
|
|
187
|
+
checkKeys(raw, ['values', 'gqlName', 'fsName', 'fsDescription', 'description'], filePath, `enums.${name}`);
|
|
160
188
|
const values = [];
|
|
161
189
|
const valueComments = {};
|
|
162
190
|
const valueKeys = {};
|
|
163
191
|
for (const entry of raw.values) {
|
|
164
192
|
if (isObject(entry) && typeof entry.value === 'string') {
|
|
193
|
+
checkKeys(entry, ['value', 'description', 'key'], filePath, `enums.${name}.values`);
|
|
165
194
|
values.push(entry.value);
|
|
166
195
|
if (entry.description !== undefined)
|
|
167
196
|
valueComments[entry.value] = String(entry.description);
|
|
@@ -205,6 +234,7 @@ const normalizeOperation = (raw, filePath, name) => {
|
|
|
205
234
|
if (typeof raw.model !== 'string') {
|
|
206
235
|
return fail(`Operation "${name}" is missing a string "model"`, filePath, `operations.${name}.model`);
|
|
207
236
|
}
|
|
237
|
+
checkKeys(raw, ['type', 'model', 'action', 'auth', 'authReason', 'inputs', 'select', 'where', 'orderBy', 'limit', 'single', 'keyArg', 'entityDir', 'whereAnd', 'gqlName', 'footer', 'raw', 'style', 'keyVars', 'aggregate', 'exprs', 'inc', 'connectors', 'description'], filePath, `operations.${name}`);
|
|
208
238
|
const op = { type: raw.type, model: raw.model };
|
|
209
239
|
if (raw.action !== undefined)
|
|
210
240
|
op.action = String(raw.action);
|
|
@@ -220,6 +250,7 @@ const normalizeOperation = (raw, filePath, name) => {
|
|
|
220
250
|
if (typeof entry === 'string')
|
|
221
251
|
return { field: entry };
|
|
222
252
|
if (isObject(entry) && typeof entry.field === 'string') {
|
|
253
|
+
checkKeys(entry, ['field', 'required', 'description', 'var', 'flat', 'literal', 'quote', 'inc', 'asKey'], filePath, `operations.${name}.inputs`);
|
|
223
254
|
return {
|
|
224
255
|
field: entry.field,
|
|
225
256
|
...(entry.required !== undefined ? { required: Boolean(entry.required) } : {}),
|
|
@@ -244,6 +275,7 @@ const normalizeOperation = (raw, filePath, name) => {
|
|
|
244
275
|
if (typeof entry === 'string')
|
|
245
276
|
return { field: entry };
|
|
246
277
|
if (isObject(entry) && typeof entry.field === 'string') {
|
|
278
|
+
checkKeys(entry, ['field', 'select', 'description', 'alias', 'args'], filePath, path);
|
|
247
279
|
return {
|
|
248
280
|
field: entry.field,
|
|
249
281
|
...(entry.select !== undefined ? { select: normalizeSelect(entry.select, `${path}.${entry.field}`) } : {}),
|
|
@@ -266,6 +298,7 @@ const normalizeOperation = (raw, filePath, name) => {
|
|
|
266
298
|
if (typeof entry === 'string')
|
|
267
299
|
return { field: entry, op: 'eq' };
|
|
268
300
|
if (isObject(entry) && typeof entry.field === 'string') {
|
|
301
|
+
checkKeys(entry, ['field', 'op', 'required', 'description', 'var', 'literal', 'flat'], filePath, `operations.${name}.where`);
|
|
269
302
|
return {
|
|
270
303
|
field: entry.field,
|
|
271
304
|
op: entry.op !== undefined ? String(entry.op) : 'eq',
|
|
@@ -288,11 +321,13 @@ const normalizeOperation = (raw, filePath, name) => {
|
|
|
288
321
|
if (!isObject(entry) || typeof entry.field !== 'string') {
|
|
289
322
|
return fail(`Operation "${name}" orderBy entry needs a field`, filePath, `operations.${name}.orderBy`);
|
|
290
323
|
}
|
|
324
|
+
checkKeys(entry, ['field', 'dir'], filePath, `operations.${name}.orderBy`);
|
|
291
325
|
return { field: entry.field, dir: entry.dir !== undefined ? String(entry.dir).toUpperCase() : 'ASC' };
|
|
292
326
|
});
|
|
293
327
|
}
|
|
294
328
|
if (raw.limit !== undefined) {
|
|
295
329
|
if (isObject(raw.limit) && typeof raw.limit.var === 'string') {
|
|
330
|
+
checkKeys(raw.limit, ['var', 'default', 'required'], filePath, `operations.${name}.limit`);
|
|
296
331
|
op.limit = {
|
|
297
332
|
var: raw.limit.var,
|
|
298
333
|
...(raw.limit.default !== undefined ? { default: Number(raw.limit.default) } : {}),
|
|
@@ -322,7 +357,9 @@ const normalizeOperation = (raw, filePath, name) => {
|
|
|
322
357
|
return fail(`Operation "${name}" style must be a mapping`, filePath, `operations.${name}.style`);
|
|
323
358
|
}
|
|
324
359
|
const style = {};
|
|
325
|
-
|
|
360
|
+
const styleKeys = ['signature', 'args', 'data', 'orderBy', 'auth', 'key', 'and', 'where'];
|
|
361
|
+
checkKeys(raw.style, styleKeys, filePath, `operations.${name}.style`);
|
|
362
|
+
for (const k of styleKeys) {
|
|
326
363
|
if (raw.style[k] !== undefined)
|
|
327
364
|
style[k] = String(raw.style[k]);
|
|
328
365
|
}
|
|
@@ -338,6 +375,7 @@ const normalizeOperation = (raw, filePath, name) => {
|
|
|
338
375
|
if (!isObject(raw.aggregate)) {
|
|
339
376
|
return fail(`Operation "${name}" aggregate must be an object`, filePath, `operations.${name}.aggregate`);
|
|
340
377
|
}
|
|
378
|
+
checkKeys(raw.aggregate, ['count', 'sum'], filePath, `operations.${name}.aggregate`);
|
|
341
379
|
op.aggregate = {
|
|
342
380
|
count: raw.aggregate.count !== undefined ? Boolean(raw.aggregate.count) : false,
|
|
343
381
|
sum: asStringArray(raw.aggregate.sum, filePath, `operations.${name}.aggregate.sum`),
|
|
@@ -357,16 +395,13 @@ const normalizeOperation = (raw, filePath, name) => {
|
|
|
357
395
|
if (typeof entry === 'string')
|
|
358
396
|
return { field: entry };
|
|
359
397
|
if (isObject(entry) && typeof entry.field === 'string') {
|
|
398
|
+
checkKeys(entry, ['field', 'var'], filePath, `operations.${name}.inc`);
|
|
360
399
|
return { field: entry.field, ...(entry.var !== undefined ? { var: String(entry.var) } : {}) };
|
|
361
400
|
}
|
|
362
401
|
return fail(`Operation "${name}" inc entry must be a field or { field, var }`, filePath, `operations.${name}.inc`);
|
|
363
402
|
});
|
|
364
403
|
}
|
|
365
|
-
|
|
366
|
-
if (raw.connector !== undefined) {
|
|
367
|
-
op.connectors = [String(raw.connector)];
|
|
368
|
-
}
|
|
369
|
-
else if (raw.connectors !== undefined) {
|
|
404
|
+
if (raw.connectors !== undefined) {
|
|
370
405
|
op.connectors = asStringArray(raw.connectors, filePath, `operations.${name}.connectors`);
|
|
371
406
|
}
|
|
372
407
|
if (raw.description !== undefined)
|
|
@@ -379,6 +414,7 @@ const normalizeApiPayload = (raw, filePath, path) => {
|
|
|
379
414
|
if (!isObject(raw)) {
|
|
380
415
|
return fail(`"${path}" must be an object`, filePath, path);
|
|
381
416
|
}
|
|
417
|
+
checkKeys(raw, ['model', 'void', 'fields'], filePath, path);
|
|
382
418
|
const payload = {};
|
|
383
419
|
if (raw.model !== undefined)
|
|
384
420
|
payload.model = String(raw.model);
|
|
@@ -412,6 +448,7 @@ const normalizeGeneratorUse = (raw, filePath, path) => {
|
|
|
412
448
|
if (!isObject(raw) || typeof raw.generator !== 'string') {
|
|
413
449
|
return fail(`"${path}" must be a generator name or { generator, out?, file?, split?, options?, header? }`, filePath, path);
|
|
414
450
|
}
|
|
451
|
+
checkKeys(raw, ['generator', 'out', 'file', 'split', 'options', 'header'], filePath, path);
|
|
415
452
|
const use = { generator: raw.generator };
|
|
416
453
|
if (raw.out !== undefined)
|
|
417
454
|
use.out = String(raw.out);
|
|
@@ -437,6 +474,7 @@ const normalizeSectionDefaults = (raw, filePath, section) => {
|
|
|
437
474
|
if (!isObject(raw)) {
|
|
438
475
|
return fail(`"${section}.${SECTION_DEFAULTS_KEY}" must be an object`, filePath, `${section}.${SECTION_DEFAULTS_KEY}`);
|
|
439
476
|
}
|
|
477
|
+
checkKeys(raw, ['generators'], filePath, `${section}.${SECTION_DEFAULTS_KEY}`);
|
|
440
478
|
if (raw.generators === undefined)
|
|
441
479
|
return [];
|
|
442
480
|
return normalizeGeneratorUses(raw.generators, filePath, `${section}.${SECTION_DEFAULTS_KEY}.generators`);
|
|
@@ -462,6 +500,7 @@ const normalizePathApi = (raw, filePath, pathKey) => {
|
|
|
462
500
|
if (kind !== 'https' && kind !== 'callable') {
|
|
463
501
|
return fail(`Api "${pathKey}" kind must be https|callable (tasks/events have their own sections)`, filePath, `apis.${pathKey}.kind`);
|
|
464
502
|
}
|
|
503
|
+
checkKeys(raw, ['operationId', 'kind', 'method', 'description', 'request', 'response', 'generators'], filePath, `apis.${pathKey}`);
|
|
465
504
|
const prefixed = METHOD_PREFIXED_KEY_RE.exec(pathKey);
|
|
466
505
|
const keyMethod = prefixed?.[1];
|
|
467
506
|
const routePath = prefixed?.[2] ?? pathKey;
|
|
@@ -489,6 +528,7 @@ const normalizeTask = (raw, filePath, name) => {
|
|
|
489
528
|
if (!isObject(raw)) {
|
|
490
529
|
return fail(`Task "${name}" must be an object`, filePath, `tasks.${name}`);
|
|
491
530
|
}
|
|
531
|
+
checkKeys(raw, ['description', 'envelope', 'maxAttempts', 'timeoutSeconds', 'request', 'response', 'generators'], filePath, `tasks.${name}`);
|
|
492
532
|
const api = { kind: 'task' };
|
|
493
533
|
if (raw.description !== undefined)
|
|
494
534
|
api.description = String(raw.description);
|
|
@@ -510,6 +550,7 @@ const normalizeEvent = (raw, filePath, name) => {
|
|
|
510
550
|
if (!isObject(raw)) {
|
|
511
551
|
return fail(`Event "${name}" must be an object`, filePath, `events.${name}`);
|
|
512
552
|
}
|
|
553
|
+
checkKeys(raw, ['description', 'envelope', 'maxAttempts', 'timeoutSeconds', 'topic', 'request', 'response', 'generators'], filePath, `events.${name}`);
|
|
513
554
|
const api = { kind: 'pubsub' };
|
|
514
555
|
if (raw.description !== undefined)
|
|
515
556
|
api.description = String(raw.description);
|
|
@@ -535,6 +576,7 @@ const normalizeEnvelope = (raw, filePath, name) => {
|
|
|
535
576
|
if (!isObject(raw.fields)) {
|
|
536
577
|
return fail(`Envelope "${name}" is missing a "fields" object`, filePath, `envelopes.${name}.fields`);
|
|
537
578
|
}
|
|
579
|
+
checkKeys(raw, ['fields', 'description'], filePath, `envelopes.${name}`);
|
|
538
580
|
const fields = {};
|
|
539
581
|
for (const [fieldName, fieldRaw] of Object.entries(raw.fields)) {
|
|
540
582
|
fields[fieldName] = normalizeField(fieldRaw, filePath, `envelopes.${name}.fields.${fieldName}`);
|
|
@@ -548,6 +590,7 @@ const normalizeFirestoreDoc = (raw, filePath, name) => {
|
|
|
548
590
|
if (!isObject(raw)) {
|
|
549
591
|
return fail(`Firestore doc "${name}" must be an object`, filePath, `firestore.${name}`);
|
|
550
592
|
}
|
|
593
|
+
checkKeys(raw, ['from', 'collection', 'description', 'meta', 'helpers', 'include', 'pick', 'omit', 'fields'], filePath, `firestore.${name}`);
|
|
551
594
|
const doc = {};
|
|
552
595
|
if (raw.from !== undefined)
|
|
553
596
|
doc.from = String(raw.from);
|
|
@@ -582,6 +625,7 @@ const normalizeUnion = (raw, filePath, name) => {
|
|
|
582
625
|
if (typeof raw.discriminant !== 'string') {
|
|
583
626
|
return fail(`Union "${name}" is missing a string "discriminant"`, filePath, `unions.${name}.discriminant`);
|
|
584
627
|
}
|
|
628
|
+
checkKeys(raw, ['discriminant', 'variants', 'description'], filePath, `unions.${name}`);
|
|
585
629
|
const union = {
|
|
586
630
|
discriminant: raw.discriminant,
|
|
587
631
|
variants: asStringArray(raw.variants, filePath, `unions.${name}.variants`),
|
|
@@ -594,6 +638,7 @@ const normalizeProject = (raw, filePath) => {
|
|
|
594
638
|
if (!isObject(raw)) {
|
|
595
639
|
return fail('"project" must be an object', filePath, 'project');
|
|
596
640
|
}
|
|
641
|
+
checkKeys(raw, ['services', 'codebases', 'idCodec', 'aliases'], filePath, 'project');
|
|
597
642
|
const project = {};
|
|
598
643
|
if (raw.services !== undefined) {
|
|
599
644
|
if (!Array.isArray(raw.services)) {
|
|
@@ -603,6 +648,7 @@ const normalizeProject = (raw, filePath) => {
|
|
|
603
648
|
if (!isObject(entry) || typeof entry.name !== 'string') {
|
|
604
649
|
return fail(`project.services[${i}] needs a name`, filePath, 'project.services');
|
|
605
650
|
}
|
|
651
|
+
checkKeys(entry, ['name', 'database', 'location', 'connectors'], filePath, `project.services[${i}]`);
|
|
606
652
|
const service = { name: entry.name };
|
|
607
653
|
if (entry.database !== undefined)
|
|
608
654
|
service.database = String(entry.database);
|
|
@@ -624,6 +670,7 @@ const normalizeProject = (raw, filePath) => {
|
|
|
624
670
|
project.codebases = codebases;
|
|
625
671
|
}
|
|
626
672
|
if (isObject(raw.idCodec)) {
|
|
673
|
+
checkKeys(raw.idCodec, ['minLength', 'alphabet'], filePath, 'project.idCodec');
|
|
627
674
|
const idCodec = {};
|
|
628
675
|
if (raw.idCodec.minLength !== undefined)
|
|
629
676
|
idCodec.minLength = Number(raw.idCodec.minLength);
|
|
@@ -646,10 +693,20 @@ const normalizeProject = (raw, filePath) => {
|
|
|
646
693
|
/**
|
|
647
694
|
* Parse a single YAML contract file into a {@link RawContract}. Shorthand forms
|
|
648
695
|
* are normalized here so downstream code sees one canonical shape. Syntax and
|
|
649
|
-
* structural problems throw a {@link ContractError};
|
|
650
|
-
*
|
|
696
|
+
* structural problems throw a {@link ContractError}; unknown keys are collected
|
|
697
|
+
* into `diagnostics` as UNKNOWN_KEY errors (all of them in one pass); semantic
|
|
698
|
+
* problems are left for validation.
|
|
651
699
|
*/
|
|
652
|
-
export const parseContract = (content, filePath) => {
|
|
700
|
+
export const parseContract = (content, filePath, diagnostics) => {
|
|
701
|
+
unknownKeySink = diagnostics;
|
|
702
|
+
try {
|
|
703
|
+
return parseContractInner(content, filePath);
|
|
704
|
+
}
|
|
705
|
+
finally {
|
|
706
|
+
unknownKeySink = undefined;
|
|
707
|
+
}
|
|
708
|
+
};
|
|
709
|
+
const parseContractInner = (content, filePath) => {
|
|
653
710
|
let doc;
|
|
654
711
|
try {
|
|
655
712
|
doc = parseYamlText(content);
|
|
@@ -662,7 +719,6 @@ export const parseContract = (content, filePath) => {
|
|
|
662
719
|
// An empty file is a valid, contribution-free contract.
|
|
663
720
|
return {
|
|
664
721
|
filePath,
|
|
665
|
-
version: 1,
|
|
666
722
|
imports: [],
|
|
667
723
|
defaultConnectors: [],
|
|
668
724
|
enums: {},
|
|
@@ -677,6 +733,7 @@ export const parseContract = (content, filePath) => {
|
|
|
677
733
|
if (!isObject(doc)) {
|
|
678
734
|
return fail('Contract root must be a mapping', filePath);
|
|
679
735
|
}
|
|
736
|
+
checkKeys(doc, ['imports', 'defaults', 'header', 'project', 'generators', 'enums', 'models', 'operations', 'apis', 'tasks', 'events', 'firestore', 'unions', 'envelopes'], filePath, '(root)');
|
|
680
737
|
const imports = [];
|
|
681
738
|
if (doc.imports !== undefined) {
|
|
682
739
|
if (!Array.isArray(doc.imports)) {
|
|
@@ -713,6 +770,7 @@ export const parseContract = (content, filePath) => {
|
|
|
713
770
|
if (!isObject(doc.defaults)) {
|
|
714
771
|
return fail('"defaults" must be a mapping', filePath, 'defaults');
|
|
715
772
|
}
|
|
773
|
+
checkKeys(doc.defaults, ['connectors'], filePath, 'defaults');
|
|
716
774
|
defaultConnectors = asStringArray(doc.defaults.connectors, filePath, 'defaults.connectors');
|
|
717
775
|
}
|
|
718
776
|
const operations = {};
|
|
@@ -808,10 +866,8 @@ export const parseContract = (content, filePath) => {
|
|
|
808
866
|
envelopes[name] = normalizeEnvelope(raw, filePath, name);
|
|
809
867
|
}
|
|
810
868
|
}
|
|
811
|
-
const version = typeof doc.version === 'number' ? doc.version : 1;
|
|
812
869
|
const contract = {
|
|
813
870
|
filePath,
|
|
814
|
-
version,
|
|
815
871
|
imports,
|
|
816
872
|
defaultConnectors,
|
|
817
873
|
enums,
|
|
@@ -839,6 +895,7 @@ export const parseContract = (content, filePath) => {
|
|
|
839
895
|
if (typeof entry.out !== 'string') {
|
|
840
896
|
return fail(`generators[${i}] needs a string "out"`, filePath, `generators[${i}].out`);
|
|
841
897
|
}
|
|
898
|
+
checkKeys(entry, ['generator', 'out', 'file', 'split', 'options', 'header'], filePath, `generators[${i}]`);
|
|
842
899
|
const decl = { generator: entry.generator, out: entry.out };
|
|
843
900
|
if (entry.file !== undefined)
|
|
844
901
|
decl.file = String(entry.file);
|
|
@@ -250,7 +250,6 @@ export interface RawContract {
|
|
|
250
250
|
generatorDecls?: RawGeneratorDecl[];
|
|
251
251
|
/** Section-level generator defaults (`apis:/tasks:/events:` → `defaults`). */
|
|
252
252
|
sectionDefaults?: RawSectionDefaults;
|
|
253
|
-
version: number;
|
|
254
253
|
/** Raw header text prepended to generated files (`default` = built-in banner). */
|
|
255
254
|
header?: string;
|
|
256
255
|
project?: RawProject;
|
|
@@ -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":"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;CACxB;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,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;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;CACvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/lib/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA4BnC,eAAO,MAAM,gBAAgB,GAAI,SAAS,OAAO,KAAG,
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/lib/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA4BnC,eAAO,MAAM,gBAAgB,GAAI,SAAS,OAAO,KAAG,IAiFnD,CAAA"}
|
|
@@ -27,14 +27,16 @@ export const registerGenerate = (program) => {
|
|
|
27
27
|
.action((entryArg, flags) => {
|
|
28
28
|
const config = loadConfig();
|
|
29
29
|
const entry = entryArg ?? config.entry ?? 'contract.yml';
|
|
30
|
-
const outDir = flags.outDir ??
|
|
31
|
-
const generators = flags.generators?.split(',').map(name => name.trim()).filter(Boolean)
|
|
30
|
+
const outDir = flags.outDir ?? 'generated';
|
|
31
|
+
const generators = flags.generators?.split(',').map(name => name.trim()).filter(Boolean);
|
|
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
35
|
// Without -o/-g, run every generator declared in the contract
|
|
36
|
-
// graph — the one-command flow.
|
|
37
|
-
|
|
36
|
+
// graph — the one-command flow. Only explicit flags switch back to
|
|
37
|
+
// single-target mode; the config file cannot (it must never silently
|
|
38
|
+
// disable the contract's own generators: declarations).
|
|
39
|
+
const explicit = flags.outDir !== undefined || flags.generators !== undefined;
|
|
38
40
|
if (!explicit) {
|
|
39
41
|
const all = generateAll(entry, { registry, write: !flags.check, ...(context ? { context } : {}) });
|
|
40
42
|
if (all.targets.length > 0 || !all.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/lib/cli/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/lib/cli/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAgDnC,eAAO,MAAM,YAAY,GAAI,SAAS,OAAO,KAAG,IAgB/C,CAAA"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { existsSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
3
|
import { CONFIG_FILENAME } from '../config.js';
|
|
4
|
-
const EXAMPLE_CONTRACT =
|
|
5
|
-
|
|
6
|
-
# Declare generators once (name + output template); entries opt in below.
|
|
4
|
+
const EXAMPLE_CONTRACT = `# Declare generators once (name + output template); entries opt in below.
|
|
7
5
|
generators:
|
|
8
6
|
- { generator: typescript, out: generated }
|
|
9
7
|
- { generator: zod, out: generated }
|
|
@@ -36,21 +34,7 @@ models:
|
|
|
36
34
|
metadata: { type: json, optional: true }
|
|
37
35
|
createdAt: timestamp
|
|
38
36
|
`;
|
|
39
|
-
const EXAMPLE_CONFIG = JSON.stringify({
|
|
40
|
-
entry: 'contract.yml',
|
|
41
|
-
outDir: 'generated',
|
|
42
|
-
generators: [
|
|
43
|
-
'typescript',
|
|
44
|
-
'zod',
|
|
45
|
-
'data-connect-graphql',
|
|
46
|
-
'data-connect-operations',
|
|
47
|
-
'data-connect-adapter',
|
|
48
|
-
'firestore-types',
|
|
49
|
-
'firestore',
|
|
50
|
-
'api-types',
|
|
51
|
-
'api-validation',
|
|
52
|
-
],
|
|
53
|
-
}, null, 2) + '\n';
|
|
37
|
+
const EXAMPLE_CONFIG = JSON.stringify({ entry: 'contract.yml' }, null, 2) + '\n';
|
|
54
38
|
const writeIfAbsent = (path, content, force) => {
|
|
55
39
|
if (existsSync(path) && !force) {
|
|
56
40
|
return false;
|
package/dist/lib/cli/config.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
export declare const CONFIG_FILENAME = "firebase-contract.json";
|
|
2
2
|
export interface FbcConfig {
|
|
3
3
|
entry?: string;
|
|
4
|
-
outDir?: string;
|
|
5
|
-
generators?: string[];
|
|
6
4
|
}
|
|
7
5
|
/**
|
|
8
6
|
* Load `firebase-contract.json` from `cwd` if present. CLI flags override these
|
|
9
7
|
* values; the config only supplies defaults so common invocations stay short.
|
|
8
|
+
* Deliberately only `entry`: a config-side outDir/generators used to flip
|
|
9
|
+
* `fbc generate` into single-target mode, silently ignoring every `generators:`
|
|
10
|
+
* declaration in the contract graph — output routing belongs in the yml.
|
|
10
11
|
*/
|
|
11
12
|
export declare const loadConfig: (cwd?: string) => FbcConfig;
|
|
12
13
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/cli/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,2BAA2B,CAAA;AAEvD,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/cli/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,2BAA2B,CAAA;AAEvD,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,MAAK,MAAsB,KAAG,SAWxD,CAAA"}
|
package/dist/lib/cli/config.js
CHANGED
|
@@ -4,6 +4,9 @@ export const CONFIG_FILENAME = 'firebase-contract.json';
|
|
|
4
4
|
/**
|
|
5
5
|
* Load `firebase-contract.json` from `cwd` if present. CLI flags override these
|
|
6
6
|
* values; the config only supplies defaults so common invocations stay short.
|
|
7
|
+
* Deliberately only `entry`: a config-side outDir/generators used to flip
|
|
8
|
+
* `fbc generate` into single-target mode, silently ignoring every `generators:`
|
|
9
|
+
* declaration in the contract graph — output routing belongs in the yml.
|
|
7
10
|
*/
|
|
8
11
|
export const loadConfig = (cwd = process.cwd()) => {
|
|
9
12
|
const path = resolve(cwd, CONFIG_FILENAME);
|