@ts-safeql/generate
Advanced tools
Comparing version 0.0.15 to 0.1.0
@@ -21,3 +21,8 @@ import { DuplicateColumnsError, IdentiferCase, ParsedQuery, PostgresError } from "@ts-safeql/shared"; | ||
overrides?: Partial<{ | ||
types: Record<string, string>; | ||
types: Record<string, string | { | ||
parameter: string | { | ||
regex: string; | ||
}; | ||
return: string; | ||
}>; | ||
}>; | ||
@@ -24,0 +29,0 @@ } |
@@ -8,2 +8,3 @@ "use strict"; | ||
const get_relations_with_joins_1 = require("./utils/get-relations-with-joins"); | ||
const typeResolversMapCache = new Map(); | ||
function createGenerator() { | ||
@@ -19,4 +20,3 @@ const cacheMap = new Map(); | ||
async function generate(params, cacheMap) { | ||
var _a; | ||
const { sql, query, cacheMetadata = true } = params; | ||
const { sql, query, overrides, cacheMetadata = true } = params; | ||
const { pgColsByTableOidCache, pgTypes, pgEnums } = cacheMetadata | ||
@@ -26,5 +26,12 @@ ? await (0, shared_1.getOrSetFromMap)({ | ||
key: params.cacheKey, | ||
value: () => getDatabaseMetadata(sql), | ||
value: () => getDatabaseMetadata(sql, overrides), | ||
}) | ||
: await getDatabaseMetadata(sql); | ||
: await getDatabaseMetadata(sql, overrides); | ||
const typeResolvers = cacheMetadata | ||
? await (0, shared_1.getOrSetFromMap)({ | ||
map: typeResolversMapCache, | ||
key: JSON.stringify(params.overrides), | ||
value: () => getTypeResolvers(overrides), | ||
}) | ||
: getTypeResolvers(overrides); | ||
try { | ||
@@ -53,3 +60,2 @@ const result = await sql.unsafe(query, [], { prepare: true }).describe(); | ||
}); | ||
const typesMap = Object.assign(Object.assign({}, shared_1.defaultTypeMapping), (_a = params.overrides) === null || _a === void 0 ? void 0 : _a.types); | ||
return fp_ts_1.either.right({ | ||
@@ -61,3 +67,3 @@ result: mapColumnAnalysisResultsToTypeLiteral({ | ||
relationsWithJoins, | ||
typesMap, | ||
typeResolvers, | ||
fieldTransform: params.fieldTransform, | ||
@@ -81,3 +87,3 @@ }), | ||
} | ||
async function getDatabaseMetadata(sql) { | ||
async function getDatabaseMetadata(sql, overrides) { | ||
const pgTypes = await getPgTypes(sql); | ||
@@ -87,4 +93,12 @@ const pgCols = await getPgCols(sql); | ||
const pgColsByTableOidCache = (0, shared_1.groupBy)(pgCols, "tableOid"); | ||
return { pgTypes, pgCols, pgEnums, pgColsByTableOidCache }; | ||
const typeResolvers = getTypeResolvers(overrides); | ||
return { pgTypes, pgCols, pgEnums, typeResolvers, pgColsByTableOidCache }; | ||
} | ||
function getTypeResolvers(overrides) { | ||
const typesMap = new Map(Object.entries(shared_1.defaultTypeMapping)); | ||
for (const [k, v] of Object.entries(Object.assign({}, overrides === null || overrides === void 0 ? void 0 : overrides.types))) { | ||
typesMap.set(k, typeof v === "string" ? v : v.return); | ||
} | ||
return typesMap; | ||
} | ||
function mapColumnAnalysisResultsToTypeLiteral(params) { | ||
@@ -97,3 +111,3 @@ const properties = params.columns.map((col) => { | ||
relationsWithJoins: params.relationsWithJoins, | ||
typesMap: params.typesMap, | ||
typeResolvers: params.typeResolvers, | ||
fieldTransform: params.fieldTransform, | ||
@@ -151,3 +165,3 @@ }); | ||
pgTypes: params.pgTypes, | ||
typesMap: params.typesMap, | ||
typeResolvers: params.typeResolvers, | ||
}); | ||
@@ -176,3 +190,3 @@ const value = valueAsEnum !== null && valueAsEnum !== void 0 ? valueAsEnum : valueAsType; | ||
} | ||
return getTsTypeFromPgType({ pgTypeName: pgType.name, typesMap: params.typesMap }); | ||
return getTsTypeFromPgType({ pgTypeName: pgType.name, typeResolvers: params.typeResolvers }); | ||
} | ||
@@ -182,3 +196,3 @@ function getTsTypeFromPgType(params) { | ||
const { isArray, pgType } = parsePgType(params.pgTypeName); | ||
const tsType = (_a = params.typesMap[pgType]) !== null && _a !== void 0 ? _a : "any"; | ||
const tsType = (_a = params.typeResolvers.get(pgType)) !== null && _a !== void 0 ? _a : "any"; | ||
return isArray ? `${tsType}[]` : tsType; | ||
@@ -185,0 +199,0 @@ } |
@@ -246,3 +246,3 @@ "use strict"; | ||
}); | ||
mocha_1.test.only("select enum", async () => { | ||
(0, mocha_1.test)("select enum", async () => { | ||
await testQuery({ | ||
@@ -249,0 +249,0 @@ query: `SELECT certification from caregiver_certification`, |
{ | ||
"name": "@ts-safeql/generate", | ||
"version": "0.0.15", | ||
"version": "0.1.0", | ||
"description": "", | ||
@@ -16,5 +16,5 @@ "main": "lib/index.js", | ||
"@types/node": "^18.15.11", | ||
"@typescript-eslint/eslint-plugin": "^5.59.0", | ||
"@typescript-eslint/parser": "^5.59.0", | ||
"eslint": "^8.38.0", | ||
"@typescript-eslint/eslint-plugin": "^5.59.2", | ||
"@typescript-eslint/parser": "^5.59.2", | ||
"eslint": "^8.39.0", | ||
"libpg-query": "^15.0.2", | ||
@@ -26,4 +26,4 @@ "mocha": "^10.2.0", | ||
"dependencies": { | ||
"@ts-safeql/shared": "0.0.9", | ||
"@ts-safeql/test-utils": "0.0.9", | ||
"@ts-safeql/shared": "0.1.0", | ||
"@ts-safeql/test-utils": "0.0.10", | ||
"fp-ts": "^2.13.1", | ||
@@ -30,0 +30,0 @@ "pg-connection-string": "^2.5.0", |
Sorry, the diff of this file is not supported yet
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
47878
751
+ Added@ts-safeql/shared@0.1.0(transitive)
+ Added@ts-safeql/test-utils@0.0.10(transitive)
+ Addedbalanced-match@1.0.2(transitive)
+ Addedbrace-expansion@2.0.1(transitive)
+ Addedminimatch@9.0.5(transitive)
- Removed@ts-safeql/shared@0.0.9(transitive)
- Removed@ts-safeql/test-utils@0.0.9(transitive)
Updated@ts-safeql/shared@0.1.0
Updated@ts-safeql/test-utils@0.0.10