@freshguard/freshguard-core 0.13.2 → 0.15.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/CHANGELOG.md +15 -1
- package/README.md +74 -1
- package/SKILL.md +229 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +74 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/connectors/azure-sql.d.ts +121 -0
- package/dist/connectors/azure-sql.d.ts.map +1 -0
- package/dist/connectors/azure-sql.js +489 -0
- package/dist/connectors/azure-sql.js.map +1 -0
- package/dist/connectors/base-connector.d.ts +139 -0
- package/dist/connectors/base-connector.d.ts.map +1 -1
- package/dist/connectors/base-connector.js +160 -3
- package/dist/connectors/base-connector.js.map +1 -1
- package/dist/connectors/bigquery.d.ts +100 -0
- package/dist/connectors/bigquery.d.ts.map +1 -1
- package/dist/connectors/bigquery.js +143 -2
- package/dist/connectors/bigquery.js.map +1 -1
- package/dist/connectors/duckdb.d.ts +96 -0
- package/dist/connectors/duckdb.d.ts.map +1 -1
- package/dist/connectors/duckdb.js +144 -7
- package/dist/connectors/duckdb.js.map +1 -1
- package/dist/connectors/index.d.ts +28 -0
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +28 -0
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/mssql.d.ts +119 -0
- package/dist/connectors/mssql.d.ts.map +1 -0
- package/dist/connectors/mssql.js +483 -0
- package/dist/connectors/mssql.js.map +1 -0
- package/dist/connectors/mysql.d.ts +85 -0
- package/dist/connectors/mysql.d.ts.map +1 -1
- package/dist/connectors/mysql.js +118 -3
- package/dist/connectors/mysql.js.map +1 -1
- package/dist/connectors/postgres.d.ts +85 -0
- package/dist/connectors/postgres.d.ts.map +1 -1
- package/dist/connectors/postgres.js +113 -6
- package/dist/connectors/postgres.js.map +1 -1
- package/dist/connectors/redshift.d.ts +90 -0
- package/dist/connectors/redshift.d.ts.map +1 -1
- package/dist/connectors/redshift.js +131 -7
- package/dist/connectors/redshift.js.map +1 -1
- package/dist/connectors/snowflake.d.ts +108 -0
- package/dist/connectors/snowflake.d.ts.map +1 -1
- package/dist/connectors/snowflake.js +137 -3
- package/dist/connectors/snowflake.js.map +1 -1
- package/dist/connectors/synapse.d.ts +123 -0
- package/dist/connectors/synapse.d.ts.map +1 -0
- package/dist/connectors/synapse.js +495 -0
- package/dist/connectors/synapse.js.map +1 -0
- package/dist/db/index.d.ts +25 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +23 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrate.d.ts +23 -0
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +38 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/schema.d.ts +11 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +70 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/errors/debug-factory.d.ts +38 -0
- package/dist/errors/debug-factory.d.ts.map +1 -1
- package/dist/errors/debug-factory.js +40 -0
- package/dist/errors/debug-factory.js.map +1 -1
- package/dist/errors/index.d.ts +59 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +110 -7
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +32 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/metadata/duckdb-storage.d.ts +3 -0
- package/dist/metadata/duckdb-storage.d.ts.map +1 -1
- package/dist/metadata/duckdb-storage.js +6 -0
- package/dist/metadata/duckdb-storage.js.map +1 -1
- package/dist/metadata/factory.d.ts +30 -0
- package/dist/metadata/factory.d.ts.map +1 -1
- package/dist/metadata/factory.js +31 -0
- package/dist/metadata/factory.js.map +1 -1
- package/dist/metadata/index.d.ts +26 -0
- package/dist/metadata/index.d.ts.map +1 -1
- package/dist/metadata/index.js +26 -0
- package/dist/metadata/index.js.map +1 -1
- package/dist/metadata/interface.d.ts +33 -0
- package/dist/metadata/interface.d.ts.map +1 -1
- package/dist/metadata/interface.js +3 -0
- package/dist/metadata/interface.js.map +1 -1
- package/dist/metadata/postgresql-storage.d.ts +3 -0
- package/dist/metadata/postgresql-storage.d.ts.map +1 -1
- package/dist/metadata/postgresql-storage.js +12 -2
- package/dist/metadata/postgresql-storage.js.map +1 -1
- package/dist/metadata/schema-config.d.ts +53 -0
- package/dist/metadata/schema-config.d.ts.map +1 -1
- package/dist/metadata/schema-config.js +64 -0
- package/dist/metadata/schema-config.js.map +1 -1
- package/dist/metadata/types.d.ts +3 -0
- package/dist/metadata/types.d.ts.map +1 -1
- package/dist/metadata/types.js +3 -0
- package/dist/metadata/types.js.map +1 -1
- package/dist/monitor/baseline-calculator.d.ts +56 -0
- package/dist/monitor/baseline-calculator.d.ts.map +1 -1
- package/dist/monitor/baseline-calculator.js +72 -0
- package/dist/monitor/baseline-calculator.js.map +1 -1
- package/dist/monitor/baseline-config.d.ts +77 -0
- package/dist/monitor/baseline-config.d.ts.map +1 -1
- package/dist/monitor/baseline-config.js +79 -1
- package/dist/monitor/baseline-config.js.map +1 -1
- package/dist/monitor/freshness.d.ts +40 -0
- package/dist/monitor/freshness.d.ts.map +1 -1
- package/dist/monitor/freshness.js +82 -3
- package/dist/monitor/freshness.js.map +1 -1
- package/dist/monitor/index.d.ts +29 -0
- package/dist/monitor/index.d.ts.map +1 -1
- package/dist/monitor/index.js +29 -0
- package/dist/monitor/index.js.map +1 -1
- package/dist/monitor/schema-baseline.d.ts +45 -0
- package/dist/monitor/schema-baseline.d.ts.map +1 -1
- package/dist/monitor/schema-baseline.js +63 -5
- package/dist/monitor/schema-baseline.js.map +1 -1
- package/dist/monitor/schema-changes.d.ts +45 -0
- package/dist/monitor/schema-changes.d.ts.map +1 -1
- package/dist/monitor/schema-changes.js +85 -0
- package/dist/monitor/schema-changes.js.map +1 -1
- package/dist/monitor/volume.d.ts +43 -0
- package/dist/monitor/volume.d.ts.map +1 -1
- package/dist/monitor/volume.js +89 -0
- package/dist/monitor/volume.js.map +1 -1
- package/dist/observability/logger.d.ts +91 -0
- package/dist/observability/logger.d.ts.map +1 -1
- package/dist/observability/logger.js +108 -0
- package/dist/observability/logger.js.map +1 -1
- package/dist/observability/metrics.d.ts +140 -0
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +184 -7
- package/dist/observability/metrics.js.map +1 -1
- package/dist/resilience/circuit-breaker.d.ts +112 -2
- package/dist/resilience/circuit-breaker.d.ts.map +1 -1
- package/dist/resilience/circuit-breaker.js +140 -6
- package/dist/resilience/circuit-breaker.js.map +1 -1
- package/dist/resilience/index.d.ts +9 -0
- package/dist/resilience/index.d.ts.map +1 -1
- package/dist/resilience/index.js +13 -0
- package/dist/resilience/index.js.map +1 -1
- package/dist/resilience/retry-policy.d.ts +105 -0
- package/dist/resilience/retry-policy.d.ts.map +1 -1
- package/dist/resilience/retry-policy.js +158 -7
- package/dist/resilience/retry-policy.js.map +1 -1
- package/dist/resilience/timeout-manager.d.ts +137 -0
- package/dist/resilience/timeout-manager.d.ts.map +1 -1
- package/dist/resilience/timeout-manager.js +151 -4
- package/dist/resilience/timeout-manager.js.map +1 -1
- package/dist/security/query-analyzer.d.ts +124 -0
- package/dist/security/query-analyzer.d.ts.map +1 -1
- package/dist/security/query-analyzer.js +150 -9
- package/dist/security/query-analyzer.js.map +1 -1
- package/dist/security/schema-cache.d.ts +152 -0
- package/dist/security/schema-cache.d.ts.map +1 -1
- package/dist/security/schema-cache.js +144 -12
- package/dist/security/schema-cache.js.map +1 -1
- package/dist/types/connector.d.ts +68 -1
- package/dist/types/connector.d.ts.map +1 -1
- package/dist/types/connector.js +38 -15
- package/dist/types/connector.js.map +1 -1
- package/dist/types/driver-results.d.ts +28 -0
- package/dist/types/driver-results.d.ts.map +1 -1
- package/dist/types/driver-results.js +12 -0
- package/dist/types/driver-results.js.map +1 -1
- package/dist/types.d.ts +113 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/validation/index.d.ts +8 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +12 -0
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/runtime-validator.d.ts +98 -0
- package/dist/validation/runtime-validator.d.ts.map +1 -1
- package/dist/validation/runtime-validator.js +114 -1
- package/dist/validation/runtime-validator.js.map +1 -1
- package/dist/validation/sanitizers.d.ts +59 -0
- package/dist/validation/sanitizers.d.ts.map +1 -1
- package/dist/validation/sanitizers.js +104 -20
- package/dist/validation/sanitizers.js.map +1 -1
- package/dist/validation/schemas.d.ts +73 -0
- package/dist/validation/schemas.d.ts.map +1 -1
- package/dist/validation/schemas.js +132 -5
- package/dist/validation/schemas.js.map +1 -1
- package/dist/validators/index.d.ts +54 -0
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +93 -2
- package/dist/validators/index.js.map +1 -1
- package/package.json +6 -2
package/dist/validators/index.js
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input validation utilities for FreshGuard Core
|
|
3
|
+
*
|
|
4
|
+
* Provides centralized validation functions to prevent injection attacks
|
|
5
|
+
* and ensure data integrity across the application.
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
*/
|
|
9
|
+
// ==============================================
|
|
10
|
+
// Identifier Validation
|
|
11
|
+
// ==============================================
|
|
12
|
+
/**
|
|
13
|
+
* Validate table name for SQL injection prevention
|
|
14
|
+
*
|
|
15
|
+
* @param name - Table name to validate
|
|
16
|
+
* @returns True if valid
|
|
17
|
+
* @throws Error if invalid
|
|
18
|
+
*/
|
|
1
19
|
export function validateTableName(name) {
|
|
2
20
|
if (typeof name !== 'string') {
|
|
3
21
|
throw new Error('Table name must be a string');
|
|
@@ -8,12 +26,15 @@ export function validateTableName(name) {
|
|
|
8
26
|
if (name.length > 256) {
|
|
9
27
|
throw new Error('Table name too long (max 256 characters)');
|
|
10
28
|
}
|
|
29
|
+
// Allow alphanumeric, underscore, and dot (for schema.table notation)
|
|
11
30
|
if (!/^[a-zA-Z0-9_.]+$/.test(name)) {
|
|
12
31
|
throw new Error('Table name contains invalid characters (only alphanumeric, underscore, and dot allowed)');
|
|
13
32
|
}
|
|
33
|
+
// Ensure it doesn't start with a number
|
|
14
34
|
if (/^[0-9]/.test(name)) {
|
|
15
35
|
throw new Error('Table name cannot start with a number');
|
|
16
36
|
}
|
|
37
|
+
// Check for reserved SQL keywords (basic protection)
|
|
17
38
|
const reservedKeywords = [
|
|
18
39
|
'SELECT', 'INSERT', 'UPDATE', 'DELETE', 'DROP', 'ALTER', 'CREATE',
|
|
19
40
|
'TABLE', 'FROM', 'WHERE', 'AND', 'OR', 'NOT', 'NULL', 'TRUE', 'FALSE'
|
|
@@ -23,6 +44,13 @@ export function validateTableName(name) {
|
|
|
23
44
|
}
|
|
24
45
|
return true;
|
|
25
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Validate column name for SQL injection prevention
|
|
49
|
+
*
|
|
50
|
+
* @param name - Column name to validate
|
|
51
|
+
* @returns True if valid
|
|
52
|
+
* @throws Error if invalid
|
|
53
|
+
*/
|
|
26
54
|
export function validateColumnName(name) {
|
|
27
55
|
if (typeof name !== 'string') {
|
|
28
56
|
throw new Error('Column name must be a string');
|
|
@@ -33,12 +61,15 @@ export function validateColumnName(name) {
|
|
|
33
61
|
if (name.length > 256) {
|
|
34
62
|
throw new Error('Column name too long (max 256 characters)');
|
|
35
63
|
}
|
|
64
|
+
// Allow alphanumeric and underscore only (no dot for column names)
|
|
36
65
|
if (!/^[a-zA-Z0-9_]+$/.test(name)) {
|
|
37
66
|
throw new Error('Column name contains invalid characters (only alphanumeric and underscore allowed)');
|
|
38
67
|
}
|
|
68
|
+
// Ensure it doesn't start with a number
|
|
39
69
|
if (/^[0-9]/.test(name)) {
|
|
40
70
|
throw new Error('Column name cannot start with a number');
|
|
41
71
|
}
|
|
72
|
+
// Check for reserved SQL keywords
|
|
42
73
|
const reservedKeywords = [
|
|
43
74
|
'SELECT', 'INSERT', 'UPDATE', 'DELETE', 'DROP', 'ALTER', 'CREATE',
|
|
44
75
|
'TABLE', 'FROM', 'WHERE', 'AND', 'OR', 'NOT', 'NULL', 'TRUE', 'FALSE',
|
|
@@ -49,6 +80,13 @@ export function validateColumnName(name) {
|
|
|
49
80
|
}
|
|
50
81
|
return true;
|
|
51
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Validate database identifier (table or column name)
|
|
85
|
+
*
|
|
86
|
+
* @param identifier - Identifier to validate
|
|
87
|
+
* @param type - Type of identifier ('table' or 'column')
|
|
88
|
+
* @returns True if valid
|
|
89
|
+
*/
|
|
52
90
|
export function validateDatabaseIdentifier(identifier, type = 'table') {
|
|
53
91
|
if (type === 'table') {
|
|
54
92
|
return validateTableName(identifier);
|
|
@@ -57,10 +95,20 @@ export function validateDatabaseIdentifier(identifier, type = 'table') {
|
|
|
57
95
|
return validateColumnName(identifier);
|
|
58
96
|
}
|
|
59
97
|
}
|
|
98
|
+
// ==============================================
|
|
99
|
+
// Configuration Validation
|
|
100
|
+
// ==============================================
|
|
101
|
+
/**
|
|
102
|
+
* Validate connector configuration for security and completeness
|
|
103
|
+
*
|
|
104
|
+
* @param config - Connector configuration to validate
|
|
105
|
+
* @throws Error if configuration is invalid
|
|
106
|
+
*/
|
|
60
107
|
export function validateConnectorConfig(config) {
|
|
61
108
|
if (!config) {
|
|
62
109
|
throw new Error('Configuration object is required');
|
|
63
110
|
}
|
|
111
|
+
// Required fields validation
|
|
64
112
|
if (!config.host || typeof config.host !== 'string') {
|
|
65
113
|
throw new Error('Host is required and must be a string');
|
|
66
114
|
}
|
|
@@ -73,12 +121,15 @@ export function validateConnectorConfig(config) {
|
|
|
73
121
|
if (!config.password || typeof config.password !== 'string') {
|
|
74
122
|
throw new Error('Password is required and must be a string');
|
|
75
123
|
}
|
|
124
|
+
// Host validation
|
|
76
125
|
if (config.host.length > 255) {
|
|
77
126
|
throw new Error('Host name too long (max 255 characters)');
|
|
78
127
|
}
|
|
128
|
+
// Basic hostname format validation
|
|
79
129
|
if (!/^[a-zA-Z0-9\-.]+$/.test(config.host)) {
|
|
80
130
|
throw new Error('Invalid host name format');
|
|
81
131
|
}
|
|
132
|
+
// Port validation
|
|
82
133
|
if (config.port !== undefined) {
|
|
83
134
|
if (typeof config.port !== 'number' || !Number.isInteger(config.port)) {
|
|
84
135
|
throw new Error('Port must be an integer');
|
|
@@ -87,6 +138,7 @@ export function validateConnectorConfig(config) {
|
|
|
87
138
|
throw new Error('Port must be between 1 and 65535');
|
|
88
139
|
}
|
|
89
140
|
}
|
|
141
|
+
// Timeout validation
|
|
90
142
|
if (config.timeout !== undefined) {
|
|
91
143
|
if (typeof config.timeout !== 'number' || !Number.isInteger(config.timeout)) {
|
|
92
144
|
throw new Error('Timeout must be an integer');
|
|
@@ -94,10 +146,11 @@ export function validateConnectorConfig(config) {
|
|
|
94
146
|
if (config.timeout < 1000) {
|
|
95
147
|
throw new Error('Timeout must be at least 1000ms');
|
|
96
148
|
}
|
|
97
|
-
if (config.timeout > 300000) {
|
|
149
|
+
if (config.timeout > 300000) { // 5 minutes max
|
|
98
150
|
throw new Error('Timeout cannot exceed 300000ms (5 minutes)');
|
|
99
151
|
}
|
|
100
152
|
}
|
|
153
|
+
// Query timeout validation
|
|
101
154
|
if (config.queryTimeout !== undefined) {
|
|
102
155
|
if (typeof config.queryTimeout !== 'number' || !Number.isInteger(config.queryTimeout)) {
|
|
103
156
|
throw new Error('Query timeout must be an integer');
|
|
@@ -105,10 +158,11 @@ export function validateConnectorConfig(config) {
|
|
|
105
158
|
if (config.queryTimeout < 1000) {
|
|
106
159
|
throw new Error('Query timeout must be at least 1000ms');
|
|
107
160
|
}
|
|
108
|
-
if (config.queryTimeout > 60000) {
|
|
161
|
+
if (config.queryTimeout > 60000) { // 1 minute max for queries
|
|
109
162
|
throw new Error('Query timeout cannot exceed 60000ms (1 minute)');
|
|
110
163
|
}
|
|
111
164
|
}
|
|
165
|
+
// Max rows validation
|
|
112
166
|
if (config.maxRows !== undefined) {
|
|
113
167
|
if (typeof config.maxRows !== 'number' || !Number.isInteger(config.maxRows)) {
|
|
114
168
|
throw new Error('Max rows must be an integer');
|
|
@@ -120,9 +174,11 @@ export function validateConnectorConfig(config) {
|
|
|
120
174
|
throw new Error('Max rows cannot exceed 10000');
|
|
121
175
|
}
|
|
122
176
|
}
|
|
177
|
+
// Username validation (prevent obvious injection attempts)
|
|
123
178
|
if (config.username.includes(';') || config.username.includes('--') || config.username.includes('/*')) {
|
|
124
179
|
throw new Error('Username contains invalid characters');
|
|
125
180
|
}
|
|
181
|
+
// Database name validation
|
|
126
182
|
if (config.database.length > 64) {
|
|
127
183
|
throw new Error('Database name too long (max 64 characters)');
|
|
128
184
|
}
|
|
@@ -130,20 +186,41 @@ export function validateConnectorConfig(config) {
|
|
|
130
186
|
throw new Error('Database name contains invalid characters');
|
|
131
187
|
}
|
|
132
188
|
}
|
|
189
|
+
// ==============================================
|
|
190
|
+
// Input Sanitization
|
|
191
|
+
// ==============================================
|
|
192
|
+
/**
|
|
193
|
+
* Sanitize string input to prevent injection attacks
|
|
194
|
+
*
|
|
195
|
+
* @param input - Input string to sanitize
|
|
196
|
+
* @param maxLength - Maximum allowed length
|
|
197
|
+
* @returns Sanitized string
|
|
198
|
+
*/
|
|
133
199
|
export function sanitizeString(input, maxLength = 256) {
|
|
134
200
|
if (typeof input !== 'string') {
|
|
135
201
|
throw new Error('Input must be a string');
|
|
136
202
|
}
|
|
203
|
+
// Trim whitespace
|
|
137
204
|
let sanitized = input.trim();
|
|
205
|
+
// Check length
|
|
138
206
|
if (sanitized.length > maxLength) {
|
|
139
207
|
throw new Error(`Input too long (max ${maxLength} characters)`);
|
|
140
208
|
}
|
|
209
|
+
// Remove dangerous characters
|
|
210
|
+
// eslint-disable-next-line no-control-regex -- Intentional: sanitizing control chars from input
|
|
141
211
|
sanitized = sanitized.replace(/[;/*\x00-\x1F\x7F]|--/g, '');
|
|
212
|
+
// Ensure not empty after sanitization
|
|
142
213
|
if (sanitized.length === 0) {
|
|
143
214
|
throw new Error('Input is empty after sanitization');
|
|
144
215
|
}
|
|
145
216
|
return sanitized;
|
|
146
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* Validate and sanitize SQL LIMIT value
|
|
220
|
+
*
|
|
221
|
+
* @param limit - LIMIT value to validate
|
|
222
|
+
* @returns Validated limit as number
|
|
223
|
+
*/
|
|
147
224
|
export function validateLimit(limit) {
|
|
148
225
|
let numLimit;
|
|
149
226
|
if (typeof limit === 'string') {
|
|
@@ -169,6 +246,15 @@ export function validateLimit(limit) {
|
|
|
169
246
|
}
|
|
170
247
|
return numLimit;
|
|
171
248
|
}
|
|
249
|
+
// ==============================================
|
|
250
|
+
// URL and Connection String Validation
|
|
251
|
+
// ==============================================
|
|
252
|
+
/**
|
|
253
|
+
* Validate connection string format (basic validation)
|
|
254
|
+
*
|
|
255
|
+
* @param connectionString - Database connection string
|
|
256
|
+
* @returns True if format appears valid
|
|
257
|
+
*/
|
|
172
258
|
export function validateConnectionString(connectionString) {
|
|
173
259
|
if (typeof connectionString !== 'string') {
|
|
174
260
|
throw new Error('Connection string must be a string');
|
|
@@ -179,9 +265,11 @@ export function validateConnectionString(connectionString) {
|
|
|
179
265
|
if (connectionString.length > 2048) {
|
|
180
266
|
throw new Error('Connection string too long (max 2048 characters)');
|
|
181
267
|
}
|
|
268
|
+
// Basic format check - should contain host or server
|
|
182
269
|
if (!/(?:host|server|hostname)=/i.test(connectionString)) {
|
|
183
270
|
throw new Error('Connection string must contain host/server specification');
|
|
184
271
|
}
|
|
272
|
+
// Should not contain obvious SQL injection patterns
|
|
185
273
|
const dangerousPatterns = [
|
|
186
274
|
/drop\s+table/i,
|
|
187
275
|
/delete\s+from/i,
|
|
@@ -197,6 +285,9 @@ export function validateConnectionString(connectionString) {
|
|
|
197
285
|
}
|
|
198
286
|
return true;
|
|
199
287
|
}
|
|
288
|
+
// ==============================================
|
|
289
|
+
// Export all validators
|
|
290
|
+
// ==============================================
|
|
200
291
|
export const validators = {
|
|
201
292
|
validateTableName,
|
|
202
293
|
validateColumnName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@freshguard/freshguard-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Open source data freshness monitoring engine",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -22,12 +22,15 @@
|
|
|
22
22
|
"dist",
|
|
23
23
|
"LICENSE",
|
|
24
24
|
"README.md",
|
|
25
|
-
"CHANGELOG.md"
|
|
25
|
+
"CHANGELOG.md",
|
|
26
|
+
"SKILL.md"
|
|
26
27
|
],
|
|
28
|
+
"agentskills": "./SKILL.md",
|
|
27
29
|
"dependencies": {
|
|
28
30
|
"@duckdb/node-api": "1.4.4-r.1",
|
|
29
31
|
"@google-cloud/bigquery": "^8.1.1",
|
|
30
32
|
"drizzle-orm": "^0.45.1",
|
|
33
|
+
"mssql": "^11.0.0",
|
|
31
34
|
"mysql2": "^3.16.3",
|
|
32
35
|
"pg": "^8.18.0",
|
|
33
36
|
"pino": "^10.3.1",
|
|
@@ -42,6 +45,7 @@
|
|
|
42
45
|
"@types/eslint": "^9.6.1",
|
|
43
46
|
"@types/extend": "^3.0.4",
|
|
44
47
|
"@types/is": "^0.0.25",
|
|
48
|
+
"@types/mssql": "^9.1.9",
|
|
45
49
|
"@types/pg": "^8.16.0",
|
|
46
50
|
"@vitest/coverage-v8": "^4.0.18",
|
|
47
51
|
"eslint": "^9.39.2",
|