@zintrust/core 0.1.20 → 0.1.21
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/package.json +2 -1
- package/src/boot/Application.d.ts.map +1 -1
- package/src/boot/Application.js +48 -10
- package/src/boot/bootstrap.js +2 -0
- package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateCommand.js +36 -3
- package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -1
- package/src/cli/d1/D1SqlMigrations.js +6 -1
- package/src/cli/scaffolding/ControllerGenerator.js +4 -4
- package/src/cli/scaffolding/GovernanceScaffolder.js +1 -1
- package/src/cli/scaffolding/MigrationGenerator.js +1 -1
- package/src/cli/scaffolding/ModelGenerator.js +1 -1
- package/src/cli/scaffolding/RouteGenerator.js +1 -1
- package/src/cli/scaffolding/ServiceScaffolder.js +4 -4
- package/src/config/broadcast.d.ts +14 -28
- package/src/config/broadcast.d.ts.map +1 -1
- package/src/config/broadcast.js +69 -35
- package/src/config/cache.d.ts +13 -45
- package/src/config/cache.d.ts.map +1 -1
- package/src/config/cache.js +69 -25
- package/src/config/database.d.ts +22 -64
- package/src/config/database.d.ts.map +1 -1
- package/src/config/database.js +99 -31
- package/src/config/env.d.ts +6 -0
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +7 -0
- package/src/config/index.d.ts +32 -136
- package/src/config/index.d.ts.map +1 -1
- package/src/config/mail.d.ts +19 -55
- package/src/config/mail.d.ts.map +1 -1
- package/src/config/mail.js +63 -21
- package/src/config/middleware.d.ts +24 -0
- package/src/config/middleware.d.ts.map +1 -1
- package/src/config/middleware.js +72 -52
- package/src/config/notification.d.ts +14 -27
- package/src/config/notification.d.ts.map +1 -1
- package/src/config/notification.js +82 -36
- package/src/config/queue.d.ts +21 -51
- package/src/config/queue.d.ts.map +1 -1
- package/src/config/queue.js +72 -27
- package/src/config/storage.d.ts +27 -34
- package/src/config/storage.d.ts.map +1 -1
- package/src/config/storage.js +97 -56
- package/src/config/type.d.ts +12 -1
- package/src/config/type.d.ts.map +1 -1
- package/src/http/parsers/MultipartParser.d.ts.map +1 -1
- package/src/http/parsers/MultipartParser.js +69 -42
- package/src/index.d.ts +9 -5
- package/src/index.d.ts.map +1 -1
- package/src/index.js +1 -0
- package/src/microservices/PostgresAdapter.d.ts.map +1 -1
- package/src/microservices/PostgresAdapter.js +0 -1
- package/src/migrations/MigratorFactory.d.ts.map +1 -1
- package/src/migrations/MigratorFactory.js +18 -2
- package/src/node-singletons/fs.d.ts +1 -1
- package/src/node-singletons/fs.d.ts.map +1 -1
- package/src/node-singletons/fs.js +1 -1
- package/src/orm/Database.d.ts +2 -1
- package/src/orm/Database.d.ts.map +1 -1
- package/src/orm/Database.js +110 -67
- package/src/orm/DatabaseAdapter.d.ts +1 -0
- package/src/orm/DatabaseAdapter.d.ts.map +1 -1
- package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
- package/src/orm/DatabaseRuntimeRegistration.js +12 -0
- package/src/orm/QueryBuilder.d.ts +1 -1
- package/src/orm/QueryBuilder.d.ts.map +1 -1
- package/src/orm/QueryBuilder.js +4 -3
- package/src/orm/adapters/SQLiteAdapter.js +1 -1
- package/src/performance/Optimizer.d.ts +6 -6
- package/src/performance/Optimizer.d.ts.map +1 -1
- package/src/performance/Optimizer.js +133 -52
- package/src/routing/doc.d.ts +4 -5
- package/src/routing/doc.d.ts.map +1 -1
- package/src/routing/doc.js +35 -20
- package/src/routing/publicRoot.d.ts +9 -0
- package/src/routing/publicRoot.d.ts.map +1 -1
- package/src/routing/publicRoot.js +63 -2
- package/src/runtime/StartupConfigFileRegistry.d.ts +20 -0
- package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -0
- package/src/runtime/StartupConfigFileRegistry.js +44 -0
- package/src/runtime/useFileLoader.d.ts +26 -0
- package/src/runtime/useFileLoader.d.ts.map +1 -0
- package/src/runtime/useFileLoader.js +188 -0
- package/src/scripts/TemplateSync.js +4 -4
- package/src/security/XssProtection.d.ts.map +1 -1
- package/src/security/XssProtection.js +62 -14
- package/src/templates/project/basic/config/broadcast.ts.tpl +33 -17
- package/src/templates/project/basic/config/cache.ts.tpl +35 -17
- package/src/templates/project/basic/config/database.ts.tpl +68 -32
- package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +7 -114
- package/src/templates/project/basic/config/mail.ts.tpl +59 -13
- package/src/templates/project/basic/config/notification.ts.tpl +28 -17
- package/src/templates/project/basic/config/queue.ts.tpl +49 -17
- package/src/templates/project/basic/config/storage.ts.tpl +55 -18
- package/src/templates/project/basic/config/type.ts.tpl +0 -1
- package/src/templates/project/basic/src/index.ts.tpl +3 -0
- package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +0 -181
- package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +0 -156
package/src/config/cache.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Caching drivers and settings
|
|
4
4
|
* Sealed namespace for immutability
|
|
5
5
|
*/
|
|
6
|
+
import { StartupConfigFile, StartupConfigFileRegistry } from '../runtime/StartupConfigFileRegistry.js';
|
|
6
7
|
import { Env } from './env.js';
|
|
7
8
|
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
8
9
|
const getCacheDriver = (config, name) => {
|
|
@@ -22,22 +23,16 @@ const getCacheDriver = (config, name) => {
|
|
|
22
23
|
}
|
|
23
24
|
throw ErrorFactory.createConfigError(`Cache default store not configured: ${storeName || '<empty>'}`);
|
|
24
25
|
};
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
* Default cache driver
|
|
28
|
-
*/
|
|
29
|
-
default: (() => {
|
|
26
|
+
const createCacheConfig = () => {
|
|
27
|
+
const baseDefault = (() => {
|
|
30
28
|
const envConnection = Env.get('CACHE_CONNECTION', '').trim();
|
|
31
29
|
const envDriver = typeof Env.CACHE_DRIVER === 'string'
|
|
32
30
|
? String(Env.CACHE_DRIVER)
|
|
33
31
|
: Env.get('CACHE_DRIVER', 'memory');
|
|
34
32
|
const selected = envConnection.length > 0 ? envConnection : String(envDriver ?? 'memory');
|
|
35
33
|
return selected.trim().toLowerCase();
|
|
36
|
-
})()
|
|
37
|
-
|
|
38
|
-
* Cache drivers
|
|
39
|
-
*/
|
|
40
|
-
drivers: {
|
|
34
|
+
})();
|
|
35
|
+
const baseDrivers = {
|
|
41
36
|
memory: {
|
|
42
37
|
driver: 'memory',
|
|
43
38
|
ttl: Env.getInt('CACHE_MEMORY_TTL', 3600),
|
|
@@ -62,20 +57,69 @@ const cacheConfigObj = {
|
|
|
62
57
|
driver: 'kv-remote',
|
|
63
58
|
ttl: Env.getInt('CACHE_KV_TTL', 3600),
|
|
64
59
|
},
|
|
60
|
+
};
|
|
61
|
+
const overrides = StartupConfigFileRegistry.get(StartupConfigFile.Cache) ?? {};
|
|
62
|
+
const mergedDrivers = {
|
|
63
|
+
...baseDrivers,
|
|
64
|
+
...(overrides.drivers ?? {}),
|
|
65
|
+
};
|
|
66
|
+
const mergedDefault = typeof overrides.default === 'string' && overrides.default.trim() !== ''
|
|
67
|
+
? overrides.default.trim().toLowerCase()
|
|
68
|
+
: baseDefault;
|
|
69
|
+
const mergedKeyPrefix = typeof overrides.keyPrefix === 'string' && overrides.keyPrefix.length > 0
|
|
70
|
+
? overrides.keyPrefix
|
|
71
|
+
: Env.get('CACHE_KEY_PREFIX', 'zintrust:');
|
|
72
|
+
const mergedTtl = typeof overrides.ttl === 'number' && Number.isFinite(overrides.ttl) ? overrides.ttl : 3600;
|
|
73
|
+
const cacheConfigObj = {
|
|
74
|
+
/**
|
|
75
|
+
* Default cache driver
|
|
76
|
+
*/
|
|
77
|
+
default: mergedDefault,
|
|
78
|
+
/**
|
|
79
|
+
* Cache drivers
|
|
80
|
+
*/
|
|
81
|
+
drivers: mergedDrivers,
|
|
82
|
+
/**
|
|
83
|
+
* Get cache driver config
|
|
84
|
+
*/
|
|
85
|
+
getDriver(name) {
|
|
86
|
+
return getCacheDriver(this, name);
|
|
87
|
+
},
|
|
88
|
+
/**
|
|
89
|
+
* Key prefix for all cache keys
|
|
90
|
+
*/
|
|
91
|
+
keyPrefix: mergedKeyPrefix,
|
|
92
|
+
/**
|
|
93
|
+
* Default cache TTL (seconds)
|
|
94
|
+
*/
|
|
95
|
+
ttl: mergedTtl,
|
|
96
|
+
};
|
|
97
|
+
return Object.freeze(cacheConfigObj);
|
|
98
|
+
};
|
|
99
|
+
let cached = null;
|
|
100
|
+
const proxyTarget = {};
|
|
101
|
+
const ensureCacheConfig = () => {
|
|
102
|
+
if (cached)
|
|
103
|
+
return cached;
|
|
104
|
+
cached = createCacheConfig();
|
|
105
|
+
try {
|
|
106
|
+
Object.defineProperties(proxyTarget, Object.getOwnPropertyDescriptors(cached));
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// best-effort
|
|
110
|
+
}
|
|
111
|
+
return cached;
|
|
112
|
+
};
|
|
113
|
+
export const cacheConfig = new Proxy(proxyTarget, {
|
|
114
|
+
get(_target, prop) {
|
|
115
|
+
return ensureCacheConfig()[prop];
|
|
65
116
|
},
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
getDriver(name) {
|
|
70
|
-
return getCacheDriver(this, name);
|
|
117
|
+
ownKeys() {
|
|
118
|
+
ensureCacheConfig();
|
|
119
|
+
return Reflect.ownKeys(proxyTarget);
|
|
71
120
|
},
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
* Default cache TTL (seconds)
|
|
78
|
-
*/
|
|
79
|
-
ttl: Env.getInt('CACHE_DEFAULT_TTL', 3600),
|
|
80
|
-
};
|
|
81
|
-
export const cacheConfig = Object.freeze(cacheConfigObj);
|
|
121
|
+
getOwnPropertyDescriptor(_target, prop) {
|
|
122
|
+
ensureCacheConfig();
|
|
123
|
+
return Object.getOwnPropertyDescriptor(proxyTarget, prop);
|
|
124
|
+
},
|
|
125
|
+
});
|
package/src/config/database.d.ts
CHANGED
|
@@ -3,81 +3,39 @@
|
|
|
3
3
|
* Database connections and pooling settings
|
|
4
4
|
* Sealed namespace for immutability
|
|
5
5
|
*/
|
|
6
|
-
import type { DatabaseConfigShape, DatabaseConnectionConfig } from './type';
|
|
7
|
-
export
|
|
8
|
-
/**
|
|
9
|
-
* Default database connection
|
|
10
|
-
*/
|
|
6
|
+
import type { DatabaseConfigShape, DatabaseConnectionConfig, DatabaseConnections } from './type';
|
|
7
|
+
export type DatabaseConfigOverrides = Partial<{
|
|
11
8
|
default: string;
|
|
12
|
-
|
|
13
|
-
* Database connections
|
|
14
|
-
*/
|
|
15
|
-
connections: {
|
|
16
|
-
sqlite: {
|
|
17
|
-
driver: "sqlite";
|
|
18
|
-
database: string;
|
|
19
|
-
migrations: string;
|
|
20
|
-
};
|
|
21
|
-
d1: {
|
|
22
|
-
driver: "d1";
|
|
23
|
-
};
|
|
24
|
-
'd1-remote': {
|
|
25
|
-
driver: "d1-remote";
|
|
26
|
-
};
|
|
27
|
-
postgresql: {
|
|
28
|
-
driver: "postgresql";
|
|
29
|
-
host: string;
|
|
30
|
-
port: number;
|
|
31
|
-
database: string;
|
|
32
|
-
username: string;
|
|
33
|
-
password: string;
|
|
34
|
-
ssl: boolean;
|
|
35
|
-
pooling: {
|
|
36
|
-
enabled: boolean;
|
|
37
|
-
min: number;
|
|
38
|
-
max: number;
|
|
39
|
-
idleTimeout: number;
|
|
40
|
-
connectionTimeout: number;
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
mysql: {
|
|
44
|
-
driver: "mysql";
|
|
45
|
-
host: string;
|
|
46
|
-
port: number;
|
|
47
|
-
database: string;
|
|
48
|
-
username: string;
|
|
49
|
-
password: string;
|
|
50
|
-
pooling: {
|
|
51
|
-
enabled: boolean;
|
|
52
|
-
min: number;
|
|
53
|
-
max: number;
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
/**
|
|
58
|
-
* Get current connection config
|
|
59
|
-
*/
|
|
60
|
-
getConnection(this: DatabaseConfigShape): DatabaseConnectionConfig;
|
|
61
|
-
/**
|
|
62
|
-
* Enable query logging
|
|
63
|
-
*/
|
|
9
|
+
connections: DatabaseConnections;
|
|
64
10
|
logging: {
|
|
65
11
|
enabled: boolean;
|
|
66
12
|
level: string;
|
|
67
13
|
};
|
|
68
|
-
/**
|
|
69
|
-
* Migration settings
|
|
70
|
-
*/
|
|
71
14
|
migrations: {
|
|
72
15
|
directory: string;
|
|
73
16
|
extension: string;
|
|
74
17
|
};
|
|
75
|
-
/**
|
|
76
|
-
* Seeding settings
|
|
77
|
-
*/
|
|
78
18
|
seeders: {
|
|
79
19
|
directory: string;
|
|
80
20
|
};
|
|
81
21
|
}>;
|
|
82
|
-
|
|
22
|
+
declare const createDatabaseConfig: () => {
|
|
23
|
+
default: string;
|
|
24
|
+
connections: DatabaseConnections;
|
|
25
|
+
getConnection: (this: DatabaseConfigShape) => DatabaseConnectionConfig;
|
|
26
|
+
logging: {
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
level: string;
|
|
29
|
+
};
|
|
30
|
+
migrations: {
|
|
31
|
+
directory: string;
|
|
32
|
+
extension: string;
|
|
33
|
+
};
|
|
34
|
+
seeders: {
|
|
35
|
+
directory: string;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export type DatabaseConfig = ReturnType<typeof createDatabaseConfig>;
|
|
39
|
+
export declare const databaseConfig: DatabaseConfig;
|
|
40
|
+
export {};
|
|
83
41
|
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/config/database.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/config/database.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAGtB,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,mBAAmB,CAAC;IACjC,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,UAAU,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAChC,CAAC,CAAC;AA0LH,QAAA,MAAM,oBAAoB,QAAO;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,mBAAmB,CAAC;IACjC,aAAa,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,wBAAwB,CAAC;IACvE,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,UAAU,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAyEhC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAqBrE,eAAO,MAAM,cAAc,EAAE,cAY3B,CAAC"}
|
package/src/config/database.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Database connections and pooling settings
|
|
4
4
|
* Sealed namespace for immutability
|
|
5
5
|
*/
|
|
6
|
+
import { StartupConfigFile, StartupConfigFileRegistry } from '../runtime/StartupConfigFileRegistry.js';
|
|
6
7
|
import { Env } from './env.js';
|
|
7
8
|
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
8
9
|
const isNodeProcess = () => {
|
|
@@ -94,6 +95,13 @@ const resolveDefaultSqliteDatabasePath = () => {
|
|
|
94
95
|
const hasOwn = (obj, key) => {
|
|
95
96
|
return Object.hasOwn(obj, key);
|
|
96
97
|
};
|
|
98
|
+
const parseReadHosts = (raw) => {
|
|
99
|
+
const list = String(raw ?? '')
|
|
100
|
+
.split(',')
|
|
101
|
+
.map((v) => v.trim())
|
|
102
|
+
.filter((v) => v.length > 0);
|
|
103
|
+
return list.length > 0 ? list : undefined;
|
|
104
|
+
};
|
|
97
105
|
const getDefaultConnection = (connections) => {
|
|
98
106
|
const envSelectedRaw = Env.get('DB_CONNECTION', '');
|
|
99
107
|
const value = String(envSelectedRaw ?? '').trim();
|
|
@@ -138,6 +146,7 @@ const connections = {
|
|
|
138
146
|
username: Env.DB_USERNAME_POSTGRESQL,
|
|
139
147
|
password: Env.DB_PASSWORD_POSTGRESQL,
|
|
140
148
|
ssl: Env.getBool('DB_SSL', false),
|
|
149
|
+
readHosts: parseReadHosts(Env.DB_READ_HOSTS_POSTGRESQL),
|
|
141
150
|
pooling: {
|
|
142
151
|
enabled: Env.getBool('DB_POOLING', true),
|
|
143
152
|
min: Env.getInt('DB_POOL_MIN', 5),
|
|
@@ -153,47 +162,106 @@ const connections = {
|
|
|
153
162
|
database: Env.DB_DATABASE,
|
|
154
163
|
username: Env.DB_USERNAME,
|
|
155
164
|
password: Env.DB_PASSWORD,
|
|
165
|
+
readHosts: parseReadHosts(Env.DB_READ_HOSTS),
|
|
156
166
|
pooling: {
|
|
157
167
|
enabled: Env.getBool('DB_POOLING', true),
|
|
158
168
|
min: Env.getInt('DB_POOL_MIN', 5),
|
|
159
169
|
max: Env.getInt('DB_POOL_MAX', 20),
|
|
160
170
|
},
|
|
161
171
|
},
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
*/
|
|
171
|
-
connections,
|
|
172
|
-
/**
|
|
173
|
-
* Get current connection config
|
|
174
|
-
*/
|
|
175
|
-
getConnection() {
|
|
176
|
-
return getDatabaseConnection(this);
|
|
172
|
+
sqlserver: {
|
|
173
|
+
driver: 'sqlserver',
|
|
174
|
+
host: Env.DB_HOST_MSSQL,
|
|
175
|
+
port: Env.DB_PORT_MSSQL,
|
|
176
|
+
database: Env.DB_DATABASE_MSSQL,
|
|
177
|
+
username: Env.DB_USERNAME_MSSQL,
|
|
178
|
+
password: Env.DB_PASSWORD_MSSQL,
|
|
179
|
+
readHosts: parseReadHosts(Env.DB_READ_HOSTS_MSSQL),
|
|
177
180
|
},
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
181
|
+
};
|
|
182
|
+
const createDatabaseConfig = () => {
|
|
183
|
+
const overrides = StartupConfigFileRegistry.get(StartupConfigFile.Database) ?? {};
|
|
184
|
+
const mergedConnections = {
|
|
185
|
+
...connections,
|
|
186
|
+
...overrides.connections,
|
|
187
|
+
};
|
|
188
|
+
const baseLogging = {
|
|
182
189
|
enabled: Env.getBool('DB_LOG_QUERIES', Env.DEBUG),
|
|
183
190
|
level: Env.get('DB_LOG_LEVEL', 'debug'),
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
* Migration settings
|
|
187
|
-
*/
|
|
188
|
-
migrations: {
|
|
191
|
+
};
|
|
192
|
+
const baseMigrations = {
|
|
189
193
|
directory: 'database/migrations',
|
|
190
194
|
extension: Env.get('DB_MIGRATION_EXT', '.ts'),
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
* Seeding settings
|
|
194
|
-
*/
|
|
195
|
-
seeders: {
|
|
195
|
+
};
|
|
196
|
+
const baseSeeders = {
|
|
196
197
|
directory: 'database/seeders',
|
|
197
|
-
}
|
|
198
|
+
};
|
|
199
|
+
const mergedDefault = typeof overrides.default === 'string' && overrides.default.trim() !== ''
|
|
200
|
+
? overrides.default.trim()
|
|
201
|
+
: getDefaultConnection(mergedConnections);
|
|
202
|
+
const databaseConfigObj = {
|
|
203
|
+
/**
|
|
204
|
+
* Default database connection
|
|
205
|
+
*/
|
|
206
|
+
default: mergedDefault,
|
|
207
|
+
/**
|
|
208
|
+
* Database connections
|
|
209
|
+
*/
|
|
210
|
+
connections: mergedConnections,
|
|
211
|
+
/**
|
|
212
|
+
* Get current connection config
|
|
213
|
+
*/
|
|
214
|
+
getConnection() {
|
|
215
|
+
return getDatabaseConnection(this);
|
|
216
|
+
},
|
|
217
|
+
/**
|
|
218
|
+
* Enable query logging
|
|
219
|
+
*/
|
|
220
|
+
logging: {
|
|
221
|
+
...baseLogging,
|
|
222
|
+
...overrides.logging,
|
|
223
|
+
},
|
|
224
|
+
/**
|
|
225
|
+
* Migration settings
|
|
226
|
+
*/
|
|
227
|
+
migrations: {
|
|
228
|
+
...baseMigrations,
|
|
229
|
+
...overrides.migrations,
|
|
230
|
+
},
|
|
231
|
+
/**
|
|
232
|
+
* Seeding settings
|
|
233
|
+
*/
|
|
234
|
+
seeders: {
|
|
235
|
+
...baseSeeders,
|
|
236
|
+
...overrides.seeders,
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
return Object.freeze(databaseConfigObj);
|
|
240
|
+
};
|
|
241
|
+
let cached = null;
|
|
242
|
+
const proxyTarget = {};
|
|
243
|
+
const ensureDatabaseConfig = () => {
|
|
244
|
+
if (cached)
|
|
245
|
+
return cached;
|
|
246
|
+
cached = createDatabaseConfig();
|
|
247
|
+
try {
|
|
248
|
+
Object.defineProperties(proxyTarget, Object.getOwnPropertyDescriptors(cached));
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
// best-effort
|
|
252
|
+
}
|
|
253
|
+
return cached;
|
|
198
254
|
};
|
|
199
|
-
export const databaseConfig =
|
|
255
|
+
export const databaseConfig = new Proxy(proxyTarget, {
|
|
256
|
+
get(_target, prop) {
|
|
257
|
+
return ensureDatabaseConfig()[prop];
|
|
258
|
+
},
|
|
259
|
+
ownKeys() {
|
|
260
|
+
ensureDatabaseConfig();
|
|
261
|
+
return Reflect.ownKeys(proxyTarget);
|
|
262
|
+
},
|
|
263
|
+
getOwnPropertyDescriptor(_target, prop) {
|
|
264
|
+
ensureDatabaseConfig();
|
|
265
|
+
return Object.getOwnPropertyDescriptor(proxyTarget, prop);
|
|
266
|
+
},
|
|
267
|
+
});
|
package/src/config/env.d.ts
CHANGED
|
@@ -28,6 +28,12 @@ export declare const Env: Readonly<{
|
|
|
28
28
|
DB_USERNAME_POSTGRESQL: string;
|
|
29
29
|
DB_PASSWORD_POSTGRESQL: string;
|
|
30
30
|
DB_READ_HOSTS_POSTGRESQL: string;
|
|
31
|
+
DB_HOST_MSSQL: string;
|
|
32
|
+
DB_PORT_MSSQL: number;
|
|
33
|
+
DB_DATABASE_MSSQL: string;
|
|
34
|
+
DB_USERNAME_MSSQL: string;
|
|
35
|
+
DB_PASSWORD_MSSQL: string;
|
|
36
|
+
DB_READ_HOSTS_MSSQL: string;
|
|
31
37
|
D1_DATABASE_ID: string;
|
|
32
38
|
KV_NAMESPACE_ID: string;
|
|
33
39
|
D1_REMOTE_URL: string;
|
package/src/config/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+CH,eAAO,MAAM,GAAG;eA/BE,MAAM,iBAAiB,MAAM,KAAG,MAAM;kBAMnC,MAAM,iBAAiB,MAAM,KAAG,MAAM;mBASrC,MAAM,iBAAiB,OAAO,KAAG,OAAO
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+CH,eAAO,MAAM,GAAG;eA/BE,MAAM,iBAAiB,MAAM,KAAG,MAAM;kBAMnC,MAAM,iBAAiB,MAAM,KAAG,MAAM;mBASrC,MAAM,iBAAiB,OAAO,KAAG,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAoHP,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;;;;;;;;;EAkCxF,CAAC"}
|
package/src/config/env.js
CHANGED
|
@@ -78,6 +78,13 @@ export const Env = Object.freeze({
|
|
|
78
78
|
DB_USERNAME_POSTGRESQL: get('DB_USERNAME_POSTGRESQL', 'postgres'),
|
|
79
79
|
DB_PASSWORD_POSTGRESQL: get('DB_PASSWORD_POSTGRESQL', ''),
|
|
80
80
|
DB_READ_HOSTS_POSTGRESQL: get('DB_READ_HOSTS_POSTGRESQL', ''),
|
|
81
|
+
// SQL Server (MSSQL) specific configuration
|
|
82
|
+
DB_HOST_MSSQL: get('DB_HOST_MSSQL', get('DB_HOST', 'localhost')),
|
|
83
|
+
DB_PORT_MSSQL: getInt('DB_PORT_MSSQL', 1433),
|
|
84
|
+
DB_DATABASE_MSSQL: get('DB_DATABASE_MSSQL', 'zintrust'),
|
|
85
|
+
DB_USERNAME_MSSQL: get('DB_USERNAME_MSSQL', 'sa'),
|
|
86
|
+
DB_PASSWORD_MSSQL: get('DB_PASSWORD_MSSQL', ''),
|
|
87
|
+
DB_READ_HOSTS_MSSQL: get('DB_READ_HOSTS_MSSQL', ''),
|
|
81
88
|
// Cloudflare
|
|
82
89
|
D1_DATABASE_ID: get('D1_DATABASE_ID'),
|
|
83
90
|
KV_NAMESPACE_ID: get('KV_NAMESPACE_ID'),
|
package/src/config/index.d.ts
CHANGED
|
@@ -31,62 +31,16 @@ export declare const config: Readonly<{
|
|
|
31
31
|
readonly maxBodySize: string;
|
|
32
32
|
readonly getSafeEnv: () => NodeJS.ProcessEnv;
|
|
33
33
|
}>;
|
|
34
|
-
readonly broadcast:
|
|
35
|
-
readonly default: string;
|
|
36
|
-
readonly drivers: {
|
|
37
|
-
readonly inmemory: import("./type").InMemoryBroadcastDriverConfig;
|
|
38
|
-
readonly pusher: import("./type").PusherBroadcastDriverConfig;
|
|
39
|
-
readonly redis: import("./type").RedisBroadcastDriverConfig;
|
|
40
|
-
readonly redishttps: import("./type").RedisHttpsBroadcastDriverConfig;
|
|
41
|
-
};
|
|
42
|
-
readonly getDriverName: () => string;
|
|
43
|
-
readonly getDriverConfig: (name?: string) => import("./type").KnownBroadcastDriverConfig;
|
|
44
|
-
}>;
|
|
45
|
-
readonly database: Readonly<{
|
|
34
|
+
readonly broadcast: {
|
|
46
35
|
default: string;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
};
|
|
56
|
-
'd1-remote': {
|
|
57
|
-
driver: "d1-remote";
|
|
58
|
-
};
|
|
59
|
-
postgresql: {
|
|
60
|
-
driver: "postgresql";
|
|
61
|
-
host: string;
|
|
62
|
-
port: number;
|
|
63
|
-
database: string;
|
|
64
|
-
username: string;
|
|
65
|
-
password: string;
|
|
66
|
-
ssl: boolean;
|
|
67
|
-
pooling: {
|
|
68
|
-
enabled: boolean;
|
|
69
|
-
min: number;
|
|
70
|
-
max: number;
|
|
71
|
-
idleTimeout: number;
|
|
72
|
-
connectionTimeout: number;
|
|
73
|
-
};
|
|
74
|
-
};
|
|
75
|
-
mysql: {
|
|
76
|
-
driver: "mysql";
|
|
77
|
-
host: string;
|
|
78
|
-
port: number;
|
|
79
|
-
database: string;
|
|
80
|
-
username: string;
|
|
81
|
-
password: string;
|
|
82
|
-
pooling: {
|
|
83
|
-
enabled: boolean;
|
|
84
|
-
min: number;
|
|
85
|
-
max: number;
|
|
86
|
-
};
|
|
87
|
-
};
|
|
88
|
-
};
|
|
89
|
-
getConnection(this: import("./type").DatabaseConfigShape): import("./type").DatabaseConnectionConfig;
|
|
36
|
+
drivers: import("./type").BroadcastDrivers;
|
|
37
|
+
getDriverName: () => string;
|
|
38
|
+
getDriverConfig: (name?: string) => import("./type").KnownBroadcastDriverConfig;
|
|
39
|
+
};
|
|
40
|
+
readonly database: {
|
|
41
|
+
default: string;
|
|
42
|
+
connections: import("./type").DatabaseConnections;
|
|
43
|
+
getConnection: (this: import("./type").DatabaseConfigShape) => import("./type").DatabaseConnectionConfig;
|
|
90
44
|
logging: {
|
|
91
45
|
enabled: boolean;
|
|
92
46
|
level: string;
|
|
@@ -98,33 +52,31 @@ export declare const config: Readonly<{
|
|
|
98
52
|
seeders: {
|
|
99
53
|
directory: string;
|
|
100
54
|
};
|
|
101
|
-
}
|
|
102
|
-
readonly storage:
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
getDriverConfig(this: import("./type").StorageConfigRuntime, name?: string): import("./type").StorageDriverConfig;
|
|
107
|
-
readonly temp: {
|
|
55
|
+
};
|
|
56
|
+
readonly storage: import("./type").StorageConfigRuntime & {
|
|
57
|
+
getDriver: (this: import("./type").StorageConfigRuntime) => import("./type").StorageDriverConfig;
|
|
58
|
+
getDriverConfig: (this: import("./type").StorageConfigRuntime, name?: string) => import("./type").StorageDriverConfig;
|
|
59
|
+
temp: {
|
|
108
60
|
path: string;
|
|
109
61
|
maxAge: number;
|
|
110
62
|
};
|
|
111
|
-
|
|
63
|
+
uploads: {
|
|
112
64
|
maxSize: string;
|
|
113
65
|
allowedMimes: string;
|
|
114
66
|
path: string;
|
|
115
67
|
};
|
|
116
|
-
|
|
68
|
+
backups: {
|
|
117
69
|
path: string;
|
|
118
70
|
driver: string;
|
|
119
71
|
};
|
|
120
|
-
}
|
|
121
|
-
readonly notification:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
72
|
+
};
|
|
73
|
+
readonly notification: {
|
|
74
|
+
default: string;
|
|
75
|
+
drivers: import("./type").NotificationDrivers;
|
|
76
|
+
providers: import("./type").NotificationProviders;
|
|
77
|
+
getDriverName: () => string;
|
|
78
|
+
getDriverConfig: (name?: string) => import("./type").KnownNotificationDriverConfig;
|
|
79
|
+
};
|
|
128
80
|
readonly security: Readonly<{
|
|
129
81
|
readonly jwt: {
|
|
130
82
|
readonly enabled: boolean;
|
|
@@ -252,73 +204,17 @@ export declare const config: Readonly<{
|
|
|
252
204
|
readonly namespace: string;
|
|
253
205
|
};
|
|
254
206
|
}>;
|
|
255
|
-
readonly cache:
|
|
207
|
+
readonly cache: {
|
|
256
208
|
default: string;
|
|
257
|
-
drivers:
|
|
258
|
-
|
|
259
|
-
driver: "memory";
|
|
260
|
-
ttl: number;
|
|
261
|
-
};
|
|
262
|
-
redis: {
|
|
263
|
-
driver: "redis";
|
|
264
|
-
host: string;
|
|
265
|
-
port: number;
|
|
266
|
-
ttl: number;
|
|
267
|
-
};
|
|
268
|
-
mongodb: {
|
|
269
|
-
driver: "mongodb";
|
|
270
|
-
uri: string;
|
|
271
|
-
db: string;
|
|
272
|
-
ttl: number;
|
|
273
|
-
};
|
|
274
|
-
kv: {
|
|
275
|
-
driver: "kv";
|
|
276
|
-
ttl: number;
|
|
277
|
-
};
|
|
278
|
-
'kv-remote': {
|
|
279
|
-
driver: "kv-remote";
|
|
280
|
-
ttl: number;
|
|
281
|
-
};
|
|
282
|
-
};
|
|
283
|
-
getDriver(name?: string): import("./type").CacheDriverConfig;
|
|
209
|
+
drivers: import("./type").CacheConfigInput["drivers"];
|
|
210
|
+
getDriver: (name?: string) => import("./type").CacheDriverConfig;
|
|
284
211
|
keyPrefix: string;
|
|
285
212
|
ttl: number;
|
|
286
|
-
}
|
|
287
|
-
readonly queue:
|
|
213
|
+
};
|
|
214
|
+
readonly queue: {
|
|
288
215
|
default: import("./type").QueueDriverName;
|
|
289
|
-
drivers:
|
|
290
|
-
|
|
291
|
-
driver: "sync";
|
|
292
|
-
};
|
|
293
|
-
database: {
|
|
294
|
-
driver: "database";
|
|
295
|
-
table: string;
|
|
296
|
-
connection: string;
|
|
297
|
-
};
|
|
298
|
-
redis: {
|
|
299
|
-
driver: "redis";
|
|
300
|
-
host: string;
|
|
301
|
-
port: number;
|
|
302
|
-
password: string;
|
|
303
|
-
database: number;
|
|
304
|
-
};
|
|
305
|
-
rabbitmq: {
|
|
306
|
-
driver: "rabbitmq";
|
|
307
|
-
host: string;
|
|
308
|
-
port: number;
|
|
309
|
-
username: string;
|
|
310
|
-
password: string;
|
|
311
|
-
vhost: string;
|
|
312
|
-
};
|
|
313
|
-
sqs: {
|
|
314
|
-
driver: "sqs";
|
|
315
|
-
key: string;
|
|
316
|
-
secret: string;
|
|
317
|
-
region: string;
|
|
318
|
-
queueUrl: string;
|
|
319
|
-
};
|
|
320
|
-
};
|
|
321
|
-
getDriver(): import("./type").QueueDriversConfig[import("./type").QueueDriverName];
|
|
216
|
+
drivers: import("./type").QueueDriversConfig;
|
|
217
|
+
getDriver: (this: import("./type").QueueConfigWithDrivers) => import("./type").QueueDriversConfig[import("./type").QueueDriverName];
|
|
322
218
|
failed: {
|
|
323
219
|
database: string;
|
|
324
220
|
table: string;
|
|
@@ -329,7 +225,7 @@ export declare const config: Readonly<{
|
|
|
329
225
|
backoff: number;
|
|
330
226
|
workers: number;
|
|
331
227
|
};
|
|
332
|
-
}
|
|
228
|
+
};
|
|
333
229
|
}>;
|
|
334
230
|
export type Config = typeof config;
|
|
335
231
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;8BAXgB,CAAA;;;;;;;;;;;;;;;;;;;;2EAAA,CAAC;;;;;;;;;;;;;;;;;;;;8BAD2B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAoBxD,CAAC;;;;;;;;;;;;;;;;;;;EAGE,CAAC;AAEZ,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}
|