@memberjunction/integration-schema-builder 5.8.0 → 5.9.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/DDLGenerator.d.ts +8 -1
- package/dist/DDLGenerator.d.ts.map +1 -1
- package/dist/DDLGenerator.js +68 -20
- package/dist/DDLGenerator.js.map +1 -1
- package/dist/SchemaBuilder.d.ts.map +1 -1
- package/dist/SchemaBuilder.js +33 -23
- package/dist/SchemaBuilder.js.map +1 -1
- package/dist/SoftFKConfigEmitter.d.ts +9 -2
- package/dist/SoftFKConfigEmitter.d.ts.map +1 -1
- package/dist/SoftFKConfigEmitter.js +35 -4
- package/dist/SoftFKConfigEmitter.js.map +1 -1
- package/dist/interfaces.d.ts +11 -1
- package/dist/interfaces.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/DDLGenerator.d.ts
CHANGED
|
@@ -12,9 +12,16 @@ export declare class DDLGenerator {
|
|
|
12
12
|
*/
|
|
13
13
|
GenerateCreateSchema(schemaName: string, platform: DatabasePlatform): string;
|
|
14
14
|
/**
|
|
15
|
-
* Generate a full CREATE TABLE statement
|
|
15
|
+
* Generate a full CREATE TABLE statement.
|
|
16
|
+
* PK fields keep their natural names from the source system and get a UNIQUE constraint.
|
|
17
|
+
* Standard integration columns (__mj_integration_*) are added automatically.
|
|
16
18
|
*/
|
|
17
19
|
GenerateCreateTable(config: TargetTableConfig, platform: DatabasePlatform): string;
|
|
20
|
+
/**
|
|
21
|
+
* Generate sp_addextendedproperty calls for table and column descriptions.
|
|
22
|
+
*/
|
|
23
|
+
GenerateExtendedProperties(config: TargetTableConfig): string[];
|
|
24
|
+
private MakeColumnExtendedProperty;
|
|
18
25
|
/**
|
|
19
26
|
* Generate ALTER TABLE ADD COLUMN statement.
|
|
20
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DDLGenerator.d.ts","sourceRoot":"","sources":["../src/DDLGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAKnH;;GAEG;AACH,qBAAa,YAAY;IACrB;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM;IAQ5E
|
|
1
|
+
{"version":3,"file":"DDLGenerator.d.ts","sourceRoot":"","sources":["../src/DDLGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAKnH;;GAEG;AACH,qBAAa,YAAY;IACrB;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM;IAQ5E;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,GAAG,MAAM;IAyClF;;OAEG;IACH,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE;IAqC/D,OAAO,CAAC,0BAA0B;IAclC;;OAEG;IACH,2BAA2B,CACvB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,gBAAgB,GAC3B,MAAM;IAgBT;;OAEG;IACH,6BAA6B,CACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,kBAAkB,EACvB,QAAQ,EAAE,gBAAgB,GAC3B,MAAM;IAeT,OAAO,CAAC,eAAe;CAa1B;AAYD,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAInE"}
|
package/dist/DDLGenerator.js
CHANGED
|
@@ -15,7 +15,9 @@ export class DDLGenerator {
|
|
|
15
15
|
return `CREATE SCHEMA IF NOT EXISTS "${schemaName}";`;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* Generate a full CREATE TABLE statement
|
|
18
|
+
* Generate a full CREATE TABLE statement.
|
|
19
|
+
* PK fields keep their natural names from the source system and get a UNIQUE constraint.
|
|
20
|
+
* Standard integration columns (__mj_integration_*) are added automatically.
|
|
19
21
|
*/
|
|
20
22
|
GenerateCreateTable(config, platform) {
|
|
21
23
|
ValidateIdentifier(config.SchemaName, 'schema');
|
|
@@ -23,22 +25,70 @@ export class DDLGenerator {
|
|
|
23
25
|
const q = platform === 'sqlserver' ? QuoteSqlServer : QuotePostgres;
|
|
24
26
|
const fullTable = `${q(config.SchemaName)}.${q(config.TableName)}`;
|
|
25
27
|
const lines = [];
|
|
26
|
-
//
|
|
27
|
-
lines.push(...this.StandardColumns(platform));
|
|
28
|
-
// User-configured columns
|
|
28
|
+
// User-configured columns (includes PK fields as regular columns)
|
|
29
29
|
for (const col of config.Columns) {
|
|
30
30
|
ValidateIdentifier(col.TargetColumnName, 'column');
|
|
31
31
|
const nullable = col.IsNullable ? 'NULL' : 'NOT NULL';
|
|
32
32
|
const defaultExpr = col.DefaultValue != null ? ` DEFAULT ${col.DefaultValue}` : '';
|
|
33
33
|
lines.push(` ${q(col.TargetColumnName)} ${col.TargetSqlType} ${nullable}${defaultExpr}`);
|
|
34
34
|
}
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
// Standard integration columns (prefixed to avoid collisions)
|
|
36
|
+
lines.push(...this.StandardColumns(platform));
|
|
37
|
+
// UNIQUE constraint on PK field(s) — no DB-level PK, soft PK via additionalSchemaInfo
|
|
38
|
+
if (config.PrimaryKeyFields.length > 0) {
|
|
39
|
+
const pkColNames = config.PrimaryKeyFields.map(f => q(f)).join(', ');
|
|
40
|
+
const uqName = `UQ_${config.SchemaName}_${config.TableName}_PK`;
|
|
41
|
+
lines.push(` CONSTRAINT ${q(uqName)} UNIQUE (${pkColNames})`);
|
|
42
|
+
}
|
|
40
43
|
const body = lines.join(',\n');
|
|
41
|
-
|
|
44
|
+
const createTable = `CREATE TABLE ${fullTable} (\n${body}\n);`;
|
|
45
|
+
// Generate extended properties for descriptions (SQL Server only)
|
|
46
|
+
if (platform === 'sqlserver') {
|
|
47
|
+
const extProps = this.GenerateExtendedProperties(config);
|
|
48
|
+
if (extProps.length > 0) {
|
|
49
|
+
return createTable + '\n\n' + extProps.join('\n\n');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return createTable;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Generate sp_addextendedproperty calls for table and column descriptions.
|
|
56
|
+
*/
|
|
57
|
+
GenerateExtendedProperties(config) {
|
|
58
|
+
const props = [];
|
|
59
|
+
// Table-level description
|
|
60
|
+
if (config.Description) {
|
|
61
|
+
const escaped = EscapeSqlString(config.Description);
|
|
62
|
+
props.push(`EXEC sp_addextendedproperty\n` +
|
|
63
|
+
` @name = N'MS_Description',\n` +
|
|
64
|
+
` @value = N'${escaped}',\n` +
|
|
65
|
+
` @level0type = N'SCHEMA', @level0name = '${config.SchemaName}',\n` +
|
|
66
|
+
` @level1type = N'TABLE', @level1name = '${config.TableName}';`);
|
|
67
|
+
}
|
|
68
|
+
// Standard column descriptions
|
|
69
|
+
const standardDescriptions = {
|
|
70
|
+
'__mj_integration_SyncStatus': 'Current sync status: Active, Archived, or Error',
|
|
71
|
+
'__mj_integration_LastSyncedAt': 'Timestamp of the last successful sync for this record',
|
|
72
|
+
};
|
|
73
|
+
for (const [colName, desc] of Object.entries(standardDescriptions)) {
|
|
74
|
+
props.push(this.MakeColumnExtendedProperty(config.SchemaName, config.TableName, colName, desc));
|
|
75
|
+
}
|
|
76
|
+
// User-configured column descriptions
|
|
77
|
+
for (const col of config.Columns) {
|
|
78
|
+
if (col.Description) {
|
|
79
|
+
props.push(this.MakeColumnExtendedProperty(config.SchemaName, config.TableName, col.TargetColumnName, col.Description));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return props;
|
|
83
|
+
}
|
|
84
|
+
MakeColumnExtendedProperty(schemaName, tableName, columnName, description) {
|
|
85
|
+
const escaped = EscapeSqlString(description);
|
|
86
|
+
return (`EXEC sp_addextendedproperty\n` +
|
|
87
|
+
` @name = N'MS_Description',\n` +
|
|
88
|
+
` @value = N'${escaped}',\n` +
|
|
89
|
+
` @level0type = N'SCHEMA', @level0name = '${schemaName}',\n` +
|
|
90
|
+
` @level1type = N'TABLE', @level1name = '${tableName}',\n` +
|
|
91
|
+
` @level2type = N'COLUMN', @level2name = '${columnName}';`);
|
|
42
92
|
}
|
|
43
93
|
/**
|
|
44
94
|
* Generate ALTER TABLE ADD COLUMN statement.
|
|
@@ -75,19 +125,13 @@ export class DDLGenerator {
|
|
|
75
125
|
const q = platform === 'sqlserver' ? QuoteSqlServer : QuotePostgres;
|
|
76
126
|
if (platform === 'sqlserver') {
|
|
77
127
|
return [
|
|
78
|
-
` ${q('
|
|
79
|
-
` ${q('
|
|
80
|
-
` ${q('SourceJSON')} NVARCHAR(MAX) NULL`,
|
|
81
|
-
` ${q('SyncStatus')} NVARCHAR(50) NOT NULL DEFAULT 'Active'`,
|
|
82
|
-
` ${q('LastSyncedAt')} DATETIMEOFFSET NULL`,
|
|
128
|
+
` ${q('__mj_integration_SyncStatus')} NVARCHAR(50) NOT NULL DEFAULT 'Active'`,
|
|
129
|
+
` ${q('__mj_integration_LastSyncedAt')} DATETIMEOFFSET NULL`,
|
|
83
130
|
];
|
|
84
131
|
}
|
|
85
132
|
return [
|
|
86
|
-
` ${q('
|
|
87
|
-
` ${q('
|
|
88
|
-
` ${q('SourceJSON')} TEXT NULL`,
|
|
89
|
-
` ${q('SyncStatus')} VARCHAR(50) NOT NULL DEFAULT 'Active'`,
|
|
90
|
-
` ${q('LastSyncedAt')} TIMESTAMPTZ NULL`,
|
|
133
|
+
` ${q('__mj_integration_SyncStatus')} VARCHAR(50) NOT NULL DEFAULT 'Active'`,
|
|
134
|
+
` ${q('__mj_integration_LastSyncedAt')} TIMESTAMPTZ NULL`,
|
|
91
135
|
];
|
|
92
136
|
}
|
|
93
137
|
}
|
|
@@ -104,4 +148,8 @@ export function ValidateIdentifier(name, kind) {
|
|
|
104
148
|
throw new Error(`Invalid ${kind} name "${name}": must match ${IDENTIFIER_RE.source}`);
|
|
105
149
|
}
|
|
106
150
|
}
|
|
151
|
+
/** Escapes single quotes in a string for use in SQL string literals. */
|
|
152
|
+
function EscapeSqlString(value) {
|
|
153
|
+
return value.replace(/'/g, "''");
|
|
154
|
+
}
|
|
107
155
|
//# sourceMappingURL=DDLGenerator.js.map
|
package/dist/DDLGenerator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DDLGenerator.js","sourceRoot":"","sources":["../src/DDLGenerator.ts"],"names":[],"mappings":"AAMA,uEAAuE;AACvE,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAEjD;;GAEG;AACH,MAAM,OAAO,YAAY;IACrB;;OAEG;IACH,oBAAoB,CAAC,UAAkB,EAAE,QAA0B;QAC/D,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC3B,OAAO,0DAA0D,UAAU,gCAAgC,UAAU,UAAU,CAAC;QACpI,CAAC;QACD,OAAO,gCAAgC,UAAU,IAAI,CAAC;IAC1D,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"DDLGenerator.js","sourceRoot":"","sources":["../src/DDLGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaBuilder.d.ts","sourceRoot":"","sources":["../src/SchemaBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAKR,kBAAkB,EAClB,mBAAmB,EAGtB,MAAM,iBAAiB,CAAC;AAQzB;;;GAGG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAsB;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB;
|
|
1
|
+
{"version":3,"file":"SchemaBuilder.d.ts","sourceRoot":"","sources":["../src/SchemaBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAKR,kBAAkB,EAClB,mBAAmB,EAGtB,MAAM,iBAAiB,CAAC;AAQzB;;;GAGG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAsB;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB;IAqG3D,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,iBAAiB;CAS5B"}
|
package/dist/SchemaBuilder.js
CHANGED
|
@@ -38,27 +38,21 @@ export class SchemaBuilder {
|
|
|
38
38
|
output.Warnings.push(...collisionWarnings);
|
|
39
39
|
// Step 3: Separate new tables vs evolution
|
|
40
40
|
const { newConfigs, evolutionConfigs } = this.ClassifyConfigs(input);
|
|
41
|
-
// Step 4: Generate DDL
|
|
41
|
+
// Step 4: Generate DDL — one migration file per integration
|
|
42
42
|
const now = new Date();
|
|
43
|
-
const
|
|
44
|
-
// Schema creation
|
|
43
|
+
const ddlParts = [];
|
|
44
|
+
// Schema creation statements (deduplicate by schema name)
|
|
45
45
|
const schemasToCreate = this.GetUniqueSchemas(newConfigs);
|
|
46
|
-
const timestamps = this.MigrationWriter.GenerateTimestampSequence(schemasToCreate.length + newConfigs.length + evolutionConfigs.length, now);
|
|
47
|
-
let tsIdx = 0;
|
|
48
46
|
for (const schemaName of schemasToCreate) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const filePath = this.MigrationWriter.GenerateMigrationFileName(input.SourceType, `CreateSchema_${schemaName}`, input.MJVersion, input.MigrationsDir, timestamps[tsIdx++]);
|
|
52
|
-
allMigrations.push(this.MigrationWriter.WrapInMigrationFile(ddl, meta, filePath));
|
|
47
|
+
ddlParts.push(this.DDL.GenerateCreateSchema(schemaName, input.Platform));
|
|
48
|
+
ddlParts.push(''); // blank line separator
|
|
53
49
|
}
|
|
54
|
-
// Table creation
|
|
50
|
+
// Table creation statements
|
|
55
51
|
for (const config of newConfigs) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const filePath = this.MigrationWriter.GenerateMigrationFileName(input.SourceType, `Create${config.TableName}Table`, input.MJVersion, input.MigrationsDir, timestamps[tsIdx++]);
|
|
59
|
-
allMigrations.push(this.MigrationWriter.WrapInMigrationFile(ddl, meta, filePath));
|
|
52
|
+
ddlParts.push(this.DDL.GenerateCreateTable(config, input.Platform));
|
|
53
|
+
ddlParts.push(''); // blank line separator
|
|
60
54
|
}
|
|
61
|
-
// Evolution
|
|
55
|
+
// Evolution statements (ALTER TABLE)
|
|
62
56
|
for (const { config, existing } of evolutionConfigs) {
|
|
63
57
|
const sourceObj = input.SourceSchema.Objects.find(o => o.ExternalName === config.SourceObjectName);
|
|
64
58
|
if (!sourceObj)
|
|
@@ -67,17 +61,33 @@ export class SchemaBuilder {
|
|
|
67
61
|
if (diff.AddedColumns.length === 0 && diff.ModifiedColumns.length === 0 && diff.RemovedColumns.length === 0) {
|
|
68
62
|
continue; // No changes
|
|
69
63
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const filePath = this.MigrationWriter.GenerateMigrationFileName(input.SourceType, `Alter${config.TableName}`, input.MJVersion, input.MigrationsDir, timestamps[tsIdx++]);
|
|
73
|
-
allMigrations.push(this.MigrationWriter.WrapInMigrationFile(ddl, meta, filePath));
|
|
64
|
+
ddlParts.push(this.Evolution.GenerateEvolutionMigration(diff, config.SchemaName, config.TableName, input.Platform));
|
|
65
|
+
ddlParts.push(''); // blank line separator
|
|
74
66
|
}
|
|
75
|
-
|
|
76
|
-
|
|
67
|
+
// Emit a single migration file if there's any DDL
|
|
68
|
+
if (ddlParts.some(p => p.trim().length > 0)) {
|
|
69
|
+
const tableNames = [
|
|
70
|
+
...newConfigs.map(c => c.TableName),
|
|
71
|
+
...evolutionConfigs.map(({ config }) => config.TableName),
|
|
72
|
+
];
|
|
73
|
+
const action = newConfigs.length > 0 ? 'CreateTables' : 'AlterTables';
|
|
74
|
+
const meta = this.MakeMigrationMeta(input, action, tableNames.join(', '));
|
|
75
|
+
const timestamps = this.MigrationWriter.GenerateTimestampSequence(1, now);
|
|
76
|
+
const filePath = this.MigrationWriter.GenerateMigrationFileName(input.SourceType, action, input.MJVersion, input.MigrationsDir, timestamps[0]);
|
|
77
|
+
output.MigrationFiles = [this.MigrationWriter.WrapInMigrationFile(ddlParts.join('\n'), meta, filePath)];
|
|
78
|
+
}
|
|
79
|
+
// Step 5: Generate soft PK and FK config
|
|
80
|
+
const allConfigs = [...newConfigs, ...evolutionConfigs.map(ec => ec.config)];
|
|
77
81
|
const allSoftFKs = this.CollectSoftFKs(input, evolutionConfigs);
|
|
78
|
-
|
|
82
|
+
// Always emit additionalSchemaInfo — every integration table needs a soft PK
|
|
83
|
+
if (allConfigs.length > 0) {
|
|
79
84
|
const existingConfig = this.SoftFKEmitter.ParseExistingConfig(null); // Caller provides existing content via input
|
|
80
|
-
|
|
85
|
+
// First add soft PKs (natural PK field names from source system)
|
|
86
|
+
const withPKs = this.SoftFKEmitter.MergeSoftPKs(existingConfig, allConfigs);
|
|
87
|
+
// Then merge in soft FKs
|
|
88
|
+
const merged = allSoftFKs.length > 0
|
|
89
|
+
? this.SoftFKEmitter.MergeSchemaConfig(withPKs, allSoftFKs)
|
|
90
|
+
: withPKs;
|
|
81
91
|
output.AdditionalSchemaInfoUpdate = this.SoftFKEmitter.EmitConfigFile(input.AdditionalSchemaInfoPath, merged);
|
|
82
92
|
}
|
|
83
93
|
// Step 6: Generate metadata files for __mj entity targets
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaBuilder.js","sourceRoot":"","sources":["../src/SchemaBuilder.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,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,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;;GAGG;AACH,MAAM,OAAO,aAAa;IAA1B;QACqB,QAAG,GAAG,IAAI,YAAY,EAAE,CAAC;QACzB,oBAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC5C,kBAAa,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC1C,gBAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,cAAS,GAAG,IAAI,eAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"SchemaBuilder.js","sourceRoot":"","sources":["../src/SchemaBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SoftFKConfigEmitter — reads/merges additionalSchemaInfo JSON for soft
|
|
2
|
+
* SoftFKConfigEmitter — reads/merges additionalSchemaInfo JSON for soft PKs and FKs.
|
|
3
3
|
* File-emission only — produces updated JSON content, never writes to disk directly.
|
|
4
4
|
*/
|
|
5
5
|
import type { EmittedFile, SoftFKEntry, SourceSchemaInfo, TargetTableConfig } from './interfaces.js';
|
|
@@ -8,6 +8,7 @@ interface SchemaInfoTableEntry {
|
|
|
8
8
|
TableName: string;
|
|
9
9
|
PrimaryKey?: Array<{
|
|
10
10
|
FieldName: string;
|
|
11
|
+
Description?: string;
|
|
11
12
|
}>;
|
|
12
13
|
ForeignKeys?: Array<{
|
|
13
14
|
FieldName: string;
|
|
@@ -19,7 +20,7 @@ interface SchemaInfoTableEntry {
|
|
|
19
20
|
/** The top-level additionalSchemaInfo structure: schema name → table entries. */
|
|
20
21
|
type AdditionalSchemaInfo = Record<string, SchemaInfoTableEntry[]>;
|
|
21
22
|
/**
|
|
22
|
-
* Manages soft FK definitions in the additionalSchemaInfo JSON file.
|
|
23
|
+
* Manages soft PK and FK definitions in the additionalSchemaInfo JSON file.
|
|
23
24
|
*/
|
|
24
25
|
export declare class SoftFKConfigEmitter {
|
|
25
26
|
/**
|
|
@@ -32,9 +33,15 @@ export declare class SoftFKConfigEmitter {
|
|
|
32
33
|
* Deduplicates — won't add the same FK twice.
|
|
33
34
|
*/
|
|
34
35
|
MergeSchemaConfig(existing: AdditionalSchemaInfo, newEntries: SoftFKEntry[]): AdditionalSchemaInfo;
|
|
36
|
+
/**
|
|
37
|
+
* Add soft PK entries for integration tables.
|
|
38
|
+
* Uses the natural PK field name(s) from the source system. Supports composite PKs.
|
|
39
|
+
*/
|
|
40
|
+
MergeSoftPKs(existing: AdditionalSchemaInfo, targetConfigs: TargetTableConfig[]): AdditionalSchemaInfo;
|
|
35
41
|
/**
|
|
36
42
|
* Extract soft FK entries from source schema relationships + target configs.
|
|
37
43
|
* Maps source relationship field names → target column names using the target config.
|
|
44
|
+
* FKs point to the natural PK field on target tables (first PK field for composite keys).
|
|
38
45
|
*/
|
|
39
46
|
GenerateConfigEntries(sourceSchema: SourceSchemaInfo, targetConfigs: TargetTableConfig[]): SoftFKEntry[];
|
|
40
47
|
/**
|
|
@@ -1 +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;
|
|
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,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,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,YAAY,CAAC,QAAQ,EAAE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EAAE,GAAG,oBAAoB;IA4BtG;;;;OAIG;IACH,qBAAqB,CACjB,YAAY,EAAE,gBAAgB,EAC9B,aAAa,EAAE,iBAAiB,EAAE,GACnC,WAAW,EAAE;IAyDhB;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,GAAG,WAAW;CAOtF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Manages soft FK definitions in the additionalSchemaInfo JSON file.
|
|
2
|
+
* Manages soft PK and FK definitions in the additionalSchemaInfo JSON file.
|
|
3
3
|
*/
|
|
4
4
|
export class SoftFKConfigEmitter {
|
|
5
5
|
/**
|
|
@@ -47,9 +47,36 @@ export class SoftFKConfigEmitter {
|
|
|
47
47
|
}
|
|
48
48
|
return result;
|
|
49
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Add soft PK entries for integration tables.
|
|
52
|
+
* Uses the natural PK field name(s) from the source system. Supports composite PKs.
|
|
53
|
+
*/
|
|
54
|
+
MergeSoftPKs(existing, targetConfigs) {
|
|
55
|
+
const result = JSON.parse(JSON.stringify(existing));
|
|
56
|
+
for (const config of targetConfigs) {
|
|
57
|
+
if (config.PrimaryKeyFields.length === 0)
|
|
58
|
+
continue;
|
|
59
|
+
if (!result[config.SchemaName]) {
|
|
60
|
+
result[config.SchemaName] = [];
|
|
61
|
+
}
|
|
62
|
+
const schemaEntries = result[config.SchemaName];
|
|
63
|
+
let tableEntry = schemaEntries.find(t => t.TableName === config.TableName);
|
|
64
|
+
if (!tableEntry) {
|
|
65
|
+
tableEntry = { TableName: config.TableName };
|
|
66
|
+
schemaEntries.push(tableEntry);
|
|
67
|
+
}
|
|
68
|
+
// Set soft PK to the natural PK field(s) from the source system
|
|
69
|
+
tableEntry.PrimaryKey = config.PrimaryKeyFields.map(fieldName => ({
|
|
70
|
+
FieldName: fieldName,
|
|
71
|
+
Description: `Primary key from source system`,
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
50
76
|
/**
|
|
51
77
|
* Extract soft FK entries from source schema relationships + target configs.
|
|
52
78
|
* Maps source relationship field names → target column names using the target config.
|
|
79
|
+
* FKs point to the natural PK field on target tables (first PK field for composite keys).
|
|
53
80
|
*/
|
|
54
81
|
GenerateConfigEntries(sourceSchema, targetConfigs) {
|
|
55
82
|
const entries = [];
|
|
@@ -76,13 +103,17 @@ export class SoftFKConfigEmitter {
|
|
|
76
103
|
// Find the mapped column name for this FK field
|
|
77
104
|
const columnConfig = targetConfig.Columns.find(c => c.SourceFieldName === rel.FieldName);
|
|
78
105
|
const columnName = columnConfig ? columnConfig.TargetColumnName : rel.FieldName;
|
|
106
|
+
// FK points to the natural PK field on the target table
|
|
107
|
+
const targetPKField = targetOfFK.PrimaryKeyFields[0];
|
|
108
|
+
if (!targetPKField)
|
|
109
|
+
continue; // Target has no PK — skip FK
|
|
79
110
|
const entry = {
|
|
80
111
|
SchemaName: targetConfig.SchemaName,
|
|
81
112
|
TableName: targetConfig.TableName,
|
|
82
113
|
FieldName: columnName,
|
|
83
114
|
TargetSchemaName: targetOfFK.SchemaName,
|
|
84
115
|
TargetTableName: targetOfFK.TableName,
|
|
85
|
-
TargetFieldName:
|
|
116
|
+
TargetFieldName: targetPKField,
|
|
86
117
|
};
|
|
87
118
|
// Deduplicate against already-added entries
|
|
88
119
|
const alreadyAdded = entries.some(e => e.SchemaName === entry.SchemaName &&
|
|
@@ -101,8 +132,8 @@ export class SoftFKConfigEmitter {
|
|
|
101
132
|
EmitConfigFile(configPath, mergedConfig) {
|
|
102
133
|
return {
|
|
103
134
|
FilePath: configPath,
|
|
104
|
-
Content: JSON.stringify(mergedConfig, null,
|
|
105
|
-
Description: 'Updated additionalSchemaInfo with soft FK definitions for integration tables',
|
|
135
|
+
Content: JSON.stringify(mergedConfig, null, 4) + '\n',
|
|
136
|
+
Description: 'Updated additionalSchemaInfo with soft PK and FK definitions for integration tables',
|
|
106
137
|
};
|
|
107
138
|
}
|
|
108
139
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SoftFKConfigEmitter.js","sourceRoot":"","sources":["../src/SoftFKConfigEmitter.ts"],"names":[],"mappings":"AAqBA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC5B;;;OAGG;IACH,mBAAmB,CAAC,WAA0B;QAC1C,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5C,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAyB,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,QAA8B,EAAE,UAAyB;QACvE,MAAM,MAAM,GAAyB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE1E,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YAClC,CAAC;YAED,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/C,IAAI,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;YAE1E,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,UAAU,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;gBAC7D,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC1B,UAAU,CAAC,WAAW,GAAG,EAAE,CAAC;YAChC,CAAC;YAED,oDAAoD;YACpD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CACtC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;gBAChC,EAAE,CAAC,UAAU,KAAK,KAAK,CAAC,gBAAgB;gBACxC,EAAE,CAAC,YAAY,KAAK,KAAK,CAAC,eAAe;gBACzC,EAAE,CAAC,YAAY,KAAK,KAAK,CAAC,eAAe,CAClD,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;oBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,UAAU,EAAE,KAAK,CAAC,gBAAgB;oBAClC,YAAY,EAAE,KAAK,CAAC,eAAe;oBACnC,YAAY,EAAE,KAAK,CAAC,eAAe;iBACtC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,qBAAqB,CACjB,YAA8B,EAC9B,aAAkC;QAElC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,qEAAqE;QACrE,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC;QAED,sEAAsE;QACtE,MAAM,cAAc,GAAG,IAAI,GAAG,EAA6B,CAAC;QAC5D,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACjC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QAED,2DAA2D;QAC3D,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAChE,IAAI,CAAC,YAAY;gBAAE,SAAS;YAE5B,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACxD,IAAI,CAAC,UAAU;oBAAE,SAAS,CAAC,mCAAmC;gBAE9D,gDAAgD;gBAChD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;gBACzF,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;gBAEhF,MAAM,KAAK,GAAgB;oBACvB,UAAU,EAAE,YAAY,CAAC,UAAU;oBACnC,SAAS,EAAE,YAAY,CAAC,SAAS;oBACjC,SAAS,EAAE,UAAU;oBACrB,gBAAgB,EAAE,UAAU,CAAC,UAAU;oBACvC,eAAe,EAAE,UAAU,CAAC,SAAS;oBACrC,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"SoftFKConfigEmitter.js","sourceRoot":"","sources":["../src/SoftFKConfigEmitter.ts"],"names":[],"mappings":"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"}
|
package/dist/interfaces.d.ts
CHANGED
|
@@ -21,7 +21,15 @@ export interface TargetTableConfig {
|
|
|
21
21
|
TableName: string;
|
|
22
22
|
/** MJ entity display name (e.g., "HubSpot Deal", "YM Member"). */
|
|
23
23
|
EntityName: string;
|
|
24
|
-
/**
|
|
24
|
+
/** Human-readable description for the table (emitted as sp_addextendedproperty). */
|
|
25
|
+
Description?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Primary key field name(s) from the source system.
|
|
28
|
+
* These columns get a UNIQUE constraint and are registered as soft PKs.
|
|
29
|
+
* Supports composite PKs (multiple fields). Must be a subset of Columns.
|
|
30
|
+
*/
|
|
31
|
+
PrimaryKeyFields: string[];
|
|
32
|
+
/** Column configurations (includes PK fields — they are regular columns). */
|
|
25
33
|
Columns: TargetColumnConfig[];
|
|
26
34
|
/** Soft FK relationships to configure. */
|
|
27
35
|
SoftForeignKeys: SoftFKEntry[];
|
|
@@ -44,6 +52,8 @@ export interface TargetColumnConfig {
|
|
|
44
52
|
Scale: number | null;
|
|
45
53
|
/** Default value SQL expression (null if none). */
|
|
46
54
|
DefaultValue: string | null;
|
|
55
|
+
/** Human-readable description for the column (emitted as sp_addextendedproperty). */
|
|
56
|
+
Description?: string;
|
|
47
57
|
}
|
|
48
58
|
/** A single soft FK entry for additionalSchemaInfo. */
|
|
49
59
|
export interface SoftFKEntry {
|
package/dist/interfaces.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,CAAC;AAK1D,OAAO,KAAK,EACR,gBAAgB,IAAI,iBAAiB,EACrC,gBAAgB,IAAI,iBAAiB,EACrC,eAAe,IAAI,gBAAgB,EACnC,sBAAsB,IAAI,uBAAuB,EACpD,MAAM,oCAAoC,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AACjD,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAC/C,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAI7D,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAC9B,0CAA0C;IAC1C,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,CAAC;AAK1D,OAAO,KAAK,EACR,gBAAgB,IAAI,iBAAiB,EACrC,gBAAgB,IAAI,iBAAiB,EACrC,eAAe,IAAI,gBAAgB,EACnC,sBAAsB,IAAI,uBAAuB,EACpD,MAAM,oCAAoC,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AACjD,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAC/C,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAI7D,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAC9B,0CAA0C;IAC1C,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,6EAA6E;IAC7E,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,0CAA0C;IAC1C,eAAe,EAAE,WAAW,EAAE,CAAC;CAClC;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IAC/B,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mDAAmD;IACnD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,uDAAuD;AACvD,MAAM,WAAW,WAAW;IACxB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;CAC3B;AAID,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,8DAA8D;AAC9D,MAAM,WAAW,UAAU;IACvB,6EAA6E;IAC7E,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,oFAAoF;IACpF,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,sFAAsF;IACtF,cAAc,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACxB;AAID,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC7B,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC;CACvB;AAID,oDAAoD;AACpD,MAAM,WAAW,WAAW;IACxB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,oDAAoD;AACpD,MAAM,WAAW,iBAAiB;IAC9B,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACrB;AAID,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IAC/B,iDAAiD;IACjD,YAAY,EAAE,gBAAgB,CAAC;IAC/B,+CAA+C;IAC/C,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,gCAAgC;IAChC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,wBAAwB,EAAE,MAAM,CAAC;IACjC,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,0EAA0E;IAC1E,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACpF;AAED,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAChC,oCAAoC;IACpC,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,iDAAiD;IACjD,0BAA0B,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/C,uCAAuC;IACvC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gDAAgD;IAChD,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,yCAAyC;AACzC,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/integration-schema-builder",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.9.0",
|
|
5
5
|
"description": "MemberJunction Integration Schema Builder - file-emission-only DDL generation for integration tables",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"test:watch": "vitest"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@memberjunction/global": "5.
|
|
18
|
-
"@memberjunction/integration-engine": "5.
|
|
17
|
+
"@memberjunction/global": "5.9.0",
|
|
18
|
+
"@memberjunction/integration-engine": "5.9.0"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"typescript": "^5.9.3",
|