@ts-safeql/generate
Advanced tools
Comparing version 0.0.9 to 0.0.10
import { DuplicateColumnsError, IdentiferCase, ParsedQuery, PostgresError } from "@ts-safeql/shared"; | ||
import { either } from "fp-ts"; | ||
import postgres from "postgres"; | ||
declare type JSToPostgresTypeMap = Record<string, unknown>; | ||
declare type Sql = postgres.Sql<JSToPostgresTypeMap>; | ||
export declare type GenerateResult = { | ||
type JSToPostgresTypeMap = Record<string, unknown>; | ||
type Sql = postgres.Sql<JSToPostgresTypeMap>; | ||
export type GenerateResult = { | ||
result: string | null; | ||
@@ -11,4 +11,4 @@ stmt: postgres.Statement; | ||
}; | ||
export declare type GenerateError = DuplicateColumnsError | PostgresError; | ||
declare type CacheKey = string; | ||
export type GenerateError = DuplicateColumnsError | PostgresError; | ||
type CacheKey = string; | ||
export interface GenerateParams { | ||
@@ -15,0 +15,0 @@ sql: Sql; |
@@ -20,3 +20,3 @@ "use strict"; | ||
const { sql, query, cacheMetadata = true } = params; | ||
const { pgColsByTableOidCache, pgTypes } = cacheMetadata | ||
const { pgColsByTableOidCache, pgTypes, pgEnums } = cacheMetadata | ||
? await (0, shared_1.getOrSetFromMap)({ | ||
@@ -56,2 +56,3 @@ map: cacheMap, | ||
pgTypes, | ||
pgEnums, | ||
relationsWithJoins, | ||
@@ -80,4 +81,5 @@ typesMap, | ||
const pgCols = await getPgCols(sql); | ||
const pgEnums = await getPgEnums(sql); | ||
const pgColsByTableOidCache = (0, shared_1.groupBy)(pgCols, "tableOid"); | ||
return { pgTypes, pgCols, pgColsByTableOidCache }; | ||
return { pgTypes, pgCols, pgEnums, pgColsByTableOidCache }; | ||
} | ||
@@ -89,2 +91,3 @@ function mapColumnAnalysisResultsToTypeLiteral(params) { | ||
pgTypes: params.pgTypes, | ||
pgEnums: params.pgEnums, | ||
relationsWithJoins: params.relationsWithJoins, | ||
@@ -137,10 +140,12 @@ typesMap: params.typesMap, | ||
function mapColumnAnalysisResultToPropertySignature(params) { | ||
var _a; | ||
var _a, _b, _c; | ||
if ("introspected" in params.col) { | ||
const value = params.typesMap[params.col.introspected.colType]; | ||
const key = (_a = params.col.described.name) !== null && _a !== void 0 ? _a : params.col.introspected.colName; | ||
const isNullable = !params.col.introspected.colNotNull || isNullableDueToRelation({ | ||
col: params.col.introspected, | ||
relationsWithJoins: params.relationsWithJoins, | ||
}); | ||
const value = (_b = (_a = params.pgEnums | ||
.get(params.col.described.type)) === null || _a === void 0 ? void 0 : _a.values.map((x) => `'${x}'`).join(" | ")) !== null && _b !== void 0 ? _b : params.typesMap[params.col.introspected.colType]; | ||
const key = (_c = params.col.described.name) !== null && _c !== void 0 ? _c : params.col.introspected.colName; | ||
const isNullable = !params.col.introspected.colNotNull || | ||
isNullableDueToRelation({ | ||
col: params.col.introspected, | ||
relationsWithJoins: params.relationsWithJoins, | ||
}); | ||
return buildInterfacePropertyValue({ | ||
@@ -164,3 +169,3 @@ key: (0, shared_1.toCase)(key, params.fieldTransform), | ||
function getTsTypeFromPgTypeOid(params) { | ||
const pgType = params.pgTypes.find((type) => type.oid === params.pgTypeOid); | ||
const pgType = params.pgTypes.get(params.pgTypeOid); | ||
if (pgType === undefined) { | ||
@@ -187,2 +192,24 @@ return "unknown"; | ||
} | ||
async function getPgEnums(sql) { | ||
const rows = await sql ` | ||
SELECT pg_type.oid, pg_type.typname, pg_enum.enumlabel | ||
FROM pg_type | ||
JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid | ||
WHERE pg_type.typtype = 'e' | ||
ORDER BY pg_type.typname, pg_enum.enumsortorder | ||
`; | ||
const map = new Map(); | ||
for (const row of rows) { | ||
const existing = map.get(row.oid); | ||
if (existing === undefined) { | ||
map.set(row.oid, { | ||
name: row.typname, | ||
values: [row.enumlabel], | ||
}); | ||
continue; | ||
} | ||
existing.values.push(row.enumlabel); | ||
} | ||
return map; | ||
} | ||
async function getPgTypes(sql) { | ||
@@ -192,3 +219,7 @@ const rows = await sql ` | ||
`; | ||
return rows; | ||
const map = new Map(); | ||
for (const row of rows) { | ||
map.set(row.oid, row); | ||
} | ||
return map; | ||
} | ||
@@ -195,0 +226,0 @@ async function getPgCols(sql) { |
export declare const colTypes: readonly ["int2", "int4", "int8", "smallint", "int", "bigint", "real", "float4", "float", "float8", "numeric", "decimal", "smallserial", "serial", "bigserial", "uuid", "text", "varchar", "char", "bpchar", "citext", "bit", "bool", "boolean", "date", "timestamp", "timestamptz", "time", "timetz", "interval", "inet", "cidr", "macaddr", "macaddr8", "money", "void", "json", "jsonb", "bytea"]; | ||
export declare type ColType = typeof colTypes[number]; | ||
export type ColType = typeof colTypes[number]; |
@@ -6,3 +6,3 @@ import { ParsedQuery } from "@ts-safeql/shared"; | ||
} | ||
export declare type RelationsWithJoinsMap = Map<string, Join[]>; | ||
export type RelationsWithJoinsMap = Map<string, Join[]>; | ||
export declare function getRelationsWithJoins(parsed: ParsedQuery.Root): RelationsWithJoinsMap; | ||
@@ -9,0 +9,0 @@ export interface FlattenedRelationWithJoins { |
{ | ||
"name": "@ts-safeql/generate", | ||
"version": "0.0.9", | ||
"version": "0.0.10", | ||
"description": "", | ||
@@ -13,12 +13,12 @@ "main": "lib/index.js", | ||
"devDependencies": { | ||
"@esbuild-kit/cjs-loader": "^2.3.3", | ||
"@esbuild-kit/cjs-loader": "^2.4.1", | ||
"@types/mocha": "^9.1.1", | ||
"@types/node": "^18.7.16", | ||
"@typescript-eslint/eslint-plugin": "^5.36.2", | ||
"@typescript-eslint/parser": "^5.36.2", | ||
"eslint": "^8.23.0", | ||
"libpg-query": "^13.2.5", | ||
"mocha": "^10.0.0", | ||
"tsx": "^3.9.0", | ||
"typescript": "^4.8.2" | ||
"@types/node": "^18.11.18", | ||
"@typescript-eslint/eslint-plugin": "^5.47.1", | ||
"@typescript-eslint/parser": "^5.47.1", | ||
"eslint": "^8.30.0", | ||
"libpg-query": "^13.3.1", | ||
"mocha": "^10.2.0", | ||
"tsx": "^3.12.1", | ||
"typescript": "^4.9.4" | ||
}, | ||
@@ -28,5 +28,5 @@ "dependencies": { | ||
"@ts-safeql/test-utils": "0.0.6", | ||
"fp-ts": "^2.12.3", | ||
"fp-ts": "^2.13.1", | ||
"pg-connection-string": "^2.5.0", | ||
"postgres": "^3.3.0" | ||
"postgres": "^3.3.2" | ||
}, | ||
@@ -33,0 +33,0 @@ "scripts": { |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
43190
666
Updatedfp-ts@^2.13.1
Updatedpostgres@^3.3.2