Socket
Socket
Sign inDemoInstall

@ts-safeql/generate

Package Overview
Dependencies
Maintainers
1
Versions
44
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ts-safeql/generate - npm Package Compare versions

Comparing version 0.0.15 to 0.1.0

7

lib/src/generate.d.ts

@@ -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 @@ }

38

lib/src/generate.js

@@ -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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc