@arcraz/common 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +373 -0
- package/dist/aws/bedrock/client-factory.d.ts +45 -0
- package/dist/aws/bedrock/client-factory.d.ts.map +1 -0
- package/dist/aws/bedrock/client-factory.js +113 -0
- package/dist/aws/bedrock/index.d.ts +3 -0
- package/dist/aws/bedrock/index.d.ts.map +1 -0
- package/dist/aws/bedrock/index.js +1 -0
- package/dist/aws/bedrock/types.d.ts +95 -0
- package/dist/aws/bedrock/types.d.ts.map +1 -0
- package/dist/aws/bedrock/types.js +1 -0
- package/dist/aws/cloudfront/index.d.ts +3 -0
- package/dist/aws/cloudfront/index.d.ts.map +1 -0
- package/dist/aws/cloudfront/index.js +1 -0
- package/dist/aws/cloudfront/signer-factory.d.ts +36 -0
- package/dist/aws/cloudfront/signer-factory.d.ts.map +1 -0
- package/dist/aws/cloudfront/signer-factory.js +75 -0
- package/dist/aws/cloudfront/types.d.ts +52 -0
- package/dist/aws/cloudfront/types.d.ts.map +1 -0
- package/dist/aws/cloudfront/types.js +1 -0
- package/dist/aws/s3/client-factory.d.ts +13 -0
- package/dist/aws/s3/client-factory.d.ts.map +1 -0
- package/dist/aws/s3/client-factory.js +25 -0
- package/dist/aws/s3/index.d.ts +4 -0
- package/dist/aws/s3/index.d.ts.map +1 -0
- package/dist/aws/s3/index.js +2 -0
- package/dist/aws/s3/operations.d.ts +106 -0
- package/dist/aws/s3/operations.d.ts.map +1 -0
- package/dist/aws/s3/operations.js +234 -0
- package/dist/aws/s3/types.d.ts +88 -0
- package/dist/aws/s3/types.d.ts.map +1 -0
- package/dist/aws/s3/types.js +1 -0
- package/dist/caches/api-cache.d.ts +40 -0
- package/dist/caches/api-cache.d.ts.map +1 -0
- package/dist/caches/api-cache.js +65 -0
- package/dist/caches/database-cache.d.ts +40 -0
- package/dist/caches/database-cache.d.ts.map +1 -0
- package/dist/caches/database-cache.js +65 -0
- package/dist/caches/index.d.ts +3 -0
- package/dist/caches/index.d.ts.map +1 -0
- package/dist/caches/index.js +2 -0
- package/dist/config/env-loader.d.ts +28 -0
- package/dist/config/env-loader.d.ts.map +1 -0
- package/dist/config/env-loader.js +39 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/schemas.d.ts +193 -0
- package/dist/config/schemas.d.ts.map +1 -0
- package/dist/config/schemas.js +92 -0
- package/dist/config/types.d.ts +23 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/constants/cache-durations.d.ts +29 -0
- package/dist/constants/cache-durations.d.ts.map +1 -0
- package/dist/constants/cache-durations.js +27 -0
- package/dist/constants/defaults.d.ts +50 -0
- package/dist/constants/defaults.d.ts.map +1 -0
- package/dist/constants/defaults.js +49 -0
- package/dist/constants/index.d.ts +4 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +2 -0
- package/dist/database/base-repository.d.ts +45 -0
- package/dist/database/base-repository.d.ts.map +1 -0
- package/dist/database/base-repository.js +57 -0
- package/dist/database/helpers/converter-helper.d.ts +9 -0
- package/dist/database/helpers/converter-helper.d.ts.map +1 -0
- package/dist/database/helpers/converter-helper.js +20 -0
- package/dist/database/helpers/index.d.ts +3 -0
- package/dist/database/helpers/index.d.ts.map +1 -0
- package/dist/database/helpers/index.js +2 -0
- package/dist/database/helpers/paged-response-helper.d.ts +33 -0
- package/dist/database/helpers/paged-response-helper.d.ts.map +1 -0
- package/dist/database/helpers/paged-response-helper.js +64 -0
- package/dist/database/index.d.ts +6 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +4 -0
- package/dist/database/pool-factory.d.ts +24 -0
- package/dist/database/pool-factory.d.ts.map +1 -0
- package/dist/database/pool-factory.js +91 -0
- package/dist/database/query-helpers.d.ts +36 -0
- package/dist/database/query-helpers.d.ts.map +1 -0
- package/dist/database/query-helpers.js +68 -0
- package/dist/database/types.d.ts +55 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +1 -0
- package/dist/helpers/data-obscurer.d.ts +18 -0
- package/dist/helpers/data-obscurer.d.ts.map +1 -0
- package/dist/helpers/data-obscurer.js +29 -0
- package/dist/helpers/enum-converters.d.ts +27 -0
- package/dist/helpers/enum-converters.d.ts.map +1 -0
- package/dist/helpers/enum-converters.js +37 -0
- package/dist/helpers/index.d.ts +5 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +3 -0
- package/dist/helpers/remove-sensitive-values.d.ts +20 -0
- package/dist/helpers/remove-sensitive-values.d.ts.map +1 -0
- package/dist/helpers/remove-sensitive-values.js +72 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/logging/formatters.d.ts +19 -0
- package/dist/logging/formatters.d.ts.map +1 -0
- package/dist/logging/formatters.js +94 -0
- package/dist/logging/index.d.ts +4 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +2 -0
- package/dist/logging/logger-factory.d.ts +8 -0
- package/dist/logging/logger-factory.d.ts.map +1 -0
- package/dist/logging/logger-factory.js +86 -0
- package/dist/logging/types.d.ts +52 -0
- package/dist/logging/types.d.ts.map +1 -0
- package/dist/logging/types.js +1 -0
- package/dist/rabbitmq/connection-factory.d.ts +8 -0
- package/dist/rabbitmq/connection-factory.d.ts.map +1 -0
- package/dist/rabbitmq/connection-factory.js +117 -0
- package/dist/rabbitmq/consumer.d.ts +44 -0
- package/dist/rabbitmq/consumer.d.ts.map +1 -0
- package/dist/rabbitmq/consumer.js +107 -0
- package/dist/rabbitmq/index.d.ts +6 -0
- package/dist/rabbitmq/index.d.ts.map +1 -0
- package/dist/rabbitmq/index.js +4 -0
- package/dist/rabbitmq/namespace-helpers.d.ts +33 -0
- package/dist/rabbitmq/namespace-helpers.d.ts.map +1 -0
- package/dist/rabbitmq/namespace-helpers.js +44 -0
- package/dist/rabbitmq/publisher.d.ts +27 -0
- package/dist/rabbitmq/publisher.d.ts.map +1 -0
- package/dist/rabbitmq/publisher.js +94 -0
- package/dist/rabbitmq/types.d.ts +94 -0
- package/dist/rabbitmq/types.d.ts.map +1 -0
- package/dist/rabbitmq/types.js +1 -0
- package/dist/redis/client-factory.d.ts +14 -0
- package/dist/redis/client-factory.d.ts.map +1 -0
- package/dist/redis/client-factory.js +98 -0
- package/dist/redis/index.d.ts +6 -0
- package/dist/redis/index.d.ts.map +1 -0
- package/dist/redis/index.js +4 -0
- package/dist/redis/namespace-helpers.d.ts +33 -0
- package/dist/redis/namespace-helpers.d.ts.map +1 -0
- package/dist/redis/namespace-helpers.js +43 -0
- package/dist/redis/operations/index.d.ts +3 -0
- package/dist/redis/operations/index.d.ts.map +1 -0
- package/dist/redis/operations/index.js +2 -0
- package/dist/redis/operations/list.d.ts +102 -0
- package/dist/redis/operations/list.d.ts.map +1 -0
- package/dist/redis/operations/list.js +136 -0
- package/dist/redis/operations/standard.d.ts +85 -0
- package/dist/redis/operations/standard.d.ts.map +1 -0
- package/dist/redis/operations/standard.js +136 -0
- package/dist/redis/types.d.ts +81 -0
- package/dist/redis/types.d.ts.map +1 -0
- package/dist/redis/types.js +8 -0
- package/dist/security/cors-factory.d.ts +28 -0
- package/dist/security/cors-factory.d.ts.map +1 -0
- package/dist/security/cors-factory.js +73 -0
- package/dist/security/helmet-factory.d.ts +14 -0
- package/dist/security/helmet-factory.d.ts.map +1 -0
- package/dist/security/helmet-factory.js +80 -0
- package/dist/security/index.d.ts +4 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +2 -0
- package/dist/security/types.d.ts +103 -0
- package/dist/security/types.d.ts.map +1 -0
- package/dist/security/types.js +1 -0
- package/dist/types/custom-types.d.ts +102 -0
- package/dist/types/custom-types.d.ts.map +1 -0
- package/dist/types/custom-types.js +45 -0
- package/dist/types/enums.d.ts +26 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +30 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/package.json +154 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Database configuration schema
|
|
4
|
+
*/
|
|
5
|
+
export declare const DatabaseConfigSchema: z.ZodObject<{
|
|
6
|
+
name: z.ZodString;
|
|
7
|
+
host: z.ZodString;
|
|
8
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
9
|
+
database: z.ZodString;
|
|
10
|
+
user: z.ZodString;
|
|
11
|
+
password: z.ZodString;
|
|
12
|
+
ssl: z.ZodDefault<z.ZodBoolean>;
|
|
13
|
+
maxConnections: z.ZodDefault<z.ZodNumber>;
|
|
14
|
+
idleTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
15
|
+
connectionTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
name: string;
|
|
18
|
+
host: string;
|
|
19
|
+
port: number;
|
|
20
|
+
database: string;
|
|
21
|
+
user: string;
|
|
22
|
+
password: string;
|
|
23
|
+
ssl: boolean;
|
|
24
|
+
maxConnections: number;
|
|
25
|
+
idleTimeoutMs: number;
|
|
26
|
+
connectionTimeoutMs: number;
|
|
27
|
+
}, {
|
|
28
|
+
name: string;
|
|
29
|
+
host: string;
|
|
30
|
+
database: string;
|
|
31
|
+
user: string;
|
|
32
|
+
password: string;
|
|
33
|
+
port?: number | undefined;
|
|
34
|
+
ssl?: boolean | undefined;
|
|
35
|
+
maxConnections?: number | undefined;
|
|
36
|
+
idleTimeoutMs?: number | undefined;
|
|
37
|
+
connectionTimeoutMs?: number | undefined;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Redis configuration schema - supports single instance or cluster
|
|
41
|
+
*/
|
|
42
|
+
export declare const RedisConfigSchema: z.ZodObject<{
|
|
43
|
+
host: z.ZodDefault<z.ZodString>;
|
|
44
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
45
|
+
password: z.ZodOptional<z.ZodString>;
|
|
46
|
+
db: z.ZodDefault<z.ZodNumber>;
|
|
47
|
+
keyPrefix: z.ZodOptional<z.ZodString>;
|
|
48
|
+
tls: z.ZodDefault<z.ZodBoolean>;
|
|
49
|
+
connectTimeout: z.ZodDefault<z.ZodNumber>;
|
|
50
|
+
commandTimeout: z.ZodDefault<z.ZodNumber>;
|
|
51
|
+
retryDelayMs: z.ZodDefault<z.ZodNumber>;
|
|
52
|
+
maxRetries: z.ZodDefault<z.ZodNumber>;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
host: string;
|
|
55
|
+
port: number;
|
|
56
|
+
db: number;
|
|
57
|
+
tls: boolean;
|
|
58
|
+
connectTimeout: number;
|
|
59
|
+
commandTimeout: number;
|
|
60
|
+
retryDelayMs: number;
|
|
61
|
+
maxRetries: number;
|
|
62
|
+
password?: string | undefined;
|
|
63
|
+
keyPrefix?: string | undefined;
|
|
64
|
+
}, {
|
|
65
|
+
host?: string | undefined;
|
|
66
|
+
port?: number | undefined;
|
|
67
|
+
password?: string | undefined;
|
|
68
|
+
db?: number | undefined;
|
|
69
|
+
keyPrefix?: string | undefined;
|
|
70
|
+
tls?: boolean | undefined;
|
|
71
|
+
connectTimeout?: number | undefined;
|
|
72
|
+
commandTimeout?: number | undefined;
|
|
73
|
+
retryDelayMs?: number | undefined;
|
|
74
|
+
maxRetries?: number | undefined;
|
|
75
|
+
}>;
|
|
76
|
+
export declare const RedisClusterConfigSchema: z.ZodObject<{
|
|
77
|
+
nodes: z.ZodArray<z.ZodObject<{
|
|
78
|
+
host: z.ZodString;
|
|
79
|
+
port: z.ZodNumber;
|
|
80
|
+
}, "strip", z.ZodTypeAny, {
|
|
81
|
+
host: string;
|
|
82
|
+
port: number;
|
|
83
|
+
}, {
|
|
84
|
+
host: string;
|
|
85
|
+
port: number;
|
|
86
|
+
}>, "many">;
|
|
87
|
+
password: z.ZodOptional<z.ZodString>;
|
|
88
|
+
keyPrefix: z.ZodOptional<z.ZodString>;
|
|
89
|
+
tls: z.ZodDefault<z.ZodBoolean>;
|
|
90
|
+
connectTimeout: z.ZodDefault<z.ZodNumber>;
|
|
91
|
+
commandTimeout: z.ZodDefault<z.ZodNumber>;
|
|
92
|
+
}, "strip", z.ZodTypeAny, {
|
|
93
|
+
tls: boolean;
|
|
94
|
+
connectTimeout: number;
|
|
95
|
+
commandTimeout: number;
|
|
96
|
+
nodes: {
|
|
97
|
+
host: string;
|
|
98
|
+
port: number;
|
|
99
|
+
}[];
|
|
100
|
+
password?: string | undefined;
|
|
101
|
+
keyPrefix?: string | undefined;
|
|
102
|
+
}, {
|
|
103
|
+
nodes: {
|
|
104
|
+
host: string;
|
|
105
|
+
port: number;
|
|
106
|
+
}[];
|
|
107
|
+
password?: string | undefined;
|
|
108
|
+
keyPrefix?: string | undefined;
|
|
109
|
+
tls?: boolean | undefined;
|
|
110
|
+
connectTimeout?: number | undefined;
|
|
111
|
+
commandTimeout?: number | undefined;
|
|
112
|
+
}>;
|
|
113
|
+
/**
|
|
114
|
+
* RabbitMQ configuration schema
|
|
115
|
+
*/
|
|
116
|
+
export declare const RabbitMQConfigSchema: z.ZodObject<{
|
|
117
|
+
host: z.ZodString;
|
|
118
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
119
|
+
username: z.ZodString;
|
|
120
|
+
password: z.ZodString;
|
|
121
|
+
vhost: z.ZodDefault<z.ZodString>;
|
|
122
|
+
heartbeat: z.ZodDefault<z.ZodNumber>;
|
|
123
|
+
connectionTimeout: z.ZodDefault<z.ZodNumber>;
|
|
124
|
+
reconnectDelayMs: z.ZodDefault<z.ZodNumber>;
|
|
125
|
+
maxReconnectAttempts: z.ZodDefault<z.ZodNumber>;
|
|
126
|
+
prefetchCount: z.ZodDefault<z.ZodNumber>;
|
|
127
|
+
protocol: z.ZodDefault<z.ZodEnum<["amqp", "amqps"]>>;
|
|
128
|
+
}, "strip", z.ZodTypeAny, {
|
|
129
|
+
host: string;
|
|
130
|
+
port: number;
|
|
131
|
+
password: string;
|
|
132
|
+
username: string;
|
|
133
|
+
vhost: string;
|
|
134
|
+
heartbeat: number;
|
|
135
|
+
connectionTimeout: number;
|
|
136
|
+
reconnectDelayMs: number;
|
|
137
|
+
maxReconnectAttempts: number;
|
|
138
|
+
prefetchCount: number;
|
|
139
|
+
protocol: "amqp" | "amqps";
|
|
140
|
+
}, {
|
|
141
|
+
host: string;
|
|
142
|
+
password: string;
|
|
143
|
+
username: string;
|
|
144
|
+
port?: number | undefined;
|
|
145
|
+
vhost?: string | undefined;
|
|
146
|
+
heartbeat?: number | undefined;
|
|
147
|
+
connectionTimeout?: number | undefined;
|
|
148
|
+
reconnectDelayMs?: number | undefined;
|
|
149
|
+
maxReconnectAttempts?: number | undefined;
|
|
150
|
+
prefetchCount?: number | undefined;
|
|
151
|
+
protocol?: "amqp" | "amqps" | undefined;
|
|
152
|
+
}>;
|
|
153
|
+
/**
|
|
154
|
+
* Logging configuration schema
|
|
155
|
+
*/
|
|
156
|
+
export declare const LoggingConfigSchema: z.ZodObject<{
|
|
157
|
+
level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
|
|
158
|
+
format: z.ZodDefault<z.ZodEnum<["json", "logfmt", "pretty"]>>;
|
|
159
|
+
timestamp: z.ZodDefault<z.ZodBoolean>;
|
|
160
|
+
colorize: z.ZodDefault<z.ZodBoolean>;
|
|
161
|
+
}, "strip", z.ZodTypeAny, {
|
|
162
|
+
level: "debug" | "info" | "warn" | "error";
|
|
163
|
+
format: "json" | "logfmt" | "pretty";
|
|
164
|
+
timestamp: boolean;
|
|
165
|
+
colorize: boolean;
|
|
166
|
+
}, {
|
|
167
|
+
level?: "debug" | "info" | "warn" | "error" | undefined;
|
|
168
|
+
format?: "json" | "logfmt" | "pretty" | undefined;
|
|
169
|
+
timestamp?: boolean | undefined;
|
|
170
|
+
colorize?: boolean | undefined;
|
|
171
|
+
}>;
|
|
172
|
+
/**
|
|
173
|
+
* Validates configuration against a schema
|
|
174
|
+
* @param schema The Zod schema to validate against
|
|
175
|
+
* @param data The data to validate
|
|
176
|
+
* @returns Validated and typed configuration
|
|
177
|
+
* @throws ZodError if validation fails
|
|
178
|
+
*/
|
|
179
|
+
export declare function validateConfig<T extends z.ZodType>(schema: T, data: unknown): z.infer<T>;
|
|
180
|
+
/**
|
|
181
|
+
* Safely validates configuration, returning result object instead of throwing
|
|
182
|
+
* @param schema The Zod schema to validate against
|
|
183
|
+
* @param data The data to validate
|
|
184
|
+
* @returns Object with success flag and either data or error
|
|
185
|
+
*/
|
|
186
|
+
export declare function safeValidateConfig<T extends z.ZodType>(schema: T, data: unknown): {
|
|
187
|
+
success: true;
|
|
188
|
+
data: z.infer<T>;
|
|
189
|
+
} | {
|
|
190
|
+
success: false;
|
|
191
|
+
error: z.ZodError;
|
|
192
|
+
};
|
|
193
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/config/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW5B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcnC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAExF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAA;CAAE,CAM7J"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Database configuration schema
|
|
4
|
+
*/
|
|
5
|
+
export const DatabaseConfigSchema = z.object({
|
|
6
|
+
name: z.string().min(1),
|
|
7
|
+
host: z.string().min(1),
|
|
8
|
+
port: z.number().int().positive().default(5432),
|
|
9
|
+
database: z.string().min(1),
|
|
10
|
+
user: z.string().min(1),
|
|
11
|
+
password: z.string(),
|
|
12
|
+
ssl: z.boolean().default(false),
|
|
13
|
+
maxConnections: z.number().int().positive().default(10),
|
|
14
|
+
idleTimeoutMs: z.number().int().nonnegative().default(30000),
|
|
15
|
+
connectionTimeoutMs: z.number().int().positive().default(5000)
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* Redis configuration schema - supports single instance or cluster
|
|
19
|
+
*/
|
|
20
|
+
export const RedisConfigSchema = z.object({
|
|
21
|
+
host: z.string().min(1).default('localhost'),
|
|
22
|
+
port: z.number().int().positive().default(6379),
|
|
23
|
+
password: z.string().optional(),
|
|
24
|
+
db: z.number().int().nonnegative().default(0),
|
|
25
|
+
keyPrefix: z.string().optional(),
|
|
26
|
+
tls: z.boolean().default(false),
|
|
27
|
+
connectTimeout: z.number().int().positive().default(10000),
|
|
28
|
+
commandTimeout: z.number().int().positive().default(5000),
|
|
29
|
+
retryDelayMs: z.number().int().positive().default(50),
|
|
30
|
+
maxRetries: z.number().int().nonnegative().default(10)
|
|
31
|
+
});
|
|
32
|
+
export const RedisClusterConfigSchema = z.object({
|
|
33
|
+
nodes: z
|
|
34
|
+
.array(z.object({
|
|
35
|
+
host: z.string().min(1),
|
|
36
|
+
port: z.number().int().positive()
|
|
37
|
+
}))
|
|
38
|
+
.min(1),
|
|
39
|
+
password: z.string().optional(),
|
|
40
|
+
keyPrefix: z.string().optional(),
|
|
41
|
+
tls: z.boolean().default(false),
|
|
42
|
+
connectTimeout: z.number().int().positive().default(10000),
|
|
43
|
+
commandTimeout: z.number().int().positive().default(5000)
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* RabbitMQ configuration schema
|
|
47
|
+
*/
|
|
48
|
+
export const RabbitMQConfigSchema = z.object({
|
|
49
|
+
host: z.string().min(1),
|
|
50
|
+
port: z.number().int().positive().default(5672),
|
|
51
|
+
username: z.string().min(1),
|
|
52
|
+
password: z.string(),
|
|
53
|
+
vhost: z.string().default('/'),
|
|
54
|
+
heartbeat: z.number().int().nonnegative().default(60),
|
|
55
|
+
connectionTimeout: z.number().int().positive().default(30000),
|
|
56
|
+
reconnectDelayMs: z.number().int().positive().default(5000),
|
|
57
|
+
maxReconnectAttempts: z.number().int().nonnegative().default(10),
|
|
58
|
+
prefetchCount: z.number().int().positive().default(1),
|
|
59
|
+
protocol: z.enum(['amqp', 'amqps']).default('amqp')
|
|
60
|
+
});
|
|
61
|
+
/**
|
|
62
|
+
* Logging configuration schema
|
|
63
|
+
*/
|
|
64
|
+
export const LoggingConfigSchema = z.object({
|
|
65
|
+
level: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
|
|
66
|
+
format: z.enum(['json', 'logfmt', 'pretty']).default('json'),
|
|
67
|
+
timestamp: z.boolean().default(true),
|
|
68
|
+
colorize: z.boolean().default(false)
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* Validates configuration against a schema
|
|
72
|
+
* @param schema The Zod schema to validate against
|
|
73
|
+
* @param data The data to validate
|
|
74
|
+
* @returns Validated and typed configuration
|
|
75
|
+
* @throws ZodError if validation fails
|
|
76
|
+
*/
|
|
77
|
+
export function validateConfig(schema, data) {
|
|
78
|
+
return schema.parse(data);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Safely validates configuration, returning result object instead of throwing
|
|
82
|
+
* @param schema The Zod schema to validate against
|
|
83
|
+
* @param data The data to validate
|
|
84
|
+
* @returns Object with success flag and either data or error
|
|
85
|
+
*/
|
|
86
|
+
export function safeValidateConfig(schema, data) {
|
|
87
|
+
const result = schema.safeParse(data);
|
|
88
|
+
if (result.success) {
|
|
89
|
+
return { success: true, data: result.data };
|
|
90
|
+
}
|
|
91
|
+
return { success: false, error: result.error };
|
|
92
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { DatabaseConfigSchema, RedisConfigSchema, RedisClusterConfigSchema, RabbitMQConfigSchema, LoggingConfigSchema } from './schemas.js';
|
|
3
|
+
/**
|
|
4
|
+
* Database configuration type
|
|
5
|
+
*/
|
|
6
|
+
export type DatabaseConfig = z.infer<typeof DatabaseConfigSchema>;
|
|
7
|
+
/**
|
|
8
|
+
* Redis single instance configuration type
|
|
9
|
+
*/
|
|
10
|
+
export type RedisConfig = z.infer<typeof RedisConfigSchema>;
|
|
11
|
+
/**
|
|
12
|
+
* Redis cluster configuration type
|
|
13
|
+
*/
|
|
14
|
+
export type RedisClusterConfig = z.infer<typeof RedisClusterConfigSchema>;
|
|
15
|
+
/**
|
|
16
|
+
* RabbitMQ configuration type
|
|
17
|
+
*/
|
|
18
|
+
export type RabbitMQConfig = z.infer<typeof RabbitMQConfigSchema>;
|
|
19
|
+
/**
|
|
20
|
+
* Logging configuration type
|
|
21
|
+
*/
|
|
22
|
+
export type LoggingConfig = z.infer<typeof LoggingConfigSchema>;
|
|
23
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE5I;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard cache duration constants in seconds
|
|
3
|
+
*/
|
|
4
|
+
export declare const CACHE_DURATION: {
|
|
5
|
+
/** 1 minute */
|
|
6
|
+
readonly ONE_MINUTE: 60;
|
|
7
|
+
/** 5 minutes */
|
|
8
|
+
readonly FIVE_MINUTES: 300;
|
|
9
|
+
/** 15 minutes */
|
|
10
|
+
readonly FIFTEEN_MINUTES: 900;
|
|
11
|
+
/** 30 minutes */
|
|
12
|
+
readonly THIRTY_MINUTES: 1800;
|
|
13
|
+
/** 1 hour */
|
|
14
|
+
readonly ONE_HOUR: 3600;
|
|
15
|
+
/** 2 hours */
|
|
16
|
+
readonly TWO_HOURS: 7200;
|
|
17
|
+
/** 6 hours */
|
|
18
|
+
readonly SIX_HOURS: 21600;
|
|
19
|
+
/** 12 hours */
|
|
20
|
+
readonly TWELVE_HOURS: 43200;
|
|
21
|
+
/** 1 day */
|
|
22
|
+
readonly ONE_DAY: 86400;
|
|
23
|
+
/** 1 week */
|
|
24
|
+
readonly ONE_WEEK: 604800;
|
|
25
|
+
/** 30 days */
|
|
26
|
+
readonly ONE_MONTH: 2592000;
|
|
27
|
+
};
|
|
28
|
+
export type CacheDuration = (typeof CACHE_DURATION)[keyof typeof CACHE_DURATION];
|
|
29
|
+
//# sourceMappingURL=cache-durations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-durations.d.ts","sourceRoot":"","sources":["../../src/constants/cache-durations.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,eAAe;;IAEf,gBAAgB;;IAEhB,iBAAiB;;IAEjB,iBAAiB;;IAEjB,aAAa;;IAEb,cAAc;;IAEd,cAAc;;IAEd,eAAe;;IAEf,YAAY;;IAEZ,aAAa;;IAEb,cAAc;;CAEN,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard cache duration constants in seconds
|
|
3
|
+
*/
|
|
4
|
+
export const CACHE_DURATION = {
|
|
5
|
+
/** 1 minute */
|
|
6
|
+
ONE_MINUTE: 60,
|
|
7
|
+
/** 5 minutes */
|
|
8
|
+
FIVE_MINUTES: 300,
|
|
9
|
+
/** 15 minutes */
|
|
10
|
+
FIFTEEN_MINUTES: 900,
|
|
11
|
+
/** 30 minutes */
|
|
12
|
+
THIRTY_MINUTES: 1800,
|
|
13
|
+
/** 1 hour */
|
|
14
|
+
ONE_HOUR: 3600,
|
|
15
|
+
/** 2 hours */
|
|
16
|
+
TWO_HOURS: 7200,
|
|
17
|
+
/** 6 hours */
|
|
18
|
+
SIX_HOURS: 21600,
|
|
19
|
+
/** 12 hours */
|
|
20
|
+
TWELVE_HOURS: 43200,
|
|
21
|
+
/** 1 day */
|
|
22
|
+
ONE_DAY: 86400,
|
|
23
|
+
/** 1 week */
|
|
24
|
+
ONE_WEEK: 604800,
|
|
25
|
+
/** 30 days */
|
|
26
|
+
ONE_MONTH: 2592000
|
|
27
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default pool sizes for database connections
|
|
3
|
+
*/
|
|
4
|
+
export declare const DATABASE_DEFAULTS: {
|
|
5
|
+
readonly MAX_CONNECTIONS: 10;
|
|
6
|
+
readonly IDLE_TIMEOUT_MS: 30000;
|
|
7
|
+
readonly CONNECTION_TIMEOUT_MS: 5000;
|
|
8
|
+
readonly STATEMENT_TIMEOUT_MS: 30000;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Default Redis configuration values
|
|
12
|
+
*/
|
|
13
|
+
export declare const REDIS_DEFAULTS: {
|
|
14
|
+
readonly PORT: 6379;
|
|
15
|
+
readonly DB: 0;
|
|
16
|
+
readonly CONNECT_TIMEOUT_MS: 10000;
|
|
17
|
+
readonly COMMAND_TIMEOUT_MS: 5000;
|
|
18
|
+
readonly RETRY_DELAY_MS: 50;
|
|
19
|
+
readonly MAX_RETRIES: 10;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Default RabbitMQ configuration values
|
|
23
|
+
*/
|
|
24
|
+
export declare const RABBITMQ_DEFAULTS: {
|
|
25
|
+
readonly PORT: 5672;
|
|
26
|
+
readonly HEARTBEAT: 60;
|
|
27
|
+
readonly CONNECTION_TIMEOUT_MS: 30000;
|
|
28
|
+
readonly RECONNECT_DELAY_MS: 5000;
|
|
29
|
+
readonly MAX_RECONNECT_ATTEMPTS: 10;
|
|
30
|
+
readonly PREFETCH_COUNT: 1;
|
|
31
|
+
readonly DEFAULT_DELAY_EXCHANGE: "delayed-exchange";
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Default retry configuration
|
|
35
|
+
*/
|
|
36
|
+
export declare const RETRY_DEFAULTS: {
|
|
37
|
+
readonly MAX_ATTEMPTS: 3;
|
|
38
|
+
readonly INITIAL_DELAY_MS: 1000;
|
|
39
|
+
readonly MAX_DELAY_MS: 30000;
|
|
40
|
+
readonly BACKOFF_MULTIPLIER: 2;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Default pagination values
|
|
44
|
+
*/
|
|
45
|
+
export declare const PAGINATION_DEFAULTS: {
|
|
46
|
+
readonly PAGE_SIZE: 50;
|
|
47
|
+
readonly MAX_PAGE_SIZE: 1000;
|
|
48
|
+
readonly DEFAULT_PAGE: 1;
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;CAQpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default pool sizes for database connections
|
|
3
|
+
*/
|
|
4
|
+
export const DATABASE_DEFAULTS = {
|
|
5
|
+
MAX_CONNECTIONS: 10,
|
|
6
|
+
IDLE_TIMEOUT_MS: 30000,
|
|
7
|
+
CONNECTION_TIMEOUT_MS: 5000,
|
|
8
|
+
STATEMENT_TIMEOUT_MS: 30000
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Default Redis configuration values
|
|
12
|
+
*/
|
|
13
|
+
export const REDIS_DEFAULTS = {
|
|
14
|
+
PORT: 6379,
|
|
15
|
+
DB: 0,
|
|
16
|
+
CONNECT_TIMEOUT_MS: 10000,
|
|
17
|
+
COMMAND_TIMEOUT_MS: 5000,
|
|
18
|
+
RETRY_DELAY_MS: 50,
|
|
19
|
+
MAX_RETRIES: 10
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Default RabbitMQ configuration values
|
|
23
|
+
*/
|
|
24
|
+
export const RABBITMQ_DEFAULTS = {
|
|
25
|
+
PORT: 5672,
|
|
26
|
+
HEARTBEAT: 60,
|
|
27
|
+
CONNECTION_TIMEOUT_MS: 30000,
|
|
28
|
+
RECONNECT_DELAY_MS: 5000,
|
|
29
|
+
MAX_RECONNECT_ATTEMPTS: 10,
|
|
30
|
+
PREFETCH_COUNT: 1,
|
|
31
|
+
DEFAULT_DELAY_EXCHANGE: 'delayed-exchange'
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Default retry configuration
|
|
35
|
+
*/
|
|
36
|
+
export const RETRY_DEFAULTS = {
|
|
37
|
+
MAX_ATTEMPTS: 3,
|
|
38
|
+
INITIAL_DELAY_MS: 1000,
|
|
39
|
+
MAX_DELAY_MS: 30000,
|
|
40
|
+
BACKOFF_MULTIPLIER: 2
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Default pagination values
|
|
44
|
+
*/
|
|
45
|
+
export const PAGINATION_DEFAULTS = {
|
|
46
|
+
PAGE_SIZE: 50,
|
|
47
|
+
MAX_PAGE_SIZE: 1000,
|
|
48
|
+
DEFAULT_PAGE: 1
|
|
49
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { CACHE_DURATION } from './cache-durations.js';
|
|
2
|
+
export type { CacheDuration } from './cache-durations.js';
|
|
3
|
+
export { DATABASE_DEFAULTS, REDIS_DEFAULTS, RABBITMQ_DEFAULTS, RETRY_DEFAULTS, PAGINATION_DEFAULTS } from './defaults.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { DatabasePool } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Abstract base repository class for database operations
|
|
4
|
+
* Extend this class and inject DatabasePool instances via constructor
|
|
5
|
+
*/
|
|
6
|
+
export declare abstract class BaseRepository {
|
|
7
|
+
protected readonly db: DatabasePool;
|
|
8
|
+
protected readonly readOnlyDb: DatabasePool;
|
|
9
|
+
constructor(db: DatabasePool, readOnlyDb?: DatabasePool);
|
|
10
|
+
/**
|
|
11
|
+
* Execute a query on the main database
|
|
12
|
+
* @param text SQL query
|
|
13
|
+
* @param values Query parameters
|
|
14
|
+
* @returns Array of camelCased results
|
|
15
|
+
*/
|
|
16
|
+
protected query<T>(text: string, values?: unknown[]): Promise<T[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Execute a query on the read-only database
|
|
19
|
+
* @param text SQL query
|
|
20
|
+
* @param values Query parameters
|
|
21
|
+
* @returns Array of camelCased results
|
|
22
|
+
*/
|
|
23
|
+
protected queryReadOnly<T>(text: string, values?: unknown[]): Promise<T[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Execute a query and return a single result
|
|
26
|
+
* @param text SQL query
|
|
27
|
+
* @param values Query parameters
|
|
28
|
+
* @returns Single camelCased result or null
|
|
29
|
+
*/
|
|
30
|
+
protected queryOne<T>(text: string, values?: unknown[]): Promise<T | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Execute a query on read-only db and return a single result
|
|
33
|
+
* @param text SQL query
|
|
34
|
+
* @param values Query parameters
|
|
35
|
+
* @returns Single camelCased result or null
|
|
36
|
+
*/
|
|
37
|
+
protected queryOneReadOnly<T>(text: string, values?: unknown[]): Promise<T | null>;
|
|
38
|
+
/**
|
|
39
|
+
* Execute a transaction on the main database
|
|
40
|
+
* @param fn Transaction function receiving a client
|
|
41
|
+
* @returns Transaction result
|
|
42
|
+
*/
|
|
43
|
+
protected transaction<T>(fn: (client: import('pg').PoolClient) => Promise<T>): Promise<T>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=base-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-repository.d.ts","sourceRoot":"","sources":["../../src/database/base-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;GAGG;AACH,8BAAsB,cAAc;IAClC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;gBAEhC,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,YAAY;IAKvD;;;;;OAKG;cACa,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIxE;;;;;OAKG;cACa,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIhF;;;;;OAKG;cACa,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAIhF;;;;;OAKG;cACa,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAIxF;;;;OAIG;cACa,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAGhG"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { queryWithCamelCase, queryOneWithCamelCase } from './pool-factory.js';
|
|
2
|
+
/**
|
|
3
|
+
* Abstract base repository class for database operations
|
|
4
|
+
* Extend this class and inject DatabasePool instances via constructor
|
|
5
|
+
*/
|
|
6
|
+
export class BaseRepository {
|
|
7
|
+
db;
|
|
8
|
+
readOnlyDb;
|
|
9
|
+
constructor(db, readOnlyDb) {
|
|
10
|
+
this.db = db;
|
|
11
|
+
this.readOnlyDb = readOnlyDb ?? db;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Execute a query on the main database
|
|
15
|
+
* @param text SQL query
|
|
16
|
+
* @param values Query parameters
|
|
17
|
+
* @returns Array of camelCased results
|
|
18
|
+
*/
|
|
19
|
+
async query(text, values) {
|
|
20
|
+
return queryWithCamelCase(this.db, text, values);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Execute a query on the read-only database
|
|
24
|
+
* @param text SQL query
|
|
25
|
+
* @param values Query parameters
|
|
26
|
+
* @returns Array of camelCased results
|
|
27
|
+
*/
|
|
28
|
+
async queryReadOnly(text, values) {
|
|
29
|
+
return queryWithCamelCase(this.readOnlyDb, text, values);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Execute a query and return a single result
|
|
33
|
+
* @param text SQL query
|
|
34
|
+
* @param values Query parameters
|
|
35
|
+
* @returns Single camelCased result or null
|
|
36
|
+
*/
|
|
37
|
+
async queryOne(text, values) {
|
|
38
|
+
return queryOneWithCamelCase(this.db, text, values);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Execute a query on read-only db and return a single result
|
|
42
|
+
* @param text SQL query
|
|
43
|
+
* @param values Query parameters
|
|
44
|
+
* @returns Single camelCased result or null
|
|
45
|
+
*/
|
|
46
|
+
async queryOneReadOnly(text, values) {
|
|
47
|
+
return queryOneWithCamelCase(this.readOnlyDb, text, values);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Execute a transaction on the main database
|
|
51
|
+
* @param fn Transaction function receiving a client
|
|
52
|
+
* @returns Transaction result
|
|
53
|
+
*/
|
|
54
|
+
async transaction(fn) {
|
|
55
|
+
return this.db.transaction(fn);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { KeyValuePair } from '../../types/custom-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Converts PostgreSQL array fields in an object to TypeScript arrays
|
|
4
|
+
* @param keysTypes Array of key-value pairs specifying which fields to convert
|
|
5
|
+
* @param originalObject Object containing fields to convert
|
|
6
|
+
* @returns Object with converted array fields
|
|
7
|
+
*/
|
|
8
|
+
export declare function ConverterHelper<T>(keysTypes: KeyValuePair[], originalObject: T): T;
|
|
9
|
+
//# sourceMappingURL=converter-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter-helper.d.ts","sourceRoot":"","sources":["../../../src/database/helpers/converter-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,CAelF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { parsePostgresArray } from '../query-helpers.js';
|
|
2
|
+
/**
|
|
3
|
+
* Converts PostgreSQL array fields in an object to TypeScript arrays
|
|
4
|
+
* @param keysTypes Array of key-value pairs specifying which fields to convert
|
|
5
|
+
* @param originalObject Object containing fields to convert
|
|
6
|
+
* @returns Object with converted array fields
|
|
7
|
+
*/
|
|
8
|
+
export function ConverterHelper(keysTypes, originalObject) {
|
|
9
|
+
if (!originalObject) {
|
|
10
|
+
return originalObject;
|
|
11
|
+
}
|
|
12
|
+
const result = { ...originalObject };
|
|
13
|
+
for (const pair of keysTypes) {
|
|
14
|
+
const key = String(pair.key);
|
|
15
|
+
if (key in result) {
|
|
16
|
+
result[key] = parsePostgresArray(result[key]);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/database/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
|