@zintrust/core 0.1.21 → 0.1.22

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 (67) hide show
  1. package/package.json +1 -1
  2. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  3. package/src/cli/commands/MigrateCommand.js +1 -1
  4. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -1
  5. package/src/cli/d1/D1SqlMigrations.js +4 -3
  6. package/src/cli/scaffolding/ModelGenerator.d.ts +1 -1
  7. package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -1
  8. package/src/cli/scaffolding/ModelGenerator.js +10 -2
  9. package/src/config/broadcast.js +1 -1
  10. package/src/config/storage.js +4 -4
  11. package/src/config/type.d.ts +11 -0
  12. package/src/config/type.d.ts.map +1 -1
  13. package/src/config/type.js +10 -1
  14. package/src/index.d.ts.map +1 -1
  15. package/src/migrations/MigrationLoader.d.ts +1 -1
  16. package/src/migrations/MigrationLoader.d.ts.map +1 -1
  17. package/src/migrations/Migrator.d.ts +3 -3
  18. package/src/migrations/Migrator.d.ts.map +1 -1
  19. package/src/migrations/Migrator.js +1 -1
  20. package/src/migrations/MigratorFactory.d.ts +1 -1
  21. package/src/migrations/MigratorFactory.d.ts.map +1 -1
  22. package/src/migrations/MigratorFactory.js +3 -3
  23. package/src/migrations/enum/index.d.ts +93 -0
  24. package/src/migrations/enum/index.d.ts.map +1 -0
  25. package/src/migrations/enum/index.js +92 -0
  26. package/src/migrations/schema/Blueprint.d.ts +1 -1
  27. package/src/migrations/schema/Blueprint.d.ts.map +1 -1
  28. package/src/migrations/schema/Blueprint.js +27 -25
  29. package/src/migrations/schema/Schema.d.ts +1 -1
  30. package/src/migrations/schema/Schema.d.ts.map +1 -1
  31. package/src/migrations/schema/Schema.js +4 -3
  32. package/src/migrations/schema/SchemaCompiler.d.ts +1 -1
  33. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -1
  34. package/src/migrations/schema/SchemaCompiler.js +99 -91
  35. package/src/migrations/schema/index.d.ts +4 -4
  36. package/src/migrations/schema/index.d.ts.map +1 -1
  37. package/src/migrations/schema/index.js +3 -3
  38. package/src/migrations/schema/types.d.ts +2 -1
  39. package/src/migrations/schema/types.d.ts.map +1 -1
  40. package/src/orm/ConnectionManager.d.ts +6 -4
  41. package/src/orm/ConnectionManager.d.ts.map +1 -1
  42. package/src/orm/ConnectionManager.js +213 -75
  43. package/src/orm/Database.d.ts +2 -1
  44. package/src/orm/Database.d.ts.map +1 -1
  45. package/src/orm/DatabaseAdapter.d.ts +3 -2
  46. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  47. package/src/orm/DatabaseAdapter.js +17 -0
  48. package/src/orm/Model.d.ts.map +1 -1
  49. package/src/orm/Model.js +24 -2
  50. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  51. package/src/orm/adapters/D1Adapter.js +2 -1
  52. package/src/orm/adapters/D1RemoteAdapter.d.ts.map +1 -1
  53. package/src/orm/adapters/D1RemoteAdapter.js +2 -1
  54. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  55. package/src/orm/adapters/MySQLAdapter.js +2 -1
  56. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  57. package/src/orm/adapters/SQLServerAdapter.js +2 -1
  58. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  59. package/src/orm/adapters/SQLiteAdapter.js +2 -1
  60. package/src/orm/migrations/MigrationStore.d.ts.map +1 -1
  61. package/src/performance/Optimizer.d.ts.map +1 -1
  62. package/src/performance/Optimizer.js +55 -14
  63. package/src/profiling/RequestProfiler.d.ts.map +1 -1
  64. package/src/profiling/RequestProfiler.js +3 -1
  65. package/src/runtime/StartupConfigFileRegistry.d.ts +14 -13
  66. package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -1
  67. package/src/runtime/StartupConfigFileRegistry.js +10 -11
@@ -1 +1 @@
1
- {"version":3,"file":"SQLiteAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/SQLiteAdapter.ts"],"names":[],"mappings":"AACA;;;GAGG;AASH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AA6M1F,iBAAS,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CA0FrE;AAED,eAAO,MAAM,aAAa;;EAExB,CAAC"}
1
+ {"version":3,"file":"SQLiteAdapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/SQLiteAdapter.ts"],"names":[],"mappings":"AACA;;;GAGG;AAUH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,sBAAsB,CAAC;AA6M1F,iBAAS,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CA0FrE;AAED,eAAO,MAAM,aAAa;;EAExB,CAAC"}
@@ -7,6 +7,7 @@ import { databaseConfig } from '../../config/database.js';
7
7
  import { FeatureFlags } from '../../config/features.js';
8
8
  import { Logger } from '../../config/logger.js';
9
9
  import { ErrorFactory } from '../../exceptions/ZintrustError.js';
10
+ import { AdaptersEnum } from '../../migrations/enum/index.js';
10
11
  import fs from '../../node-singletons/fs.js';
11
12
  import * as path from '../../node-singletons/path.js';
12
13
  import { performance } from '../../node-singletons/perf-hooks.js';
@@ -208,7 +209,7 @@ function createSQLiteAdapter(config) {
208
209
  await adapter.query('PRAGMA foreign_keys = ON', []);
209
210
  },
210
211
  getType() {
211
- return 'sqlite';
212
+ return AdaptersEnum.sqlite;
212
213
  },
213
214
  isConnected() {
214
215
  return Boolean(state.db);
@@ -1 +1 @@
1
- {"version":3,"file":"MigrationStore.d.ts","sourceRoot":"","sources":["../../../../src/orm/migrations/MigrationStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI/C,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AA8CjG,eAAO,MAAM,cAAc;oBACH,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;8BASzC,SAAS,UACN,cAAc,YACZ,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;sBAiBZ,SAAS,SACN,cAAc,WACZ,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;sBAyBlC,SAAS,UACL;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC9E,OAAO,CAAC,IAAI,CAAC;mBAuCV,SAAS,UACL;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,cAAc,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,qBAAqB,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,GACA,OAAO,CAAC,IAAI,CAAC;kCAiBV,SAAS,UACL;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GACnE,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;8BAyB5C,SAAS,UACL;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GACjD,OAAO,CAAC,MAAM,EAAE,CAAC;qBAgBd,SAAS,UACL;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAC/D,OAAO,CAAC,IAAI,CAAC;EAShB,CAAC"}
1
+ {"version":3,"file":"MigrationStore.d.ts","sourceRoot":"","sources":["../../../../src/orm/migrations/MigrationStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI/C,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA8ChG,eAAO,MAAM,cAAc;oBACH,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;8BASzC,SAAS,UACN,cAAc,YACZ,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;sBAiBZ,SAAS,SACN,cAAc,WACZ,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;sBAyBlC,SAAS,UACL;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC9E,OAAO,CAAC,IAAI,CAAC;mBAuCV,SAAS,UACL;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,cAAc,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,qBAAqB,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,GACA,OAAO,CAAC,IAAI,CAAC;kCAiBV,SAAS,UACL;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GACnE,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;8BAyB5C,SAAS,UACL;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GACjD,OAAO,CAAC,MAAM,EAAE,CAAC;qBAgBd,SAAS,UACL;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAC/D,OAAO,CAAC,IAAI,CAAC;EAShB,CAAC"}
@@ -1 +1 @@
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,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;AAgDD;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B;;OAEG;sBAES,MAAM,UACT,MAAM,eACD,MAAM,GACjB,gBAAgB;EAUnB,CAAC;AA6SH,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,CAcd;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"}
1
+ {"version":3,"file":"Optimizer.d.ts","sourceRoot":"","sources":["../../../src/performance/Optimizer.ts"],"names":[],"mappings":"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"}
@@ -59,8 +59,52 @@ function createCacheState(cacheDir, ttlMs, maxEntries) {
59
59
  cacheDir,
60
60
  ttlMs,
61
61
  maxEntries,
62
+ pendingWrites: new Map(),
62
63
  };
63
64
  }
65
+ async function ensureCacheDir(cacheDir) {
66
+ try {
67
+ await fs.fsPromises.access(cacheDir);
68
+ }
69
+ catch {
70
+ await fs.fsPromises.mkdir(cacheDir, { recursive: true });
71
+ }
72
+ }
73
+ async function flushPendingWrites(state) {
74
+ if (state.pendingWrites.size === 0) {
75
+ state.flushTimer = undefined;
76
+ return false;
77
+ }
78
+ const pending = state.pendingWrites;
79
+ state.pendingWrites = new Map();
80
+ state.flushTimer = undefined;
81
+ try {
82
+ await ensureCacheDir(state.cacheDir);
83
+ }
84
+ catch (error) {
85
+ Logger.error('Failed to ensure cache directory before flush', error);
86
+ return false;
87
+ }
88
+ const writes = Array.from(pending.entries()).map(async ([key, entry]) => {
89
+ const file = path.join(state.cacheDir, `${key}.json`);
90
+ await fs.fsPromises.writeFile(file, entry.payload);
91
+ });
92
+ await Promise.all(writes);
93
+ return true;
94
+ }
95
+ function scheduleCacheWrite(state, key, payload) {
96
+ state.pendingWrites.set(key, { payload });
97
+ if (state.flushTimer !== undefined)
98
+ return;
99
+ state.flushTimer = setTimeout(() => {
100
+ void flushPendingWrites(state).catch((error) => {
101
+ Logger.error('Failed to flush generation cache writes', error);
102
+ });
103
+ }, 50);
104
+ if (isUnrefableTimer(state.flushTimer)) {
105
+ state.flushTimer.unref();
106
+ }
107
+ }
64
108
  function initializeCacheState(state) {
65
109
  loadFromDisk(state);
66
110
  }
@@ -134,15 +178,8 @@ function createCacheInstance(state) {
134
178
  deleteFileNonBlocking(file);
135
179
  }
136
180
  }
137
- // Save to disk asynchronously
138
- const file = path.join(state.cacheDir, `${key}.json`);
139
- try {
140
- await fs.fsPromises.access(state.cacheDir);
141
- }
142
- catch {
143
- await fs.fsPromises.mkdir(state.cacheDir, { recursive: true });
144
- }
145
- await fs.fsPromises.writeFile(file, JSON.stringify({ code, timestamp: Date.now() }, null, 2));
181
+ const payload = JSON.stringify({ code, timestamp: Date.now() }, null, 2);
182
+ scheduleCacheWrite(state, key, payload);
146
183
  },
147
184
  /**
148
185
  * Save cache to disk (async)
@@ -158,6 +195,11 @@ function createCacheInstance(state) {
158
195
  clearInterval(state.cleanupInterval);
159
196
  state.cleanupInterval = undefined;
160
197
  }
198
+ if (state.flushTimer) {
199
+ clearTimeout(state.flushTimer);
200
+ state.flushTimer = undefined;
201
+ }
202
+ state.pendingWrites.clear();
161
203
  await clearCache(state);
162
204
  },
163
205
  /**
@@ -179,11 +221,9 @@ function attachCacheStateForTests(instance, state) {
179
221
  */
180
222
  async function saveCacheToDisk(state) {
181
223
  try {
182
- try {
183
- await fs.fsPromises.access(state.cacheDir);
184
- }
185
- catch {
186
- await fs.fsPromises.mkdir(state.cacheDir, { recursive: true });
224
+ const flushedEnsured = await flushPendingWrites(state);
225
+ if (!flushedEnsured) {
226
+ await ensureCacheDir(state.cacheDir);
187
227
  }
188
228
  const writes = Array.from(state.cache.entries()).map(async ([key, entry]) => {
189
229
  const file = path.join(state.cacheDir, `${key}.json`);
@@ -200,6 +240,7 @@ async function saveCacheToDisk(state) {
200
240
  */
201
241
  async function clearCache(state) {
202
242
  state.cache.clear();
243
+ state.pendingWrites.clear();
203
244
  try {
204
245
  try {
205
246
  await fs.fsPromises.access(state.cacheDir);
@@ -1 +1 @@
1
- {"version":3,"file":"RequestProfiler.d.ts","sourceRoot":"","sources":["../../../src/profiling/RequestProfiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAa,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,cAAc,IAAI,YAAY,CAAC;IAC/B,aAAa,IAAI,WAAW,CAAC;IAC7B,iBAAiB,IAAI,eAAe,CAAC;IACrC,cAAc,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACnE,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC;CAChD;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B;;OAEG;cACO,gBAAgB;EAkE1B,CAAC;AAmBH;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"RequestProfiler.d.ts","sourceRoot":"","sources":["../../../src/profiling/RequestProfiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAa,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,cAAc,IAAI,YAAY,CAAC;IAC/B,aAAa,IAAI,WAAW,CAAC;IAC7B,iBAAiB,IAAI,eAAe,CAAC;IACrC,cAAc,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACnE,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC;CAChD;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B;;OAEG;cACO,gBAAgB;EAsE1B,CAAC;AAmBH;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,eAAe,eAAe,CAAC"}
@@ -49,13 +49,15 @@ export const RequestProfiler = Object.freeze({
49
49
  const queriesExecuted = queryLog.length;
50
50
  const patterns = n1Detector.detect(queryLog);
51
51
  const memoryDelta = memoryProfiler.delta();
52
- return {
52
+ const report = {
53
53
  duration,
54
54
  queriesExecuted,
55
55
  n1Patterns: patterns,
56
56
  memoryDelta,
57
57
  timestamp: new Date(),
58
58
  };
59
+ queryLogger.clear('profiling');
60
+ return report;
59
61
  },
60
62
  generateReport(profile) {
61
63
  const n1Section = formatN1Section(profile.n1Patterns);
@@ -1,18 +1,19 @@
1
- export declare enum StartupConfigFile {
2
- Broadcast = "config/broadcast.ts",
3
- Cache = "config/cache.ts",
4
- Database = "config/database.ts",
5
- Mail = "config/mail.ts",
6
- Middleware = "config/middleware.ts",
7
- Notification = "config/notification.ts",
8
- Queue = "config/queue.ts",
9
- Storage = "config/storage.ts"
10
- }
1
+ export declare const StartupConfigFile: {
2
+ readonly Broadcast: "config/broadcast.ts";
3
+ readonly Cache: "config/cache.ts";
4
+ readonly Database: "config/database.ts";
5
+ readonly Mail: "config/mail.ts";
6
+ readonly Middleware: "config/middleware.ts";
7
+ readonly Notification: "config/notification.ts";
8
+ readonly Queue: "config/queue.ts";
9
+ readonly Storage: "config/storage.ts";
10
+ };
11
+ export type StartupConfigFileTyps = typeof StartupConfigFile.Broadcast | typeof StartupConfigFile.Cache | typeof StartupConfigFile.Database | typeof StartupConfigFile.Mail | typeof StartupConfigFile.Middleware | typeof StartupConfigFile.Notification | typeof StartupConfigFile.Queue | typeof StartupConfigFile.Storage;
11
12
  export declare const StartupConfigFileRegistry: Readonly<{
12
- preload(files: readonly StartupConfigFile[]): Promise<void>;
13
+ preload(files: readonly StartupConfigFileTyps[]): Promise<void>;
13
14
  isPreloaded(): boolean;
14
- get<T>(file: StartupConfigFile): T | undefined;
15
- has(file: StartupConfigFile): boolean;
15
+ get<T>(file: StartupConfigFileTyps): T | undefined;
16
+ has(file: StartupConfigFileTyps): boolean;
16
17
  /** Intended for tests only. */
17
18
  clear(): void;
18
19
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"StartupConfigFileRegistry.d.ts","sourceRoot":"","sources":["../../../src/runtime/StartupConfigFileRegistry.ts"],"names":[],"mappings":"AAEA,oBAAY,iBAAiB;IAC3B,SAAS,wBAAwB;IACjC,KAAK,oBAAoB;IACzB,QAAQ,uBAAuB;IAC/B,IAAI,mBAAmB;IACvB,UAAU,yBAAyB;IACnC,YAAY,2BAA2B;IACvC,KAAK,oBAAoB;IACzB,OAAO,sBAAsB;CAC9B;AAKD,eAAO,MAAM,yBAAyB;mBACf,SAAS,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;mBAelD,OAAO;QAIlB,CAAC,QAAQ,iBAAiB,GAAG,CAAC,GAAG,SAAS;cAIpC,iBAAiB,GAAG,OAAO;IAIrC,+BAA+B;aACtB,IAAI;EAIb,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"StartupConfigFileRegistry.d.ts","sourceRoot":"","sources":["../../../src/runtime/StartupConfigFileRegistry.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB;;;;;;;;;CASpB,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAC7B,OAAO,iBAAiB,CAAC,SAAS,GAClC,OAAO,iBAAiB,CAAC,KAAK,GAC9B,OAAO,iBAAiB,CAAC,QAAQ,GACjC,OAAO,iBAAiB,CAAC,IAAI,GAC7B,OAAO,iBAAiB,CAAC,UAAU,GACnC,OAAO,iBAAiB,CAAC,YAAY,GACrC,OAAO,iBAAiB,CAAC,KAAK,GAC9B,OAAO,iBAAiB,CAAC,OAAO,CAAC;AAKrC,eAAO,MAAM,yBAAyB;mBACf,SAAS,qBAAqB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;mBAetD,OAAO;QAIlB,CAAC,QAAQ,qBAAqB,GAAG,CAAC,GAAG,SAAS;cAIxC,qBAAqB,GAAG,OAAO;IAIzC,+BAA+B;aACtB,IAAI;EAIb,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
@@ -1,15 +1,14 @@
1
1
  import useFileLoader from '../runtime/useFileLoader.js';
2
- export var StartupConfigFile;
3
- (function (StartupConfigFile) {
4
- StartupConfigFile["Broadcast"] = "config/broadcast.ts";
5
- StartupConfigFile["Cache"] = "config/cache.ts";
6
- StartupConfigFile["Database"] = "config/database.ts";
7
- StartupConfigFile["Mail"] = "config/mail.ts";
8
- StartupConfigFile["Middleware"] = "config/middleware.ts";
9
- StartupConfigFile["Notification"] = "config/notification.ts";
10
- StartupConfigFile["Queue"] = "config/queue.ts";
11
- StartupConfigFile["Storage"] = "config/storage.ts";
12
- })(StartupConfigFile || (StartupConfigFile = {}));
2
+ export const StartupConfigFile = {
3
+ Broadcast: 'config/broadcast.ts',
4
+ Cache: 'config/cache.ts',
5
+ Database: 'config/database.ts',
6
+ Mail: 'config/mail.ts',
7
+ Middleware: 'config/middleware.ts',
8
+ Notification: 'config/notification.ts',
9
+ Queue: 'config/queue.ts',
10
+ Storage: 'config/storage.ts',
11
+ };
13
12
  const cache = new Map();
14
13
  let preloaded = false;
15
14
  export const StartupConfigFileRegistry = Object.freeze({