@dudousxd/nestjs-telescope-mikro-orm 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @dudousxd/nestjs-telescope-mikro-orm
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`c2423f3`](https://github.com/DavideCarvalho/nestjs-telescope/commit/c2423f330be3f9b92c0dbf2348220bf8740dab86), [`d8173d4`](https://github.com/DavideCarvalho/nestjs-telescope/commit/d8173d4c5d362814aa0fcdb0bfb35fd353b3d1a8), [`d200d15`](https://github.com/DavideCarvalho/nestjs-telescope/commit/d200d158f927e6a67396e594b32bfd0a0b3424e4), [`953ae12`](https://github.com/DavideCarvalho/nestjs-telescope/commit/953ae12fd35e42df3b806d6bbec6b49e3e3c71fb), [`4ceb884`](https://github.com/DavideCarvalho/nestjs-telescope/commit/4ceb8846b7307cf522d841c909d7eaf7fcb1aa4e), [`15e3e90`](https://github.com/DavideCarvalho/nestjs-telescope/commit/15e3e903d82616966342feeb966fbd44ad6a2631)]:
8
+ - @dudousxd/nestjs-telescope@2.0.0
9
+
3
10
  ## 1.0.0
4
11
 
5
12
  ### Minor Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dudousxd/nestjs-telescope-mikro-orm",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "MikroORM query watcher for @dudousxd/nestjs-telescope.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -31,7 +31,7 @@
31
31
  "@nestjs/common": ">=10.0.0",
32
32
  "@nestjs/core": ">=10.0.0",
33
33
  "reflect-metadata": ">=0.1.13",
34
- "@dudousxd/nestjs-telescope": "1.0.0"
34
+ "@dudousxd/nestjs-telescope": "1.1.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@mikro-orm/core": "^7.0.0",
@@ -49,7 +49,7 @@
49
49
  "supertest": "^7.0.0",
50
50
  "typescript": "^5.4.0",
51
51
  "vitest": "^3.0.0",
52
- "@dudousxd/nestjs-telescope": "1.0.0"
52
+ "@dudousxd/nestjs-telescope": "1.1.0"
53
53
  },
54
54
  "engines": {
55
55
  "node": ">=20"
@@ -1,9 +0,0 @@
1
- import { type Entry } from '@dudousxd/nestjs-telescope';
2
- export interface NPlusOneInsight {
3
- familyHash: string;
4
- count: number;
5
- sql: string;
6
- }
7
- /** Group query entries by familyHash; report templates run >= threshold times. */
8
- export declare function detectNPlusOne(entries: Entry[], threshold: number): NPlusOneInsight[];
9
- //# sourceMappingURL=n-plus-one.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"n-plus-one.d.ts","sourceRoot":"","sources":["../src/n-plus-one.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,4BAA4B,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBrF"}
@@ -1,28 +0,0 @@
1
- // packages/mikro-orm/src/n-plus-one.ts
2
- import { EntryType } from '@dudousxd/nestjs-telescope';
3
- /** Group query entries by familyHash; report templates run >= threshold times. */
4
- export function detectNPlusOne(entries, threshold) {
5
- const groups = new Map();
6
- for (const entry of entries) {
7
- if (entry.type !== EntryType.Query || entry.familyHash === null)
8
- continue;
9
- const sql = typeof entry.content.sql === 'string'
10
- ? entry.content.sql
11
- : '';
12
- const existing = groups.get(entry.familyHash);
13
- if (existing) {
14
- existing.count += 1;
15
- }
16
- else {
17
- groups.set(entry.familyHash, { count: 1, sql });
18
- }
19
- }
20
- const insights = [];
21
- for (const [familyHash, group] of groups) {
22
- if (group.count >= threshold) {
23
- insights.push({ familyHash, count: group.count, sql: group.sql });
24
- }
25
- }
26
- return insights;
27
- }
28
- //# sourceMappingURL=n-plus-one.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"n-plus-one.js","sourceRoot":"","sources":["../src/n-plus-one.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAc,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAQnE,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,SAAiB;IAChE,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0C,CAAC;IACjE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;YAAE,SAAS;QAC1E,MAAM,GAAG,GACP,OAAQ,KAAK,CAAC,OAA6B,CAAC,GAAG,KAAK,QAAQ;YAC1D,CAAC,CAAE,KAAK,CAAC,OAA2B,CAAC,GAAG;YACxC,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,3 +0,0 @@
1
- /** Grouping key for "the same query" — same template, any bound values. */
2
- export declare function queryFamilyHash(sql: string): string;
3
- //# sourceMappingURL=query-family-hash.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-family-hash.d.ts","sourceRoot":"","sources":["../src/query-family-hash.ts"],"names":[],"mappings":"AAwBA,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -1,26 +0,0 @@
1
- // packages/mikro-orm/src/query-family-hash.ts
2
- /** Normalize an SQL string into a template: lowercase, collapse whitespace,
3
- * replace string/number literals and bound-param placeholders with '?'. */
4
- function normalizeSql(sql) {
5
- return sql
6
- .toLowerCase()
7
- .replace(/'(?:[^']|'')*'/g, '?') // string literals
8
- .replace(/\b\d+(?:\.\d+)?\b/g, '?') // numeric literals
9
- .replace(/\?/g, '?') // already-parameterized (no-op, keeps idempotency explicit)
10
- .replace(/\s+/g, ' ')
11
- .trim();
12
- }
13
- /** Stable 32-bit FNV-1a hash, hex-encoded. Deterministic across processes. */
14
- function fnv1a(input) {
15
- let hash = 0x811c9dc5;
16
- for (let i = 0; i < input.length; i++) {
17
- hash ^= input.charCodeAt(i);
18
- hash = Math.imul(hash, 0x01000193);
19
- }
20
- return (hash >>> 0).toString(16).padStart(8, '0');
21
- }
22
- /** Grouping key for "the same query" — same template, any bound values. */
23
- export function queryFamilyHash(sql) {
24
- return fnv1a(normalizeSql(sql));
25
- }
26
- //# sourceMappingURL=query-family-hash.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-family-hash.js","sourceRoot":"","sources":["../src/query-family-hash.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C;4EAC4E;AAC5E,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG;SACP,WAAW,EAAE;SACb,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,kBAAkB;SAClD,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,mBAAmB;SACtD,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,4DAA4D;SAChF,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,8EAA8E;AAC9E,SAAS,KAAK,CAAC,KAAa;IAC1B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,CAAC"}