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.9 to 0.0.10

10

lib/src/generate.d.ts
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

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