drizzle-graphql-plus 0.8.18 → 0.8.20

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 CHANGED
@@ -2209,89 +2209,95 @@ var allowedNameChars2 = /^[a-zA-Z0-9_]+$/;
2209
2209
  var customScalars = /* @__PURE__ */ new Set();
2210
2210
  var enumDefinitions = /* @__PURE__ */ new Map();
2211
2211
  var requiredFieldFilters = /* @__PURE__ */ new Set();
2212
+ var foreignKeyTypes = /* @__PURE__ */ new Map();
2212
2213
  var columnToSDL = (column, columnName, tableName, forceNullable = false) => {
2213
2214
  let baseType;
2214
2215
  if (column.customGraphqlType) {
2215
2216
  baseType = column.customGraphqlType;
2216
2217
  } else {
2217
- switch (column.dataType) {
2218
- case "boolean":
2219
- baseType = "Boolean";
2220
- break;
2221
- case "json":
2222
- if (column.columnType === "PgGeometryObject") {
2223
- baseType = "PgGeometryObject";
2224
- customScalars.add("PgGeometryObject");
2225
- } else {
2226
- baseType = "JSON";
2227
- customScalars.add("JSON");
2228
- }
2229
- break;
2230
- case "date":
2231
- baseType = "Date";
2232
- customScalars.add("Date");
2233
- break;
2234
- case "string":
2235
- if (column.enumValues?.length) {
2236
- const enumName = `${capitalize(tableName)}${capitalize(
2237
- columnName
2238
- )}Enum`;
2239
- baseType = enumName;
2240
- if (!enumDefinitions.has(enumName)) {
2241
- enumDefinitions.set(enumName, {
2242
- name: enumName,
2243
- values: column.enumValues.map(
2244
- (e, index) => allowedNameChars2.test(e) ? e : `Option${index}`
2245
- )
2246
- });
2218
+ const foreignKeyType = foreignKeyTypes.get(`${tableName}.${columnName}`);
2219
+ if (foreignKeyType) {
2220
+ baseType = foreignKeyType;
2221
+ } else {
2222
+ switch (column.dataType) {
2223
+ case "boolean":
2224
+ baseType = "Boolean";
2225
+ break;
2226
+ case "json":
2227
+ if (column.columnType === "PgGeometryObject") {
2228
+ baseType = "PgGeometryObject";
2229
+ customScalars.add("PgGeometryObject");
2230
+ } else {
2231
+ baseType = "JSON";
2232
+ customScalars.add("JSON");
2247
2233
  }
2248
- } else {
2249
- baseType = "String";
2250
- }
2251
- break;
2252
- case "bigint":
2253
- baseType = "BigInt";
2254
- customScalars.add("BigInt");
2255
- break;
2256
- case "number":
2257
- if ((0, import_drizzle_orm8.is)(column, import_pg_core4.PgInteger) || (0, import_drizzle_orm8.is)(column, import_pg_core4.PgSerial) || (0, import_drizzle_orm8.is)(column, import_mysql_core4.MySqlInt) || (0, import_drizzle_orm8.is)(column, import_mysql_core4.MySqlSerial) || (0, import_drizzle_orm8.is)(column, import_sqlite_core4.SQLiteInteger)) {
2258
- baseType = "Int";
2259
- } else {
2260
- baseType = "Float";
2261
- }
2262
- break;
2263
- case "buffer":
2264
- baseType = "[Int!]";
2265
- break;
2266
- case "array":
2267
- if (column.columnType === "PgVector") {
2268
- baseType = "[Float!]";
2269
- } else if (column.columnType === "PgGeometry") {
2270
- baseType = "[Float!]";
2271
- } else {
2272
- const scalarName = `${capitalize(tableName)}${capitalize(
2273
- columnName
2274
- )}Array`;
2275
- baseType = scalarName;
2276
- customScalars.add(scalarName);
2277
- }
2278
- break;
2279
- case "custom":
2280
- default:
2281
- if (column.columnType) {
2282
- baseType = column.columnType;
2283
- customScalars.add(column.columnType);
2284
- } else {
2285
- const customScalarName = `${capitalize(tableName)}${capitalize(
2286
- columnName
2287
- )}`;
2288
- baseType = customScalarName;
2289
- customScalars.add(customScalarName);
2290
- }
2291
- break;
2234
+ break;
2235
+ case "date":
2236
+ baseType = "Date";
2237
+ customScalars.add("Date");
2238
+ break;
2239
+ case "string":
2240
+ if (column.enumValues?.length) {
2241
+ const enumName = `${capitalize(tableName)}${capitalize(
2242
+ columnName
2243
+ )}Enum`;
2244
+ baseType = enumName;
2245
+ if (!enumDefinitions.has(enumName)) {
2246
+ enumDefinitions.set(enumName, {
2247
+ name: enumName,
2248
+ values: column.enumValues.map(
2249
+ (e, index) => allowedNameChars2.test(e) ? e : `Option${index}`
2250
+ )
2251
+ });
2252
+ }
2253
+ } else {
2254
+ baseType = "String";
2255
+ }
2256
+ break;
2257
+ case "bigint":
2258
+ baseType = "BigInt";
2259
+ customScalars.add("BigInt");
2260
+ break;
2261
+ case "number":
2262
+ if ((0, import_drizzle_orm8.is)(column, import_pg_core4.PgInteger) || (0, import_drizzle_orm8.is)(column, import_pg_core4.PgSerial) || (0, import_drizzle_orm8.is)(column, import_mysql_core4.MySqlInt) || (0, import_drizzle_orm8.is)(column, import_mysql_core4.MySqlSerial) || (0, import_drizzle_orm8.is)(column, import_sqlite_core4.SQLiteInteger)) {
2263
+ baseType = "Int";
2264
+ } else {
2265
+ baseType = "Float";
2266
+ }
2267
+ break;
2268
+ case "buffer":
2269
+ baseType = "[Int!]";
2270
+ break;
2271
+ case "array":
2272
+ if (column.columnType === "PgVector") {
2273
+ baseType = "[Float!]";
2274
+ } else if (column.columnType === "PgGeometry") {
2275
+ baseType = "[Float!]";
2276
+ } else {
2277
+ const scalarName = `${capitalize(tableName)}${capitalize(
2278
+ columnName
2279
+ )}Array`;
2280
+ baseType = scalarName;
2281
+ customScalars.add(scalarName);
2282
+ }
2283
+ break;
2284
+ case "custom":
2285
+ default:
2286
+ if (column.columnType) {
2287
+ baseType = column.columnType;
2288
+ customScalars.add(column.columnType);
2289
+ } else {
2290
+ const customScalarName = `${capitalize(tableName)}${capitalize(
2291
+ columnName
2292
+ )}`;
2293
+ baseType = customScalarName;
2294
+ customScalars.add(customScalarName);
2295
+ }
2296
+ break;
2297
+ }
2292
2298
  }
2293
2299
  }
2294
- if (!forceNullable && column.notNull && !column.hasDefault && !column.defaultFn) {
2300
+ if (!forceNullable && column.notNull) {
2295
2301
  return `${baseType}!`;
2296
2302
  }
2297
2303
  return baseType;
@@ -2345,6 +2351,53 @@ var generateTypeDefs = (tables, relations) => {
2345
2351
  customScalars.clear();
2346
2352
  enumDefinitions.clear();
2347
2353
  requiredFieldFilters.clear();
2354
+ foreignKeyTypes.clear();
2355
+ for (const [tableName, tableRelations] of Object.entries(relations)) {
2356
+ const tableInfo = tables[tableName];
2357
+ if (!tableInfo)
2358
+ continue;
2359
+ for (const [relationName, relationInfo] of Object.entries(tableRelations)) {
2360
+ const relation = relationInfo.relation;
2361
+ if (!(0, import_drizzle_orm8.is)(relation, import_drizzle_orm8.One))
2362
+ continue;
2363
+ const config = relation.config;
2364
+ if (!config?.fields || !config?.references)
2365
+ continue;
2366
+ const referencedTableName = relationInfo.targetTableName;
2367
+ const referencedTable = tables[referencedTableName];
2368
+ if (!referencedTable)
2369
+ continue;
2370
+ for (let i = 0; i < config.fields.length; i++) {
2371
+ const field = config.fields[i];
2372
+ const reference = config.references[i];
2373
+ if (!field || !reference)
2374
+ continue;
2375
+ const fieldColumnName = field.name;
2376
+ const referenceColumnName = reference.name;
2377
+ const foreignKeyColumn = Object.values(tableInfo.columns).find(
2378
+ (col) => col.name === fieldColumnName
2379
+ );
2380
+ const referencedColumn = Object.values(referencedTable.columns).find(
2381
+ (col) => col.name === referenceColumnName
2382
+ );
2383
+ if (!foreignKeyColumn || !referencedColumn)
2384
+ continue;
2385
+ const foreignKeyPropertyName = Object.keys(tableInfo.columns).find(
2386
+ (key) => tableInfo.columns[key] === foreignKeyColumn
2387
+ );
2388
+ if (!foreignKeyPropertyName)
2389
+ continue;
2390
+ const referencedCustomType = referencedColumn.customGraphqlType;
2391
+ const foreignKeyHasCustomType = !!foreignKeyColumn.customGraphqlType;
2392
+ if (referencedCustomType && !foreignKeyHasCustomType) {
2393
+ foreignKeyTypes.set(
2394
+ `${tableName}.${foreignKeyPropertyName}`,
2395
+ referencedCustomType
2396
+ );
2397
+ }
2398
+ }
2399
+ }
2400
+ }
2348
2401
  for (const [tableName, tableInfo] of Object.entries(tables)) {
2349
2402
  const typeName = capitalize(tableName);
2350
2403
  const fields = [];