firebase-contract 0.1.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +560 -0
  2. package/dist/index.d.ts +15 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +12 -0
  5. package/dist/lib/_internal/compiler/compiler.d.ts +71 -0
  6. package/dist/lib/_internal/compiler/compiler.d.ts.map +1 -0
  7. package/dist/lib/_internal/compiler/compiler.js +104 -0
  8. package/dist/lib/_internal/compiler/index.d.ts +3 -0
  9. package/dist/lib/_internal/compiler/index.d.ts.map +1 -0
  10. package/dist/lib/_internal/compiler/index.js +1 -0
  11. package/dist/lib/_internal/diagnostics.d.ts +29 -0
  12. package/dist/lib/_internal/diagnostics.d.ts.map +1 -0
  13. package/dist/lib/_internal/diagnostics.js +26 -0
  14. package/dist/lib/_internal/format-diagnostics.d.ts +8 -0
  15. package/dist/lib/_internal/format-diagnostics.d.ts.map +1 -0
  16. package/dist/lib/_internal/format-diagnostics.js +10 -0
  17. package/dist/lib/_internal/generators/api/api-dto-generator.d.ts +8 -0
  18. package/dist/lib/_internal/generators/api/api-dto-generator.d.ts.map +1 -0
  19. package/dist/lib/_internal/generators/api/api-dto-generator.js +134 -0
  20. package/dist/lib/_internal/generators/api/api-types-generator.d.ts +8 -0
  21. package/dist/lib/_internal/generators/api/api-types-generator.d.ts.map +1 -0
  22. package/dist/lib/_internal/generators/api/api-types-generator.js +105 -0
  23. package/dist/lib/_internal/generators/api/api-validation-generator.d.ts +7 -0
  24. package/dist/lib/_internal/generators/api/api-validation-generator.d.ts.map +1 -0
  25. package/dist/lib/_internal/generators/api/api-validation-generator.js +73 -0
  26. package/dist/lib/_internal/generators/api/task-payload-generator.d.ts +9 -0
  27. package/dist/lib/_internal/generators/api/task-payload-generator.d.ts.map +1 -0
  28. package/dist/lib/_internal/generators/api/task-payload-generator.js +96 -0
  29. package/dist/lib/_internal/generators/config/config-generator.d.ts +9 -0
  30. package/dist/lib/_internal/generators/config/config-generator.d.ts.map +1 -0
  31. package/dist/lib/_internal/generators/config/config-generator.js +71 -0
  32. package/dist/lib/_internal/generators/data-connect/adapter-generator.d.ts +8 -0
  33. package/dist/lib/_internal/generators/data-connect/adapter-generator.d.ts.map +1 -0
  34. package/dist/lib/_internal/generators/data-connect/adapter-generator.js +142 -0
  35. package/dist/lib/_internal/generators/data-connect/graphql-generator.d.ts +15 -0
  36. package/dist/lib/_internal/generators/data-connect/graphql-generator.d.ts.map +1 -0
  37. package/dist/lib/_internal/generators/data-connect/graphql-generator.js +209 -0
  38. package/dist/lib/_internal/generators/data-connect/operations-generator.d.ts +18 -0
  39. package/dist/lib/_internal/generators/data-connect/operations-generator.d.ts.map +1 -0
  40. package/dist/lib/_internal/generators/data-connect/operations-generator.js +539 -0
  41. package/dist/lib/_internal/generators/firestore/firestore-projection-generator.d.ts +11 -0
  42. package/dist/lib/_internal/generators/firestore/firestore-projection-generator.d.ts.map +1 -0
  43. package/dist/lib/_internal/generators/firestore/firestore-projection-generator.js +112 -0
  44. package/dist/lib/_internal/generators/firestore/firestore-split-generator.d.ts +11 -0
  45. package/dist/lib/_internal/generators/firestore/firestore-split-generator.d.ts.map +1 -0
  46. package/dist/lib/_internal/generators/firestore/firestore-split-generator.js +375 -0
  47. package/dist/lib/_internal/generators/firestore/firestore-type-generator.d.ts +12 -0
  48. package/dist/lib/_internal/generators/firestore/firestore-type-generator.d.ts.map +1 -0
  49. package/dist/lib/_internal/generators/firestore/firestore-type-generator.js +81 -0
  50. package/dist/lib/_internal/generators/generator.d.ts +23 -0
  51. package/dist/lib/_internal/generators/generator.d.ts.map +1 -0
  52. package/dist/lib/_internal/generators/generator.js +1 -0
  53. package/dist/lib/_internal/generators/id/id-codec-generator.d.ts +16 -0
  54. package/dist/lib/_internal/generators/id/id-codec-generator.d.ts.map +1 -0
  55. package/dist/lib/_internal/generators/id/id-codec-generator.js +140 -0
  56. package/dist/lib/_internal/generators/index.d.ts +31 -0
  57. package/dist/lib/_internal/generators/index.d.ts.map +1 -0
  58. package/dist/lib/_internal/generators/index.js +64 -0
  59. package/dist/lib/_internal/generators/registry.d.ts +15 -0
  60. package/dist/lib/_internal/generators/registry.d.ts.map +1 -0
  61. package/dist/lib/_internal/generators/registry.js +24 -0
  62. package/dist/lib/_internal/generators/sql/sql-migration-generator.d.ts +9 -0
  63. package/dist/lib/_internal/generators/sql/sql-migration-generator.d.ts.map +1 -0
  64. package/dist/lib/_internal/generators/sql/sql-migration-generator.js +44 -0
  65. package/dist/lib/_internal/generators/support/constraints.d.ts +8 -0
  66. package/dist/lib/_internal/generators/support/constraints.d.ts.map +1 -0
  67. package/dist/lib/_internal/generators/support/constraints.js +39 -0
  68. package/dist/lib/_internal/generators/support/header.d.ts +13 -0
  69. package/dist/lib/_internal/generators/support/header.d.ts.map +1 -0
  70. package/dist/lib/_internal/generators/support/header.js +17 -0
  71. package/dist/lib/_internal/generators/support/naming.d.ts +10 -0
  72. package/dist/lib/_internal/generators/support/naming.d.ts.map +1 -0
  73. package/dist/lib/_internal/generators/support/naming.js +30 -0
  74. package/dist/lib/_internal/generators/support/relations.d.ts +12 -0
  75. package/dist/lib/_internal/generators/support/relations.d.ts.map +1 -0
  76. package/dist/lib/_internal/generators/support/relations.js +11 -0
  77. package/dist/lib/_internal/generators/support/split.d.ts +34 -0
  78. package/dist/lib/_internal/generators/support/split.d.ts.map +1 -0
  79. package/dist/lib/_internal/generators/support/split.js +75 -0
  80. package/dist/lib/_internal/generators/typescript/typescript-generator.d.ts +18 -0
  81. package/dist/lib/_internal/generators/typescript/typescript-generator.d.ts.map +1 -0
  82. package/dist/lib/_internal/generators/typescript/typescript-generator.js +99 -0
  83. package/dist/lib/_internal/generators/typescript/typescript-split-generator.d.ts +10 -0
  84. package/dist/lib/_internal/generators/typescript/typescript-split-generator.d.ts.map +1 -0
  85. package/dist/lib/_internal/generators/typescript/typescript-split-generator.js +175 -0
  86. package/dist/lib/_internal/generators/union/union-generator.d.ts +8 -0
  87. package/dist/lib/_internal/generators/union/union-generator.d.ts.map +1 -0
  88. package/dist/lib/_internal/generators/union/union-generator.js +37 -0
  89. package/dist/lib/_internal/generators/zod/zod-generator.d.ts +7 -0
  90. package/dist/lib/_internal/generators/zod/zod-generator.d.ts.map +1 -0
  91. package/dist/lib/_internal/generators/zod/zod-generator.js +68 -0
  92. package/dist/lib/_internal/generators/zod/zod-split-generator.d.ts +9 -0
  93. package/dist/lib/_internal/generators/zod/zod-split-generator.d.ts.map +1 -0
  94. package/dist/lib/_internal/generators/zod/zod-split-generator.js +136 -0
  95. package/dist/lib/_internal/ir/build-ir.d.ts +18 -0
  96. package/dist/lib/_internal/ir/build-ir.d.ts.map +1 -0
  97. package/dist/lib/_internal/ir/build-ir.js +430 -0
  98. package/dist/lib/_internal/ir/ir.d.ts +393 -0
  99. package/dist/lib/_internal/ir/ir.d.ts.map +1 -0
  100. package/dist/lib/_internal/ir/ir.js +22 -0
  101. package/dist/lib/_internal/parser/parse.d.ts +9 -0
  102. package/dist/lib/_internal/parser/parse.d.ts.map +1 -0
  103. package/dist/lib/_internal/parser/parse.js +682 -0
  104. package/dist/lib/_internal/parser/raw-document.d.ts +230 -0
  105. package/dist/lib/_internal/parser/raw-document.d.ts.map +1 -0
  106. package/dist/lib/_internal/parser/raw-document.js +6 -0
  107. package/dist/lib/_internal/resolver/import-resolver.d.ts +25 -0
  108. package/dist/lib/_internal/resolver/import-resolver.d.ts.map +1 -0
  109. package/dist/lib/_internal/resolver/import-resolver.js +73 -0
  110. package/dist/lib/_internal/resolver/module-loader.d.ts +25 -0
  111. package/dist/lib/_internal/resolver/module-loader.d.ts.map +1 -0
  112. package/dist/lib/_internal/resolver/module-loader.js +62 -0
  113. package/dist/lib/_internal/runtime/data-connect-adapter.d.ts +25 -0
  114. package/dist/lib/_internal/runtime/data-connect-adapter.d.ts.map +1 -0
  115. package/dist/lib/_internal/runtime/data-connect-adapter.js +24 -0
  116. package/dist/lib/_internal/runtime/index.d.ts +3 -0
  117. package/dist/lib/_internal/runtime/index.d.ts.map +1 -0
  118. package/dist/lib/_internal/runtime/index.js +1 -0
  119. package/dist/lib/_internal/validation/rules.d.ts +32 -0
  120. package/dist/lib/_internal/validation/rules.d.ts.map +1 -0
  121. package/dist/lib/_internal/validation/rules.js +282 -0
  122. package/dist/lib/_internal/validation/validate.d.ts +9 -0
  123. package/dist/lib/_internal/validation/validate.d.ts.map +1 -0
  124. package/dist/lib/_internal/validation/validate.js +6 -0
  125. package/dist/lib/cli/commands/generate.d.ts +3 -0
  126. package/dist/lib/cli/commands/generate.d.ts.map +1 -0
  127. package/dist/lib/cli/commands/generate.js +66 -0
  128. package/dist/lib/cli/commands/index.d.ts +4 -0
  129. package/dist/lib/cli/commands/index.d.ts.map +1 -0
  130. package/dist/lib/cli/commands/index.js +11 -0
  131. package/dist/lib/cli/commands/init.d.ts +3 -0
  132. package/dist/lib/cli/commands/init.d.ts.map +1 -0
  133. package/dist/lib/cli/commands/init.js +72 -0
  134. package/dist/lib/cli/commands/inspect.d.ts +3 -0
  135. package/dist/lib/cli/commands/inspect.d.ts.map +1 -0
  136. package/dist/lib/cli/commands/inspect.js +23 -0
  137. package/dist/lib/cli/commands/validate.d.ts +3 -0
  138. package/dist/lib/cli/commands/validate.d.ts.map +1 -0
  139. package/dist/lib/cli/commands/validate.js +23 -0
  140. package/dist/lib/cli/config.d.ts +12 -0
  141. package/dist/lib/cli/config.d.ts.map +1 -0
  142. package/dist/lib/cli/config.js +20 -0
  143. package/dist/lib/cli/index.d.ts +3 -0
  144. package/dist/lib/cli/index.d.ts.map +1 -0
  145. package/dist/lib/cli/index.js +13 -0
  146. package/dist/lib/cli/version.d.ts +3 -0
  147. package/dist/lib/cli/version.d.ts.map +1 -0
  148. package/dist/lib/cli/version.js +15 -0
  149. package/dist/lib/modules/runtime.d.ts +2 -0
  150. package/dist/lib/modules/runtime.d.ts.map +1 -0
  151. package/dist/lib/modules/runtime.js +3 -0
  152. package/package.json +60 -0
@@ -0,0 +1,393 @@
1
+ /**
2
+ * The Intermediate Representation (IR).
3
+ *
4
+ * This is the single input every generator consumes. Generators MUST NOT parse
5
+ * YAML or touch raw documents — they only read the IR defined here. Keeping the
6
+ * IR the sole contract between the front end (parser/resolver) and the back end
7
+ * (generators) is what lets generators stay independent and lets new front-end
8
+ * features land without rewriting generators.
9
+ */
10
+ export declare const SCALAR_TYPES: readonly ["string", "int", "int64", "float", "boolean", "timestamp", "date", "json", "id"];
11
+ export type ScalarType = (typeof SCALAR_TYPES)[number];
12
+ export declare const isScalarType: (name: string) => name is ScalarType;
13
+ /** A reference from a field to the type that describes its value. */
14
+ export type IrTypeRef = {
15
+ kind: 'scalar';
16
+ name: ScalarType;
17
+ } | {
18
+ kind: 'enum';
19
+ name: string;
20
+ } | {
21
+ kind: 'model';
22
+ name: string;
23
+ }
24
+ /** Emitted when a type name could not be matched; surfaced by validation. */
25
+ | {
26
+ kind: 'unresolved';
27
+ name: string;
28
+ };
29
+ /** Validation constraints on a field, applied by the validation generators. */
30
+ export interface IrConstraints {
31
+ /** Minimum numeric value (numbers). */
32
+ min?: number;
33
+ /** Maximum numeric value (numbers). */
34
+ max?: number;
35
+ /** Minimum string/array length. */
36
+ minLength?: number;
37
+ /** Maximum string/array length. */
38
+ maxLength?: number;
39
+ /** Regex source the value must match (strings). */
40
+ pattern?: string;
41
+ /** Non-empty string/array. */
42
+ nonempty?: boolean;
43
+ /** Must be a valid email (strings). */
44
+ email?: boolean;
45
+ /** Must be a valid URL (strings). */
46
+ url?: boolean;
47
+ }
48
+ export interface IrField {
49
+ name: string;
50
+ description?: string;
51
+ type: IrTypeRef;
52
+ constraints: IrConstraints;
53
+ /** The value may be absent (`field?`). */
54
+ optional: boolean;
55
+ /** The value may be `null` (rendered `.nullable()` in Zod-facing generators). */
56
+ nullable?: boolean;
57
+ /** Render the description as a JSDoc block instead of line comments. */
58
+ jsdoc?: boolean;
59
+ /** The value is an array of `type`. */
60
+ list: boolean;
61
+ /** Marks the primary identifier of the model. */
62
+ isId: boolean;
63
+ unique: boolean;
64
+ /**
65
+ * A model-typed field that is a foreign-key *relation* to another table
66
+ * (Data Connect emits a relation field + FK column), as opposed to an
67
+ * *embedded* value object (stored as `Any`/jsonb). Only meaningful when
68
+ * `type.kind === 'model'`.
69
+ */
70
+ relation: boolean;
71
+ /** Data Connect column dataType override (e.g. `bigserial`); derived for Int64 PKs. */
72
+ col?: string;
73
+ /** Pin the field to a single literal value (e.g. a discriminated-union tag). */
74
+ literal?: string;
75
+ default?: unknown;
76
+ }
77
+ /** A composite index or unique constraint on a table. */
78
+ export interface IrIndex {
79
+ fields: string[];
80
+ /** Explicit index name; generators derive one when absent. */
81
+ name?: string;
82
+ unique: boolean;
83
+ /** Render the directive with one argument per line. */
84
+ expand?: boolean;
85
+ }
86
+ /**
87
+ * Raw SQL constraints that Data Connect's schema directives cannot express
88
+ * (composite foreign keys, CHECK constraints, extra indexes). The SQL migration
89
+ * generator turns these into executable `ALTER TABLE`/`CREATE INDEX` statements.
90
+ */
91
+ export interface IrSqlConstraints {
92
+ checks: string[];
93
+ foreignKeys: {
94
+ columns: string[];
95
+ references: string;
96
+ name?: string;
97
+ }[];
98
+ indexes: {
99
+ columns: string[];
100
+ name?: string;
101
+ unique: boolean;
102
+ }[];
103
+ }
104
+ export interface IrModel {
105
+ name: string;
106
+ description?: string;
107
+ fields: IrField[];
108
+ /** Composite primary key field names. Empty means "use the `id: true` field". */
109
+ key: string[];
110
+ /** Raw SQL constraints (composite FK / CHECK / index) not expressible in DC. */
111
+ sql?: IrSqlConstraints;
112
+ /** Table name override; defaults to the snake_case pluralization of the model name. */
113
+ table?: string;
114
+ /** GraphQL type name override (defaults to `name`). */
115
+ gqlName?: string;
116
+ /** `multi` = each type-level directive on its own line (real-file style). */
117
+ directives?: 'inline' | 'multi';
118
+ /** Trailing comment block rendered after the closing `}` in the schema file. */
119
+ footer?: string;
120
+ /** TypeScript-side rename used by Firestore projections. */
121
+ fsName?: string;
122
+ /** Composite unique/index constraints (Data Connect `@unique`/`@index`). */
123
+ indexes: IrIndex[];
124
+ /** Absolute path of the file this model was defined in. */
125
+ sourceFile?: string;
126
+ }
127
+ export interface IrEnum {
128
+ name: string;
129
+ description?: string;
130
+ values: string[];
131
+ /** Per-value comments, keyed by value. */
132
+ valueComments?: Record<string, string>;
133
+ /** Const-object key overrides, keyed by value (e.g. Q → QA). */
134
+ valueKeys?: Record<string, string>;
135
+ /** GraphQL type name override (defaults to `name`). */
136
+ gqlName?: string;
137
+ /** TypeScript-side rename used by Firestore projections (e.g. `Status` → `ReviewStatus`). */
138
+ fsName?: string;
139
+ /** Firestore-side comment override (when it differs from the DC description). */
140
+ fsDescription?: string;
141
+ sourceFile?: string;
142
+ }
143
+ export type OperationType = 'query' | 'mutation';
144
+ export type MutationAction = 'insert' | 'update' | 'upsert' | 'delete';
145
+ export type AuthLevel = 'NO_ACCESS' | 'PUBLIC' | 'USER';
146
+ /** A single `where` filter: a field compared with an operator (eq, contains, lt, …). */
147
+ export interface IrWhere {
148
+ field: string;
149
+ op: string;
150
+ /** Variable requiredness override (defaults to required). */
151
+ required?: boolean;
152
+ /** Comment rendered directly above the variable declaration. */
153
+ description?: string;
154
+ /** Variable name override. */
155
+ var?: string;
156
+ /** Fixed literal comparison value (no variable), e.g. `ACTIVE` / `true`. */
157
+ literal?: string;
158
+ /** Filter on the flat FK column (`fieldId: { eq }`) instead of the relation form. */
159
+ flat?: boolean;
160
+ }
161
+ /** A mutation input: a field, with optional variable-requiredness override. */
162
+ export interface IrInput {
163
+ field: string;
164
+ /** Overrides schema-derived nullability (the operation's own contract). */
165
+ required?: boolean;
166
+ /** Comment rendered directly above the variable declaration. */
167
+ description?: string;
168
+ /** Variable name override (defaults to the field name / relation FK name). */
169
+ var?: string;
170
+ /** Write a relation as its flat FK column (`fieldId: $var`) instead of `field: { id: $var }`. */
171
+ flat?: boolean;
172
+ /** Fixed literal written directly into data (no variable), e.g. `PROCESSING` / `false`. */
173
+ literal?: string;
174
+ /** Render as an increment write (`field_update: { inc: $var | 1 }`) at this position. */
175
+ inc?: boolean;
176
+ /** Pass the relation as a `Model_Key` object variable (`$catalogVersion: CatalogVersion_Key!`). */
177
+ asKey?: boolean;
178
+ /** Quote the literal as a GraphQL string. */
179
+ quote?: boolean;
180
+ }
181
+ /** A selection entry: a field, optionally with a nested selection (relations). */
182
+ export interface IrSelect {
183
+ field: string;
184
+ select?: IrSelect[];
185
+ /** Comment rendered directly above the selection line. */
186
+ description?: string;
187
+ /** GraphQL alias (`members: shopMembers_on_user`). */
188
+ alias?: string;
189
+ /** Raw argument string rendered verbatim (`orderBy: [{ joinedAt: DESC }]`, join where/limit). */
190
+ args?: string;
191
+ }
192
+ /** A single `orderBy` clause. */
193
+ export interface IrOrderBy {
194
+ field: string;
195
+ dir: 'ASC' | 'DESC';
196
+ }
197
+ /** Aggregate selections for a query. */
198
+ export interface IrAggregate {
199
+ count: boolean;
200
+ /** Field names to `_sum`. */
201
+ sum: string[];
202
+ }
203
+ /** A field set to a raw expression on mutation (e.g. `updatedAt: "request.time"`). */
204
+ export interface IrExpr {
205
+ field: string;
206
+ expr: string;
207
+ }
208
+ /** A Data Connect query/mutation operation over a model's table. */
209
+ export interface IrOperation {
210
+ name: string;
211
+ description?: string;
212
+ operationType: OperationType;
213
+ /** Target model (table) name. */
214
+ model: string;
215
+ /** For mutations: which auto-generated resolver to use. */
216
+ action?: MutationAction;
217
+ auth: AuthLevel;
218
+ /** Mandatory rationale when auth is PUBLIC. */
219
+ authReason?: string;
220
+ /** Mutation inputs (fields + optional requiredness overrides). */
221
+ inputs: IrInput[];
222
+ /** `where` filters (queries). */
223
+ where: IrWhere[];
224
+ /** Selection entries; empty means all scalar fields. */
225
+ select: IrSelect[];
226
+ /** `orderBy` clauses (queries). */
227
+ orderBy: IrOrderBy[];
228
+ /** Row limit (queries): a literal, or a variable spec. */
229
+ limit?: number | {
230
+ var: string;
231
+ default?: number;
232
+ required?: boolean;
233
+ };
234
+ /** Single-row primary-key lookup form: `key` → `x(key: {…})`, `id` → `x(id: $var)`. */
235
+ single?: 'key' | 'id';
236
+ /** Update/delete key argument style: nested `key: {…}` (default) or positional `id: $var`. */
237
+ keyArg?: 'key' | 'id';
238
+ /** Key variable name overrides, keyed by key field name. */
239
+ keyVars?: Record<string, string>;
240
+ /** Aggregate selections (queries). */
241
+ aggregate?: IrAggregate;
242
+ /** Fields set to raw expressions on mutation (e.g. `updatedAt: request.time`). */
243
+ exprs: IrExpr[];
244
+ /** Increment writes: `field_update: { inc: 1 }`, or `{ inc: $var }` when `var` is set. */
245
+ inc: {
246
+ field: string;
247
+ var?: string;
248
+ }[];
249
+ /** Output targets (connectors). Empty means the default/root output. */
250
+ connectors: string[];
251
+ /** Entity directory override for split output (defaults to the table's kebab name). */
252
+ entityDir?: string;
253
+ /** Wrap where conditions in an explicit `_and: [ … ]` array (matches hand-written form). */
254
+ whereAnd?: boolean;
255
+ /** Rendered operation name override (yml key stays the unique id). */
256
+ gqlName?: string;
257
+ /** Comment block rendered after the operation (file-trailing NOTEs). */
258
+ footer?: string;
259
+ /** Verbatim operation body — rendered as-is (escape hatch for inexpressible ops). */
260
+ raw?: string;
261
+ /** Per-operation layout hints matching the hand-written file's formatting. */
262
+ style?: {
263
+ signature?: 'inline' | 'multi';
264
+ args?: 'inline' | 'multi';
265
+ /** `inline` = whole call on one line; `compact` = one-line data object inside a multi-line call. */
266
+ data?: 'inline' | 'multi' | 'compact';
267
+ /** `bare` = single orderBy clause without array brackets. */
268
+ orderBy?: 'bare' | 'array';
269
+ /** `newline` = `@auth` on its own line (even NO_ACCESS). */
270
+ auth?: 'inline' | 'newline';
271
+ /** `multi` = key object expanded one field per line. */
272
+ key?: 'inline' | 'multi';
273
+ /** `inline` = compact one-line `_and: [{…}, {…}]` even inside multi-line args. */
274
+ and?: 'inline' | 'multi';
275
+ /** `multi` = plain where body wrapped with one condition per line. */
276
+ where?: 'inline' | 'multi';
277
+ };
278
+ sourceFile?: string;
279
+ }
280
+ export type ApiKind = 'callable' | 'https' | 'task' | 'pubsub';
281
+ /** Request or response shape of an API endpoint. */
282
+ export interface IrApiPayload {
283
+ /** Reference an existing model as the shape. */
284
+ model?: string;
285
+ /** Inline fields (used when `model` is absent). */
286
+ fields: IrField[];
287
+ /** Response only: the endpoint returns nothing. */
288
+ isVoid: boolean;
289
+ }
290
+ /** Cloud Task / Pub/Sub delivery config for an endpoint. */
291
+ export interface IrTaskConfig {
292
+ /** Envelope type (e.g. `RetryTaskPayload`) wrapping the task data. */
293
+ envelope?: string;
294
+ maxAttempts?: number;
295
+ timeoutSeconds?: number;
296
+ topic?: string;
297
+ }
298
+ /** An application API endpoint (callable / https / cloud task / pubsub). */
299
+ export interface IrApi {
300
+ name: string;
301
+ description?: string;
302
+ kind: ApiKind;
303
+ /** HTTP method for `https` endpoints. */
304
+ method?: string;
305
+ request: IrApiPayload;
306
+ response: IrApiPayload;
307
+ /** Delivery config for `task`/`pubsub` kinds. */
308
+ task?: IrTaskConfig;
309
+ sourceFile?: string;
310
+ }
311
+ /** A generic payload envelope, e.g. `RetryTaskPayload<T> = T & { identifierId, opId, enqueuedAt }`. */
312
+ export interface IrEnvelope {
313
+ name: string;
314
+ description?: string;
315
+ /** Fields merged into the wrapped type `T`. */
316
+ fields: IrField[];
317
+ sourceFile?: string;
318
+ }
319
+ /**
320
+ * A Firestore projection document. Firestore is a denormalized read model, so a
321
+ * projection *derives* from a Data Connect model (`from`) and then diverges:
322
+ * fields are picked/omitted, relations become resolved string ids, timestamps
323
+ * become dates, a `_meta_` envelope is added, and extra denormalized fields
324
+ * (e.g. flattened DAG edges) are declared inline.
325
+ */
326
+ export interface IrFirestoreDoc {
327
+ name: string;
328
+ description?: string;
329
+ /** Base model to inherit fields from. */
330
+ from?: string;
331
+ /** Firestore document path, e.g. `shops/{shopId}`. */
332
+ collection?: string;
333
+ /** Keep only these base fields (mutually exclusive with `omit`). */
334
+ pick: string[];
335
+ /** Drop these base fields. */
336
+ omit: string[];
337
+ /** Added or overriding projection-specific fields. */
338
+ fields: IrField[];
339
+ /** Attach the consistency `_meta_` envelope (default true). */
340
+ meta: boolean;
341
+ /** Embedded models to host in this projection file even when unreferenced. */
342
+ include?: string[];
343
+ /** Verbatim TypeScript helpers emitted into the projection file. */
344
+ helpers?: string;
345
+ sourceFile?: string;
346
+ }
347
+ /** A discriminated union of model variants keyed by a shared discriminant field. */
348
+ export interface IrUnion {
349
+ name: string;
350
+ description?: string;
351
+ discriminant: string;
352
+ variants: string[];
353
+ sourceFile?: string;
354
+ }
355
+ /** A Data Connect service (one Postgres database + its connectors). */
356
+ export interface IrService {
357
+ name: string;
358
+ database?: string;
359
+ location?: string;
360
+ connectors: string[];
361
+ }
362
+ /** Project-level topology: services and their Cloud Functions codebases. */
363
+ export interface IrProject {
364
+ services: IrService[];
365
+ /** Map of codebase id → service name (e.g. `shop` → `shop-service`). */
366
+ codebases: {
367
+ codebase: string;
368
+ service: string;
369
+ }[];
370
+ /** Sqids settings for the generated id-core (encode/decode primitives). */
371
+ idCodec?: {
372
+ minLength?: number;
373
+ alphabet?: string;
374
+ };
375
+ }
376
+ export interface Ir {
377
+ version: number;
378
+ enums: IrEnum[];
379
+ models: IrModel[];
380
+ operations: IrOperation[];
381
+ apis: IrApi[];
382
+ firestore: IrFirestoreDoc[];
383
+ unions: IrUnion[];
384
+ envelopes: IrEnvelope[];
385
+ project?: IrProject;
386
+ /** Raw header text from the contract (`default` = built-in banner). */
387
+ header?: string;
388
+ }
389
+ export declare const findModel: (ir: Ir, name: string) => IrModel | undefined;
390
+ export declare const findEnum: (ir: Ir, name: string) => IrEnum | undefined;
391
+ /** The id field's scalar name of a model, used to type foreign keys. Defaults to `string`. */
392
+ export declare const idTypeOf: (ir: Ir, modelName: string) => ScalarType;
393
+ //# sourceMappingURL=ir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/ir/ir.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The Intermediate Representation (IR).
3
+ *
4
+ * This is the single input every generator consumes. Generators MUST NOT parse
5
+ * YAML or touch raw documents — they only read the IR defined here. Keeping the
6
+ * IR the sole contract between the front end (parser/resolver) and the back end
7
+ * (generators) is what lets generators stay independent and lets new front-end
8
+ * features land without rewriting generators.
9
+ */
10
+ export const SCALAR_TYPES = ['string', 'int', 'int64', 'float', 'boolean', 'timestamp', 'date', 'json', 'id'];
11
+ export const isScalarType = (name) => SCALAR_TYPES.includes(name);
12
+ export const findModel = (ir, name) => ir.models.find(model => model.name === name);
13
+ export const findEnum = (ir, name) => ir.enums.find(irEnum => irEnum.name === name);
14
+ /** The id field's scalar name of a model, used to type foreign keys. Defaults to `string`. */
15
+ export const idTypeOf = (ir, modelName) => {
16
+ const model = findModel(ir, modelName);
17
+ const idField = model?.fields.find(field => field.isId);
18
+ if (idField && idField.type.kind === 'scalar') {
19
+ return idField.type.name;
20
+ }
21
+ return 'string';
22
+ };
@@ -0,0 +1,9 @@
1
+ import { RawContract } from './raw-document.js';
2
+ /**
3
+ * Parse a single YAML contract file into a {@link RawContract}. Shorthand forms
4
+ * are normalized here so downstream code sees one canonical shape. Syntax and
5
+ * structural problems throw a {@link ContractError}; semantic problems are left
6
+ * for validation.
7
+ */
8
+ export declare const parseContract: (content: string, filePath: string) => RawContract;
9
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/parse.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,WAAW,EAUZ,MAAM,mBAAmB,CAAA;AAyc1B;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,EAAE,UAAU,MAAM,KAAG,WA+JjE,CAAA"}