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,230 @@
1
+ /**
2
+ * The raw, still-YAML-shaped model produced by the parser. It mirrors the YAML
3
+ * document one-to-one after shorthand normalization. Only the parser and import
4
+ * resolver deal with these types; everything downstream works on the IR.
5
+ */
6
+ export interface RawField {
7
+ type: string;
8
+ optional?: boolean;
9
+ nullable?: boolean;
10
+ /** Render the description as a JSDoc block instead of line comments. */
11
+ jsdoc?: boolean;
12
+ list?: boolean;
13
+ id?: boolean;
14
+ unique?: boolean;
15
+ relation?: boolean;
16
+ default?: unknown;
17
+ description?: string;
18
+ min?: number;
19
+ max?: number;
20
+ minLength?: number;
21
+ maxLength?: number;
22
+ pattern?: string;
23
+ nonempty?: boolean;
24
+ email?: boolean;
25
+ url?: boolean;
26
+ col?: string;
27
+ literal?: string;
28
+ }
29
+ export interface RawEnum {
30
+ description?: string;
31
+ values: string[];
32
+ valueComments?: Record<string, string>;
33
+ /** Const-object key overrides, keyed by value (e.g. Q → QA). */
34
+ valueKeys?: Record<string, string>;
35
+ gqlName?: string;
36
+ /** TypeScript-side rename used by Firestore projections (e.g. `Status` → `ReviewStatus`). */
37
+ fsName?: string;
38
+ /** Firestore-side comment override (when it differs from the DC description). */
39
+ fsDescription?: string;
40
+ }
41
+ export interface RawIndex {
42
+ fields: string[];
43
+ name?: string;
44
+ unique?: boolean;
45
+ expand?: boolean;
46
+ }
47
+ export interface RawSqlConstraints {
48
+ checks?: string[];
49
+ foreignKeys?: {
50
+ columns: string[];
51
+ references: string;
52
+ name?: string;
53
+ }[];
54
+ indexes?: {
55
+ columns: string[];
56
+ name?: string;
57
+ unique?: boolean;
58
+ }[];
59
+ }
60
+ export interface RawModel {
61
+ description?: string;
62
+ fields: Record<string, RawField>;
63
+ key?: string[];
64
+ table?: string;
65
+ gqlName?: string;
66
+ directives?: string;
67
+ footer?: string;
68
+ /** TypeScript-side rename used by Firestore projections. */
69
+ fsName?: string;
70
+ indexes?: RawIndex[];
71
+ sql?: RawSqlConstraints;
72
+ }
73
+ export interface RawOperation {
74
+ description?: string;
75
+ type: string;
76
+ model: string;
77
+ action?: string;
78
+ auth?: string;
79
+ authReason?: string;
80
+ inputs?: {
81
+ field: string;
82
+ required?: boolean;
83
+ description?: string;
84
+ var?: string;
85
+ flat?: boolean;
86
+ literal?: string;
87
+ quote?: boolean;
88
+ inc?: boolean;
89
+ asKey?: boolean;
90
+ }[];
91
+ /** Normalized to `{ field, op, required? }` by the parser. */
92
+ where?: {
93
+ field: string;
94
+ op: string;
95
+ required?: boolean;
96
+ description?: string;
97
+ var?: string;
98
+ literal?: string;
99
+ flat?: boolean;
100
+ }[];
101
+ select?: {
102
+ field: string;
103
+ select?: unknown[];
104
+ description?: string;
105
+ alias?: string;
106
+ args?: string;
107
+ }[];
108
+ orderBy?: {
109
+ field: string;
110
+ dir: string;
111
+ }[];
112
+ limit?: number | {
113
+ var: string;
114
+ default?: number;
115
+ required?: boolean;
116
+ };
117
+ single?: string;
118
+ keyArg?: string;
119
+ keyVars?: Record<string, string>;
120
+ aggregate?: {
121
+ count?: boolean;
122
+ sum?: string[];
123
+ };
124
+ exprs?: {
125
+ field: string;
126
+ expr: string;
127
+ }[];
128
+ inc?: {
129
+ field: string;
130
+ var?: string;
131
+ }[];
132
+ /** Connectors (output targets) this operation is emitted into. */
133
+ connectors?: string[];
134
+ entityDir?: string;
135
+ whereAnd?: boolean;
136
+ gqlName?: string;
137
+ footer?: string;
138
+ raw?: string;
139
+ directives?: string;
140
+ style?: {
141
+ signature?: string;
142
+ args?: string;
143
+ data?: string;
144
+ orderBy?: string;
145
+ auth?: string;
146
+ key?: string;
147
+ and?: string;
148
+ where?: string;
149
+ };
150
+ }
151
+ export interface RawApiPayload {
152
+ model?: string;
153
+ fields?: Record<string, RawField>;
154
+ void?: boolean;
155
+ }
156
+ export interface RawApi {
157
+ description?: string;
158
+ kind: string;
159
+ method?: string;
160
+ request?: RawApiPayload;
161
+ response?: RawApiPayload;
162
+ envelope?: string;
163
+ maxAttempts?: number;
164
+ timeoutSeconds?: number;
165
+ topic?: string;
166
+ }
167
+ export interface RawEnvelope {
168
+ description?: string;
169
+ fields: Record<string, RawField>;
170
+ }
171
+ export interface RawFirestoreDoc {
172
+ description?: string;
173
+ from?: string;
174
+ collection?: string;
175
+ pick?: string[];
176
+ omit?: string[];
177
+ fields?: Record<string, RawField>;
178
+ meta?: boolean;
179
+ /** Embedded models to host in this projection file even when unreferenced. */
180
+ include?: string[];
181
+ /** Verbatim TypeScript helpers emitted into the projection file. */
182
+ helpers?: string;
183
+ }
184
+ export interface RawUnion {
185
+ description?: string;
186
+ discriminant: string;
187
+ variants: string[];
188
+ }
189
+ export interface RawService {
190
+ name: string;
191
+ database?: string;
192
+ location?: string;
193
+ connectors?: string[];
194
+ }
195
+ export interface RawProject {
196
+ services?: RawService[];
197
+ codebases?: Record<string, string>;
198
+ /** Sqids settings for the generated id-core (encode/decode primitives). */
199
+ idCodec?: {
200
+ minLength?: number;
201
+ alphabet?: string;
202
+ };
203
+ }
204
+ /** A declared generation target: run `generators` into `out` (relative to the yml). */
205
+ export interface RawOutputTarget {
206
+ out: string;
207
+ generators: string[];
208
+ }
209
+ export interface RawContract {
210
+ /** Absolute path of the source file. */
211
+ filePath: string;
212
+ /** Generation targets declared in this file's `generate:` section. */
213
+ outputs?: RawOutputTarget[];
214
+ version: number;
215
+ /** Raw header text prepended to generated files (`default` = built-in banner). */
216
+ header?: string;
217
+ project?: RawProject;
218
+ /** Import specifiers exactly as written (relative paths or npm packages). */
219
+ imports: string[];
220
+ /** File-level default connectors applied to operations lacking their own. */
221
+ defaultConnectors: string[];
222
+ enums: Record<string, RawEnum>;
223
+ models: Record<string, RawModel>;
224
+ operations: Record<string, RawOperation>;
225
+ apis: Record<string, RawApi>;
226
+ firestore: Record<string, RawFirestoreDoc>;
227
+ unions: Record<string, RawUnion>;
228
+ envelopes: Record<string, RawEnvelope>;
229
+ }
230
+ //# sourceMappingURL=raw-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-document.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/parser/raw-document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The raw, still-YAML-shaped model produced by the parser. It mirrors the YAML
3
+ * document one-to-one after shorthand normalization. Only the parser and import
4
+ * resolver deal with these types; everything downstream works on the IR.
5
+ */
6
+ export {};
@@ -0,0 +1,25 @@
1
+ import { Diagnostic } from '../diagnostics.js';
2
+ import { RawContract } from '../parser/raw-document.js';
3
+ import { ModuleLoader } from './module-loader.js';
4
+ export interface ResolveResult {
5
+ /**
6
+ * Every document reachable from the entry, in dependency order: an imported
7
+ * document always appears before the document that imports it. This gives the
8
+ * IR builder a deterministic merge order.
9
+ */
10
+ documents: RawContract[];
11
+ diagnostics: Diagnostic[];
12
+ }
13
+ /**
14
+ * Load the entry contract and everything it imports (transitively), following
15
+ * both relative and npm specifiers via the {@link ModuleLoader}.
16
+ *
17
+ * Detects and reports:
18
+ * - circular imports (`IMPORT_CYCLE`)
19
+ * - unresolved/unreadable modules (`UNRESOLVED_IMPORT`, `MODULE_NOT_FOUND`)
20
+ *
21
+ * Duplicate *definitions* across files are detected later, during IR build,
22
+ * because that is where names from every document are merged.
23
+ */
24
+ export declare const resolveImports: (entryPath: string, loader: ModuleLoader) => ResolveResult;
25
+ //# sourceMappingURL=import-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/resolver/import-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,UAAU,EAAS,MAAM,mBAAmB,CAAA;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,EAAE,QAAQ,YAAY,KAAG,aA8DxE,CAAA"}
@@ -0,0 +1,73 @@
1
+ import { resolve } from 'node:path';
2
+ import { ContractError, error } from '../diagnostics.js';
3
+ import { parseContract } from '../parser/parse.js';
4
+ /**
5
+ * Load the entry contract and everything it imports (transitively), following
6
+ * both relative and npm specifiers via the {@link ModuleLoader}.
7
+ *
8
+ * Detects and reports:
9
+ * - circular imports (`IMPORT_CYCLE`)
10
+ * - unresolved/unreadable modules (`UNRESOLVED_IMPORT`, `MODULE_NOT_FOUND`)
11
+ *
12
+ * Duplicate *definitions* across files are detected later, during IR build,
13
+ * because that is where names from every document are merged.
14
+ */
15
+ export const resolveImports = (entryPath, loader) => {
16
+ const entryId = resolve(entryPath);
17
+ const documents = [];
18
+ const loaded = new Set();
19
+ const visiting = new Set();
20
+ const diagnostics = [];
21
+ const collectFrom = (thrown) => {
22
+ if (thrown instanceof ContractError && thrown.diagnostics.length > 0) {
23
+ diagnostics.push(...thrown.diagnostics);
24
+ }
25
+ else {
26
+ const message = thrown instanceof Error ? thrown.message : String(thrown);
27
+ diagnostics.push(error('LOAD_ERROR', message));
28
+ }
29
+ };
30
+ const visit = (id, chain) => {
31
+ if (visiting.has(id)) {
32
+ const cycle = [...chain.slice(chain.indexOf(id)), id].join(' -> ');
33
+ diagnostics.push(error('IMPORT_CYCLE', `Circular import detected: ${cycle}`, { file: id }));
34
+ return;
35
+ }
36
+ if (loaded.has(id)) {
37
+ return;
38
+ }
39
+ let content;
40
+ try {
41
+ content = loader.load(id);
42
+ }
43
+ catch (thrown) {
44
+ collectFrom(thrown);
45
+ return;
46
+ }
47
+ let document;
48
+ try {
49
+ document = parseContract(content, id);
50
+ }
51
+ catch (thrown) {
52
+ collectFrom(thrown);
53
+ return;
54
+ }
55
+ visiting.add(id);
56
+ for (const specifier of document.imports) {
57
+ let importId;
58
+ try {
59
+ importId = loader.resolveId(specifier, id);
60
+ }
61
+ catch (thrown) {
62
+ collectFrom(thrown);
63
+ continue;
64
+ }
65
+ visit(importId, [...chain, id]);
66
+ }
67
+ visiting.delete(id);
68
+ loaded.add(id);
69
+ documents.push(document);
70
+ };
71
+ visit(entryId, []);
72
+ return { documents, diagnostics };
73
+ };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Abstracts how import specifiers turn into absolute ids and how their content
3
+ * is read. The default implementation hits the file system, but the resolver
4
+ * depends only on this interface so tests can supply in-memory modules and the
5
+ * pipeline stays free of hard file-system coupling.
6
+ */
7
+ export interface ModuleLoader {
8
+ /** Resolve `specifier`, as imported from `importer`, to an absolute id. */
9
+ resolveId(specifier: string, importer: string): string;
10
+ /** Read the raw text of a module by its absolute id. */
11
+ load(id: string): string;
12
+ }
13
+ /**
14
+ * File-system loader. Relative specifiers resolve against the importer's
15
+ * directory; everything else is treated as an npm package specifier and
16
+ * resolved through Node's module resolution (supports subpath exports).
17
+ */
18
+ export declare const createFsLoader: () => ModuleLoader;
19
+ /**
20
+ * In-memory loader for tests and programmatic use. `files` maps absolute ids to
21
+ * their text content. Relative imports are resolved with the same rules as the
22
+ * FS loader; npm specifiers are looked up directly in the map.
23
+ */
24
+ export declare const createMemoryLoader: (files: Record<string, string>) => ModuleLoader;
25
+ //# sourceMappingURL=module-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/resolver/module-loader.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACtD,wDAAwD;IACxD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CACzB;AAKD;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAAO,YAwBhC,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,YAoBjE,CAAA"}
@@ -0,0 +1,62 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import { dirname, isAbsolute, resolve } from 'node:path';
4
+ import { ContractError, error } from '../diagnostics.js';
5
+ const isRelative = (specifier) => specifier.startsWith('./') || specifier.startsWith('../') || isAbsolute(specifier);
6
+ /**
7
+ * File-system loader. Relative specifiers resolve against the importer's
8
+ * directory; everything else is treated as an npm package specifier and
9
+ * resolved through Node's module resolution (supports subpath exports).
10
+ */
11
+ export const createFsLoader = () => ({
12
+ resolveId(specifier, importer) {
13
+ if (isRelative(specifier)) {
14
+ return resolve(dirname(importer), specifier);
15
+ }
16
+ try {
17
+ const require = createRequire(importer);
18
+ return require.resolve(specifier);
19
+ }
20
+ catch {
21
+ throw new ContractError(`Cannot resolve npm import "${specifier}"`, [
22
+ error('UNRESOLVED_IMPORT', `Cannot resolve npm import "${specifier}"`, {
23
+ file: importer,
24
+ }),
25
+ ]);
26
+ }
27
+ },
28
+ load(id) {
29
+ if (!existsSync(id)) {
30
+ throw new ContractError(`Module not found: ${id}`, [
31
+ error('MODULE_NOT_FOUND', `Module not found: ${id}`, { file: id }),
32
+ ]);
33
+ }
34
+ return readFileSync(id, 'utf8');
35
+ },
36
+ });
37
+ /**
38
+ * In-memory loader for tests and programmatic use. `files` maps absolute ids to
39
+ * their text content. Relative imports are resolved with the same rules as the
40
+ * FS loader; npm specifiers are looked up directly in the map.
41
+ */
42
+ export const createMemoryLoader = (files) => ({
43
+ resolveId(specifier, importer) {
44
+ const id = isRelative(specifier) ? resolve(dirname(importer), specifier) : specifier;
45
+ if (!(id in files)) {
46
+ throw new ContractError(`Cannot resolve import "${specifier}"`, [
47
+ error('UNRESOLVED_IMPORT', `Cannot resolve import "${specifier}" from ${importer}`, {
48
+ file: importer,
49
+ }),
50
+ ]);
51
+ }
52
+ return id;
53
+ },
54
+ load(id) {
55
+ if (!(id in files)) {
56
+ throw new ContractError(`Module not found: ${id}`, [
57
+ error('MODULE_NOT_FOUND', `Module not found: ${id}`, { file: id }),
58
+ ]);
59
+ }
60
+ return files[id];
61
+ },
62
+ });
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Runtime helpers for the Data Connect `Any` boundary.
3
+ *
4
+ * Data Connect stores JSON and embedded objects as the `Any` scalar, which
5
+ * erases the logical type. Generated adapters call {@link fromAny}/{@link toAny}
6
+ * to cross that boundary so application code keeps working with the logical
7
+ * TypeScript type. These are intentionally minimal (typed pass-through) because
8
+ * the Data Connect client already parses JSON; swap in {@link jsonStringAdapter}
9
+ * when a value is stored as a raw JSON string instead.
10
+ */
11
+ /** The type of a value once it has crossed into Data Connect's `Any` scalar. */
12
+ export type Any = unknown;
13
+ export interface JsonAdapter<T> {
14
+ toAny(value: T): Any;
15
+ fromAny(value: Any): T;
16
+ }
17
+ /** Restore a logical value from an `Any` field (typed pass-through). */
18
+ export declare const fromAny: <T>(value: Any) => T;
19
+ /** Send a logical value into an `Any` field (typed pass-through). */
20
+ export declare const toAny: <T>(value: T) => Any;
21
+ /** Adapter that trusts the client to have already parsed the JSON. */
22
+ export declare const identityAdapter: <T>() => JsonAdapter<T>;
23
+ /** Adapter for `Any` fields stored/received as raw JSON strings. */
24
+ export declare const jsonStringAdapter: <T>() => JsonAdapter<T>;
25
+ //# sourceMappingURL=data-connect-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-connect-adapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/runtime/data-connect-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,gFAAgF;AAChF,MAAM,MAAM,GAAG,GAAG,OAAO,CAAA;AAEzB,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,GAAG,CAAA;IACpB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAA;CACvB;AAED,wEAAwE;AACxE,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,GAAG,KAAG,CAAe,CAAA;AAEvD,qEAAqE;AACrE,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,GAAmB,CAAA;AAEvD,sEAAsE;AACtE,eAAO,MAAM,eAAe,GAAI,CAAC,OAAK,WAAW,CAAC,CAAC,CAGjD,CAAA;AAEF,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,GAAI,CAAC,OAAK,WAAW,CAAC,CAAC,CAGnD,CAAA"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Runtime helpers for the Data Connect `Any` boundary.
3
+ *
4
+ * Data Connect stores JSON and embedded objects as the `Any` scalar, which
5
+ * erases the logical type. Generated adapters call {@link fromAny}/{@link toAny}
6
+ * to cross that boundary so application code keeps working with the logical
7
+ * TypeScript type. These are intentionally minimal (typed pass-through) because
8
+ * the Data Connect client already parses JSON; swap in {@link jsonStringAdapter}
9
+ * when a value is stored as a raw JSON string instead.
10
+ */
11
+ /** Restore a logical value from an `Any` field (typed pass-through). */
12
+ export const fromAny = (value) => value;
13
+ /** Send a logical value into an `Any` field (typed pass-through). */
14
+ export const toAny = (value) => value;
15
+ /** Adapter that trusts the client to have already parsed the JSON. */
16
+ export const identityAdapter = () => ({
17
+ toAny: value => toAny(value),
18
+ fromAny: value => fromAny(value),
19
+ });
20
+ /** Adapter for `Any` fields stored/received as raw JSON strings. */
21
+ export const jsonStringAdapter = () => ({
22
+ toAny: value => JSON.stringify(value),
23
+ fromAny: value => (typeof value === 'string' ? JSON.parse(value) : value),
24
+ });
@@ -0,0 +1,3 @@
1
+ export type { Any, JsonAdapter } from './data-connect-adapter.js';
2
+ export { fromAny, toAny, identityAdapter, jsonStringAdapter } from './data-connect-adapter.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/runtime/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1 @@
1
+ export { fromAny, toAny, identityAdapter, jsonStringAdapter } from './data-connect-adapter.js';
@@ -0,0 +1,32 @@
1
+ import { Diagnostic } from '../diagnostics.js';
2
+ import { Ir } from '../ir/ir.js';
3
+ /**
4
+ * A validation rule inspects the IR and returns any problems it finds. Rules are
5
+ * independent and side-effect free so new checks can be added (open/closed)
6
+ * without touching existing ones or the runner.
7
+ */
8
+ export type ValidationRule = (ir: Ir) => Diagnostic[];
9
+ /** Every field type must resolve to a known scalar, enum, or model. */
10
+ export declare const unresolvedTypes: ValidationRule;
11
+ /** Enums must declare at least one value. */
12
+ export declare const emptyEnums: ValidationRule;
13
+ /** Enum values should be unique. */
14
+ export declare const duplicateEnumValues: ValidationRule;
15
+ /** Model and enum names must be valid identifiers so generators can emit them. */
16
+ export declare const validNames: ValidationRule;
17
+ /** Primary-identifier constraints: at most one, not a list, ideally required. */
18
+ export declare const idFields: ValidationRule;
19
+ /** Composite key and index field names must exist on the model. */
20
+ export declare const modelKeysAndIndexes: ValidationRule;
21
+ /** A `relation` flag is only meaningful on a model-typed field. */
22
+ export declare const relationFields: ValidationRule;
23
+ /** Operations must target a known model, use valid field names, and pair type/action correctly. */
24
+ export declare const operations: ValidationRule;
25
+ /** API request/response payloads that reference a model must reference a known one. */
26
+ export declare const apis: ValidationRule;
27
+ /** Firestore projections must derive from a known model with valid pick/omit fields. */
28
+ export declare const firestore: ValidationRule;
29
+ /** Union variants must be known models, each carrying the discriminant field. */
30
+ export declare const unions: ValidationRule;
31
+ export declare const DEFAULT_RULES: ValidationRule[];
32
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/lib/_internal/validation/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAa,EAAE,EAAgB,MAAM,aAAa,CAAA;AAEzD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,UAAU,EAAE,CAAA;AAIrD,uEAAuE;AACvE,eAAO,MAAM,eAAe,EAAE,cAU3B,CAAA;AAEH,6CAA6C;AAC7C,eAAO,MAAM,UAAU,EAAE,cAQpB,CAAA;AAEL,oCAAoC;AACpC,eAAO,MAAM,mBAAmB,EAAE,cAgB9B,CAAA;AAEJ,kFAAkF;AAClF,eAAO,MAAM,UAAU,EAAE,cAiCxB,CAAA;AAED,iFAAiF;AACjF,eAAO,MAAM,QAAQ,EAAE,cA+BnB,CAAA;AAEJ,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,cAkC9B,CAAA;AAEJ,mEAAmE;AACnE,eAAO,MAAM,cAAc,EAAE,cAU1B,CAAA;AAEH,mGAAmG;AACnG,eAAO,MAAM,UAAU,EAAE,cA+ErB,CAAA;AAEJ,uFAAuF;AACvF,eAAO,MAAM,IAAI,EAAE,cAYf,CAAA;AAEJ,wFAAwF;AACxF,eAAO,MAAM,SAAS,EAAE,cA+BpB,CAAA;AAEJ,iFAAiF;AACjF,eAAO,MAAM,MAAM,EAAE,cAoBjB,CAAA;AAEJ,eAAO,MAAM,aAAa,EAAE,cAAc,EAYzC,CAAA"}