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 +128 -75
- package/index.cjs.map +1 -1
- package/index.js +128 -75
- package/index.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
baseType = "
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
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
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
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
|
|
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 = [];
|