@memberjunction/integration-schema-builder 0.0.1 → 5.8.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/dist/AccessControl.d.ts +26 -0
- package/dist/AccessControl.d.ts.map +1 -0
- package/dist/AccessControl.js +68 -0
- package/dist/AccessControl.js.map +1 -0
- package/dist/DDLGenerator.d.ts +30 -0
- package/dist/DDLGenerator.d.ts.map +1 -0
- package/dist/DDLGenerator.js +107 -0
- package/dist/DDLGenerator.js.map +1 -0
- package/dist/MetadataEmitter.d.ts +23 -0
- package/dist/MetadataEmitter.d.ts.map +1 -0
- package/dist/MetadataEmitter.js +52 -0
- package/dist/MetadataEmitter.js.map +1 -0
- package/dist/MigrationFileWriter.d.ts +25 -0
- package/dist/MigrationFileWriter.d.ts.map +1 -0
- package/dist/MigrationFileWriter.js +67 -0
- package/dist/MigrationFileWriter.js.map +1 -0
- package/dist/SchemaBuilder.d.ts +27 -0
- package/dist/SchemaBuilder.d.ts.map +1 -0
- package/dist/SchemaBuilder.js +167 -0
- package/dist/SchemaBuilder.js.map +1 -0
- package/dist/SchemaEvolution.d.ts +27 -0
- package/dist/SchemaEvolution.d.ts.map +1 -0
- package/dist/SchemaEvolution.js +91 -0
- package/dist/SchemaEvolution.js.map +1 -0
- package/dist/SoftFKConfigEmitter.d.ts +46 -0
- package/dist/SoftFKConfigEmitter.d.ts.map +1 -0
- package/dist/SoftFKConfigEmitter.js +109 -0
- package/dist/SoftFKConfigEmitter.js.map +1 -0
- package/dist/TypeMapper.d.ts +25 -0
- package/dist/TypeMapper.d.ts.map +1 -0
- package/dist/TypeMapper.js +72 -0
- package/dist/TypeMapper.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +172 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +8 -0
- package/dist/interfaces.js.map +1 -0
- package/package.json +28 -7
- package/README.md +0 -45
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaBuilder.js","sourceRoot":"","sources":["../src/SchemaBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SchemaEvolution — diff engine for detecting changes between source and existing schema.
|
|
3
|
+
* Compares source fields against existing table columns, produces incremental DDL.
|
|
4
|
+
*/
|
|
5
|
+
import type { DatabasePlatform, ExistingTableInfo, SchemaDiff, SoftFKEntry, SourceObjectInfo, TargetTableConfig } from './interfaces.js';
|
|
6
|
+
/**
|
|
7
|
+
* Computes schema diffs and generates ALTER TABLE migration SQL.
|
|
8
|
+
*/
|
|
9
|
+
export declare class SchemaEvolution {
|
|
10
|
+
private readonly DDL;
|
|
11
|
+
private readonly Mapper;
|
|
12
|
+
/**
|
|
13
|
+
* Diff a source object against an existing target table.
|
|
14
|
+
* Returns added, modified, and removed columns.
|
|
15
|
+
*/
|
|
16
|
+
DiffSchema(source: SourceObjectInfo, targetConfig: TargetTableConfig, existing: ExistingTableInfo, platform: DatabasePlatform): SchemaDiff;
|
|
17
|
+
/**
|
|
18
|
+
* Generate ALTER TABLE SQL for a schema diff.
|
|
19
|
+
*/
|
|
20
|
+
GenerateEvolutionMigration(diff: SchemaDiff, schemaName: string, tableName: string, platform: DatabasePlatform): string;
|
|
21
|
+
/**
|
|
22
|
+
* Identify new soft FK entries from a diff (for added FK columns).
|
|
23
|
+
*/
|
|
24
|
+
GenerateEvolutionSoftFKUpdates(diff: SchemaDiff, targetConfig: TargetTableConfig): SoftFKEntry[];
|
|
25
|
+
private HasColumnChanged;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=SchemaEvolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaEvolution.d.ts","sourceRoot":"","sources":["../src/SchemaEvolution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAER,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,gBAAgB,EAEhB,iBAAiB,EACpB,MAAM,iBAAiB,CAAC;AAIzB;;GAEG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAsB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAE3C;;;OAGG;IACH,UAAU,CACN,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,iBAAiB,EAC/B,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,gBAAgB,GAC3B,UAAU;IA6Cb;;OAEG;IACH,0BAA0B,CACtB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,gBAAgB,GAC3B,MAAM;IAkBT;;OAEG;IACH,8BAA8B,CAC1B,IAAI,EAAE,UAAU,EAChB,YAAY,EAAE,iBAAiB,GAChC,WAAW,EAAE;IAMhB,OAAO,CAAC,gBAAgB;CAS3B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { DDLGenerator } from './DDLGenerator.js';
|
|
2
|
+
import { TypeMapper } from './TypeMapper.js';
|
|
3
|
+
/**
|
|
4
|
+
* Computes schema diffs and generates ALTER TABLE migration SQL.
|
|
5
|
+
*/
|
|
6
|
+
export class SchemaEvolution {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.DDL = new DDLGenerator();
|
|
9
|
+
this.Mapper = new TypeMapper();
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Diff a source object against an existing target table.
|
|
13
|
+
* Returns added, modified, and removed columns.
|
|
14
|
+
*/
|
|
15
|
+
DiffSchema(source, targetConfig, existing, platform) {
|
|
16
|
+
const existingNames = new Set(existing.Columns.map(c => c.Name.toLowerCase()));
|
|
17
|
+
const sourceColMap = new Map(targetConfig.Columns.map(c => [c.TargetColumnName.toLowerCase(), c]));
|
|
18
|
+
// Standard columns to ignore in the diff (managed by Schema Builder / CodeGen)
|
|
19
|
+
const standardCols = new Set(['id', 'sourcerecordid', 'sourcejson', 'syncstatus', 'lastsyncedat',
|
|
20
|
+
'__mj_createdat', '__mj_updatedat']);
|
|
21
|
+
const added = [];
|
|
22
|
+
const modified = [];
|
|
23
|
+
const removed = [];
|
|
24
|
+
// Find added and modified columns
|
|
25
|
+
for (const col of targetConfig.Columns) {
|
|
26
|
+
const lowerName = col.TargetColumnName.toLowerCase();
|
|
27
|
+
if (standardCols.has(lowerName))
|
|
28
|
+
continue;
|
|
29
|
+
if (!existingNames.has(lowerName)) {
|
|
30
|
+
added.push(col);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const existingCol = existing.Columns.find(c => c.Name.toLowerCase() === lowerName);
|
|
34
|
+
if (existingCol && this.HasColumnChanged(existingCol, col)) {
|
|
35
|
+
modified.push({
|
|
36
|
+
ColumnName: col.TargetColumnName,
|
|
37
|
+
OldType: existingCol.SqlType,
|
|
38
|
+
NewType: col.TargetSqlType,
|
|
39
|
+
OldNullable: existingCol.IsNullable,
|
|
40
|
+
NewNullable: col.IsNullable,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Find removed columns (in existing but not in source config)
|
|
46
|
+
for (const existingCol of existing.Columns) {
|
|
47
|
+
const lowerName = existingCol.Name.toLowerCase();
|
|
48
|
+
if (standardCols.has(lowerName))
|
|
49
|
+
continue;
|
|
50
|
+
if (!sourceColMap.has(lowerName)) {
|
|
51
|
+
removed.push(existingCol.Name);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return { AddedColumns: added, ModifiedColumns: modified, RemovedColumns: removed };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Generate ALTER TABLE SQL for a schema diff.
|
|
58
|
+
*/
|
|
59
|
+
GenerateEvolutionMigration(diff, schemaName, tableName, platform) {
|
|
60
|
+
const statements = [];
|
|
61
|
+
for (const col of diff.AddedColumns) {
|
|
62
|
+
statements.push(this.DDL.GenerateAlterTableAddColumn(schemaName, tableName, col, platform));
|
|
63
|
+
}
|
|
64
|
+
for (const mod of diff.ModifiedColumns) {
|
|
65
|
+
statements.push(this.DDL.GenerateAlterTableAlterColumn(schemaName, tableName, mod, platform));
|
|
66
|
+
}
|
|
67
|
+
for (const colName of diff.RemovedColumns) {
|
|
68
|
+
statements.push(`-- DEPRECATED: Column [${colName}] no longer exists in source. Consider removing after grace period.`);
|
|
69
|
+
}
|
|
70
|
+
return statements.join('\n\n');
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Identify new soft FK entries from a diff (for added FK columns).
|
|
74
|
+
*/
|
|
75
|
+
GenerateEvolutionSoftFKUpdates(diff, targetConfig) {
|
|
76
|
+
// New FK entries come from added columns that have corresponding soft FK definitions
|
|
77
|
+
const addedNames = new Set(diff.AddedColumns.map(c => c.TargetColumnName));
|
|
78
|
+
return targetConfig.SoftForeignKeys.filter(fk => addedNames.has(fk.FieldName));
|
|
79
|
+
}
|
|
80
|
+
HasColumnChanged(existing, target) {
|
|
81
|
+
// Normalize types for comparison (case-insensitive, strip whitespace)
|
|
82
|
+
const normalizedExisting = existing.SqlType.toLowerCase().replace(/\s+/g, '');
|
|
83
|
+
const normalizedTarget = target.TargetSqlType.toLowerCase().replace(/\s+/g, '');
|
|
84
|
+
if (normalizedExisting !== normalizedTarget)
|
|
85
|
+
return true;
|
|
86
|
+
if (existing.IsNullable !== target.IsNullable)
|
|
87
|
+
return true;
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=SchemaEvolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaEvolution.js","sourceRoot":"","sources":["../src/SchemaEvolution.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,OAAO,eAAe;IAA5B;QACqB,QAAG,GAAG,IAAI,YAAY,EAAE,CAAC;QACzB,WAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAuG/C,CAAC;IArGG;;;OAGG;IACH,UAAU,CACN,MAAwB,EACxB,YAA+B,EAC/B,QAA2B,EAC3B,QAA0B;QAE1B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnG,+EAA+E;QAC/E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc;YACjE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAEpE,MAAM,KAAK,GAAyB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAyB,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,kCAAkC;QAClC,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;YACrD,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS;YAE1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACJ,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC;gBACnF,IAAI,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;oBACzD,QAAQ,CAAC,IAAI,CAAC;wBACV,UAAU,EAAE,GAAG,CAAC,gBAAgB;wBAChC,OAAO,EAAE,WAAW,CAAC,OAAO;wBAC5B,OAAO,EAAE,GAAG,CAAC,aAAa;wBAC1B,WAAW,EAAE,WAAW,CAAC,UAAU;wBACnC,WAAW,EAAE,GAAG,CAAC,UAAU;qBAC9B,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;QAED,8DAA8D;QAC9D,KAAK,MAAM,WAAW,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS;YAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,0BAA0B,CACtB,IAAgB,EAChB,UAAkB,EAClB,SAAiB,EACjB,QAA0B;QAE1B,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChG,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACrC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClG,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxC,UAAU,CAAC,IAAI,CAAC,0BAA0B,OAAO,qEAAqE,CAAC,CAAC;QAC5H,CAAC;QAED,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,8BAA8B,CAC1B,IAAgB,EAChB,YAA+B;QAE/B,qFAAqF;QACrF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC3E,OAAO,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACnF,CAAC;IAEO,gBAAgB,CAAC,QAAkD,EAAE,MAA0B;QACnG,sEAAsE;QACtE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEhF,IAAI,kBAAkB,KAAK,gBAAgB;YAAE,OAAO,IAAI,CAAC;QACzD,IAAI,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC3D,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SoftFKConfigEmitter — reads/merges additionalSchemaInfo JSON for soft foreign keys.
|
|
3
|
+
* File-emission only — produces updated JSON content, never writes to disk directly.
|
|
4
|
+
*/
|
|
5
|
+
import type { EmittedFile, SoftFKEntry, SourceSchemaInfo, TargetTableConfig } from './interfaces.js';
|
|
6
|
+
/** Shape of one table entry in additionalSchemaInfo. */
|
|
7
|
+
interface SchemaInfoTableEntry {
|
|
8
|
+
TableName: string;
|
|
9
|
+
PrimaryKey?: Array<{
|
|
10
|
+
FieldName: string;
|
|
11
|
+
}>;
|
|
12
|
+
ForeignKeys?: Array<{
|
|
13
|
+
FieldName: string;
|
|
14
|
+
SchemaName: string;
|
|
15
|
+
RelatedTable: string;
|
|
16
|
+
RelatedField: string;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
/** The top-level additionalSchemaInfo structure: schema name → table entries. */
|
|
20
|
+
type AdditionalSchemaInfo = Record<string, SchemaInfoTableEntry[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Manages soft FK definitions in the additionalSchemaInfo JSON file.
|
|
23
|
+
*/
|
|
24
|
+
export declare class SoftFKConfigEmitter {
|
|
25
|
+
/**
|
|
26
|
+
* Parse existing additionalSchemaInfo JSON content.
|
|
27
|
+
* Returns empty object if content is empty/null.
|
|
28
|
+
*/
|
|
29
|
+
ParseExistingConfig(jsonContent: string | null): AdditionalSchemaInfo;
|
|
30
|
+
/**
|
|
31
|
+
* Merge new soft FK entries into an existing config.
|
|
32
|
+
* Deduplicates — won't add the same FK twice.
|
|
33
|
+
*/
|
|
34
|
+
MergeSchemaConfig(existing: AdditionalSchemaInfo, newEntries: SoftFKEntry[]): AdditionalSchemaInfo;
|
|
35
|
+
/**
|
|
36
|
+
* Extract soft FK entries from source schema relationships + target configs.
|
|
37
|
+
* Maps source relationship field names → target column names using the target config.
|
|
38
|
+
*/
|
|
39
|
+
GenerateConfigEntries(sourceSchema: SourceSchemaInfo, targetConfigs: TargetTableConfig[]): SoftFKEntry[];
|
|
40
|
+
/**
|
|
41
|
+
* Produce an EmittedFile with the updated additionalSchemaInfo JSON.
|
|
42
|
+
*/
|
|
43
|
+
EmitConfigFile(configPath: string, mergedConfig: AdditionalSchemaInfo): EmittedFile;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=SoftFKConfigEmitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SoftFKConfigEmitter.d.ts","sourceRoot":"","sources":["../src/SoftFKConfigEmitter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAErG,wDAAwD;AACxD,UAAU,oBAAoB;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,KAAK,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACN;AAED,iFAAiF;AACjF,KAAK,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAEnE;;GAEG;AACH,qBAAa,mBAAmB;IAC5B;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,oBAAoB;IAOrE;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,oBAAoB;IAyClG;;;OAGG;IACH,qBAAqB,CACjB,YAAY,EAAE,gBAAgB,EAC9B,aAAa,EAAE,iBAAiB,EAAE,GACnC,WAAW,EAAE;IAqDhB;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,GAAG,WAAW;CAOtF"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manages soft FK definitions in the additionalSchemaInfo JSON file.
|
|
3
|
+
*/
|
|
4
|
+
export class SoftFKConfigEmitter {
|
|
5
|
+
/**
|
|
6
|
+
* Parse existing additionalSchemaInfo JSON content.
|
|
7
|
+
* Returns empty object if content is empty/null.
|
|
8
|
+
*/
|
|
9
|
+
ParseExistingConfig(jsonContent) {
|
|
10
|
+
if (!jsonContent || jsonContent.trim() === '') {
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
return JSON.parse(jsonContent);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Merge new soft FK entries into an existing config.
|
|
17
|
+
* Deduplicates — won't add the same FK twice.
|
|
18
|
+
*/
|
|
19
|
+
MergeSchemaConfig(existing, newEntries) {
|
|
20
|
+
const result = JSON.parse(JSON.stringify(existing));
|
|
21
|
+
for (const entry of newEntries) {
|
|
22
|
+
if (!result[entry.SchemaName]) {
|
|
23
|
+
result[entry.SchemaName] = [];
|
|
24
|
+
}
|
|
25
|
+
const schemaEntries = result[entry.SchemaName];
|
|
26
|
+
let tableEntry = schemaEntries.find(t => t.TableName === entry.TableName);
|
|
27
|
+
if (!tableEntry) {
|
|
28
|
+
tableEntry = { TableName: entry.TableName, ForeignKeys: [] };
|
|
29
|
+
schemaEntries.push(tableEntry);
|
|
30
|
+
}
|
|
31
|
+
if (!tableEntry.ForeignKeys) {
|
|
32
|
+
tableEntry.ForeignKeys = [];
|
|
33
|
+
}
|
|
34
|
+
// Deduplicate: skip if this exact FK already exists
|
|
35
|
+
const exists = tableEntry.ForeignKeys.some(fk => fk.FieldName === entry.FieldName &&
|
|
36
|
+
fk.SchemaName === entry.TargetSchemaName &&
|
|
37
|
+
fk.RelatedTable === entry.TargetTableName &&
|
|
38
|
+
fk.RelatedField === entry.TargetFieldName);
|
|
39
|
+
if (!exists) {
|
|
40
|
+
tableEntry.ForeignKeys.push({
|
|
41
|
+
FieldName: entry.FieldName,
|
|
42
|
+
SchemaName: entry.TargetSchemaName,
|
|
43
|
+
RelatedTable: entry.TargetTableName,
|
|
44
|
+
RelatedField: entry.TargetFieldName,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Extract soft FK entries from source schema relationships + target configs.
|
|
52
|
+
* Maps source relationship field names → target column names using the target config.
|
|
53
|
+
*/
|
|
54
|
+
GenerateConfigEntries(sourceSchema, targetConfigs) {
|
|
55
|
+
const entries = [];
|
|
56
|
+
// Also collect entries already defined directly on TargetTableConfig
|
|
57
|
+
for (const config of targetConfigs) {
|
|
58
|
+
if (config.SoftForeignKeys) {
|
|
59
|
+
entries.push(...config.SoftForeignKeys);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Build a map of source object name → target config for FK resolution
|
|
63
|
+
const sourceToTarget = new Map();
|
|
64
|
+
for (const config of targetConfigs) {
|
|
65
|
+
sourceToTarget.set(config.SourceObjectName, config);
|
|
66
|
+
}
|
|
67
|
+
// Walk source relationships and map them to target columns
|
|
68
|
+
for (const sourceObj of sourceSchema.Objects) {
|
|
69
|
+
const targetConfig = sourceToTarget.get(sourceObj.ExternalName);
|
|
70
|
+
if (!targetConfig)
|
|
71
|
+
continue;
|
|
72
|
+
for (const rel of sourceObj.Relationships) {
|
|
73
|
+
const targetOfFK = sourceToTarget.get(rel.TargetObject);
|
|
74
|
+
if (!targetOfFK)
|
|
75
|
+
continue; // Target object not being imported
|
|
76
|
+
// Find the mapped column name for this FK field
|
|
77
|
+
const columnConfig = targetConfig.Columns.find(c => c.SourceFieldName === rel.FieldName);
|
|
78
|
+
const columnName = columnConfig ? columnConfig.TargetColumnName : rel.FieldName;
|
|
79
|
+
const entry = {
|
|
80
|
+
SchemaName: targetConfig.SchemaName,
|
|
81
|
+
TableName: targetConfig.TableName,
|
|
82
|
+
FieldName: columnName,
|
|
83
|
+
TargetSchemaName: targetOfFK.SchemaName,
|
|
84
|
+
TargetTableName: targetOfFK.TableName,
|
|
85
|
+
TargetFieldName: 'ID', // Always reference the MJ-generated PK
|
|
86
|
+
};
|
|
87
|
+
// Deduplicate against already-added entries
|
|
88
|
+
const alreadyAdded = entries.some(e => e.SchemaName === entry.SchemaName &&
|
|
89
|
+
e.TableName === entry.TableName &&
|
|
90
|
+
e.FieldName === entry.FieldName);
|
|
91
|
+
if (!alreadyAdded) {
|
|
92
|
+
entries.push(entry);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return entries;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Produce an EmittedFile with the updated additionalSchemaInfo JSON.
|
|
100
|
+
*/
|
|
101
|
+
EmitConfigFile(configPath, mergedConfig) {
|
|
102
|
+
return {
|
|
103
|
+
FilePath: configPath,
|
|
104
|
+
Content: JSON.stringify(mergedConfig, null, 2) + '\n',
|
|
105
|
+
Description: 'Updated additionalSchemaInfo with soft FK definitions for integration tables',
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=SoftFKConfigEmitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SoftFKConfigEmitter.js","sourceRoot":"","sources":["../src/SoftFKConfigEmitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeMapper — converts generic source types to platform-specific SQL types.
|
|
3
|
+
*/
|
|
4
|
+
import type { DatabasePlatform, SourceFieldInfo, TypeMappingEntry } from './interfaces.js';
|
|
5
|
+
/**
|
|
6
|
+
* Maps generic source field types to platform-specific SQL types.
|
|
7
|
+
*/
|
|
8
|
+
export declare class TypeMapper {
|
|
9
|
+
/**
|
|
10
|
+
* Convert a source field's type to the appropriate SQL type for the given platform.
|
|
11
|
+
*/
|
|
12
|
+
MapSourceType(sourceType: string, platform: DatabasePlatform, field: SourceFieldInfo): string;
|
|
13
|
+
/**
|
|
14
|
+
* Get the MJ EntityField.Type value for a source type (informational only).
|
|
15
|
+
*/
|
|
16
|
+
GetMJFieldType(sourceType: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Get all supported type mappings.
|
|
19
|
+
*/
|
|
20
|
+
GetAllMappings(): ReadonlyArray<TypeMappingEntry>;
|
|
21
|
+
private ApplyPrecision;
|
|
22
|
+
private ApplyStringLength;
|
|
23
|
+
private ApplyDecimalPrecision;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=TypeMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeMapper.d.ts","sourceRoot":"","sources":["../src/TypeMapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAiB3F;;GAEG;AACH,qBAAa,UAAU;IACnB;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM;IAa7F;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAM1C;;OAEG;IACH,cAAc,IAAI,aAAa,CAAC,gBAAgB,CAAC;IAIjD,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,qBAAqB;CAKhC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
const TYPE_MAP = [
|
|
2
|
+
{ SourceType: 'string', SqlServerType: 'NVARCHAR', PostgresType: 'VARCHAR', MJFieldType: 'nvarchar' },
|
|
3
|
+
{ SourceType: 'text', SqlServerType: 'NVARCHAR(MAX)', PostgresType: 'TEXT', MJFieldType: 'nvarchar' },
|
|
4
|
+
{ SourceType: 'integer', SqlServerType: 'INT', PostgresType: 'INTEGER', MJFieldType: 'int' },
|
|
5
|
+
{ SourceType: 'bigint', SqlServerType: 'BIGINT', PostgresType: 'BIGINT', MJFieldType: 'bigint' },
|
|
6
|
+
{ SourceType: 'decimal', SqlServerType: 'DECIMAL', PostgresType: 'NUMERIC', MJFieldType: 'decimal' },
|
|
7
|
+
{ SourceType: 'boolean', SqlServerType: 'BIT', PostgresType: 'BOOLEAN', MJFieldType: 'bit' },
|
|
8
|
+
{ SourceType: 'datetime', SqlServerType: 'DATETIMEOFFSET', PostgresType: 'TIMESTAMPTZ', MJFieldType: 'datetimeoffset' },
|
|
9
|
+
{ SourceType: 'date', SqlServerType: 'DATE', PostgresType: 'DATE', MJFieldType: 'date' },
|
|
10
|
+
{ SourceType: 'uuid', SqlServerType: 'UNIQUEIDENTIFIER', PostgresType: 'UUID', MJFieldType: 'uniqueidentifier' },
|
|
11
|
+
{ SourceType: 'json', SqlServerType: 'NVARCHAR(MAX)', PostgresType: 'JSONB', MJFieldType: 'nvarchar' },
|
|
12
|
+
{ SourceType: 'float', SqlServerType: 'FLOAT', PostgresType: 'DOUBLE PRECISION', MJFieldType: 'float' },
|
|
13
|
+
{ SourceType: 'time', SqlServerType: 'TIME', PostgresType: 'TIME', MJFieldType: 'time' },
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Maps generic source field types to platform-specific SQL types.
|
|
17
|
+
*/
|
|
18
|
+
export class TypeMapper {
|
|
19
|
+
/**
|
|
20
|
+
* Convert a source field's type to the appropriate SQL type for the given platform.
|
|
21
|
+
*/
|
|
22
|
+
MapSourceType(sourceType, platform, field) {
|
|
23
|
+
const normalized = sourceType.toLowerCase().trim();
|
|
24
|
+
const entry = TYPE_MAP.find(t => t.SourceType === normalized);
|
|
25
|
+
if (!entry) {
|
|
26
|
+
// Unknown type — fall back to text
|
|
27
|
+
return platform === 'sqlserver' ? 'NVARCHAR(MAX)' : 'TEXT';
|
|
28
|
+
}
|
|
29
|
+
const baseType = platform === 'sqlserver' ? entry.SqlServerType : entry.PostgresType;
|
|
30
|
+
return this.ApplyPrecision(baseType, normalized, field, platform);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get the MJ EntityField.Type value for a source type (informational only).
|
|
34
|
+
*/
|
|
35
|
+
GetMJFieldType(sourceType) {
|
|
36
|
+
const normalized = sourceType.toLowerCase().trim();
|
|
37
|
+
const entry = TYPE_MAP.find(t => t.SourceType === normalized);
|
|
38
|
+
return entry ? entry.MJFieldType : 'nvarchar';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get all supported type mappings.
|
|
42
|
+
*/
|
|
43
|
+
GetAllMappings() {
|
|
44
|
+
return TYPE_MAP;
|
|
45
|
+
}
|
|
46
|
+
ApplyPrecision(baseType, sourceType, field, platform) {
|
|
47
|
+
if (sourceType === 'string') {
|
|
48
|
+
return this.ApplyStringLength(baseType, field, platform);
|
|
49
|
+
}
|
|
50
|
+
if (sourceType === 'decimal') {
|
|
51
|
+
return this.ApplyDecimalPrecision(baseType, field);
|
|
52
|
+
}
|
|
53
|
+
return baseType;
|
|
54
|
+
}
|
|
55
|
+
ApplyStringLength(baseType, field, platform) {
|
|
56
|
+
if (field.MaxLength != null && field.MaxLength > 0) {
|
|
57
|
+
// SQL Server NVARCHAR max is 4000 before switching to MAX; PG VARCHAR has no practical limit
|
|
58
|
+
if (platform === 'sqlserver' && field.MaxLength > 4000) {
|
|
59
|
+
return 'NVARCHAR(MAX)';
|
|
60
|
+
}
|
|
61
|
+
return `${baseType}(${field.MaxLength})`;
|
|
62
|
+
}
|
|
63
|
+
// Default string length
|
|
64
|
+
return `${baseType}(255)`;
|
|
65
|
+
}
|
|
66
|
+
ApplyDecimalPrecision(baseType, field) {
|
|
67
|
+
const precision = field.Precision ?? 18;
|
|
68
|
+
const scale = field.Scale ?? 2;
|
|
69
|
+
return `${baseType}(${precision},${scale})`;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=TypeMapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeMapper.js","sourceRoot":"","sources":["../src/TypeMapper.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type { DatabasePlatform, SourceSchemaInfo, SourceObjectInfo, SourceFieldInfo, SourceRelationshipInfo, TargetTableConfig, TargetColumnConfig, SoftFKEntry, ExistingTableInfo, ExistingColumnInfo, SchemaDiff, ColumnModification, TypeMappingEntry, EmittedFile, MigrationMetadata, SchemaBuilderInput, SchemaBuilderOutput, AccessControlResult, } from './interfaces.js';
|
|
2
|
+
export { TypeMapper } from './TypeMapper.js';
|
|
3
|
+
export { DDLGenerator, ValidateIdentifier } from './DDLGenerator.js';
|
|
4
|
+
export { MigrationFileWriter } from './MigrationFileWriter.js';
|
|
5
|
+
export { SoftFKConfigEmitter } from './SoftFKConfigEmitter.js';
|
|
6
|
+
export { MetadataEmitter } from './MetadataEmitter.js';
|
|
7
|
+
export { SchemaEvolution } from './SchemaEvolution.js';
|
|
8
|
+
export { SchemaBuilder } from './SchemaBuilder.js';
|
|
9
|
+
export { IsEntityBlocked, IsIntegrationWriteAllowed, GetBlockedEntities } from './AccessControl.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACR,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Classes
|
|
2
|
+
export { TypeMapper } from './TypeMapper.js';
|
|
3
|
+
export { DDLGenerator, ValidateIdentifier } from './DDLGenerator.js';
|
|
4
|
+
export { MigrationFileWriter } from './MigrationFileWriter.js';
|
|
5
|
+
export { SoftFKConfigEmitter } from './SoftFKConfigEmitter.js';
|
|
6
|
+
export { MetadataEmitter } from './MetadataEmitter.js';
|
|
7
|
+
export { SchemaEvolution } from './SchemaEvolution.js';
|
|
8
|
+
export { SchemaBuilder } from './SchemaBuilder.js';
|
|
9
|
+
// Functions
|
|
10
|
+
export { IsEntityBlocked, IsIntegrationWriteAllowed, GetBlockedEntities } from './AccessControl.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,UAAU;AACV,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration Schema Builder — Shared Interfaces
|
|
3
|
+
*
|
|
4
|
+
* These interfaces define the contracts between the Schema Builder's components
|
|
5
|
+
* and between connectors and the Schema Builder.
|
|
6
|
+
*/
|
|
7
|
+
/** Supported database platforms for DDL generation. */
|
|
8
|
+
export type DatabasePlatform = 'sqlserver' | 'postgresql';
|
|
9
|
+
import type { SourceSchemaInfo as _SourceSchemaInfo, SourceObjectInfo as _SourceObjectInfo, SourceFieldInfo as _SourceFieldInfo, SourceRelationshipInfo as _SourceRelationshipInfo } from '@memberjunction/integration-engine';
|
|
10
|
+
export type SourceSchemaInfo = _SourceSchemaInfo;
|
|
11
|
+
export type SourceObjectInfo = _SourceObjectInfo;
|
|
12
|
+
export type SourceFieldInfo = _SourceFieldInfo;
|
|
13
|
+
export type SourceRelationshipInfo = _SourceRelationshipInfo;
|
|
14
|
+
/** User's customization of a target table to be created. */
|
|
15
|
+
export interface TargetTableConfig {
|
|
16
|
+
/** Source object this table maps from. */
|
|
17
|
+
SourceObjectName: string;
|
|
18
|
+
/** Target database schema name (e.g., "hubspot", "ym"). */
|
|
19
|
+
SchemaName: string;
|
|
20
|
+
/** Target table name (e.g., "Deal", "Member"). */
|
|
21
|
+
TableName: string;
|
|
22
|
+
/** MJ entity display name (e.g., "HubSpot Deal", "YM Member"). */
|
|
23
|
+
EntityName: string;
|
|
24
|
+
/** Column configurations. */
|
|
25
|
+
Columns: TargetColumnConfig[];
|
|
26
|
+
/** Soft FK relationships to configure. */
|
|
27
|
+
SoftForeignKeys: SoftFKEntry[];
|
|
28
|
+
}
|
|
29
|
+
/** User's customization of a single column. */
|
|
30
|
+
export interface TargetColumnConfig {
|
|
31
|
+
/** Name of the field in the source object. */
|
|
32
|
+
SourceFieldName: string;
|
|
33
|
+
/** Column name in the target table. */
|
|
34
|
+
TargetColumnName: string;
|
|
35
|
+
/** SQL type for the target platform (populated by TypeMapper). */
|
|
36
|
+
TargetSqlType: string;
|
|
37
|
+
/** Whether the column allows NULLs. */
|
|
38
|
+
IsNullable: boolean;
|
|
39
|
+
/** Max length for string columns (null if not applicable). */
|
|
40
|
+
MaxLength: number | null;
|
|
41
|
+
/** Precision for numeric columns (null if not applicable). */
|
|
42
|
+
Precision: number | null;
|
|
43
|
+
/** Scale for numeric columns (null if not applicable). */
|
|
44
|
+
Scale: number | null;
|
|
45
|
+
/** Default value SQL expression (null if none). */
|
|
46
|
+
DefaultValue: string | null;
|
|
47
|
+
}
|
|
48
|
+
/** A single soft FK entry for additionalSchemaInfo. */
|
|
49
|
+
export interface SoftFKEntry {
|
|
50
|
+
/** Schema containing the table with the FK column. */
|
|
51
|
+
SchemaName: string;
|
|
52
|
+
/** Table containing the FK column. */
|
|
53
|
+
TableName: string;
|
|
54
|
+
/** Column name that references another table. */
|
|
55
|
+
FieldName: string;
|
|
56
|
+
/** Schema of the target (referenced) table. */
|
|
57
|
+
TargetSchemaName: string;
|
|
58
|
+
/** Target (referenced) table name. */
|
|
59
|
+
TargetTableName: string;
|
|
60
|
+
/** Target (referenced) field name (usually "ID"). */
|
|
61
|
+
TargetFieldName: string;
|
|
62
|
+
}
|
|
63
|
+
/** Describes the current state of an existing table in the target database. */
|
|
64
|
+
export interface ExistingTableInfo {
|
|
65
|
+
SchemaName: string;
|
|
66
|
+
TableName: string;
|
|
67
|
+
Columns: ExistingColumnInfo[];
|
|
68
|
+
}
|
|
69
|
+
/** Describes an existing column in a target table. */
|
|
70
|
+
export interface ExistingColumnInfo {
|
|
71
|
+
Name: string;
|
|
72
|
+
SqlType: string;
|
|
73
|
+
IsNullable: boolean;
|
|
74
|
+
MaxLength: number | null;
|
|
75
|
+
Precision: number | null;
|
|
76
|
+
Scale: number | null;
|
|
77
|
+
}
|
|
78
|
+
/** Result of diffing source schema against existing table. */
|
|
79
|
+
export interface SchemaDiff {
|
|
80
|
+
/** Columns that exist in source but not in target — need ALTER TABLE ADD. */
|
|
81
|
+
AddedColumns: TargetColumnConfig[];
|
|
82
|
+
/** Columns that exist in both but with different types — need ALTER TABLE ALTER. */
|
|
83
|
+
ModifiedColumns: ColumnModification[];
|
|
84
|
+
/** Columns that exist in target but not in source — deprecated (no physical drop). */
|
|
85
|
+
RemovedColumns: string[];
|
|
86
|
+
}
|
|
87
|
+
/** Describes a column type/nullability change. */
|
|
88
|
+
export interface ColumnModification {
|
|
89
|
+
ColumnName: string;
|
|
90
|
+
OldType: string;
|
|
91
|
+
NewType: string;
|
|
92
|
+
OldNullable: boolean;
|
|
93
|
+
NewNullable: boolean;
|
|
94
|
+
}
|
|
95
|
+
/** Maps a generic source type to platform-specific SQL types. */
|
|
96
|
+
export interface TypeMappingEntry {
|
|
97
|
+
/** Generic source type (e.g., "string", "integer"). */
|
|
98
|
+
SourceType: string;
|
|
99
|
+
/** SQL Server type template (e.g., "NVARCHAR(n)"). */
|
|
100
|
+
SqlServerType: string;
|
|
101
|
+
/** PostgreSQL type template (e.g., "VARCHAR(n)"). */
|
|
102
|
+
PostgresType: string;
|
|
103
|
+
/** MJ EntityField.Type value (informational — CodeGen discovers actual type). */
|
|
104
|
+
MJFieldType: string;
|
|
105
|
+
}
|
|
106
|
+
/** A single file produced by the Schema Builder. */
|
|
107
|
+
export interface EmittedFile {
|
|
108
|
+
/** Relative path from repo root (e.g., "migrations/v2/V2026...sql"). */
|
|
109
|
+
FilePath: string;
|
|
110
|
+
/** Full file content. */
|
|
111
|
+
Content: string;
|
|
112
|
+
/** Human-readable description of what this file does. */
|
|
113
|
+
Description: string;
|
|
114
|
+
}
|
|
115
|
+
/** Metadata for a migration file header comment. */
|
|
116
|
+
export interface MigrationMetadata {
|
|
117
|
+
/** Source system name (e.g., "HubSpot", "YourMembership"). */
|
|
118
|
+
SourceType: string;
|
|
119
|
+
/** Source object being migrated (e.g., "Deal", "Member"). */
|
|
120
|
+
ObjectName: string;
|
|
121
|
+
/** Action description (e.g., "CreateSchema", "CreateDealTable"). */
|
|
122
|
+
Action: string;
|
|
123
|
+
/** Who/what generated this migration. */
|
|
124
|
+
GeneratedBy: string;
|
|
125
|
+
/** ISO timestamp of generation. */
|
|
126
|
+
Timestamp: string;
|
|
127
|
+
}
|
|
128
|
+
/** Complete input to the SchemaBuilder orchestrator. */
|
|
129
|
+
export interface SchemaBuilderInput {
|
|
130
|
+
/** Introspected source schema from connector. */
|
|
131
|
+
SourceSchema: SourceSchemaInfo;
|
|
132
|
+
/** User's customizations for target tables. */
|
|
133
|
+
TargetConfigs: TargetTableConfig[];
|
|
134
|
+
/** Target database platform. */
|
|
135
|
+
Platform: DatabasePlatform;
|
|
136
|
+
/** Current MJ version for migration naming. */
|
|
137
|
+
MJVersion: string;
|
|
138
|
+
/** Source system name (e.g., "HubSpot"). */
|
|
139
|
+
SourceType: string;
|
|
140
|
+
/** Path to existing additionalSchemaInfo JSON file. */
|
|
141
|
+
AdditionalSchemaInfoPath: string;
|
|
142
|
+
/** Path to migrations directory (e.g., "migrations/v2"). */
|
|
143
|
+
MigrationsDir: string;
|
|
144
|
+
/** Path to metadata directory (e.g., "metadata"). */
|
|
145
|
+
MetadataDir: string;
|
|
146
|
+
/** Current state of target tables (for evolution scenarios). Empty array for new tables. */
|
|
147
|
+
ExistingTables: ExistingTableInfo[];
|
|
148
|
+
/** EntitySettings for any __mj target entities (keyed by entity name). */
|
|
149
|
+
EntitySettingsForTargets: Record<string, Array<{
|
|
150
|
+
Name: string;
|
|
151
|
+
Value: string;
|
|
152
|
+
}>>;
|
|
153
|
+
}
|
|
154
|
+
/** Complete output of the SchemaBuilder orchestrator. */
|
|
155
|
+
export interface SchemaBuilderOutput {
|
|
156
|
+
/** Migration SQL files to write. */
|
|
157
|
+
MigrationFiles: EmittedFile[];
|
|
158
|
+
/** Updated additionalSchemaInfo JSON content. */
|
|
159
|
+
AdditionalSchemaInfoUpdate: EmittedFile | null;
|
|
160
|
+
/** Metadata JSON files for mj-sync. */
|
|
161
|
+
MetadataFiles: EmittedFile[];
|
|
162
|
+
/** Warnings generated during processing (non-fatal). */
|
|
163
|
+
Warnings: string[];
|
|
164
|
+
/** Errors that prevented processing (fatal). */
|
|
165
|
+
Errors: string[];
|
|
166
|
+
}
|
|
167
|
+
/** Result of an access control check. */
|
|
168
|
+
export interface AccessControlResult {
|
|
169
|
+
Allowed: boolean;
|
|
170
|
+
Reason: string;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
|