@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.
- package/README.md +70 -1
- package/dist/app-contract.d.ts +154 -0
- package/dist/app-contract.d.ts.map +1 -0
- package/dist/app-contract.js +250 -0
- package/dist/app-contract.js.map +1 -0
- package/dist/checksums.d.ts +6 -0
- package/dist/checksums.d.ts.map +1 -0
- package/dist/checksums.js +173 -0
- package/dist/checksums.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +88 -0
- package/dist/cli.js.map +1 -0
- package/dist/generate.d.ts +0 -1
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +4 -7
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/introspect-postgres.js +7 -5
- package/dist/introspect-postgres.js.map +1 -1
- package/dist/introspect-sqlite.d.ts.map +1 -1
- package/dist/introspect-sqlite.js +2 -1
- package/dist/introspect-sqlite.js.map +1 -1
- package/dist/introspect.js +2 -2
- package/dist/introspect.js.map +1 -1
- package/dist/map-types.js.map +1 -1
- package/dist/render.d.ts +1 -5
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +2 -21
- package/dist/render.js.map +1 -1
- package/dist/types.d.ts +18 -13
- package/dist/types.d.ts.map +1 -1
- package/package.json +16 -6
- package/src/app-contract.ts +531 -0
- package/src/checksums.ts +257 -0
- package/src/cli.ts +104 -0
- package/src/generate.ts +0 -5
- package/src/index.ts +2 -0
- package/src/introspect-postgres.ts +7 -7
- package/src/introspect-sqlite.ts +6 -1
- package/src/render.ts +3 -43
- 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/
|
|
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":"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"}
|
|
@@ -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"}
|