drizzle-seed 0.2.1 → 0.3.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/index.cjs +192 -50
- package/index.cjs.map +1 -1
- package/index.d.cts +7 -6
- package/index.d.mts +7 -6
- package/index.d.ts +7 -6
- package/index.mjs +193 -51
- package/index.mjs.map +1 -1
- package/package.json +2 -2
- package/types/tables.d.cts +1 -0
- package/types/tables.d.mts +1 -0
- package/types/tables.d.ts +1 -0
package/index.cjs
CHANGED
|
@@ -134254,6 +134254,7 @@ class SeedService {
|
|
|
134254
134254
|
const table1Order = orderedTablesNames.indexOf(table1.name), table2Order = orderedTablesNames.indexOf(table2.name);
|
|
134255
134255
|
return table1Order - table2Order;
|
|
134256
134256
|
});
|
|
134257
|
+
const tableNamesSet = new Set(tables.map((table) => table.name));
|
|
134257
134258
|
const tablesPossibleGenerators = tables.map((table) => ({
|
|
134258
134259
|
tableName: table.name,
|
|
134259
134260
|
columnsPossibleGenerators: [],
|
|
@@ -134284,8 +134285,10 @@ class SeedService {
|
|
|
134284
134285
|
if (!tablesInOutRelations[table.name]?.dependantTableNames.has(fkTableName)) {
|
|
134285
134286
|
const reason = tablesInOutRelations[table.name]?.selfRelation === true
|
|
134286
134287
|
? `"${table.name}" table has self reference`
|
|
134287
|
-
: `"${fkTableName}" table doesn't have reference to "${table.name}" table
|
|
134288
|
-
|
|
134288
|
+
: `"${fkTableName}" table doesn't have a reference to "${table.name}" table or`
|
|
134289
|
+
+ `\nyou didn't include your one-to-many relation in the seed function schema`;
|
|
134290
|
+
throw new Error(`${reason}.` + `\nYou can't specify "${fkTableName}" as parameter in ${table.name}.with object.`
|
|
134291
|
+
+ `\n\nFor more details, check this: https://orm.drizzle.team/docs/guides/seeding-using-with-option`);
|
|
134289
134292
|
}
|
|
134290
134293
|
idx = tablesPossibleGenerators.findIndex((table) => table.tableName === fkTableName);
|
|
134291
134294
|
if (idx !== -1) {
|
|
@@ -134353,15 +134356,23 @@ class SeedService {
|
|
|
134353
134356
|
if (cyclicRelation !== undefined) {
|
|
134354
134357
|
columnPossibleGenerator.isCyclic = true;
|
|
134355
134358
|
}
|
|
134356
|
-
if (foreignKeyColumns[col.name]?.table === undefined
|
|
134357
|
-
|
|
134359
|
+
if ((foreignKeyColumns[col.name]?.table === undefined || !tableNamesSet.has(foreignKeyColumns[col.name].table))
|
|
134360
|
+
&& col.notNull === true) {
|
|
134361
|
+
throw new Error(`Column '${col.name}' has not null contraint,`
|
|
134362
|
+
+ `\nand you didn't specify a table for foreign key on column '${col.name}' in '${table.name}' table.`
|
|
134363
|
+
+ `\n\nFor more details, check this: https://orm.drizzle.team/docs/guides/seeding-with-partially-exposed-tables#example-1`);
|
|
134358
134364
|
}
|
|
134359
|
-
const predicate = (cyclicRelation !== undefined
|
|
134365
|
+
const predicate = (cyclicRelation !== undefined
|
|
134366
|
+
|| (foreignKeyColumns[col.name]?.table === undefined
|
|
134367
|
+
|| !tableNamesSet.has(foreignKeyColumns[col.name].table)))
|
|
134360
134368
|
&& col.notNull === false;
|
|
134361
134369
|
if (predicate === true) {
|
|
134362
|
-
if (foreignKeyColumns[col.name]?.table === undefined
|
|
134370
|
+
if ((foreignKeyColumns[col.name]?.table === undefined
|
|
134371
|
+
|| !tableNamesSet.has(foreignKeyColumns[col.name].table)) && col.notNull === false) {
|
|
134363
134372
|
console.warn(`Column '${col.name}' in '${table.name}' table will be filled with Null values`
|
|
134364
|
-
+ `\nbecause you specified neither a table for foreign key on column '${col.name}'
|
|
134373
|
+
+ `\nbecause you specified neither a table for foreign key on column '${col.name}'`
|
|
134374
|
+
+ `\nnor a function for '${col.name}' column in refinements.`
|
|
134375
|
+
+ `\n\nFor more details, check this: https://orm.drizzle.team/docs/guides/seeding-with-partially-exposed-tables#example-2`);
|
|
134365
134376
|
}
|
|
134366
134377
|
columnPossibleGenerator.generator = new generatorsMap.GenerateDefault[0]({ defaultValue: null });
|
|
134367
134378
|
columnPossibleGenerator.wasDefinedBefore = true;
|
|
@@ -135442,16 +135453,13 @@ const seedFunc = async (db, schema, options = {}, refinements) => {
|
|
|
135442
135453
|
version = Number(options?.version);
|
|
135443
135454
|
}
|
|
135444
135455
|
if (drizzleOrm.is(db, (pgCore.PgDatabase))) {
|
|
135445
|
-
|
|
135446
|
-
await seedPostgres(db, pgSchema, { ...options, version }, refinements);
|
|
135456
|
+
await seedPostgres(db, schema, { ...options, version }, refinements);
|
|
135447
135457
|
}
|
|
135448
135458
|
else if (drizzleOrm.is(db, (mysqlCore.MySqlDatabase))) {
|
|
135449
|
-
|
|
135450
|
-
await seedMySql(db, mySqlSchema, { ...options, version }, refinements);
|
|
135459
|
+
await seedMySql(db, schema, { ...options, version }, refinements);
|
|
135451
135460
|
}
|
|
135452
135461
|
else if (drizzleOrm.is(db, (sqliteCore.BaseSQLiteDatabase))) {
|
|
135453
|
-
|
|
135454
|
-
await seedSqlite(db, sqliteSchema, { ...options, version }, refinements);
|
|
135462
|
+
await seedSqlite(db, schema, { ...options, version }, refinements);
|
|
135455
135463
|
}
|
|
135456
135464
|
else {
|
|
135457
135465
|
throw new Error('The drizzle-seed package currently supports only PostgreSQL, MySQL, and SQLite databases. Please ensure your database is one of these supported types');
|
|
@@ -135500,21 +135508,21 @@ const seedFunc = async (db, schema, options = {}, refinements) => {
|
|
|
135500
135508
|
*/
|
|
135501
135509
|
async function reset(db, schema) {
|
|
135502
135510
|
if (drizzleOrm.is(db, (pgCore.PgDatabase))) {
|
|
135503
|
-
const {
|
|
135504
|
-
if (Object.entries(
|
|
135505
|
-
await resetPostgres(db,
|
|
135511
|
+
const { pgTables } = filterPgSchema(schema);
|
|
135512
|
+
if (Object.entries(pgTables).length > 0) {
|
|
135513
|
+
await resetPostgres(db, pgTables);
|
|
135506
135514
|
}
|
|
135507
135515
|
}
|
|
135508
135516
|
else if (drizzleOrm.is(db, (mysqlCore.MySqlDatabase))) {
|
|
135509
|
-
const {
|
|
135510
|
-
if (Object.entries(
|
|
135511
|
-
await resetMySql(db,
|
|
135517
|
+
const { mysqlTables } = filterMysqlTables(schema);
|
|
135518
|
+
if (Object.entries(mysqlTables).length > 0) {
|
|
135519
|
+
await resetMySql(db, mysqlTables);
|
|
135512
135520
|
}
|
|
135513
135521
|
}
|
|
135514
135522
|
else if (drizzleOrm.is(db, (sqliteCore.BaseSQLiteDatabase))) {
|
|
135515
|
-
const {
|
|
135516
|
-
if (Object.entries(
|
|
135517
|
-
await resetSqlite(db,
|
|
135523
|
+
const { sqliteTables } = filterSqliteTables(schema);
|
|
135524
|
+
if (Object.entries(sqliteTables).length > 0) {
|
|
135525
|
+
await resetSqlite(db, sqliteTables);
|
|
135518
135526
|
}
|
|
135519
135527
|
}
|
|
135520
135528
|
else {
|
|
@@ -135522,32 +135530,34 @@ async function reset(db, schema) {
|
|
|
135522
135530
|
}
|
|
135523
135531
|
}
|
|
135524
135532
|
// Postgres-----------------------------------------------------------------------------------------------------------
|
|
135525
|
-
const resetPostgres = async (db,
|
|
135526
|
-
const tablesToTruncate = Object.entries(
|
|
135533
|
+
const resetPostgres = async (db, pgTables) => {
|
|
135534
|
+
const tablesToTruncate = Object.entries(pgTables).map(([_, table]) => {
|
|
135527
135535
|
const config = pgCore.getTableConfig(table);
|
|
135528
135536
|
config.schema = config.schema === undefined ? 'public' : config.schema;
|
|
135529
135537
|
return `"${config.schema}"."${config.name}"`;
|
|
135530
135538
|
});
|
|
135531
135539
|
await db.execute(drizzleOrm.sql.raw(`truncate ${tablesToTruncate.join(',')} cascade;`));
|
|
135532
135540
|
};
|
|
135533
|
-
const
|
|
135534
|
-
const pgSchema = Object.fromEntries(Object.entries(schema).filter((keyValue) => drizzleOrm.is(keyValue[1], pgCore.PgTable)));
|
|
135535
|
-
|
|
135541
|
+
const filterPgSchema = (schema) => {
|
|
135542
|
+
const pgSchema = Object.fromEntries(Object.entries(schema).filter((keyValue) => drizzleOrm.is(keyValue[1], pgCore.PgTable) || drizzleOrm.is(keyValue[1], drizzleOrm.Relations)));
|
|
135543
|
+
const pgTables = Object.fromEntries(Object.entries(schema).filter((keyValue) => drizzleOrm.is(keyValue[1], pgCore.PgTable)));
|
|
135544
|
+
return { pgSchema, pgTables };
|
|
135536
135545
|
};
|
|
135537
135546
|
const seedPostgres = async (db, schema, options = {}, refinements) => {
|
|
135538
135547
|
const seedService = new SeedService();
|
|
135539
|
-
const {
|
|
135548
|
+
const { pgSchema, pgTables } = filterPgSchema(schema);
|
|
135549
|
+
const { tables, relations } = getPostgresInfo(pgSchema, pgTables);
|
|
135540
135550
|
const generatedTablesGenerators = seedService.generatePossibleGenerators('postgresql', tables, relations, refinements, options);
|
|
135541
135551
|
const preserveCyclicTablesData = relations.some((rel) => rel.isCyclic === true);
|
|
135542
|
-
const tablesValues = await seedService.generateTablesValues(relations, generatedTablesGenerators, db,
|
|
135552
|
+
const tablesValues = await seedService.generateTablesValues(relations, generatedTablesGenerators, db, pgTables, { ...options, preserveCyclicTablesData });
|
|
135543
135553
|
const { filteredTablesGenerators, tablesUniqueNotNullColumn } = seedService.filterCyclicTables(generatedTablesGenerators);
|
|
135544
135554
|
const updateDataInDb = filteredTablesGenerators.length === 0 ? false : true;
|
|
135545
|
-
await seedService.generateTablesValues(relations, filteredTablesGenerators, db,
|
|
135555
|
+
await seedService.generateTablesValues(relations, filteredTablesGenerators, db, pgTables, { ...options, tablesValues, updateDataInDb, tablesUniqueNotNullColumn });
|
|
135546
135556
|
};
|
|
135547
|
-
const getPostgresInfo = (
|
|
135557
|
+
const getPostgresInfo = (pgSchema, pgTables) => {
|
|
135548
135558
|
let tableConfig;
|
|
135549
135559
|
let dbToTsColumnNamesMap;
|
|
135550
|
-
const dbToTsTableNamesMap = Object.fromEntries(Object.entries(
|
|
135560
|
+
const dbToTsTableNamesMap = Object.fromEntries(Object.entries(pgTables).map(([key, value]) => [drizzleOrm.getTableName(value), key]));
|
|
135551
135561
|
const tables = [];
|
|
135552
135562
|
const relations = [];
|
|
135553
135563
|
const dbToTsColumnNamesMapGlobal = {};
|
|
@@ -135566,7 +135576,48 @@ const getPostgresInfo = (schema) => {
|
|
|
135566
135576
|
dbToTsColumnNamesMapGlobal[tableName] = dbToTsColumnNamesMap;
|
|
135567
135577
|
return dbToTsColumnNamesMap;
|
|
135568
135578
|
};
|
|
135569
|
-
|
|
135579
|
+
const transformFromDrizzleRelation = (schema, getDbToTsColumnNamesMap, tableRelations) => {
|
|
135580
|
+
const schemaConfig = drizzleOrm.extractTablesRelationalConfig(schema, drizzleOrm.createTableRelationsHelpers);
|
|
135581
|
+
const relations = [];
|
|
135582
|
+
for (const table of Object.values(schemaConfig.tables)) {
|
|
135583
|
+
if (table.relations !== undefined) {
|
|
135584
|
+
for (const drizzleRel of Object.values(table.relations)) {
|
|
135585
|
+
if (drizzleOrm.is(drizzleRel, drizzleOrm.One)) {
|
|
135586
|
+
const tableConfig = pgCore.getTableConfig(drizzleRel.sourceTable);
|
|
135587
|
+
const tableDbSchema = tableConfig.schema ?? 'public';
|
|
135588
|
+
const tableDbName = tableConfig.name;
|
|
135589
|
+
const tableTsName = schemaConfig.tableNamesMap[`${tableDbSchema}.${tableDbName}`] ?? tableDbName;
|
|
135590
|
+
const dbToTsColumnNamesMap = getDbToTsColumnNamesMap(drizzleRel.sourceTable);
|
|
135591
|
+
const columns = drizzleRel.config?.fields.map((field) => dbToTsColumnNamesMap[field.name])
|
|
135592
|
+
?? [];
|
|
135593
|
+
const refTableConfig = pgCore.getTableConfig(drizzleRel.referencedTable);
|
|
135594
|
+
const refTableDbSchema = refTableConfig.schema ?? 'public';
|
|
135595
|
+
const refTableDbName = refTableConfig.name;
|
|
135596
|
+
const refTableTsName = schemaConfig.tableNamesMap[`${refTableDbSchema}.${refTableDbName}`]
|
|
135597
|
+
?? refTableDbName;
|
|
135598
|
+
const dbToTsColumnNamesMapForRefTable = getDbToTsColumnNamesMap(drizzleRel.referencedTable);
|
|
135599
|
+
const refColumns = drizzleRel.config?.references.map((ref) => dbToTsColumnNamesMapForRefTable[ref.name])
|
|
135600
|
+
?? [];
|
|
135601
|
+
if (tableRelations[refTableTsName] === undefined) {
|
|
135602
|
+
tableRelations[refTableTsName] = [];
|
|
135603
|
+
}
|
|
135604
|
+
const relation = {
|
|
135605
|
+
table: tableTsName,
|
|
135606
|
+
columns,
|
|
135607
|
+
refTable: refTableTsName,
|
|
135608
|
+
refColumns,
|
|
135609
|
+
refTableRels: tableRelations[refTableTsName],
|
|
135610
|
+
type: 'one',
|
|
135611
|
+
};
|
|
135612
|
+
relations.push(relation);
|
|
135613
|
+
tableRelations[tableTsName].push(relation);
|
|
135614
|
+
}
|
|
135615
|
+
}
|
|
135616
|
+
}
|
|
135617
|
+
}
|
|
135618
|
+
return relations;
|
|
135619
|
+
};
|
|
135620
|
+
for (const table of Object.values(pgTables)) {
|
|
135570
135621
|
tableConfig = pgCore.getTableConfig(table);
|
|
135571
135622
|
dbToTsColumnNamesMap = {};
|
|
135572
135623
|
for (const [tsCol, col] of Object.entries(tableConfig.columns[0].table)) {
|
|
@@ -135673,6 +135724,8 @@ const getPostgresInfo = (schema) => {
|
|
|
135673
135724
|
.map((column) => dbToTsColumnNamesMap[column.name]),
|
|
135674
135725
|
});
|
|
135675
135726
|
}
|
|
135727
|
+
const transformedDrizzleRelations = transformFromDrizzleRelation(pgSchema, getDbToTsColumnNamesMap, tableRelations);
|
|
135728
|
+
relations.push(...transformedDrizzleRelations);
|
|
135676
135729
|
const isCyclicRelations = relations.map((relI) => {
|
|
135677
135730
|
// if (relations.some((relj) => relI.table === relj.refTable && relI.refTable === relj.table)) {
|
|
135678
135731
|
const tableRel = tableRelations[relI.table].find((relJ) => relJ.refTable === relI.refTable);
|
|
@@ -135727,24 +135780,26 @@ const resetMySql = async (db, schema) => {
|
|
|
135727
135780
|
}
|
|
135728
135781
|
await db.execute(drizzleOrm.sql.raw('SET FOREIGN_KEY_CHECKS = 1;'));
|
|
135729
135782
|
};
|
|
135730
|
-
const
|
|
135731
|
-
const
|
|
135732
|
-
|
|
135783
|
+
const filterMysqlTables = (schema) => {
|
|
135784
|
+
const mysqlSchema = Object.fromEntries(Object.entries(schema).filter((keyValue) => drizzleOrm.is(keyValue[1], mysqlCore.MySqlTable) || drizzleOrm.is(keyValue[1], drizzleOrm.Relations)));
|
|
135785
|
+
const mysqlTables = Object.fromEntries(Object.entries(schema).filter((keyValue) => drizzleOrm.is(keyValue[1], mysqlCore.MySqlTable)));
|
|
135786
|
+
return { mysqlSchema, mysqlTables };
|
|
135733
135787
|
};
|
|
135734
135788
|
const seedMySql = async (db, schema, options = {}, refinements) => {
|
|
135735
|
-
const {
|
|
135789
|
+
const { mysqlSchema, mysqlTables } = filterMysqlTables(schema);
|
|
135790
|
+
const { tables, relations } = getMySqlInfo(mysqlSchema, mysqlTables);
|
|
135736
135791
|
const seedService = new SeedService();
|
|
135737
135792
|
const generatedTablesGenerators = seedService.generatePossibleGenerators('mysql', tables, relations, refinements, options);
|
|
135738
135793
|
const preserveCyclicTablesData = relations.some((rel) => rel.isCyclic === true);
|
|
135739
|
-
const tablesValues = await seedService.generateTablesValues(relations, generatedTablesGenerators, db,
|
|
135794
|
+
const tablesValues = await seedService.generateTablesValues(relations, generatedTablesGenerators, db, mysqlTables, { ...options, preserveCyclicTablesData });
|
|
135740
135795
|
const { filteredTablesGenerators, tablesUniqueNotNullColumn } = seedService.filterCyclicTables(generatedTablesGenerators);
|
|
135741
135796
|
const updateDataInDb = filteredTablesGenerators.length === 0 ? false : true;
|
|
135742
|
-
await seedService.generateTablesValues(relations, filteredTablesGenerators, db,
|
|
135797
|
+
await seedService.generateTablesValues(relations, filteredTablesGenerators, db, mysqlTables, { ...options, tablesValues, updateDataInDb, tablesUniqueNotNullColumn });
|
|
135743
135798
|
};
|
|
135744
|
-
const getMySqlInfo = (
|
|
135799
|
+
const getMySqlInfo = (mysqlSchema, mysqlTables) => {
|
|
135745
135800
|
let tableConfig;
|
|
135746
135801
|
let dbToTsColumnNamesMap;
|
|
135747
|
-
const dbToTsTableNamesMap = Object.fromEntries(Object.entries(
|
|
135802
|
+
const dbToTsTableNamesMap = Object.fromEntries(Object.entries(mysqlTables).map(([key, value]) => [drizzleOrm.getTableName(value), key]));
|
|
135748
135803
|
const tables = [];
|
|
135749
135804
|
const relations = [];
|
|
135750
135805
|
const dbToTsColumnNamesMapGlobal = {};
|
|
@@ -135763,7 +135818,48 @@ const getMySqlInfo = (schema) => {
|
|
|
135763
135818
|
dbToTsColumnNamesMapGlobal[tableName] = dbToTsColumnNamesMap;
|
|
135764
135819
|
return dbToTsColumnNamesMap;
|
|
135765
135820
|
};
|
|
135766
|
-
|
|
135821
|
+
const transformFromDrizzleRelation = (schema, getDbToTsColumnNamesMap, tableRelations) => {
|
|
135822
|
+
const schemaConfig = drizzleOrm.extractTablesRelationalConfig(schema, drizzleOrm.createTableRelationsHelpers);
|
|
135823
|
+
const relations = [];
|
|
135824
|
+
for (const table of Object.values(schemaConfig.tables)) {
|
|
135825
|
+
if (table.relations !== undefined) {
|
|
135826
|
+
for (const drizzleRel of Object.values(table.relations)) {
|
|
135827
|
+
if (drizzleOrm.is(drizzleRel, drizzleOrm.One)) {
|
|
135828
|
+
const tableConfig = mysqlCore.getTableConfig(drizzleRel.sourceTable);
|
|
135829
|
+
const tableDbSchema = tableConfig.schema ?? 'public';
|
|
135830
|
+
const tableDbName = tableConfig.name;
|
|
135831
|
+
const tableTsName = schemaConfig.tableNamesMap[`${tableDbSchema}.${tableDbName}`] ?? tableDbName;
|
|
135832
|
+
const dbToTsColumnNamesMap = getDbToTsColumnNamesMap(drizzleRel.sourceTable);
|
|
135833
|
+
const columns = drizzleRel.config?.fields.map((field) => dbToTsColumnNamesMap[field.name])
|
|
135834
|
+
?? [];
|
|
135835
|
+
const refTableConfig = mysqlCore.getTableConfig(drizzleRel.referencedTable);
|
|
135836
|
+
const refTableDbSchema = refTableConfig.schema ?? 'public';
|
|
135837
|
+
const refTableDbName = refTableConfig.name;
|
|
135838
|
+
const refTableTsName = schemaConfig.tableNamesMap[`${refTableDbSchema}.${refTableDbName}`]
|
|
135839
|
+
?? refTableDbName;
|
|
135840
|
+
const dbToTsColumnNamesMapForRefTable = getDbToTsColumnNamesMap(drizzleRel.referencedTable);
|
|
135841
|
+
const refColumns = drizzleRel.config?.references.map((ref) => dbToTsColumnNamesMapForRefTable[ref.name])
|
|
135842
|
+
?? [];
|
|
135843
|
+
if (tableRelations[refTableTsName] === undefined) {
|
|
135844
|
+
tableRelations[refTableTsName] = [];
|
|
135845
|
+
}
|
|
135846
|
+
const relation = {
|
|
135847
|
+
table: tableTsName,
|
|
135848
|
+
columns,
|
|
135849
|
+
refTable: refTableTsName,
|
|
135850
|
+
refColumns,
|
|
135851
|
+
refTableRels: tableRelations[refTableTsName],
|
|
135852
|
+
type: 'one',
|
|
135853
|
+
};
|
|
135854
|
+
relations.push(relation);
|
|
135855
|
+
tableRelations[tableTsName].push(relation);
|
|
135856
|
+
}
|
|
135857
|
+
}
|
|
135858
|
+
}
|
|
135859
|
+
}
|
|
135860
|
+
return relations;
|
|
135861
|
+
};
|
|
135862
|
+
for (const table of Object.values(mysqlTables)) {
|
|
135767
135863
|
tableConfig = mysqlCore.getTableConfig(table);
|
|
135768
135864
|
dbToTsColumnNamesMap = {};
|
|
135769
135865
|
for (const [tsCol, col] of Object.entries(tableConfig.columns[0].table)) {
|
|
@@ -135836,6 +135932,8 @@ const getMySqlInfo = (schema) => {
|
|
|
135836
135932
|
.map((column) => dbToTsColumnNamesMap[column.name]),
|
|
135837
135933
|
});
|
|
135838
135934
|
}
|
|
135935
|
+
const transformedDrizzleRelations = transformFromDrizzleRelation(mysqlSchema, getDbToTsColumnNamesMap, tableRelations);
|
|
135936
|
+
relations.push(...transformedDrizzleRelations);
|
|
135839
135937
|
const isCyclicRelations = relations.map((relI) => {
|
|
135840
135938
|
const tableRel = tableRelations[relI.table].find((relJ) => relJ.refTable === relI.refTable);
|
|
135841
135939
|
if (isRelationCyclic(relI)) {
|
|
@@ -135861,23 +135959,25 @@ const resetSqlite = async (db, schema) => {
|
|
|
135861
135959
|
await db.run(drizzleOrm.sql.raw('PRAGMA foreign_keys = ON'));
|
|
135862
135960
|
};
|
|
135863
135961
|
const filterSqliteTables = (schema) => {
|
|
135864
|
-
const sqliteSchema = Object.fromEntries(Object.entries(schema).filter((keyValue) => drizzleOrm.is(keyValue[1], sqliteCore.SQLiteTable)));
|
|
135865
|
-
|
|
135962
|
+
const sqliteSchema = Object.fromEntries(Object.entries(schema).filter((keyValue) => drizzleOrm.is(keyValue[1], sqliteCore.SQLiteTable) || drizzleOrm.is(keyValue[1], drizzleOrm.Relations)));
|
|
135963
|
+
const sqliteTables = Object.fromEntries(Object.entries(schema).filter((keyValue) => drizzleOrm.is(keyValue[1], sqliteCore.SQLiteTable)));
|
|
135964
|
+
return { sqliteSchema, sqliteTables };
|
|
135866
135965
|
};
|
|
135867
135966
|
const seedSqlite = async (db, schema, options = {}, refinements) => {
|
|
135868
|
-
const {
|
|
135967
|
+
const { sqliteSchema, sqliteTables } = filterSqliteTables(schema);
|
|
135968
|
+
const { tables, relations } = getSqliteInfo(sqliteSchema, sqliteTables);
|
|
135869
135969
|
const seedService = new SeedService();
|
|
135870
135970
|
const generatedTablesGenerators = seedService.generatePossibleGenerators('sqlite', tables, relations, refinements, options);
|
|
135871
135971
|
const preserveCyclicTablesData = relations.some((rel) => rel.isCyclic === true);
|
|
135872
|
-
const tablesValues = await seedService.generateTablesValues(relations, generatedTablesGenerators, db,
|
|
135972
|
+
const tablesValues = await seedService.generateTablesValues(relations, generatedTablesGenerators, db, sqliteTables, { ...options, preserveCyclicTablesData });
|
|
135873
135973
|
const { filteredTablesGenerators, tablesUniqueNotNullColumn } = seedService.filterCyclicTables(generatedTablesGenerators);
|
|
135874
135974
|
const updateDataInDb = filteredTablesGenerators.length === 0 ? false : true;
|
|
135875
|
-
await seedService.generateTablesValues(relations, filteredTablesGenerators, db,
|
|
135975
|
+
await seedService.generateTablesValues(relations, filteredTablesGenerators, db, sqliteTables, { ...options, tablesValues, updateDataInDb, tablesUniqueNotNullColumn });
|
|
135876
135976
|
};
|
|
135877
|
-
const getSqliteInfo = (
|
|
135977
|
+
const getSqliteInfo = (sqliteSchema, sqliteTables) => {
|
|
135878
135978
|
let tableConfig;
|
|
135879
135979
|
let dbToTsColumnNamesMap;
|
|
135880
|
-
const dbToTsTableNamesMap = Object.fromEntries(Object.entries(
|
|
135980
|
+
const dbToTsTableNamesMap = Object.fromEntries(Object.entries(sqliteTables).map(([key, value]) => [drizzleOrm.getTableName(value), key]));
|
|
135881
135981
|
const tables = [];
|
|
135882
135982
|
const relations = [];
|
|
135883
135983
|
const dbToTsColumnNamesMapGlobal = {};
|
|
@@ -135896,7 +135996,47 @@ const getSqliteInfo = (schema) => {
|
|
|
135896
135996
|
dbToTsColumnNamesMapGlobal[tableName] = dbToTsColumnNamesMap;
|
|
135897
135997
|
return dbToTsColumnNamesMap;
|
|
135898
135998
|
};
|
|
135899
|
-
|
|
135999
|
+
const transformFromDrizzleRelation = (schema, getDbToTsColumnNamesMap, tableRelations) => {
|
|
136000
|
+
const schemaConfig = drizzleOrm.extractTablesRelationalConfig(schema, drizzleOrm.createTableRelationsHelpers);
|
|
136001
|
+
const relations = [];
|
|
136002
|
+
for (const table of Object.values(schemaConfig.tables)) {
|
|
136003
|
+
if (table.relations !== undefined) {
|
|
136004
|
+
for (const drizzleRel of Object.values(table.relations)) {
|
|
136005
|
+
if (drizzleOrm.is(drizzleRel, drizzleOrm.One)) {
|
|
136006
|
+
const tableConfig = sqliteCore.getTableConfig(drizzleRel.sourceTable);
|
|
136007
|
+
const tableDbName = tableConfig.name;
|
|
136008
|
+
// TODO: tableNamesMap: have {public.customer: 'customer'} structure in sqlite
|
|
136009
|
+
const tableTsName = schemaConfig.tableNamesMap[`public.${tableDbName}`] ?? tableDbName;
|
|
136010
|
+
const dbToTsColumnNamesMap = getDbToTsColumnNamesMap(drizzleRel.sourceTable);
|
|
136011
|
+
const columns = drizzleRel.config?.fields.map((field) => dbToTsColumnNamesMap[field.name])
|
|
136012
|
+
?? [];
|
|
136013
|
+
const refTableConfig = sqliteCore.getTableConfig(drizzleRel.referencedTable);
|
|
136014
|
+
const refTableDbName = refTableConfig.name;
|
|
136015
|
+
const refTableTsName = schemaConfig.tableNamesMap[`public.${refTableDbName}`]
|
|
136016
|
+
?? refTableDbName;
|
|
136017
|
+
const dbToTsColumnNamesMapForRefTable = getDbToTsColumnNamesMap(drizzleRel.referencedTable);
|
|
136018
|
+
const refColumns = drizzleRel.config?.references.map((ref) => dbToTsColumnNamesMapForRefTable[ref.name])
|
|
136019
|
+
?? [];
|
|
136020
|
+
if (tableRelations[refTableTsName] === undefined) {
|
|
136021
|
+
tableRelations[refTableTsName] = [];
|
|
136022
|
+
}
|
|
136023
|
+
const relation = {
|
|
136024
|
+
table: tableTsName,
|
|
136025
|
+
columns,
|
|
136026
|
+
refTable: refTableTsName,
|
|
136027
|
+
refColumns,
|
|
136028
|
+
refTableRels: tableRelations[refTableTsName],
|
|
136029
|
+
type: 'one',
|
|
136030
|
+
};
|
|
136031
|
+
relations.push(relation);
|
|
136032
|
+
tableRelations[tableTsName].push(relation);
|
|
136033
|
+
}
|
|
136034
|
+
}
|
|
136035
|
+
}
|
|
136036
|
+
}
|
|
136037
|
+
return relations;
|
|
136038
|
+
};
|
|
136039
|
+
for (const table of Object.values(sqliteTables)) {
|
|
135900
136040
|
tableConfig = sqliteCore.getTableConfig(table);
|
|
135901
136041
|
dbToTsColumnNamesMap = {};
|
|
135902
136042
|
for (const [tsCol, col] of Object.entries(tableConfig.columns[0].table)) {
|
|
@@ -135965,6 +136105,8 @@ const getSqliteInfo = (schema) => {
|
|
|
135965
136105
|
.map((column) => dbToTsColumnNamesMap[column.name]),
|
|
135966
136106
|
});
|
|
135967
136107
|
}
|
|
136108
|
+
const transformedDrizzleRelations = transformFromDrizzleRelation(sqliteSchema, getDbToTsColumnNamesMap, tableRelations);
|
|
136109
|
+
relations.push(...transformedDrizzleRelations);
|
|
135968
136110
|
const isCyclicRelations = relations.map((relI) => {
|
|
135969
136111
|
const tableRel = tableRelations[relI.table].find((relJ) => relJ.refTable === relI.refTable);
|
|
135970
136112
|
if (isRelationCyclic(relI)) {
|