@zintrust/core 0.4.22 → 0.4.24

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.
Files changed (64) hide show
  1. package/package.json +4 -2
  2. package/src/boot/registry/runtime.d.ts.map +1 -1
  3. package/src/boot/registry/worker.js +1 -1
  4. package/src/builder/BundleOptimizer.d.ts.map +1 -1
  5. package/src/cli/commands/AddCommand.js +1 -1
  6. package/src/cli/commands/InitContainerCommand.js +3 -3
  7. package/src/cli/commands/QueueRecoveryCommand.d.ts.map +1 -1
  8. package/src/cli/commands/ScheduleListCommand.d.ts.map +1 -1
  9. package/src/cli/commands/SecretsCommand.d.ts.map +1 -1
  10. package/src/cli/commands/WorkerCommands.d.ts.map +1 -1
  11. package/src/cli/commands/WorkerCommands.js +4 -1
  12. package/src/cli/config/ConfigManager.d.ts.map +1 -1
  13. package/src/cli/config/ConfigManager.js +1 -8
  14. package/src/cli/config/ConfigValidator.d.ts.map +1 -1
  15. package/src/cli/d1/LocalD1Resolver.d.ts.map +1 -1
  16. package/src/cli/d1/WranglerConfig.js +1 -1
  17. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  18. package/src/cli/scaffolding/ProjectScaffolder.js +3 -3
  19. package/src/cli/scaffolding/RequestFactoryGenerator.d.ts.map +1 -1
  20. package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -1
  21. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  22. package/src/cli/scaffolding/ServiceScaffolder.js +3 -1
  23. package/src/common/index.d.ts.map +1 -1
  24. package/src/config/cloudflare.js +1 -1
  25. package/src/config/env.js +1 -1
  26. package/src/config/notification.js +1 -1
  27. package/src/config/redis.js +1 -1
  28. package/src/functions/cloudflare.d.ts.map +1 -1
  29. package/src/functions/cloudflare.js +4 -0
  30. package/src/index.js +3 -3
  31. package/src/microservices/MicroserviceManager.js +1 -1
  32. package/src/microservices/ServiceBundler.d.ts.map +1 -1
  33. package/src/middleware/RateLimiter.d.ts.map +1 -1
  34. package/src/middleware/RateLimiter.js +3 -2
  35. package/src/migrations/schema/Blueprint.js +1 -1
  36. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -1
  37. package/src/migrations/schema/SchemaCompiler.js +4 -3
  38. package/src/orm/Model.d.ts +2 -2
  39. package/src/orm/Model.d.ts.map +1 -1
  40. package/src/orm/Model.js +2 -2
  41. package/src/orm/QueryBuilder.d.ts.map +1 -1
  42. package/src/orm/QueryBuilder.js +27 -41
  43. package/src/orm/Relationships.d.ts +2 -2
  44. package/src/orm/Relationships.d.ts.map +1 -1
  45. package/src/orm/Relationships.js +33 -64
  46. package/src/performance/Benchmark.d.ts.map +1 -1
  47. package/src/performance/Benchmark.js +16 -24
  48. package/src/performance/Optimizer.d.ts.map +1 -1
  49. package/src/proxy/SigningService.d.ts +16 -16
  50. package/src/proxy/SigningService.d.ts.map +1 -1
  51. package/src/proxy/SigningService.js +8 -11
  52. package/src/proxy/mysql/MySqlProxyServer.d.ts.map +1 -1
  53. package/src/proxy/mysql/MySqlProxyServer.js +3 -1
  54. package/src/routes/error.d.ts.map +1 -1
  55. package/src/routes/error.js +1 -1
  56. package/src/runtime/adapters/DenoAdapter.js +1 -1
  57. package/src/runtime/adapters/LambdaAdapter.js +17 -19
  58. package/src/session/index.d.ts +1 -1
  59. package/src/session/index.d.ts.map +1 -1
  60. package/src/tools/broadcast/Broadcast.d.ts.map +1 -1
  61. package/src/tools/mail/template-loader.d.ts.map +1 -1
  62. package/src/tools/mail/template-loader.js +1 -2
  63. package/src/tools/queue/TimeoutManager.d.ts.map +1 -1
  64. package/src/tools/queue/drivers/Database.d.ts.map +1 -1
@@ -591,6 +591,27 @@ function attachReadExecutionMethods(builder, state, db) {
591
591
  const isNonEmptyString = (value) => typeof value === 'string' && value.length > 0;
592
592
  const isKeyValue = (value) => typeof value === 'string' || typeof value === 'number';
593
593
  const getModelIds = (models, key) => models.map((model) => model.getAttribute(key)).filter((element) => isKeyValue(element));
594
+ const normalizeCountValue = (value) => {
595
+ if (typeof value === 'bigint')
596
+ return Number(value);
597
+ if (typeof value === 'number')
598
+ return value;
599
+ return Number(value ?? 0);
600
+ };
601
+ const buildCountSql = (tableName, foreignKey, ids, dialect) => `SELECT ${escapeIdentifier(foreignKey, dialect)} as key, COUNT(*) as count FROM ${escapeIdentifier(tableName, dialect)} WHERE ${escapeIdentifier(foreignKey, dialect)} IN (${ids
602
+ .map(() => '?')
603
+ .join(',')}) GROUP BY ${escapeIdentifier(foreignKey, dialect)}`;
604
+ const queryCountMap = async (db, sql, params) => {
605
+ const results = (await db.query(sql, params, true));
606
+ return new Map(results.map((row) => [row.key, normalizeCountValue(row.count)]));
607
+ };
608
+ const setRelationCounts = (models, relation, localKey, countMap) => {
609
+ for (const model of models) {
610
+ const modelId = model.getAttribute(localKey);
611
+ const count = isKeyValue(modelId) ? (countMap.get(modelId) ?? 0) : 0;
612
+ model.setAttribute(`${relation}_count`, count);
613
+ }
614
+ };
594
615
  const applyConstraint = (query, constraint) => {
595
616
  if (typeof constraint === 'function') {
596
617
  return constraint(query) ?? query;
@@ -603,10 +624,7 @@ const applyConstraint = (query, constraint) => {
603
624
  async function loadCounts(models, relation, db) {
604
625
  if (models.length === 0 || !db)
605
626
  return;
606
- const firstModel = models[0];
607
- if (typeof firstModel[relation] !== 'function')
608
- return;
609
- const rel = firstModel[relation]();
627
+ const rel = getRelationFromModels(models, relation);
610
628
  if (rel === null || rel === undefined)
611
629
  return;
612
630
  const relType = rel.type;
@@ -620,45 +638,14 @@ async function loadCounts(models, relation, db) {
620
638
  if (ids.length === 0)
621
639
  return;
622
640
  const dialect = typeof db.getType === 'function' ? db.getType() : undefined;
623
- const queryCounts = async (sql, params) => {
624
- const results = (await db.query(sql, params, true));
625
- const map = new Map();
626
- for (const row of results) {
627
- let count;
628
- if (typeof row.count === 'bigint') {
629
- count = Number(row.count);
630
- }
631
- else if (typeof row.count === 'number') {
632
- count = row.count;
633
- }
634
- else {
635
- count = Number(row.count ?? 0);
636
- }
637
- map.set(row.key, count);
638
- }
639
- return map;
640
- };
641
- const setCountsOnModels = (countMap) => {
642
- for (const model of models) {
643
- const modelId = model.getAttribute(localKey);
644
- if (isKeyValue(modelId)) {
645
- const count = countMap.get(modelId) ?? 0;
646
- model.setAttribute(`${relation}_count`, count);
647
- }
648
- else {
649
- model.setAttribute(`${relation}_count`, 0);
650
- }
651
- }
652
- };
653
641
  if (relType === 'hasMany') {
654
642
  const relatedModel = rel.related;
655
643
  if (typeof relatedModel?.query !== 'function')
656
644
  return;
657
645
  const tempQuery = relatedModel.query();
658
646
  const relatedTable = tempQuery.getTable();
659
- const sql = `SELECT ${escapeIdentifier(foreignKey, dialect)} as key, COUNT(*) as count FROM ${escapeIdentifier(relatedTable, dialect)} WHERE ${escapeIdentifier(foreignKey, dialect)} IN (${ids.map(() => '?').join(',')}) GROUP BY ${escapeIdentifier(foreignKey, dialect)}`;
660
- const countMap = await queryCounts(sql, ids);
661
- setCountsOnModels(countMap);
647
+ const countMap = await queryCountMap(db, buildCountSql(relatedTable, foreignKey, ids, dialect), ids);
648
+ setRelationCounts(models, relation, localKey, countMap);
662
649
  return;
663
650
  }
664
651
  // belongsToMany
@@ -666,9 +653,8 @@ async function loadCounts(models, relation, db) {
666
653
  const relatedKey = rel.relatedKey;
667
654
  if (!isNonEmptyString(throughTable) || !isNonEmptyString(relatedKey))
668
655
  return;
669
- const sql = `SELECT ${escapeIdentifier(foreignKey, dialect)} as key, COUNT(*) as count FROM ${escapeIdentifier(throughTable, dialect)} WHERE ${escapeIdentifier(foreignKey, dialect)} IN (${ids.map(() => '?').join(',')}) GROUP BY ${escapeIdentifier(foreignKey, dialect)}`;
670
- const countMap = await queryCounts(sql, ids);
671
- setCountsOnModels(countMap);
656
+ const countMap = await queryCountMap(db, buildCountSql(throughTable, foreignKey, ids, dialect), ids);
657
+ setRelationCounts(models, relation, localKey, countMap);
672
658
  }
673
659
  const getRelationFromModels = (models, relation) => {
674
660
  const firstModel = models[0];
@@ -1002,7 +988,7 @@ function attachWriteMethods(builder, state, db) {
1002
988
  // For multi-row inserts, use the insertedRecords array
1003
989
  return {
1004
990
  id: result.lastInsertId ??
1005
- (items.length === 1 ? (items[0]?.['id'] ?? null) : null),
991
+ (items.length === 1 ? items[0]?.['id'] ?? null : null),
1006
992
  affectedRows: result.rowCount,
1007
993
  insertedRecords: items,
1008
994
  };
@@ -103,7 +103,7 @@ export declare const MorphTo: Readonly<{
103
103
  * @see FRAMEWORK_REFACTOR_FUNCTION_PATTERN.md for Pattern 2 details
104
104
  */
105
105
  export declare const HasOneThrough: Readonly<{
106
- create(relatedModel: ModelStatic, through: ModelStatic, foreignKey?: string, throughForeignKey?: string, localKey?: string, secondLocalKey?: string): IRelationship;
106
+ create: (relatedModel: ModelStatic, through: ModelStatic, foreignKey?: string, throughForeignKey?: string, localKey?: string, secondLocalKey?: string) => IRelationship;
107
107
  }>;
108
108
  /**
109
109
  * HasManyThrough Relationship
@@ -114,6 +114,6 @@ export declare const HasOneThrough: Readonly<{
114
114
  * @see FRAMEWORK_REFACTOR_FUNCTION_PATTERN.md for Pattern 2 details
115
115
  */
116
116
  export declare const HasManyThrough: Readonly<{
117
- create(relatedModel: ModelStatic, through: ModelStatic, foreignKey?: string, throughForeignKey?: string, localKey?: string, secondLocalKey?: string): IRelationship;
117
+ create: (relatedModel: ModelStatic, through: ModelStatic, foreignKey?: string, throughForeignKey?: string, localKey?: string, secondLocalKey?: string) => IRelationship;
118
118
  }>;
119
119
  //# sourceMappingURL=Relationships.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Relationships.d.ts","sourceRoot":"","sources":["../../../src/orm/Relationships.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,eAAe,GACf,UAAU,GACV,WAAW,GACX,SAAS,GACT,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,OAAO,KAAK,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAUD;;;;;GAKG;AACH,eAAO,MAAM,MAAM;yBACI,WAAW,cAAc,MAAM,YAAY,MAAM,GAAG,aAAa;EActF,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,OAAO;yBACG,WAAW,cAAc,MAAM,YAAY,MAAM,GAAG,aAAa;EActF,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,SAAS;yBACC,WAAW,cAAc,MAAM,YAAY,MAAM,GAAG,aAAa;EActF,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,aAAa;yBAER,WAAW,gBACX,MAAM,cACR,MAAM,cACN,MAAM,GACjB,aAAa;EAoChB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ;yBAEH,WAAW,aACd,MAAM,cACL,MAAM,YACR,MAAM,4BAEf,aAAa;EA0BhB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,SAAS;yBAEJ,WAAW,aACd,MAAM,cACL,MAAM,YACR,MAAM,4BAEf,aAAa;EA0BhB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,OAAO;sBAEL,MAAM,YACP,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,cACzB,MAAM,YACR,MAAM,GACf,aAAa;EAuChB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;yBAER,WAAW,WAChB,WAAW,eACP,MAAM,sBACC,MAAM,aACf,MAAM,mBACA,MAAM,GACtB,aAAa;EAqChB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;yBAET,WAAW,WAChB,WAAW,eACP,MAAM,sBACC,MAAM,aACf,MAAM,mBACA,MAAM,GACtB,aAAa;EAqChB,CAAC"}
1
+ {"version":3,"file":"Relationships.d.ts","sourceRoot":"","sources":["../../../src/orm/Relationships.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,eAAe,GACf,UAAU,GACV,WAAW,GACX,SAAS,GACT,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,OAAO,KAAK,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA2ED;;;;;GAKG;AACH,eAAO,MAAM,MAAM;yBACI,WAAW,cAAc,MAAM,YAAY,MAAM,GAAG,aAAa;EActF,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,OAAO;yBACG,WAAW,cAAc,MAAM,YAAY,MAAM,GAAG,aAAa;EActF,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,SAAS;yBACC,WAAW,cAAc,MAAM,YAAY,MAAM,GAAG,aAAa;EActF,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,aAAa;yBAER,WAAW,gBACX,MAAM,cACR,MAAM,cACN,MAAM,GACjB,aAAa;EAoChB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ;yBAEH,WAAW,aACd,MAAM,cACL,MAAM,YACR,MAAM,4BAEf,aAAa;EA0BhB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,SAAS;yBAEJ,WAAW,aACd,MAAM,cACL,MAAM,YACR,MAAM,4BAEf,aAAa;EA0BhB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,OAAO;sBAEL,MAAM,YACP,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,cACzB,MAAM,YACR,MAAM,GACf,aAAa;EAyChB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;2BAER,WAAW,WAChB,WAAW,eACP,MAAM,sBACC,MAAM,aACf,MAAM,mBACA,MAAM,KACtB,aAAa;EAUhB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;2BAET,WAAW,WAChB,WAAW,eACP,MAAM,sBACC,MAAM,aACf,MAAM,mBACA,MAAM,KACtB,aAAa;EAUhB,CAAC"}
@@ -9,6 +9,37 @@ const getRelatedTableName = (relatedModel) => {
9
9
  }
10
10
  throw ErrorFactory.createConfigError('Related model does not provide a table name');
11
11
  };
12
+ const hasEmptyRelationValue = (value) => value === undefined || value === null || value === '';
13
+ const buildThroughQuery = (modelClass, relatedTable, throughTable, secondKey, secondLocalKeyColumn, firstKey, value) => modelClass
14
+ .query()
15
+ .join(throughTable, `${relatedTable}.${secondKey} = ${throughTable}.${secondLocalKeyColumn}`)
16
+ .where(`${throughTable}.${firstKey}`, '=', value);
17
+ const createThroughRelationship = (type, relatedModel, through, foreignKey, throughForeignKey, localKey, secondLocalKey) => {
18
+ const throughTable = getRelatedTableName(through);
19
+ const relatedTable = getRelatedTableName(relatedModel);
20
+ const firstKey = throughForeignKey ?? 'id';
21
+ const secondKey = foreignKey ?? `${throughTable.slice(0, -1)}_id`;
22
+ const localKeyColumn = localKey ?? 'id';
23
+ const secondLocalKeyColumn = secondLocalKey ?? 'id';
24
+ return {
25
+ type,
26
+ related: relatedModel,
27
+ foreignKey: secondKey,
28
+ localKey: localKeyColumn,
29
+ through,
30
+ throughForeignKey: firstKey,
31
+ secondLocalKey: secondLocalKeyColumn,
32
+ async get(instance) {
33
+ const value = instance.getAttribute(localKeyColumn);
34
+ if (hasEmptyRelationValue(value)) {
35
+ return Promise.resolve(type === 'hasOneThrough' ? null : []); //NOSONAR
36
+ }
37
+ const query = buildThroughQuery(relatedModel, relatedTable, throughTable, secondKey, secondLocalKeyColumn, firstKey, value);
38
+ const result = type === 'hasOneThrough' ? await query.first() : await query.get();
39
+ return result;
40
+ },
41
+ };
42
+ };
12
43
  /**
13
44
  * HasOne Relationship
14
45
  * Sealed namespace object following Pattern 2
@@ -229,38 +260,7 @@ export const MorphTo = Object.freeze({
229
260
  * @see FRAMEWORK_REFACTOR_FUNCTION_PATTERN.md for Pattern 2 details
230
261
  */
231
262
  export const HasOneThrough = Object.freeze({
232
- create(relatedModel, through, foreignKey, throughForeignKey, localKey, secondLocalKey) {
233
- const throughTable = getRelatedTableName(through);
234
- const relatedTable = getRelatedTableName(relatedModel);
235
- // Default keys
236
- const firstKey = throughForeignKey ?? 'id';
237
- const secondKey = foreignKey ?? `${throughTable.slice(0, -1)}_id`;
238
- const localKeyColumn = localKey ?? 'id';
239
- const secondLocalKeyColumn = secondLocalKey ?? 'id';
240
- return {
241
- type: 'hasOneThrough',
242
- related: relatedModel,
243
- foreignKey: secondKey,
244
- localKey: localKeyColumn,
245
- through,
246
- throughForeignKey: firstKey,
247
- secondLocalKey: secondLocalKeyColumn,
248
- async get(instance) {
249
- const value = instance.getAttribute(localKeyColumn);
250
- if (value === undefined || value === null || value === '')
251
- return null;
252
- // Join through intermediate table
253
- // SELECT related.* FROM related
254
- // INNER JOIN through ON related.through_id = through.id
255
- // WHERE through.parent_id = value
256
- return relatedModel
257
- .query()
258
- .join(throughTable, `${relatedTable}.${secondKey} = ${throughTable}.${secondLocalKeyColumn}`)
259
- .where(`${throughTable}.${firstKey}`, '=', value)
260
- .first();
261
- },
262
- };
263
- },
263
+ create: (relatedModel, through, foreignKey, throughForeignKey, localKey, secondLocalKey) => createThroughRelationship('hasOneThrough', relatedModel, through, foreignKey, throughForeignKey, localKey, secondLocalKey),
264
264
  });
265
265
  /**
266
266
  * HasManyThrough Relationship
@@ -271,36 +271,5 @@ export const HasOneThrough = Object.freeze({
271
271
  * @see FRAMEWORK_REFACTOR_FUNCTION_PATTERN.md for Pattern 2 details
272
272
  */
273
273
  export const HasManyThrough = Object.freeze({
274
- create(relatedModel, through, foreignKey, throughForeignKey, localKey, secondLocalKey) {
275
- const throughTable = getRelatedTableName(through);
276
- const relatedTable = getRelatedTableName(relatedModel);
277
- // Default keys
278
- const firstKey = throughForeignKey ?? 'id';
279
- const secondKey = foreignKey ?? `${throughTable.slice(0, -1)}_id`;
280
- const localKeyColumn = localKey ?? 'id';
281
- const secondLocalKeyColumn = secondLocalKey ?? 'id';
282
- return {
283
- type: 'hasManyThrough',
284
- related: relatedModel,
285
- foreignKey: secondKey,
286
- localKey: localKeyColumn,
287
- through,
288
- throughForeignKey: firstKey,
289
- secondLocalKey: secondLocalKeyColumn,
290
- async get(instance) {
291
- const value = instance.getAttribute(localKeyColumn);
292
- if (value === undefined || value === null || value === '')
293
- return [];
294
- // Join through intermediate table
295
- // SELECT related.* FROM related
296
- // INNER JOIN through ON related.through_id = through.id
297
- // WHERE through.parent_id = value
298
- return relatedModel
299
- .query()
300
- .join(throughTable, `${relatedTable}.${secondKey} = ${throughTable}.${secondLocalKeyColumn}`)
301
- .where(`${throughTable}.${firstKey}`, '=', value)
302
- .get();
303
- },
304
- };
305
- },
274
+ create: (relatedModel, through, foreignKey, throughForeignKey, localKey, secondLocalKey) => createThroughRelationship('hasManyThrough', relatedModel, through, foreignKey, throughForeignKey, localKey, secondLocalKey),
306
275
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Benchmark.d.ts","sourceRoot":"","sources":["../../../src/performance/Benchmark.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,CAAC,EACX,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,eAAe,CAAC;IACnB,YAAY,CAAC,CAAC,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5B,UAAU,IAAI,eAAe,EAAE,CAAC;IAChC,QAAQ,IAAI,MAAM,CAAC;IACnB,MAAM,IAAI,cAAc,CAAC;IACzB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,gBAAgB,CAAC;IACpD,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,MAAM,CAAC;CAC3D;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS;IACpB;;OAEG;kBACU,MAAM,GAAuB,UAAU;EAuCpD,CAAC;AAqMH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,IAAI,IAAI,cAAc,EAAE,CAAC;IACzB,QAAQ,IAAI,WAAW,CAAC;IACxB,WAAW,IAAI,MAAM,CAAC;CACvB;AACD;;;GAGG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;cACO,cAAc;EA6ExB,CAAC"}
1
+ {"version":3,"file":"Benchmark.d.ts","sourceRoot":"","sources":["../../../src/performance/Benchmark.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,CAAC,EACX,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,eAAe,CAAC;IACnB,YAAY,CAAC,CAAC,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5B,UAAU,IAAI,eAAe,EAAE,CAAC;IAChC,QAAQ,IAAI,MAAM,CAAC;IACnB,MAAM,IAAI,cAAc,CAAC;IACzB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,gBAAgB,CAAC;IACpD,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,MAAM,CAAC;CAC3D;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS;IACpB;;OAEG;kBACU,MAAM,GAAuB,UAAU;EAuCpD,CAAC;AA2MH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,IAAI,IAAI,cAAc,EAAE,CAAC;IACzB,QAAQ,IAAI,WAAW,CAAC;IACxB,WAAW,IAAI,MAAM,CAAC;CACvB;AACD;;;GAGG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;cACO,cAAc;EA6ExB,CAAC"}
@@ -37,6 +37,20 @@ export const Benchmark = Object.freeze({
37
37
  };
38
38
  },
39
39
  });
40
+ function createBenchmarkResult(name, iterations, memBefore, memAfter, totalDuration, metadata) {
41
+ return {
42
+ name,
43
+ duration: totalDuration,
44
+ memoryBefore: memBefore,
45
+ memoryAfter: memAfter,
46
+ memoryDelta: memAfter - memBefore,
47
+ iterationCount: iterations,
48
+ averageTime: totalDuration / iterations,
49
+ averageMemory: (memAfter - memBefore) / iterations,
50
+ timestamp: new Date(),
51
+ metadata,
52
+ };
53
+ }
40
54
  /**
41
55
  * Run synchronous measurement
42
56
  */
@@ -51,18 +65,7 @@ function runMeasure(name, fn, iterations, metadata) {
51
65
  }
52
66
  const memAfter = process.memoryUsage().heapUsed;
53
67
  const totalDuration = durations.reduce((a, b) => a + b, 0);
54
- return {
55
- name,
56
- duration: totalDuration,
57
- memoryBefore: memBefore,
58
- memoryAfter: memAfter,
59
- memoryDelta: memAfter - memBefore,
60
- iterationCount: iterations,
61
- averageTime: totalDuration / iterations,
62
- averageMemory: (memAfter - memBefore) / iterations,
63
- timestamp: new Date(),
64
- metadata,
65
- };
68
+ return createBenchmarkResult(name, iterations, memBefore, memAfter, totalDuration, metadata);
66
69
  }
67
70
  /**
68
71
  * Run asynchronous measurement
@@ -81,18 +84,7 @@ async function runMeasureAsync(name, fn, iterations, metadata) {
81
84
  /* eslint-enable no-await-in-loop */
82
85
  const memAfter = process.memoryUsage().heapUsed;
83
86
  const totalDuration = durations.reduce((a, b) => a + b, 0);
84
- return {
85
- name,
86
- duration: totalDuration,
87
- memoryBefore: memBefore,
88
- memoryAfter: memAfter,
89
- memoryDelta: memAfter - memBefore,
90
- iterationCount: iterations,
91
- averageTime: totalDuration / iterations,
92
- averageMemory: (memAfter - memBefore) / iterations,
93
- timestamp: new Date(),
94
- metadata,
95
- };
87
+ return createBenchmarkResult(name, iterations, memBefore, memAfter, totalDuration, metadata);
96
88
  }
97
89
  /**
98
90
  * Compare benchmarks
@@ -1 +1 @@
1
- {"version":3,"file":"Optimizer.d.ts","sourceRoot":"","sources":["../../../src/performance/Optimizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Optimizer.d.ts","sourceRoot":"","sources":["../../../src/performance/Optimizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3E,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,IAAI,OAAO,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC,CAAC;CACJ;AAsDD;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B;;OAEG;sBAES,MAAM,UACT,MAAM,eACD,MAAM,GACjB,gBAAgB;EAUnB,CAAC;AAiXH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;cACO,WAAW;EAqCrB,CAAC;AAEH;;GAEG;AAEH;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,UAAU,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,EACnC,SAAS,GAAE,MAAU,GACpB,OAAO,CAAC,CAAC,EAAE,CAAC,CAWd;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAEjF;AAED,eAAO,MAAM,iBAAiB;;;EAG5B,CAAC;AAEH;;GAEG;AAEH;;GAEG;AAEH,wBAAgB,cAAc,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC9D,EAAE,EAAE,CAAC,EACL,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/F,CAAC,CA+DH;AAED,eAAO,MAAM,OAAO;;EAElB,CAAC;AAEH,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,CAAC,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7F,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,QAAQ,IAAI;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;KAC/C,CAAC;IACF,SAAS,IAAI,IAAI,CAAC;IAClB,KAAK,IAAI,IAAI,CAAC;CACf;AASD;;;GAGG;AACH,eAAO,MAAM,oBAAoB;IAC/B;;OAEG;cACO,qBAAqB;EAoE/B,CAAC;AA2HH,eAAe,oBAAoB,CAAC"}
@@ -12,25 +12,25 @@ export type SigningCredentials = Readonly<{
12
12
  keyId: string;
13
13
  secret: string;
14
14
  }>;
15
+ type VerifySigningParams = {
16
+ method: string;
17
+ url: string | URL;
18
+ body: string | Uint8Array;
19
+ headers: SigningHeaders;
20
+ };
21
+ type VerifySigningConfigParams = VerifySigningParams & {
22
+ signing: ProxySigningConfig;
23
+ };
24
+ type VerifySigningProviderParams = VerifySigningParams & {
25
+ windowMs: number;
26
+ getSecretForKeyId: (keyId: string) => string | undefined | Promise<string | undefined>;
27
+ verifyNonce?: (keyId: string, nonce: string, ttlMs: number) => Promise<boolean>;
28
+ };
15
29
  type SigningServiceApi = Readonly<{
16
30
  normalizeConfig: (signing: ProxySigningConfig) => ProxySigningConfig;
17
31
  shouldVerify: (signing: ProxySigningConfig, headers: SigningHeaders) => boolean;
18
- verify: (params: {
19
- method: string;
20
- url: string | URL;
21
- body: string | Uint8Array;
22
- headers: SigningHeaders;
23
- signing: ProxySigningConfig;
24
- }) => Promise<SigningVerificationResult>;
25
- verifyWithKeyProvider: (params: {
26
- method: string;
27
- url: string | URL;
28
- body: string | Uint8Array;
29
- headers: SigningHeaders;
30
- windowMs: number;
31
- getSecretForKeyId: (keyId: string) => string | undefined | Promise<string | undefined>;
32
- verifyNonce?: (keyId: string, nonce: string, ttlMs: number) => Promise<boolean>;
33
- }) => Promise<SigningVerificationResult>;
32
+ verify: (params: VerifySigningConfigParams) => Promise<SigningVerificationResult>;
33
+ verifyWithKeyProvider: (params: VerifySigningProviderParams) => Promise<SigningVerificationResult>;
34
34
  }>;
35
35
  export declare const normalizeSigningConfig: (signing: ProxySigningConfig) => ProxySigningConfig;
36
36
  export declare const normalizeSigningCredentials: (input: SigningCredentials) => SigningCredentials;
@@ -1 +1 @@
1
- {"version":3,"file":"SigningService.d.ts","sourceRoot":"","sources":["../../../src/proxy/SigningService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAI7D,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE1E,MAAM,MAAM,yBAAyB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,KAAK,iBAAiB,GAAG,QAAQ,CAAC;IAChC,eAAe,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,kBAAkB,CAAC;IACrE,YAAY,EAAE,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC;IAChF,MAAM,EAAE,CAAC,MAAM,EAAE;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;QAC1B,OAAO,EAAE,cAAc,CAAC;QACxB,OAAO,EAAE,kBAAkB,CAAC;KAC7B,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACzC,qBAAqB,EAAE,CAAC,MAAM,EAAE;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;QAC1B,OAAO,EAAE,cAAc,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QACvF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KACjF,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC1C,CAAC,CAAC;AAyCH,eAAO,MAAM,sBAAsB,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,kBAErB,CAAC;AAElD,eAAO,MAAM,2BAA2B,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,kBAKvE,CAAC;AA0FH,eAAO,MAAM,cAAc,EAAE,iBAK3B,CAAC"}
1
+ {"version":3,"file":"SigningService.d.ts","sourceRoot":"","sources":["../../../src/proxy/SigningService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAI7D,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE1E,MAAM,MAAM,yBAAyB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,OAAO,EAAE,cAAc,CAAC;CACzB,CAAC;AAEF,KAAK,yBAAyB,GAAG,mBAAmB,GAAG;IACrD,OAAO,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,KAAK,2BAA2B,GAAG,mBAAmB,GAAG;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACvF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjF,CAAC;AAEF,KAAK,iBAAiB,GAAG,QAAQ,CAAC;IAChC,eAAe,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,kBAAkB,CAAC;IACrE,YAAY,EAAE,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC;IAChF,MAAM,EAAE,CAAC,MAAM,EAAE,yBAAyB,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAClF,qBAAqB,EAAE,CAAC,MAAM,EAAE,2BAA2B,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACpG,CAAC,CAAC;AA4CH,eAAO,MAAM,sBAAsB,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,kBAErB,CAAC;AAElD,eAAO,MAAM,2BAA2B,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,kBAEjB,CAAC;AA8EzD,eAAO,MAAM,cAAc,EAAE,iBAK3B,CAAC"}
@@ -28,16 +28,14 @@ const normalizeSecret = (secret) => {
28
28
  return trimmed;
29
29
  return Env.get('APP_KEY', '');
30
30
  };
31
- const normalizeConfig = (signing) => ({
32
- ...signing,
33
- keyId: normalizeKeyId(signing.keyId),
34
- secret: normalizeSecret(signing.secret),
35
- });
36
- export const normalizeSigningConfig = (signing) => normalizeConfig(signing);
37
- export const normalizeSigningCredentials = (input) => ({
31
+ const normalizeSigningIdentity = (input) => ({
32
+ ...input,
38
33
  keyId: normalizeKeyId(input.keyId),
39
34
  secret: normalizeSecret(input.secret),
40
35
  });
36
+ const normalizeConfig = (signing) => normalizeSigningIdentity(signing);
37
+ export const normalizeSigningConfig = (signing) => normalizeConfig(signing);
38
+ export const normalizeSigningCredentials = (input) => normalizeSigningIdentity(input);
41
39
  const shouldVerify = (signing, headers) => {
42
40
  const normalized = normalizeConfig(signing);
43
41
  if (normalized.require)
@@ -66,6 +64,7 @@ const mapVerifyResult = (result) => {
66
64
  }
67
65
  return { ok: false, status: 403, code: result.code, message: result.message };
68
66
  };
67
+ const verifyAndMap = async (params) => mapVerifyResult(await SignedRequest.verify(params));
69
68
  const verify = async (params) => {
70
69
  const signing = normalizeConfig(params.signing);
71
70
  if (signing.require && (signing.keyId.trim() === '' || signing.secret.trim() === '')) {
@@ -76,7 +75,7 @@ const verify = async (params) => {
76
75
  message: 'Proxy signing is required but not configured',
77
76
  };
78
77
  }
79
- const result = await SignedRequest.verify({
78
+ return verifyAndMap({
80
79
  method: params.method,
81
80
  url: params.url,
82
81
  body: params.body,
@@ -85,10 +84,9 @@ const verify = async (params) => {
85
84
  getSecretForKeyId: async (keyId) => keyId.trim().toLowerCase() === signing.keyId ? signing.secret : undefined,
86
85
  windowMs: signing.windowMs,
87
86
  });
88
- return mapVerifyResult(result);
89
87
  };
90
88
  const verifyWithKeyProvider = async (params) => {
91
- const result = await SignedRequest.verify({
89
+ return verifyAndMap({
92
90
  method: params.method,
93
91
  url: params.url,
94
92
  body: params.body,
@@ -97,7 +95,6 @@ const verifyWithKeyProvider = async (params) => {
97
95
  getSecretForKeyId: params.getSecretForKeyId,
98
96
  verifyNonce: params.verifyNonce,
99
97
  });
100
- return mapVerifyResult(result);
101
98
  };
102
99
  export const SigningService = Object.freeze({
103
100
  normalizeConfig,
@@ -1 +1 @@
1
- {"version":3,"file":"MySqlProxyServer.d.ts","sourceRoot":"","sources":["../../../../src/proxy/mysql/MySqlProxyServer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAa5E,KAAK,cAAc,GAAG,kBAAkB,GAAG,yBAAyB,CAAC;AAkNrE,eAAO,MAAM,gBAAgB;sBACJ,cAAc,GAAQ,OAAO,CAAC,IAAI,CAAC;EA4C1D,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"MySqlProxyServer.d.ts","sourceRoot":"","sources":["../../../../src/proxy/mysql/MySqlProxyServer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAa5E,KAAK,cAAc,GAAG,kBAAkB,GAAG,yBAAyB,CAAC;AAkNrE,eAAO,MAAM,gBAAgB;sBACJ,cAAc,GAAQ,OAAO,CAAC,IAAI,CAAC;EA0D1D,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -171,7 +171,9 @@ export const MySqlProxyServer = Object.freeze({
171
171
  throw ErrorFactory.createConfigError(`MySQL proxy signing is required but credentials are missing. ` +
172
172
  `Set MYSQL_PROXY_KEY_ID and MYSQL_PROXY_SECRET (fallbacks: APP_NAME and APP_KEY). ` +
173
173
  `Resolved state: keyId=${config.signing.keyId || '<empty>'}, hasSecret=${String(signingHasSecret)}, ` +
174
- `cwd=${typeof process !== 'undefined' && typeof process.cwd === 'function' ? process.cwd() : '<unknown>'}`);
174
+ `cwd=${typeof process !== 'undefined' && typeof process.cwd === 'function'
175
+ ? process.cwd()
176
+ : '<unknown>'}`);
175
177
  }
176
178
  // Debug: surface resolved config so we can compare watch vs non-watch runs
177
179
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/routes/error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,KAAK,IAAI,MAAM,uBAAuB,CAAC;AA0KnD;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,OAAO,KAAG,IAGrD,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,qCAAqC,EAAE,CACrC,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,OAAO,EACd,SAAS,CAAC,EAAE,MAAM,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,4BAA4B,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;CAClE,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAMzB,CAAC;AAEH,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/routes/error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,KAAK,IAAI,MAAM,uBAAuB,CAAC;AA4KnD;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,OAAO,KAAG,IAGrD,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9F,qCAAqC,EAAE,CACrC,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,OAAO,EACd,SAAS,CAAC,EAAE,MAAM,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,4BAA4B,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;CAClE,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,eAMzB,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -92,7 +92,7 @@ const handleInternalServerErrorWithWrappers = async (request, response, error, r
92
92
  ? undefined
93
93
  : `Request\n\nMethod: ${requestObj.method}\nPath: ${requestObj.path}\n\nHeaders:\n${safeJsonStringify(requestObj.headers)}\n\nQuery:\n${safeJsonStringify(requestObj.query)}`;
94
94
  const requestRaw = requestObj === undefined ? undefined : safeJsonStringify(requestObj);
95
- const stackPretty = isDev ? (err.stack ?? '') : undefined;
95
+ const stackPretty = isDev ? err.stack ?? '' : undefined;
96
96
  const stackRaw = isDev
97
97
  ? safeJsonStringify({ name: err.name, message: err.message, stack: err.stack })
98
98
  : undefined;
@@ -175,7 +175,7 @@ function formatDenoResponse(response) {
175
175
  */
176
176
  function getDenoEnvironment() {
177
177
  // @ts-ignore - Deno.env is available in Deno runtime
178
- const env = (typeof Deno === 'undefined' ? {} : (Deno.env.toObject?.() ?? {}));
178
+ const env = (typeof Deno === 'undefined' ? {} : Deno.env.toObject?.() ?? {});
179
179
  return {
180
180
  nodeEnv: (env['DENO_ENV'] ?? 'production'),
181
181
  runtime: 'deno',
@@ -138,7 +138,7 @@ function formatLambdaResponse(response) {
138
138
  return {
139
139
  statusCode: response.statusCode,
140
140
  headers: response.headers,
141
- body: typeof response.body === 'string' ? response.body : (response.body?.toString('utf-8') ?? ''),
141
+ body: typeof response.body === 'string' ? response.body : response.body?.toString('utf-8') ?? '',
142
142
  isBase64Encoded: response.isBase64Encoded ?? false,
143
143
  };
144
144
  }
@@ -236,6 +236,17 @@ function getRemoteAddrV1(headers) {
236
236
  }
237
237
  return '0.0.0.0';
238
238
  }
239
+ function parseHttpStyleRequest(event, resolveRemoteAddr) {
240
+ const headers = event.headers ?? {};
241
+ return createParsedLambdaRequest({
242
+ method: event.httpMethod,
243
+ path: event.path,
244
+ headers,
245
+ query: event.queryStringParameters ?? {},
246
+ body: event.body ?? null,
247
+ remoteAddr: resolveRemoteAddr(headers),
248
+ });
249
+ }
239
250
  /**
240
251
  * Parse API Gateway v2 request
241
252
  */
@@ -254,29 +265,16 @@ function parseV2Request(event) {
254
265
  * Parse ALB request
255
266
  */
256
267
  function parseAlbRequest(event) {
257
- const headers = event.headers ?? {};
258
- return {
259
- method: event.httpMethod,
260
- path: event.path,
261
- headers,
262
- query: event.queryStringParameters ?? {},
263
- body: event.body ?? null,
264
- remoteAddr: getRemoteAddrAlb(headers),
265
- };
268
+ return parseHttpStyleRequest(event, getRemoteAddrAlb);
266
269
  }
267
270
  /**
268
271
  * Parse API Gateway v1 request
269
272
  */
270
273
  function parseV1Request(event) {
271
- const headers = event.headers ?? {};
272
- return {
273
- method: event.httpMethod,
274
- path: event.path,
275
- headers,
276
- query: event.queryStringParameters ?? {},
277
- body: event.body ?? null,
278
- remoteAddr: getRemoteAddrV1(headers),
279
- };
274
+ return parseHttpStyleRequest(event, getRemoteAddrV1);
275
+ }
276
+ function createParsedLambdaRequest(request) {
277
+ return request;
280
278
  }
281
279
  /**
282
280
  * Normalize headers to lowercase
@@ -1,3 +1,3 @@
1
1
  export { SessionManager } from './SessionManager';
2
- export type { ISession, ISessionManager, SessionData, SessionManagerOptions } from './SessionManager';
2
+ export type { ISession, ISessionManager, SessionData, SessionManagerOptions, } from './SessionManager';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EACV,QAAQ,EACR,eAAe,EACf,WAAW,EACX,qBAAqB,GACtB,MAAM,yBAAyB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Broadcast.d.ts","sourceRoot":"","sources":["../../../../src/tools/broadcast/Broadcast.ts"],"names":[],"mappings":"AAQA,KAAK,WAAW,GAAG,QAAQ,CAAC;IAC1B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3E,CAAC,CAAC;AAyDH,eAAO,MAAM,SAAS;kBACA,MAAM,SAAS,MAAM,QAAQ,OAAO;0BAM5B,MAAM,SAAS,MAAM,QAAQ,OAAO;4BAMrD,MAAM,SACR,MAAM,QACP,OAAO,YACJ;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;qBAepC,MAAM;kCAEa,MAAM,SAAS,MAAM,QAAQ,OAAO;;uBAKrD,MAAM,GAAG,WAAW;EAQvC,CAAC;AAEH,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Broadcast.d.ts","sourceRoot":"","sources":["../../../../src/tools/broadcast/Broadcast.ts"],"names":[],"mappings":"AAQA,KAAK,WAAW,GAAG,QAAQ,CAAC;IAC1B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3E,CAAC,CAAC;AA0DH,eAAO,MAAM,SAAS;kBACA,MAAM,SAAS,MAAM,QAAQ,OAAO;0BAM5B,MAAM,SAAS,MAAM,QAAQ,OAAO;4BAMrD,MAAM,SACR,MAAM,QACP,OAAO,YACJ;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;qBAepC,MAAM;kCAEa,MAAM,SAAS,MAAM,QAAQ,OAAO;;uBAKrD,MAAM,GAAG,WAAW;EAQvC,CAAC;AAEH,eAAe,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"template-loader.d.ts","sourceRoot":"","sources":["../../../../src/tools/mail/template-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAoM9D;;GAEG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,iBAAsB,GAChC,OAAO,CAAC,MAAM,CAAC,CAwBjB;AA2FD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAShD"}
1
+ {"version":3,"file":"template-loader.d.ts","sourceRoot":"","sources":["../../../../src/tools/mail/template-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAqM9D;;GAEG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,iBAAsB,GAChC,OAAO,CAAC,MAAM,CAAC,CAwBjB;AA2FD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAShD"}
@@ -157,8 +157,7 @@ async function loadTemplateContent(templateName) {
157
157
  }
158
158
  // Extract last error from failed attempts
159
159
  const lastError = fileResult.error ?? moduleResult.error;
160
- throw ErrorFactory.createConfigError(`Failed to load template from known paths: ${[...fileCandidates, ...moduleCandidates].join(', ')}` +
161
- (lastError === undefined ? '' : `. Last error: ${String(lastError)}`));
160
+ throw ErrorFactory.createConfigError(`Failed to load template from known paths: ${[...fileCandidates, ...moduleCandidates].join(', ')}` + (lastError === undefined ? '' : `. Last error: ${String(lastError)}`));
162
161
  }
163
162
  /**
164
163
  * Load and render email template with variable substitution
@@ -1 +1 @@
1
- {"version":3,"file":"TimeoutManager.d.ts","sourceRoot":"","sources":["../../../../src/tools/queue/TimeoutManager.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AA8BF,eAAO,MAAM,cAAc;4BACD,MAAM;gBAKZ,CAAC,aACN,MAAM,OAAO,CAAC,CAAC,CAAC,aAChB,MAAM,iBACF,MAAM,mBACJ,MAAM,OAAO,CAAC,CAAC,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC;qBA0BU,CAAC,aAAa,MAAM,OAAO,CAAC,CAAC,CAAC,UAAU,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;4BAhDjE,OAAO,KAAG,OAAO;EAwE9C,CAAC;AAEH,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"TimeoutManager.d.ts","sourceRoot":"","sources":["../../../../src/tools/queue/TimeoutManager.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AA8BF,eAAO,MAAM,cAAc;4BACD,MAAM;gBAKZ,CAAC,aACN,MAAM,OAAO,CAAC,CAAC,CAAC,aAChB,MAAM,iBACF,MAAM,mBACJ,MAAM,OAAO,CAAC,CAAC,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC;qBAuBU,CAAC,aAAa,MAAM,OAAO,CAAC,CAAC,CAAC,UAAU,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;4BA7CjE,OAAO,KAAG,OAAO;EAqE9C,CAAC;AAEH,eAAe,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../../../../src/tools/queue/drivers/Database.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,OAAO,CAAC,CAAC,GAAG,OAAO,EACjB,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACxC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,eAAO,MAAM,aAAa;uBAkBR,CAAC,mBACN,MAAM,WACJ,CAAC,mBACO,MAAM,KACtB,OAAO,CAAC,MAAM,CAAC;uBAkBJ,CAAC,mBACN,MAAM,mBACI,MAAM,KACtB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;0BAsEtB,MAAM,MAAM,MAAM,mBAAmB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;6BAYxD,MAAM,mBAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;4BAoBlD,MAAM,mBAAmB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;CASlE,CAAC;AAEL,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../../../../src/tools/queue/drivers/Database.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,OAAO,CAAC,CAAC,GAAG,OAAO,EACjB,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACxC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,eAAO,MAAM,aAAa;uBAkBR,CAAC,mBACN,MAAM,WACJ,CAAC,mBACO,MAAM,KACtB,OAAO,CAAC,MAAM,CAAC;uBAkBJ,CAAC,mBACN,MAAM,mBACI,MAAM,KACtB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;0BAwEtB,MAAM,MAAM,MAAM,mBAAmB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;6BAYxD,MAAM,mBAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;4BAoBlD,MAAM,mBAAmB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;CASlE,CAAC;AAEL,eAAe,aAAa,CAAC"}