@dudousxd/nestjs-telescope-mikro-orm 1.0.0 → 2.0.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 +7 -0
- package/package.json +3 -3
- package/dist/n-plus-one.d.ts +0 -9
- package/dist/n-plus-one.d.ts.map +0 -1
- package/dist/n-plus-one.js +0 -28
- package/dist/n-plus-one.js.map +0 -1
- package/dist/query-family-hash.d.ts +0 -3
- package/dist/query-family-hash.d.ts.map +0 -1
- package/dist/query-family-hash.js +0 -26
- package/dist/query-family-hash.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @dudousxd/nestjs-telescope-mikro-orm
|
|
2
2
|
|
|
3
|
+
## 2.0.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": "
|
|
3
|
+
"version": "2.0.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": "
|
|
34
|
+
"@dudousxd/nestjs-telescope": "2.0.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": "
|
|
52
|
+
"@dudousxd/nestjs-telescope": "2.0.0"
|
|
53
53
|
},
|
|
54
54
|
"engines": {
|
|
55
55
|
"node": ">=20"
|
package/dist/n-plus-one.d.ts
DELETED
|
@@ -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
|
package/dist/n-plus-one.d.ts.map
DELETED
|
@@ -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"}
|
package/dist/n-plus-one.js
DELETED
|
@@ -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
|
package/dist/n-plus-one.js.map
DELETED
|
@@ -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 +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"}
|