@syncular/typegen 0.0.6-95 → 0.1.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 (45) hide show
  1. package/README.md +70 -1
  2. package/dist/app-contract.d.ts +154 -0
  3. package/dist/app-contract.d.ts.map +1 -0
  4. package/dist/app-contract.js +250 -0
  5. package/dist/app-contract.js.map +1 -0
  6. package/dist/checksums.d.ts +6 -0
  7. package/dist/checksums.d.ts.map +1 -0
  8. package/dist/checksums.js +173 -0
  9. package/dist/checksums.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +88 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/generate.d.ts +0 -1
  15. package/dist/generate.d.ts.map +1 -1
  16. package/dist/generate.js +4 -7
  17. package/dist/generate.js.map +1 -1
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +7 -5
  21. package/dist/index.js.map +1 -1
  22. package/dist/introspect-postgres.js +7 -5
  23. package/dist/introspect-postgres.js.map +1 -1
  24. package/dist/introspect-sqlite.d.ts.map +1 -1
  25. package/dist/introspect-sqlite.js +2 -1
  26. package/dist/introspect-sqlite.js.map +1 -1
  27. package/dist/introspect.js +2 -2
  28. package/dist/introspect.js.map +1 -1
  29. package/dist/map-types.js.map +1 -1
  30. package/dist/render.d.ts +1 -5
  31. package/dist/render.d.ts.map +1 -1
  32. package/dist/render.js +2 -21
  33. package/dist/render.js.map +1 -1
  34. package/dist/types.d.ts +18 -13
  35. package/dist/types.d.ts.map +1 -1
  36. package/package.json +16 -6
  37. package/src/app-contract.ts +531 -0
  38. package/src/checksums.ts +257 -0
  39. package/src/cli.ts +104 -0
  40. package/src/generate.ts +0 -5
  41. package/src/index.ts +2 -0
  42. package/src/introspect-postgres.ts +7 -7
  43. package/src/introspect-sqlite.ts +6 -1
  44. package/src/render.ts +3 -43
  45. package/src/types.ts +20 -17
package/README.md CHANGED
@@ -4,6 +4,9 @@ Generate TypeScript database types from your migrations.
4
4
 
5
5
  Supports SQLite and Postgres introspection with column-level codec type overrides via `codecs`.
6
6
 
7
+ It also includes build-time helpers for authoring the Rust-first Syncular app
8
+ contract and serializing it to the generated Rust-codegen handoff.
9
+
7
10
  ## Install
8
11
 
9
12
  ```bash
@@ -39,9 +42,75 @@ await generateTypes({
39
42
  });
40
43
  ```
41
44
 
45
+ ## App Contract Authoring
46
+
47
+ ```ts
48
+ import {
49
+ defineSyncularClient,
50
+ scope,
51
+ syncedTable,
52
+ writeSyncularCodegenJson,
53
+ yjsText,
54
+ } from '@syncular/typegen';
55
+
56
+ export const app = defineSyncularClient({
57
+ tables: {
58
+ notes: syncedTable({
59
+ table: 'notes',
60
+ serverVersion: 'server_version',
61
+ scopes: [
62
+ scope('user_id', {
63
+ column: 'owner_user_id',
64
+ source: 'actorId',
65
+ }),
66
+ ],
67
+ crdt: {
68
+ content: yjsText({ stateColumn: 'content_yjs_state' }),
69
+ },
70
+ }),
71
+ },
72
+ });
73
+
74
+ await writeSyncularCodegenJson(app, './generated/syncular.codegen.json');
75
+ ```
76
+
77
+ For same-shape starter apps, scaffold the initial contract from existing
78
+ migrations and then edit the generated authoring/config when client and server
79
+ shapes diverge:
80
+
81
+ ```ts
82
+ import {
83
+ scaffoldSyncularClientContract,
84
+ scope,
85
+ writeSyncularCodegenJson,
86
+ } from '@syncular/typegen';
87
+ import { migrations } from './migrations';
88
+
89
+ const app = await scaffoldSyncularClientContract({
90
+ migrations,
91
+ scopes: {
92
+ tasks: [scope('user_id', { source: 'actorId', required: true })],
93
+ },
94
+ });
95
+
96
+ await writeSyncularCodegenJson(app, './generated/syncular.codegen.json');
97
+ ```
98
+
99
+ For apps that keep the contract in a module, generate or check the
100
+ Rust-codegen handoff from the typed module:
101
+
102
+ ```bash
103
+ npx syncular generate --manifest-dir .
104
+ npx syncular generate --manifest-dir . --check
105
+ ```
106
+
107
+ This is a dev/build-time authoring layer. Generated Rust, Swift, Kotlin, JVM,
108
+ and browser clients consume generated artifacts, not the TypeScript authoring
109
+ module at runtime.
110
+
42
111
  ## Documentation
43
112
 
44
- - Typegen (in migrations guide): https://syncular.dev/docs/build/migrations#type-generation-with-synculartypegen
113
+ - Typegen (in migrations guide): https://syncular.dev/docs/features/migrations#type-generation-with-synculartypegen
45
114
 
46
115
  ## Links
47
116
 
@@ -0,0 +1,154 @@
1
+ import type { DefinedMigrations } from '@syncular/migrations';
2
+ import type { TableSchema, TypegenDialect } from './types';
3
+ export type SyncularScopeSource = 'actorId' | 'projectId';
4
+ export type SyncularCrdtYjsKind = 'text' | 'xml-fragment' | 'prosemirror';
5
+ export type SyncularCrdtYjsSyncMode = 'server-merge' | 'encrypted-update-log';
6
+ export interface SyncularScopeDefinition {
7
+ name?: string;
8
+ column: string;
9
+ source: SyncularScopeSource;
10
+ required?: boolean;
11
+ }
12
+ export interface SyncularCrdtYjsFieldDefinition {
13
+ field?: string;
14
+ stateColumn: string;
15
+ containerKey?: string;
16
+ rowIdField?: string;
17
+ kind?: SyncularCrdtYjsKind;
18
+ syncMode?: SyncularCrdtYjsSyncMode;
19
+ }
20
+ export interface SyncularEncryptedFieldDefinition {
21
+ field: string;
22
+ scope?: string;
23
+ rowIdField?: string;
24
+ }
25
+ export interface SyncedTableDefinition {
26
+ table: string;
27
+ subscriptionId?: string;
28
+ subscriptionParams?: Record<string, unknown>;
29
+ scopes?: readonly SyncularScopeDefinition[];
30
+ serverVersion: string;
31
+ blobColumns?: readonly string[];
32
+ crdt?: Record<string, SyncularCrdtYjsFieldDefinition>;
33
+ crdtYjsFields?: readonly SyncularCrdtYjsFieldDefinition[];
34
+ encryptedFields?: readonly SyncularEncryptedFieldDefinition[];
35
+ softDelete?: string;
36
+ sqliteWithoutRowid?: boolean;
37
+ }
38
+ export interface SyncularCountByReadModelDefinition {
39
+ name: string;
40
+ kind: 'countBy';
41
+ sourceTable: string;
42
+ outputTable: string;
43
+ dimensions: readonly string[];
44
+ countColumn?: string;
45
+ }
46
+ export type SyncularLocalReadModelDefinition = SyncularCountByReadModelDefinition;
47
+ export interface SyncularClientSchemaSupportDefinition {
48
+ minSupported?: number;
49
+ supported?: readonly number[];
50
+ }
51
+ export interface SyncularCodegenPathsDefinition {
52
+ schemaOutputPath?: string;
53
+ typescriptOutputPath?: string;
54
+ typescriptServerOutputPath?: string;
55
+ typescriptRuntimeImportPath?: string;
56
+ rustRuntimeCratePath?: string;
57
+ nativeSwiftOutputPath?: string;
58
+ nativeKotlinOutputPath?: string;
59
+ nativeAndroidKotlinOutputPath?: string;
60
+ nativeAndroidKotlinPackage?: string;
61
+ }
62
+ export interface DefineSyncularClientOptions<Tables extends Record<string, SyncedTableDefinition>> extends SyncularCodegenPathsDefinition {
63
+ migrations?: unknown;
64
+ tables: Tables;
65
+ localOnlyTables?: readonly string[];
66
+ localReadModels?: readonly SyncularLocalReadModelDefinition[];
67
+ clientSchemaSupport?: SyncularClientSchemaSupportDefinition;
68
+ }
69
+ export interface SyncularClientContract<Tables extends Record<string, SyncedTableDefinition> = Record<string, SyncedTableDefinition>> extends DefineSyncularClientOptions<Tables> {
70
+ readonly kind: 'syncular-client-contract';
71
+ }
72
+ export interface SyncularCodegenScopeConfig {
73
+ name?: string;
74
+ column: string;
75
+ source: SyncularScopeSource;
76
+ required?: boolean;
77
+ }
78
+ export interface SyncularCodegenCrdtYjsFieldConfig {
79
+ field: string;
80
+ stateColumn: string;
81
+ containerKey?: string;
82
+ rowIdField?: string;
83
+ kind?: SyncularCrdtYjsKind;
84
+ syncMode?: SyncularCrdtYjsSyncMode;
85
+ }
86
+ export interface SyncularCodegenEncryptedFieldConfig {
87
+ field: string;
88
+ scope?: string;
89
+ rowIdField?: string;
90
+ }
91
+ export interface SyncularCodegenTableConfig {
92
+ subscriptionId?: string;
93
+ subscriptionParams?: Record<string, unknown>;
94
+ scopes?: SyncularCodegenScopeConfig[];
95
+ serverVersionColumn: string;
96
+ blobColumns?: string[];
97
+ crdtYjsFields?: SyncularCodegenCrdtYjsFieldConfig[];
98
+ encryptedFields?: SyncularCodegenEncryptedFieldConfig[];
99
+ softDeleteColumn?: string;
100
+ sqliteWithoutRowid?: boolean;
101
+ }
102
+ export interface SyncularCodegenLocalReadModelConfig {
103
+ name: string;
104
+ kind: 'countBy';
105
+ sourceTable: string;
106
+ outputTable: string;
107
+ dimensions: string[];
108
+ countColumn: string;
109
+ }
110
+ export interface SyncularCodegenConfig extends SyncularCodegenPathsDefinition {
111
+ tables: Record<string, SyncularCodegenTableConfig>;
112
+ localOnlyTables?: string[];
113
+ localReadModels?: SyncularCodegenLocalReadModelConfig[];
114
+ clientSchemaSupport?: {
115
+ minSupported?: number;
116
+ supported?: number[];
117
+ };
118
+ }
119
+ export interface ScaffoldSyncularClientContractOptions<DB = unknown> extends SyncularCodegenPathsDefinition {
120
+ migrations: DefinedMigrations<DB>;
121
+ dialect?: TypegenDialect;
122
+ tables?: readonly string[];
123
+ scopes?: Record<string, readonly SyncularScopeDefinition[]>;
124
+ serverVersionColumn?: string | Record<string, string> | ((table: TableSchema) => string);
125
+ subscriptionId?: string | Record<string, string> | ((table: string) => string);
126
+ sqliteWithoutRowid?: boolean | Record<string, boolean> | ((table: TableSchema) => boolean);
127
+ clientSchemaSupport?: SyncularClientSchemaSupportDefinition;
128
+ }
129
+ export declare function defineSyncularClient<Tables extends Record<string, SyncedTableDefinition>>(options: DefineSyncularClientOptions<Tables>): SyncularClientContract<Tables>;
130
+ export declare function isSyncularClientContract(value: unknown): value is SyncularClientContract;
131
+ export declare function syncedTable(options: SyncedTableDefinition): SyncedTableDefinition;
132
+ export declare function scope(name: string, options: {
133
+ column?: string;
134
+ source: SyncularScopeSource;
135
+ required?: boolean;
136
+ }): SyncularScopeDefinition;
137
+ export declare function yjsText(options: Omit<SyncularCrdtYjsFieldDefinition, 'kind'>): SyncularCrdtYjsFieldDefinition;
138
+ export declare function encryptedField(field: string, options?: Omit<SyncularEncryptedFieldDefinition, 'field'>): SyncularEncryptedFieldDefinition;
139
+ export declare function countByReadModel(options: Omit<SyncularCountByReadModelDefinition, 'kind'>): SyncularCountByReadModelDefinition;
140
+ export declare function toSyncularCodegenConfig(contract: SyncularClientContract): SyncularCodegenConfig;
141
+ export declare function toSyncularCodegenJson(contract: SyncularClientContract, space?: number): string;
142
+ export declare function writeSyncularCodegenJson(contract: SyncularClientContract, outputPath?: string | URL, space?: number): Promise<void>;
143
+ export interface LoadSyncularClientContractOptions {
144
+ modulePath: string | URL;
145
+ exportName?: string;
146
+ }
147
+ export declare function loadSyncularClientContract(options: LoadSyncularClientContractOptions): Promise<SyncularClientContract>;
148
+ export interface WriteSyncularCodegenJsonFromModuleOptions extends LoadSyncularClientContractOptions {
149
+ outputPath?: string | URL;
150
+ space?: number;
151
+ }
152
+ export declare function writeSyncularCodegenJsonFromModule(options: WriteSyncularCodegenJsonFromModuleOptions): Promise<SyncularClientContract>;
153
+ export declare function scaffoldSyncularClientContract<DB = unknown>(options: ScaffoldSyncularClientContractOptions<DB>): Promise<SyncularClientContract<Record<string, SyncedTableDefinition>>>;
154
+ //# sourceMappingURL=app-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-contract.d.ts","sourceRoot":"","sources":["../src/app-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,250 @@
1
+ import { mkdir, writeFile } from 'node:fs/promises';
2
+ import { dirname, resolve } from 'node:path';
3
+ import { fileURLToPath, pathToFileURL } from 'node:url';
4
+ import { introspectCurrentSchema } from './introspect';
5
+ export function defineSyncularClient(options) {
6
+ return {
7
+ ...options,
8
+ kind: 'syncular-client-contract',
9
+ };
10
+ }
11
+ export function isSyncularClientContract(value) {
12
+ return (typeof value === 'object' &&
13
+ value !== null &&
14
+ value.kind === 'syncular-client-contract' &&
15
+ typeof value.tables === 'object' &&
16
+ value.tables !== null);
17
+ }
18
+ export function syncedTable(options) {
19
+ return { ...options };
20
+ }
21
+ export function scope(name, options) {
22
+ return {
23
+ name,
24
+ column: options.column ?? name,
25
+ source: options.source,
26
+ required: options.required,
27
+ };
28
+ }
29
+ export function yjsText(options) {
30
+ return { ...options, kind: 'text' };
31
+ }
32
+ export function encryptedField(field, options = {}) {
33
+ return { field, ...options };
34
+ }
35
+ export function countByReadModel(options) {
36
+ return { ...options, kind: 'countBy' };
37
+ }
38
+ export function toSyncularCodegenConfig(contract) {
39
+ const config = {
40
+ tables: Object.fromEntries(Object.values(contract.tables).map((table) => [
41
+ table.table,
42
+ toCodegenTable(table),
43
+ ])),
44
+ };
45
+ for (const key of CODEGEN_PATH_KEYS) {
46
+ const value = contract[key];
47
+ if (value !== undefined) {
48
+ config[key] = value;
49
+ }
50
+ }
51
+ if (contract.localOnlyTables && contract.localOnlyTables.length > 0) {
52
+ config.localOnlyTables = [...contract.localOnlyTables];
53
+ }
54
+ if (contract.localReadModels && contract.localReadModels.length > 0) {
55
+ config.localReadModels = contract.localReadModels.map((model) => ({
56
+ name: model.name,
57
+ kind: model.kind,
58
+ sourceTable: model.sourceTable,
59
+ outputTable: model.outputTable,
60
+ dimensions: [...model.dimensions],
61
+ countColumn: model.countColumn ?? 'row_count',
62
+ }));
63
+ }
64
+ if (contract.clientSchemaSupport) {
65
+ config.clientSchemaSupport = {
66
+ ...(contract.clientSchemaSupport.minSupported !== undefined
67
+ ? { minSupported: contract.clientSchemaSupport.minSupported }
68
+ : {}),
69
+ ...(contract.clientSchemaSupport.supported !== undefined
70
+ ? { supported: [...contract.clientSchemaSupport.supported] }
71
+ : {}),
72
+ };
73
+ }
74
+ return config;
75
+ }
76
+ export function toSyncularCodegenJson(contract, space = 2) {
77
+ return `${JSON.stringify(toSyncularCodegenConfig(contract), null, space)}\n`;
78
+ }
79
+ export async function writeSyncularCodegenJson(contract, outputPath = 'generated/syncular.codegen.json', space = 2) {
80
+ if (typeof outputPath === 'string') {
81
+ await mkdir(dirname(outputPath), { recursive: true });
82
+ }
83
+ else if (outputPath.protocol === 'file:') {
84
+ await mkdir(dirname(fileURLToPath(outputPath)), { recursive: true });
85
+ }
86
+ await writeFile(outputPath, toSyncularCodegenJson(contract, space));
87
+ }
88
+ export async function loadSyncularClientContract(options) {
89
+ const exportName = options.exportName ?? 'app';
90
+ const module = (await import(syncularContractModuleSpecifier(options.modulePath)));
91
+ const contract = module[exportName];
92
+ if (!isSyncularClientContract(contract)) {
93
+ throw new Error(`Syncular app contract module must export ${exportName} from defineSyncularClient(...)`);
94
+ }
95
+ return contract;
96
+ }
97
+ export async function writeSyncularCodegenJsonFromModule(options) {
98
+ const contract = await loadSyncularClientContract(options);
99
+ await writeSyncularCodegenJson(contract, options.outputPath ?? 'generated/syncular.codegen.json', options.space);
100
+ return contract;
101
+ }
102
+ export async function scaffoldSyncularClientContract(options) {
103
+ const schema = await introspectCurrentSchema(options.migrations, options.dialect ?? 'sqlite', options.tables ? [...options.tables] : undefined);
104
+ const tables = Object.fromEntries(schema.tables.map((table) => {
105
+ const serverVersion = resolveServerVersionColumn(table, options.serverVersionColumn);
106
+ assertColumnExists(table, serverVersion, 'server version');
107
+ const synced = syncedTable({
108
+ table: table.name,
109
+ subscriptionId: resolveStringOption(table.name, options.subscriptionId, `sub-${table.name}`),
110
+ serverVersion,
111
+ scopes: options.scopes?.[table.name] ?? [],
112
+ sqliteWithoutRowid: resolveBooleanOption(table, options.sqliteWithoutRowid),
113
+ });
114
+ return [table.name, synced];
115
+ }));
116
+ return defineSyncularClient({
117
+ ...pickCodegenPathOptions(options),
118
+ clientSchemaSupport: options.clientSchemaSupport,
119
+ tables,
120
+ });
121
+ }
122
+ const CODEGEN_PATH_KEYS = [
123
+ 'schemaOutputPath',
124
+ 'typescriptOutputPath',
125
+ 'typescriptServerOutputPath',
126
+ 'typescriptRuntimeImportPath',
127
+ 'rustRuntimeCratePath',
128
+ 'nativeSwiftOutputPath',
129
+ 'nativeKotlinOutputPath',
130
+ 'nativeAndroidKotlinOutputPath',
131
+ 'nativeAndroidKotlinPackage',
132
+ ];
133
+ function toCodegenTable(table) {
134
+ const config = {
135
+ serverVersionColumn: table.serverVersion,
136
+ };
137
+ if (table.subscriptionId !== undefined) {
138
+ config.subscriptionId = table.subscriptionId;
139
+ }
140
+ if (table.subscriptionParams !== undefined) {
141
+ config.subscriptionParams = table.subscriptionParams;
142
+ }
143
+ if (table.scopes && table.scopes.length > 0) {
144
+ config.scopes = table.scopes.map((item) => ({
145
+ ...(item.name !== undefined ? { name: item.name } : {}),
146
+ column: item.column,
147
+ source: item.source,
148
+ ...(item.required !== undefined ? { required: item.required } : {}),
149
+ }));
150
+ }
151
+ if (table.blobColumns && table.blobColumns.length > 0) {
152
+ config.blobColumns = [...table.blobColumns];
153
+ }
154
+ const crdtFields = [
155
+ ...Object.entries(table.crdt ?? {}).map(([field, definition]) => ({
156
+ field,
157
+ ...definition,
158
+ })),
159
+ ...(table.crdtYjsFields ?? []),
160
+ ];
161
+ if (crdtFields.length > 0) {
162
+ config.crdtYjsFields = crdtFields.map((field) => ({
163
+ field: field.field ?? '',
164
+ stateColumn: field.stateColumn,
165
+ ...(field.containerKey !== undefined
166
+ ? { containerKey: field.containerKey }
167
+ : {}),
168
+ ...(field.rowIdField !== undefined
169
+ ? { rowIdField: field.rowIdField }
170
+ : {}),
171
+ ...(field.kind !== undefined ? { kind: field.kind } : {}),
172
+ ...(field.syncMode !== undefined ? { syncMode: field.syncMode } : {}),
173
+ }));
174
+ }
175
+ if (table.encryptedFields && table.encryptedFields.length > 0) {
176
+ config.encryptedFields = table.encryptedFields.map((field) => ({
177
+ field: field.field,
178
+ ...(field.scope !== undefined ? { scope: field.scope } : {}),
179
+ ...(field.rowIdField !== undefined
180
+ ? { rowIdField: field.rowIdField }
181
+ : {}),
182
+ }));
183
+ }
184
+ if (table.softDelete !== undefined) {
185
+ config.softDeleteColumn = table.softDelete;
186
+ }
187
+ if (table.sqliteWithoutRowid !== undefined) {
188
+ config.sqliteWithoutRowid = table.sqliteWithoutRowid;
189
+ }
190
+ return config;
191
+ }
192
+ function pickCodegenPathOptions(options) {
193
+ const picked = {};
194
+ for (const key of CODEGEN_PATH_KEYS) {
195
+ const value = options[key];
196
+ if (value !== undefined) {
197
+ picked[key] = value;
198
+ }
199
+ }
200
+ return picked;
201
+ }
202
+ function syncularContractModuleSpecifier(modulePath) {
203
+ if (modulePath instanceof URL)
204
+ return modulePath.href;
205
+ try {
206
+ const parsed = new URL(modulePath);
207
+ if (parsed.protocol === 'file:')
208
+ return parsed.href;
209
+ }
210
+ catch {
211
+ // Treat non-URL strings as filesystem paths or package specifiers below.
212
+ }
213
+ if (syncularLooksLikeLocalModulePath(modulePath)) {
214
+ return pathToFileURL(resolve(modulePath)).href;
215
+ }
216
+ return modulePath;
217
+ }
218
+ function syncularLooksLikeLocalModulePath(modulePath) {
219
+ return (modulePath.startsWith('.') ||
220
+ modulePath.startsWith('/') ||
221
+ (!modulePath.startsWith('@') && modulePath.includes('/')) ||
222
+ /\.(?:cjs|cts|js|jsx|mjs|mts|ts|tsx)$/.test(modulePath));
223
+ }
224
+ function resolveServerVersionColumn(table, option) {
225
+ if (typeof option === 'function')
226
+ return option(table);
227
+ if (typeof option === 'string')
228
+ return option;
229
+ return option?.[table.name] ?? 'server_version';
230
+ }
231
+ function resolveStringOption(table, option, fallback) {
232
+ if (typeof option === 'function')
233
+ return option(table);
234
+ if (typeof option === 'string')
235
+ return option;
236
+ return option?.[table] ?? fallback;
237
+ }
238
+ function resolveBooleanOption(table, option) {
239
+ if (typeof option === 'function')
240
+ return option(table);
241
+ if (typeof option === 'boolean')
242
+ return option;
243
+ return option?.[table.name];
244
+ }
245
+ function assertColumnExists(table, column, label) {
246
+ if (table.columns.some((candidate) => candidate.name === column))
247
+ return;
248
+ throw new Error(`Cannot scaffold Syncular table ${table.name}: ${label} column ${column} does not exist`);
249
+ }
250
+ //# sourceMappingURL=app-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-contract.js","sourceRoot":"","sources":["../src/app-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAqKvD,MAAM,UAAU,oBAAoB,CAGlC,OAA4C;IAE5C,OAAO;QACL,GAAG,OAAO;QACV,IAAI,EAAE,0BAA0B;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAA4B,CAAC,IAAI,KAAK,0BAA0B;QACjE,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ;QACzD,KAA8B,CAAC,MAAM,KAAK,IAAI,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,OAA8B;IAE9B,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,IAAY,EACZ,OAIC;IAED,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,OAAqD;IAErD,OAAO,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,OAAO,GAAoD,EAAE;IAE7D,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAyD;IAEzD,OAAO,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAAgC;IAEhC,MAAM,MAAM,GAA0B;QACpC,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAC5C,KAAK,CAAC,KAAK;YACX,cAAc,CAAC,KAAK,CAAC;SACtB,CAAC,CACH;KACF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChE,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;YACjC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,WAAW;SAC9C,CAAC,CAAC,CAAC;IACN,CAAC;IAED,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACjC,MAAM,CAAC,mBAAmB,GAAG;YAC3B,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAY,KAAK,SAAS;gBACzD,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE;gBAC7D,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,KAAK,SAAS;gBACtD,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;gBAC5D,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAgC,EAChC,KAAK,GAAG,CAAC;IAET,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAgC,EAChC,UAAU,GAAiB,iCAAiC,EAC5D,KAAK,GAAG,CAAC;IAET,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC3C,MAAM,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,SAAS,CAAC,UAAU,EAAE,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACtE,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA0C;IAE1C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAC1B,+BAA+B,CAAC,OAAO,CAAC,UAAU,CAAC,CACpD,CAA4B,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,4CAA4C,UAAU,iCAAiC,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,OAAkD;IAElD,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,wBAAwB,CAC5B,QAAQ,EACR,OAAO,CAAC,UAAU,IAAI,iCAAiC,EACvD,OAAO,CAAC,KAAK,CACd,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,OAAkD;IAElD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,OAAO,IAAI,QAAQ,EAC3B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CACjD,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,aAAa,GAAG,0BAA0B,CAC9C,KAAK,EACL,OAAO,CAAC,mBAAmB,CAC5B,CAAC;QACF,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,WAAW,CAAC;YACzB,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,cAAc,EAAE,mBAAmB,CACjC,KAAK,CAAC,IAAI,EACV,OAAO,CAAC,cAAc,EACtB,OAAO,KAAK,CAAC,IAAI,EAAE,CACpB;YACD,aAAa;YACb,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;YAC1C,kBAAkB,EAAE,oBAAoB,CACtC,KAAK,EACL,OAAO,CAAC,kBAAkB,CAC3B;SACF,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,oBAAoB,CAAC;QAC1B,GAAG,sBAAsB,CAAC,OAAO,CAAC;QAClC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,iBAAiB,GAAG;IACxB,kBAAkB;IAClB,sBAAsB;IACtB,4BAA4B;IAC5B,6BAA6B;IAC7B,sBAAsB;IACtB,uBAAuB;IACvB,wBAAwB;IACxB,+BAA+B;IAC/B,4BAA4B;CACwC,CAAC;AAEvE,SAAS,cAAc,CACrB,KAA4B;IAE5B,MAAM,MAAM,GAA+B;QACzC,mBAAmB,EAAE,KAAK,CAAC,aAAa;KACzC,CAAC;IAEF,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC/C,CAAC;IACD,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;IACvD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC,CAAC,CAAC;IACN,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,KAAK;YACL,GAAG,UAAU;SACd,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;KAC/B,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS;gBAClC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE;gBACtC,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS;gBAChC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;gBAClC,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC,CAAC,CAAC;IACN,CAAC;IACD,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7D,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS;gBAChC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;gBAClC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC,CAAC;IACN,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAAC;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;IACvD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAuC;IAEvC,MAAM,MAAM,GAAmC,EAAE,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,+BAA+B,CAAC,UAAwB;IAC/D,IAAI,UAAU,YAAY,GAAG;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;IACD,IAAI,gCAAgC,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,OAAO,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,gCAAgC,CAAC,UAAkB;IAC1D,OAAO,CACL,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1B,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1B,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACzD,sCAAsC,CAAC,IAAI,CAAC,UAAU,CAAC,CACxD,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAkB,EAClB,MAAoE;IAEpE,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC;AAClD,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAa,EACb,MAA+D,EAC/D,QAAgB;IAEhB,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC;AACrC,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAkB,EAClB,MAAmE;IAEnE,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,OAAO,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC/C,OAAO,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAkB,EAClB,MAAc,EACd,KAAa;IAEb,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC;QAAE,OAAO;IACzE,MAAM,IAAI,KAAK,CACb,kCAAkC,KAAK,CAAC,IAAI,KAAK,KAAK,WAAW,MAAM,iBAAiB,CACzF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { DefinedMigrations, MigrationChecksums } from '@syncular/migrations';
2
+ import type { GenerateMigrationChecksumsOptions, GenerateMigrationChecksumsResult, TypegenDialect } from './types';
3
+ export declare function createMigrationChecksums<DB>(migrations: DefinedMigrations<DB>, dialect?: TypegenDialect): Promise<MigrationChecksums>;
4
+ export declare function renderMigrationChecksums(checksums: MigrationChecksums): string;
5
+ export declare function generateMigrationChecksums<DB>(options: GenerateMigrationChecksumsOptions<DB>): Promise<GenerateMigrationChecksumsResult>;
6
+ //# sourceMappingURL=checksums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checksums.d.ts","sourceRoot":"","sources":["../src/checksums.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EACV,iCAAiC,EACjC,gCAAgC,EAChC,cAAc,EACf,MAAM,SAAS,CAAC;AAqLjB,wBAAsB,wBAAwB,CAAC,EAAE,EAC/C,UAAU,EAAE,iBAAiB,CAAC,EAAE,CAAC,EACjC,OAAO,GAAE,cAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAgB7B;AAED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,kBAAkB,GAC5B,MAAM,CAoBR;AAED,wBAAsB,0BAA0B,CAAC,EAAE,EACjD,OAAO,EAAE,iCAAiC,CAAC,EAAE,CAAC,GAC7C,OAAO,CAAC,gCAAgC,CAAC,CAc3C"}