@zintrust/core 2.5.4 → 2.5.6

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zintrust/core",
3
- "version": "2.5.4",
3
+ "version": "2.5.6",
4
4
  "description": "Production-grade TypeScript backend framework for JavaScript",
5
5
  "homepage": "https://zintrust.com",
6
6
  "repository": {
@@ -1 +1 @@
1
- {"version":3,"file":"D1MigrateCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/D1MigrateCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA4IrE;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B;;OAEG;cACO,YAAY;EAgCtB,CAAC"}
1
+ {"version":3,"file":"D1MigrateCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/D1MigrateCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0IrE;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B;;OAEG;cACO,YAAY;EAgCtB,CAAC"}
@@ -37,10 +37,8 @@ const buildExecutionContext = (options) => {
37
37
  const dbName = getDbName(projectRoot, options);
38
38
  const env = typeof options['env'] === 'string' ? options['env'].trim() : undefined;
39
39
  const config = (typeof options['config'] === 'string' ? options['config'].trim() : undefined) ??
40
- (typeof options['wrangler-config'] === 'string'
41
- ? options['wrangler-config'].trim()
42
- : undefined) ??
43
- (typeof options['wc'] === 'string' ? options['wc'].trim() : undefined);
40
+ (typeof options.wranglerConfig === 'string' ? options.wranglerConfig.trim() : undefined) ??
41
+ (typeof options.wc === 'string' ? options.wc.trim() : undefined);
44
42
  const migrationsRelDir = isWorkerCommand
45
43
  ? path.join('database', 'migrations', 'd1')
46
44
  : WranglerConfig.getD1MigrationsDir(projectRoot, dbName);
package/src/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
- * @zintrust/core v2.5.4
2
+ * @zintrust/core v2.5.6
3
3
  *
4
4
  * ZinTrust Framework - Production-Grade TypeScript Backend
5
5
  * Built for performance, type safety, and exceptional developer experience
6
6
  *
7
7
  * Build Information:
8
- * Built: 2026-06-12T11:47:23.229Z
8
+ * Built: 2026-06-12T14:17:16.252Z
9
9
  * Node: >=20.0.0
10
10
  * License: MIT
11
11
  *
@@ -21,7 +21,7 @@
21
21
  * Available at runtime for debugging and health checks
22
22
  */
23
23
  export const ZINTRUST_VERSION = '0.1.41';
24
- export const ZINTRUST_BUILD_DATE = '2026-06-12T11:47:23.178Z'; // Replaced during build
24
+ export const ZINTRUST_BUILD_DATE = '2026-06-12T14:17:16.216Z'; // Replaced during build
25
25
  export { Application } from './boot/Application.js';
26
26
  export { AwsSigV4 } from './common/index.js';
27
27
  export { SignedRequest } from './security/SignedRequest.js';
@@ -1 +1 @@
1
- {"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../../src/orm/Database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../../src/orm/Database.ts"],"names":[],"mappings":"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"}
@@ -456,9 +456,6 @@ export function useDatabase(config, connection = 'default') {
456
456
  connection,
457
457
  });
458
458
  }
459
- // Diagnostic logging
460
- Logger.error('[DEBUG] Database instances keys:', Array.from(databaseInstances.keys()));
461
- Logger.error('[DEBUG] Requesting connection:', connection);
462
459
  throw ErrorFactory.createConfigError(`Database connection '${connection}' is not registered. ` +
463
460
  `Call useDatabase(config, '${connection}') during startup to register it.`);
464
461
  }
@@ -1 +1 @@
1
- {"version":3,"file":"D1Adapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1Adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAEV,cAAc,EAGd,gBAAgB,EAEjB,MAAM,sBAAsB,CAAC;AA2E9B;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;OAEG;oBAEa,cAAc,GAAG,gBAAgB;EAiKjD,CAAC;AAEH,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"D1Adapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1Adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,KAAK,EAEV,cAAc,EAGd,gBAAgB,EAEjB,MAAM,sBAAsB,CAAC;AAyG9B;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;OAEG;oBAEa,cAAc,GAAG,gBAAgB;EAoKjD,CAAC;AAEH,eAAe,SAAS,CAAC"}
@@ -7,8 +7,8 @@ import { Logger } from '../../config/logger.js';
7
7
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
8
8
  import { isObject } from '../../helper/index.js';
9
9
  import { AdaptersEnum } from '../../migrations/enum/index.js';
10
- import { BaseAdapter } from '../DatabaseAdapter.js';
11
10
  import { createReadSessionScope, openSession } from '../adapters/D1ReadSession.js';
11
+ import { BaseAdapter } from '../DatabaseAdapter.js';
12
12
  import { QueryBuilder } from '../QueryBuilder.js';
13
13
  const isRecord = (value) => isObject(value);
14
14
  const toNumber = (value) => {
@@ -67,6 +67,37 @@ const extractServedBy = (value) => {
67
67
  function getD1Binding(_config) {
68
68
  return Cloudflare.getD1Binding(_config);
69
69
  }
70
+ /**
71
+ * Normalize D1 bind parameters to handle integer-to-TEXT column compatibility.
72
+ *
73
+ * Workerd's D1 API binds every JavaScript number parameter as a float64 (REAL).
74
+ * When SQLite compares a REAL operand against a column with TEXT affinity,
75
+ * the operand is cast using the column's affinity, producing '2.0' — which
76
+ * never equals a stored '2' from PHP/PDO.
77
+ *
78
+ * This function converts integer-valued numbers to their canonical decimal
79
+ * string representation to match PHP/PDO behavior for TEXT columns.
80
+ *
81
+ * @param parameters - The bind parameters array
82
+ * @returns Normalized parameters with integers as strings
83
+ */
84
+ function normalizeD1BindParameters(parameters) {
85
+ if (!Array.isArray(parameters))
86
+ return parameters;
87
+ return parameters.map((value) => {
88
+ if (typeof value === 'number' && Number.isInteger(value))
89
+ return String(value);
90
+ if (value instanceof Date)
91
+ return value.toISOString();
92
+ if (value !== null &&
93
+ typeof value === 'object' &&
94
+ !(value instanceof ArrayBuffer) &&
95
+ !ArrayBuffer.isView(value)) {
96
+ return JSON.stringify(value);
97
+ }
98
+ return value;
99
+ });
100
+ }
70
101
  /**
71
102
  * D1 adapter implementation
72
103
  */
@@ -108,10 +139,11 @@ export const D1Adapter = Object.freeze({
108
139
  if (!connected)
109
140
  throw ErrorFactory.createConnectionError('Database not connected');
110
141
  const db = resolveExecutor();
142
+ const normalizedParams = normalizeD1BindParameters(parameters);
111
143
  try {
112
144
  const stmt = db.prepare(sql);
113
145
  if (isMutatingSql(sql)) {
114
- const runResult = await stmt.bind(...parameters).run();
146
+ const runResult = await stmt.bind(...normalizedParams).run();
115
147
  const runRecord = runResult;
116
148
  const meta = extractMeta(runRecord.meta);
117
149
  return {
@@ -121,7 +153,7 @@ export const D1Adapter = Object.freeze({
121
153
  ...extractServedBy(runRecord.meta),
122
154
  };
123
155
  }
124
- const result = await stmt.bind(...parameters).all();
156
+ const result = await stmt.bind(...normalizedParams).all();
125
157
  const rawResult = result;
126
158
  const rows = BaseAdapter.normalizeRows(rawResult.results ?? []);
127
159
  const metaValue = rawResult.meta;
@@ -141,9 +173,10 @@ export const D1Adapter = Object.freeze({
141
173
  if (!connected)
142
174
  throw ErrorFactory.createConnectionError('Database not connected');
143
175
  const db = resolveExecutor();
176
+ const normalizedParams = normalizeD1BindParameters(parameters);
144
177
  try {
145
178
  const stmt = db.prepare(sql);
146
- const result = await stmt.bind(...parameters).first();
179
+ const result = await stmt.bind(...normalizedParams).first();
147
180
  return result === null ? null : BaseAdapter.normalizeRow(result);
148
181
  }
149
182
  catch (error) {
@@ -204,10 +237,11 @@ export const D1Adapter = Object.freeze({
204
237
  throw ErrorFactory.createConnectionError('Database not connected');
205
238
  }
206
239
  const db = resolveExecutor();
240
+ const normalizedParams = normalizeD1BindParameters(parameters ?? []);
207
241
  try {
208
242
  Logger.warn(`Raw SQL Query executed: ${sql}`, Logger.withTraceSkipContext({ sql, parameters }));
209
243
  const stmt = db.prepare(sql);
210
- const result = await stmt.bind(...(parameters ?? [])).all();
244
+ const result = await stmt.bind(...normalizedParams).all();
211
245
  return result.results ?? [];
212
246
  }
213
247
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"ZintrustD1Proxy.d.ts","sourceRoot":"","sources":["../../../../src/proxy/d1/ZintrustD1Proxy.ts"],"names":[],"mappings":"AAUA,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAEjD,KAAK,qBAAqB,GAAG;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,GAAG,EAAE;QACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;KAChG,CAAC;IACF,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF,CAAC;AAEF,KAAK,WAAW,CAAC,CAAC,IAAI;IACpB,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;CACf,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,mBAAmB,CAAC;IACpD,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,GAAG,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;CACjC,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,mBAAmB,CAAC;CAC/C,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AA2UF,eAAO,MAAM,eAAe;;;mBAGL,OAAO,OAAO,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;EAqB5D,CAAC;AAEH,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ZintrustD1Proxy.d.ts","sourceRoot":"","sources":["../../../../src/proxy/d1/ZintrustD1Proxy.ts"],"names":[],"mappings":"AAUA,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAEjD,KAAK,qBAAqB,GAAG;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,GAAG,EAAE;QACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;KAChG,CAAC;IACF,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF,CAAC;AAEF,KAAK,WAAW,CAAC,CAAC,IAAI;IACpB,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;CACf,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,mBAAmB,CAAC;IACpD,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,GAAG,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;CACjC,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,mBAAmB,CAAC;CAC/C,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAsWF,eAAO,MAAM,eAAe;;;mBAGL,OAAO,OAAO,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;EAqB5D,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -151,17 +151,41 @@ const resolveSqlRequest = async (request, env) => {
151
151
  return { ok: false, response: limit };
152
152
  return { ok: true, db: resolved.db, sql: parsed.sql, params: parsed.params };
153
153
  };
154
+ /**
155
+ * Normalize bind parameters before passing to D1's bind().
156
+ *
157
+ * D1 rejects JS objects and needs integer-valued numbers serialized for TEXT
158
+ * column compatibility, Dates as ISO strings, while blobs must be untouched.
159
+ */
160
+ const normalizeParams = (params) => {
161
+ if (!Array.isArray(params))
162
+ return params;
163
+ return params.map((value) => {
164
+ if (typeof value === 'number' && Number.isInteger(value))
165
+ return String(value);
166
+ if (value instanceof Date)
167
+ return value.toISOString();
168
+ if (value !== null &&
169
+ typeof value === 'object' &&
170
+ !(value instanceof ArrayBuffer) &&
171
+ !ArrayBuffer.isView(value)) {
172
+ return JSON.stringify(value);
173
+ }
174
+ return value;
175
+ });
176
+ };
154
177
  const handleQuery = async (request, env) => {
155
178
  try {
156
179
  const resolved = await resolveSqlRequest(request, env);
157
180
  if (!resolved.ok)
158
181
  return resolved.response;
182
+ const normalizedParams = normalizeParams(resolved.params);
159
183
  const startedAt = Date.now();
160
184
  const result = await resolved.db
161
185
  .prepare(resolved.sql)
162
- .bind(...resolved.params)
186
+ .bind(...normalizedParams)
163
187
  .all();
164
- SystemTraceWorkerBridge.emitQuery(resolved.sql, resolved.params, Date.now() - startedAt, 'd1-proxy', routingFromMeta(result.meta));
188
+ SystemTraceWorkerBridge.emitQuery(resolved.sql, normalizedParams, Date.now() - startedAt, 'd1-proxy', routingFromMeta(result.meta));
165
189
  const rows = result.results ?? [];
166
190
  return json(200, { rows, rowCount: rows.length });
167
191
  }
@@ -175,12 +199,13 @@ const handleQueryOne = async (request, env) => {
175
199
  const resolved = await resolveSqlRequest(request, env);
176
200
  if (!resolved.ok)
177
201
  return resolved.response;
202
+ const normalizedParams = normalizeParams(resolved.params);
178
203
  const startedAt = Date.now();
179
204
  const row = await resolved.db
180
205
  .prepare(resolved.sql)
181
- .bind(...resolved.params)
206
+ .bind(...normalizedParams)
182
207
  .first();
183
- SystemTraceWorkerBridge.emitQuery(resolved.sql, resolved.params, Date.now() - startedAt, 'd1-proxy');
208
+ SystemTraceWorkerBridge.emitQuery(resolved.sql, normalizedParams, Date.now() - startedAt, 'd1-proxy');
184
209
  return json(200, { row: row ?? null });
185
210
  }
186
211
  catch (error) {
@@ -193,12 +218,13 @@ const handleExec = async (request, env) => {
193
218
  const resolved = await resolveSqlRequest(request, env);
194
219
  if (!resolved.ok)
195
220
  return resolved.response;
221
+ const normalizedParams = normalizeParams(resolved.params);
196
222
  const startedAt = Date.now();
197
223
  const out = await resolved.db
198
224
  .prepare(resolved.sql)
199
- .bind(...resolved.params)
225
+ .bind(...normalizedParams)
200
226
  .run();
201
- SystemTraceWorkerBridge.emitQuery(resolved.sql, resolved.params, Date.now() - startedAt, 'd1-proxy', routingFromMeta(out.meta));
227
+ SystemTraceWorkerBridge.emitQuery(resolved.sql, normalizedParams, Date.now() - startedAt, 'd1-proxy', routingFromMeta(out.meta));
202
228
  return json(200, { ok: true, meta: out.meta });
203
229
  }
204
230
  catch (error) {
@@ -236,20 +262,21 @@ const handleStatement = async (request, env) => {
236
262
  if (!isString(sql) || sql.trim() === '') {
237
263
  return toErrorResponse(404, 'NOT_FOUND', 'Unknown statementId');
238
264
  }
265
+ const normalizedParams = normalizeParams(parsed.params);
239
266
  const startedAt = Date.now();
240
267
  if (isMutatingSql(sql)) {
241
268
  const out = await resolved.db
242
269
  .prepare(sql)
243
- .bind(...parsed.params)
270
+ .bind(...normalizedParams)
244
271
  .run();
245
- SystemTraceWorkerBridge.emitQuery(sql, parsed.params, Date.now() - startedAt, 'd1-proxy', routingFromMeta(out.meta));
272
+ SystemTraceWorkerBridge.emitQuery(sql, normalizedParams, Date.now() - startedAt, 'd1-proxy', routingFromMeta(out.meta));
246
273
  return json(200, { ok: true, meta: out.meta });
247
274
  }
248
275
  const out = await resolved.db
249
276
  .prepare(sql)
250
- .bind(...parsed.params)
277
+ .bind(...normalizedParams)
251
278
  .all();
252
- SystemTraceWorkerBridge.emitQuery(sql, parsed.params, Date.now() - startedAt, 'd1-proxy', routingFromMeta(out.meta));
279
+ SystemTraceWorkerBridge.emitQuery(sql, normalizedParams, Date.now() - startedAt, 'd1-proxy', routingFromMeta(out.meta));
253
280
  const rows = out.results ?? [];
254
281
  return json(200, { rows, rowCount: rows.length });
255
282
  }