@ts-safeql/generate
Advanced tools
Comparing version 0.1.0 to 0.1.1
@@ -13,2 +13,8 @@ import { DuplicateColumnsError, IdentiferCase, ParsedQuery, PostgresError } from "@ts-safeql/shared"; | ||
type CacheKey = string; | ||
type OverrideValue = string | { | ||
parameter: string | { | ||
regex: string; | ||
}; | ||
return: string; | ||
}; | ||
export interface GenerateParams { | ||
@@ -22,8 +28,3 @@ sql: Sql; | ||
overrides?: Partial<{ | ||
types: Record<string, string | { | ||
parameter: string | { | ||
regex: string; | ||
}; | ||
return: string; | ||
}>; | ||
types: Record<string, OverrideValue>; | ||
}>; | ||
@@ -30,0 +31,0 @@ } |
@@ -8,7 +8,7 @@ "use strict"; | ||
const get_relations_with_joins_1 = require("./utils/get-relations-with-joins"); | ||
const typeResolversMapCache = new Map(); | ||
function createGenerator() { | ||
const cacheMap = new Map(); | ||
const overrideMap = new Map(); | ||
return { | ||
generate: (params) => generate(params, cacheMap), | ||
generate: (params) => generate(params, cacheMap, overrideMap), | ||
dropCacheKey: (cacheKey) => cacheMap.delete(cacheKey), | ||
@@ -19,18 +19,16 @@ clearCache: () => cacheMap.clear(), | ||
exports.createGenerator = createGenerator; | ||
async function generate(params, cacheMap) { | ||
const { sql, query, overrides, cacheMetadata = true } = params; | ||
const { pgColsByTableOidCache, pgTypes, pgEnums } = cacheMetadata | ||
? await (0, shared_1.getOrSetFromMap)({ | ||
map: cacheMap, | ||
key: params.cacheKey, | ||
value: () => getDatabaseMetadata(sql, overrides), | ||
}) | ||
: await getDatabaseMetadata(sql, overrides); | ||
const typeResolvers = cacheMetadata | ||
? await (0, shared_1.getOrSetFromMap)({ | ||
map: typeResolversMapCache, | ||
key: JSON.stringify(params.overrides), | ||
value: () => getTypeResolvers(overrides), | ||
}) | ||
: getTypeResolvers(overrides); | ||
async function generate(params, cacheMap, overrideMap) { | ||
const { sql, query, cacheKey, cacheMetadata = true } = params; | ||
const { pgColsByTableOidCache, pgTypes, pgEnums } = await (0, shared_1.getOrSetFromMapWithEnabled)({ | ||
shouldCache: cacheMetadata, | ||
map: cacheMap, | ||
key: cacheKey, | ||
value: () => getDatabaseMetadata(sql), | ||
}); | ||
const overrides = await (0, shared_1.getOrSetFromMapWithEnabled)({ | ||
shouldCache: cacheMetadata, | ||
map: overrideMap, | ||
key: JSON.stringify(params.overrides), | ||
value: () => { var _a, _b; return ({ types: new Map(Object.entries((_b = (_a = params.overrides) === null || _a === void 0 ? void 0 : _a.types) !== null && _b !== void 0 ? _b : {})) }); }, | ||
}); | ||
try { | ||
@@ -65,3 +63,3 @@ const result = await sql.unsafe(query, [], { prepare: true }).describe(); | ||
relationsWithJoins, | ||
typeResolvers, | ||
overrides, | ||
fieldTransform: params.fieldTransform, | ||
@@ -85,3 +83,3 @@ }), | ||
} | ||
async function getDatabaseMetadata(sql, overrides) { | ||
async function getDatabaseMetadata(sql) { | ||
const pgTypes = await getPgTypes(sql); | ||
@@ -91,12 +89,4 @@ const pgCols = await getPgCols(sql); | ||
const pgColsByTableOidCache = (0, shared_1.groupBy)(pgCols, "tableOid"); | ||
const typeResolvers = getTypeResolvers(overrides); | ||
return { pgTypes, pgCols, pgEnums, typeResolvers, pgColsByTableOidCache }; | ||
return { pgTypes, pgCols, pgEnums, 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) { | ||
@@ -109,3 +99,3 @@ const properties = params.columns.map((col) => { | ||
relationsWithJoins: params.relationsWithJoins, | ||
typeResolvers: params.typeResolvers, | ||
overrides: params.overrides, | ||
fieldTransform: params.fieldTransform, | ||
@@ -156,3 +146,3 @@ }); | ||
function mapColumnAnalysisResultToPropertySignature(params) { | ||
var _a, _b, _c, _d, _e; | ||
var _a, _b, _c, _d, _e, _f; | ||
const pgTypeOid = (_b = (_a = params.col.introspected) === null || _a === void 0 ? void 0 : _a.colBaseTypeOid) !== null && _b !== void 0 ? _b : params.col.described.type; | ||
@@ -164,6 +154,14 @@ const valueAsEnum = (_c = params.pgEnums | ||
pgTypes: params.pgTypes, | ||
typeResolvers: params.typeResolvers, | ||
}); | ||
const value = valueAsEnum !== null && valueAsEnum !== void 0 ? valueAsEnum : valueAsType; | ||
const key = (_d = params.col.described.name) !== null && _d !== void 0 ? _d : (_e = params.col.introspected) === null || _e === void 0 ? void 0 : _e.colName; | ||
const valueAsOverride = (() => { | ||
var _a, _b, _c; | ||
const pgType = params.pgTypes.get((_b = (_a = params.col.introspected) === null || _a === void 0 ? void 0 : _a.colTypeOid) !== null && _b !== void 0 ? _b : params.col.described.type); | ||
if (((_c = params.overrides) === null || _c === void 0 ? void 0 : _c.types) === undefined || pgType === undefined) { | ||
return undefined; | ||
} | ||
const override = params.overrides.types.get(pgType.name); | ||
return (0, shared_1.fmap)(override, (x) => (typeof x === "string" ? x : x.return)); | ||
})(); | ||
const value = (_d = valueAsOverride !== null && valueAsOverride !== void 0 ? valueAsOverride : valueAsEnum) !== null && _d !== void 0 ? _d : valueAsType; | ||
const key = (_e = params.col.described.name) !== null && _e !== void 0 ? _e : (_f = params.col.introspected) === null || _f === void 0 ? void 0 : _f.colName; | ||
let isNullable = false; | ||
@@ -189,3 +187,3 @@ if (params.col.introspected !== undefined) { | ||
} | ||
return getTsTypeFromPgType({ pgTypeName: pgType.name, typeResolvers: params.typeResolvers }); | ||
return getTsTypeFromPgType({ pgTypeName: pgType.name }); | ||
} | ||
@@ -195,3 +193,3 @@ function getTsTypeFromPgType(params) { | ||
const { isArray, pgType } = parsePgType(params.pgTypeName); | ||
const tsType = (_a = params.typeResolvers.get(pgType)) !== null && _a !== void 0 ? _a : "any"; | ||
const tsType = (_a = shared_1.defaultTypesMap.get(pgType)) !== null && _a !== void 0 ? _a : "any"; | ||
return isArray ? `${tsType}[]` : tsType; | ||
@@ -198,0 +196,0 @@ } |
{ | ||
"name": "@ts-safeql/generate", | ||
"version": "0.1.0", | ||
"version": "0.1.1", | ||
"description": "", | ||
@@ -25,4 +25,4 @@ "main": "lib/index.js", | ||
"dependencies": { | ||
"@ts-safeql/shared": "0.1.0", | ||
"@ts-safeql/test-utils": "0.0.10", | ||
"@ts-safeql/shared": "0.1.1", | ||
"@ts-safeql/test-utils": "0.0.11", | ||
"fp-ts": "^2.13.1", | ||
@@ -29,0 +29,0 @@ "pg-connection-string": "^2.5.0", |
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
48161
750
+ Added@ts-safeql/shared@0.1.1(transitive)
+ Added@ts-safeql/test-utils@0.0.11(transitive)
- Removed@ts-safeql/shared@0.1.0(transitive)
- Removed@ts-safeql/test-utils@0.0.10(transitive)
Updated@ts-safeql/shared@0.1.1
Updated@ts-safeql/test-utils@0.0.11