@pegasusheavy/nestjs-prisma-graphql 1.4.3 ā 1.6.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/README.md +18 -7
- package/dist/benchmark/analysis.d.ts +7 -0
- package/dist/benchmark/analysis.d.ts.map +1 -0
- package/dist/benchmark/analysis.js +265 -0
- package/dist/benchmark/analysis.js.map +1 -0
- package/dist/benchmark/index.d.ts +7 -0
- package/dist/benchmark/index.d.ts.map +1 -0
- package/dist/benchmark/index.js +272 -0
- package/dist/benchmark/index.js.map +1 -0
- package/dist/event-names.d.ts +2 -0
- package/dist/event-names.d.ts.map +1 -0
- package/dist/event-names.js +2 -0
- package/dist/event-names.js.map +1 -0
- package/dist/generate.d.ts +4 -140
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +199 -2826
- package/dist/generate.js.map +1 -1
- package/dist/handlers/args-type.d.ts +7 -0
- package/dist/handlers/args-type.d.ts.map +1 -0
- package/dist/handlers/args-type.js +68 -0
- package/dist/handlers/args-type.js.map +1 -0
- package/dist/handlers/combine-scalar-filters.d.ts +6 -0
- package/dist/handlers/combine-scalar-filters.d.ts.map +1 -0
- package/dist/handlers/combine-scalar-filters.js +110 -0
- package/dist/handlers/combine-scalar-filters.js.map +1 -0
- package/dist/handlers/create-aggregate-input.d.ts +10 -0
- package/dist/handlers/create-aggregate-input.d.ts.map +1 -0
- package/dist/handlers/create-aggregate-input.js +33 -0
- package/dist/handlers/create-aggregate-input.js.map +1 -0
- package/dist/handlers/decimal-helpers.d.ts +10 -0
- package/dist/handlers/decimal-helpers.d.ts.map +1 -0
- package/dist/handlers/decimal-helpers.js +73 -0
- package/dist/handlers/decimal-helpers.js.map +1 -0
- package/dist/handlers/emit-single.d.ts +3 -0
- package/dist/handlers/emit-single.d.ts.map +1 -0
- package/dist/handlers/emit-single.js +14 -0
- package/dist/handlers/emit-single.js.map +1 -0
- package/dist/handlers/generate-barrel-exports.d.ts +13 -0
- package/dist/handlers/generate-barrel-exports.d.ts.map +1 -0
- package/dist/handlers/generate-barrel-exports.js +69 -0
- package/dist/handlers/generate-barrel-exports.js.map +1 -0
- package/dist/handlers/generate-files.d.ts +3 -0
- package/dist/handlers/generate-files.d.ts.map +1 -0
- package/dist/handlers/generate-files.js +133 -0
- package/dist/handlers/generate-files.js.map +1 -0
- package/dist/handlers/input-type.d.ts +7 -0
- package/dist/handlers/input-type.d.ts.map +1 -0
- package/dist/handlers/input-type.js +297 -0
- package/dist/handlers/input-type.js.map +1 -0
- package/dist/handlers/model-data.d.ts +3 -0
- package/dist/handlers/model-data.d.ts.map +1 -0
- package/dist/handlers/model-data.js +27 -0
- package/dist/handlers/model-data.js.map +1 -0
- package/dist/handlers/model-output-type.d.ts +3 -0
- package/dist/handlers/model-output-type.d.ts.map +1 -0
- package/dist/handlers/model-output-type.js +283 -0
- package/dist/handlers/model-output-type.js.map +1 -0
- package/dist/handlers/no-atomic-operations.d.ts +3 -0
- package/dist/handlers/no-atomic-operations.d.ts.map +1 -0
- package/dist/handlers/no-atomic-operations.js +41 -0
- package/dist/handlers/no-atomic-operations.js.map +1 -0
- package/dist/handlers/output-type.d.ts +3 -0
- package/dist/handlers/output-type.d.ts.map +1 -0
- package/dist/handlers/output-type.js +179 -0
- package/dist/handlers/output-type.js.map +1 -0
- package/dist/handlers/patch-type-registry.d.ts +16 -0
- package/dist/handlers/patch-type-registry.d.ts.map +1 -0
- package/dist/handlers/patch-type-registry.js +47 -0
- package/dist/handlers/patch-type-registry.js.map +1 -0
- package/dist/handlers/post-process-imports.d.ts +11 -0
- package/dist/handlers/post-process-imports.d.ts.map +1 -0
- package/dist/handlers/post-process-imports.js +44 -0
- package/dist/handlers/post-process-imports.js.map +1 -0
- package/dist/handlers/prisma-enum-doc.d.ts +11 -0
- package/dist/handlers/prisma-enum-doc.d.ts.map +1 -0
- package/dist/handlers/prisma-enum-doc.js +16 -0
- package/dist/handlers/prisma-enum-doc.js.map +1 -0
- package/dist/handlers/purge-output.d.ts +3 -0
- package/dist/handlers/purge-output.d.ts.map +1 -0
- package/dist/handlers/purge-output.js +34 -0
- package/dist/handlers/purge-output.js.map +1 -0
- package/dist/handlers/re-export.d.ts +9 -0
- package/dist/handlers/re-export.d.ts.map +1 -0
- package/dist/handlers/re-export.js +101 -0
- package/dist/handlers/re-export.js.map +1 -0
- package/dist/handlers/register-all-types.d.ts +13 -0
- package/dist/handlers/register-all-types.d.ts.map +1 -0
- package/dist/handlers/register-all-types.js +99 -0
- package/dist/handlers/register-all-types.js.map +1 -0
- package/dist/handlers/register-enum.d.ts +3 -0
- package/dist/handlers/register-enum.d.ts.map +1 -0
- package/dist/handlers/register-enum.js +65 -0
- package/dist/handlers/register-enum.js.map +1 -0
- package/dist/handlers/require-single-fields-in-whereunique-input.d.ts +3 -0
- package/dist/handlers/require-single-fields-in-whereunique-input.d.ts.map +1 -0
- package/dist/handlers/require-single-fields-in-whereunique-input.js +15 -0
- package/dist/handlers/require-single-fields-in-whereunique-input.js.map +1 -0
- package/dist/handlers/type-registry.d.ts +14 -0
- package/dist/handlers/type-registry.d.ts.map +1 -0
- package/dist/handlers/type-registry.js +151 -0
- package/dist/handlers/type-registry.js.map +1 -0
- package/dist/handlers/warning.d.ts +2 -0
- package/dist/handlers/warning.d.ts.map +1 -0
- package/dist/handlers/warning.js +14 -0
- package/dist/handlers/warning.js.map +1 -0
- package/dist/helpers/create-comment.d.ts +3 -0
- package/dist/helpers/create-comment.d.ts.map +1 -0
- package/dist/helpers/create-comment.js +23 -0
- package/dist/helpers/create-comment.js.map +1 -0
- package/dist/helpers/create-config.d.ts +51 -0
- package/dist/helpers/create-config.d.ts.map +1 -0
- package/dist/helpers/create-config.js +165 -0
- package/dist/helpers/create-config.js.map +1 -0
- package/dist/helpers/create-emit-blocks.d.ts +5 -0
- package/dist/helpers/create-emit-blocks.d.ts.map +1 -0
- package/dist/helpers/create-emit-blocks.js +37 -0
- package/dist/helpers/create-emit-blocks.js.map +1 -0
- package/dist/helpers/detect-circular-deps.d.ts +28 -0
- package/dist/helpers/detect-circular-deps.d.ts.map +1 -0
- package/dist/helpers/detect-circular-deps.js +92 -0
- package/dist/helpers/detect-circular-deps.js.map +1 -0
- package/dist/helpers/factory-get-source-file.d.ts +13 -0
- package/dist/helpers/factory-get-source-file.d.ts.map +1 -0
- package/dist/helpers/factory-get-source-file.js +17 -0
- package/dist/helpers/factory-get-source-file.js.map +1 -0
- package/dist/helpers/file-type-by-location.d.ts +3 -0
- package/dist/helpers/file-type-by-location.d.ts.map +1 -0
- package/dist/helpers/file-type-by-location.js +19 -0
- package/dist/helpers/file-type-by-location.js.map +1 -0
- package/dist/helpers/generate-file-name.d.ts +7 -0
- package/dist/helpers/generate-file-name.d.ts.map +1 -0
- package/dist/helpers/generate-file-name.js +35 -0
- package/dist/helpers/generate-file-name.js.map +1 -0
- package/dist/helpers/get-enum-name.d.ts +2 -0
- package/dist/helpers/get-enum-name.d.ts.map +1 -0
- package/dist/helpers/get-enum-name.js +5 -0
- package/dist/helpers/get-enum-name.js.map +1 -0
- package/dist/helpers/get-graphql-import.d.ts +19 -0
- package/dist/helpers/get-graphql-import.d.ts.map +1 -0
- package/dist/helpers/get-graphql-import.js +52 -0
- package/dist/helpers/get-graphql-import.js.map +1 -0
- package/dist/helpers/get-graphql-input-type.d.ts +6 -0
- package/dist/helpers/get-graphql-input-type.d.ts.map +1 -0
- package/dist/helpers/get-graphql-input-type.js +64 -0
- package/dist/helpers/get-graphql-input-type.js.map +1 -0
- package/dist/helpers/get-model-name.d.ts +2 -0
- package/dist/helpers/get-model-name.d.ts.map +1 -0
- package/dist/helpers/get-model-name.js +130 -0
- package/dist/helpers/get-model-name.js.map +1 -0
- package/dist/helpers/get-output-type-name.d.ts +2 -0
- package/dist/helpers/get-output-type-name.d.ts.map +1 -0
- package/dist/helpers/get-output-type-name.js +4 -0
- package/dist/helpers/get-output-type-name.js.map +1 -0
- package/dist/helpers/get-property-type.d.ts +9 -0
- package/dist/helpers/get-property-type.d.ts.map +1 -0
- package/dist/helpers/get-property-type.js +48 -0
- package/dist/helpers/get-property-type.js.map +1 -0
- package/dist/helpers/get-where-unique-at-least-keys.d.ts +3 -0
- package/dist/helpers/get-where-unique-at-least-keys.d.ts.map +1 -0
- package/dist/helpers/get-where-unique-at-least-keys.js +17 -0
- package/dist/helpers/get-where-unique-at-least-keys.js.map +1 -0
- package/dist/helpers/import-declaration-map.d.ts +19 -0
- package/dist/helpers/import-declaration-map.d.ts.map +1 -0
- package/dist/helpers/import-declaration-map.js +69 -0
- package/dist/helpers/import-declaration-map.js.map +1 -0
- package/dist/helpers/is-many-and-return.d.ts +2 -0
- package/dist/helpers/is-many-and-return.d.ts.map +1 -0
- package/dist/helpers/is-many-and-return.js +9 -0
- package/dist/helpers/is-many-and-return.js.map +1 -0
- package/dist/helpers/is-where-unique-input-type.d.ts +2 -0
- package/dist/helpers/is-where-unique-input-type.d.ts.map +1 -0
- package/dist/helpers/is-where-unique-input-type.js +4 -0
- package/dist/helpers/is-where-unique-input-type.js.map +1 -0
- package/dist/helpers/object-settings.d.ts +39 -0
- package/dist/helpers/object-settings.d.ts.map +1 -0
- package/dist/helpers/object-settings.js +297 -0
- package/dist/helpers/object-settings.js.map +1 -0
- package/dist/helpers/pascal-case.d.ts +2 -0
- package/dist/helpers/pascal-case.d.ts.map +1 -0
- package/dist/helpers/pascal-case.js +5 -0
- package/dist/helpers/pascal-case.js.map +1 -0
- package/dist/helpers/property-structure.d.ts +13 -0
- package/dist/helpers/property-structure.d.ts.map +1 -0
- package/dist/helpers/property-structure.js +20 -0
- package/dist/helpers/property-structure.js.map +1 -0
- package/dist/helpers/relative-path.d.ts +2 -0
- package/dist/helpers/relative-path.d.ts.map +1 -0
- package/dist/helpers/relative-path.js +20 -0
- package/dist/helpers/relative-path.js.map +1 -0
- package/dist/helpers/type-safe-assert.d.ts +7 -0
- package/dist/helpers/type-safe-assert.d.ts.map +1 -0
- package/dist/helpers/type-safe-assert.js +10 -0
- package/dist/helpers/type-safe-assert.js.map +1 -0
- package/dist/helpers/update-object-property.d.ts +7 -0
- package/dist/helpers/update-object-property.d.ts.map +1 -0
- package/dist/helpers/update-object-property.js +21 -0
- package/dist/helpers/update-object-property.js.map +1 -0
- package/dist/index.d.ts +4 -6
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +135 -2956
- package/dist/index.js.map +1 -1
- package/dist/test/test-utils.d.ts +4 -0
- package/dist/test/test-utils.d.ts.map +1 -0
- package/dist/test/test-utils.js +14 -0
- package/dist/test/test-utils.js.map +1 -0
- package/dist/types.d.ts +73 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -192,7 +192,8 @@ export class UserResolver {
|
|
|
192
192
|
|--------|------|---------|-------------|
|
|
193
193
|
| `output` | `string` | *required* | Output folder relative to the schema file |
|
|
194
194
|
| `outputFilePattern` | `string` | `{model}/{name}.{type}.ts` | Pattern for generated file paths |
|
|
195
|
-
| `esmCompatible` | `boolean` | `true` | Enable ESM circular import resolution |
|
|
195
|
+
| `esmCompatible` | `boolean` | `true` | Enable ESM circular import resolution with type registry |
|
|
196
|
+
| `esmSuppressTypeErrors` | `boolean` | `false` | Add `// @ts-nocheck` to generated files (useful for deep relation filename truncation) |
|
|
196
197
|
| `prismaClientImport` | `string` | `@prisma/client` | Custom path to Prisma Client |
|
|
197
198
|
| `tsConfigFilePath` | `string` | - | Path to tsconfig.json for type checking |
|
|
198
199
|
| `disabled` | `boolean` | `false` | Disable generation (can also use env vars) |
|
|
@@ -677,18 +678,28 @@ Enable `esmCompatible` mode to generate code that handles circular dependencies:
|
|
|
677
678
|
|
|
678
679
|
```prisma
|
|
679
680
|
generator nestgraphql {
|
|
680
|
-
provider
|
|
681
|
-
output
|
|
682
|
-
esmCompatible
|
|
681
|
+
provider = "nestjs-prisma-graphql"
|
|
682
|
+
output = "../src/@generated"
|
|
683
|
+
esmCompatible = true
|
|
684
|
+
esmSuppressTypeErrors = false # Set true if you hit filename truncation on deep relations
|
|
683
685
|
}
|
|
684
686
|
```
|
|
685
687
|
|
|
686
688
|
### Type Registry
|
|
687
689
|
|
|
688
|
-
When `esmCompatible` is enabled, the generator
|
|
690
|
+
When `esmCompatible` is enabled, the generator automatically handles:
|
|
691
|
+
|
|
692
|
+
1. **Type Registry** ā Creates `type-registry.ts` with lazy type resolution helpers
|
|
693
|
+
2. **Type Registration** ā Generates `register-all-types.js` that imports all types
|
|
694
|
+
3. **ESM Import Resolution** ā Adds `.js` extensions to all relative imports
|
|
695
|
+
4. **Barrel Exports** ā Creates `index.ts` files when `reExport = "None"`
|
|
696
|
+
5. **TypeScript Compatibility** ā Patches `getType<T = any>` for `@nestjs/graphql`
|
|
697
|
+
|
|
698
|
+
**No post-processing scripts needed** ā the generator handles everything internally when `esmCompatible = true`.
|
|
699
|
+
|
|
700
|
+
#### Generated Files
|
|
689
701
|
|
|
690
|
-
|
|
691
|
-
2. **`register-all-types.ts`** ā Registers all types at application startup
|
|
702
|
+
The generator creates:
|
|
692
703
|
|
|
693
704
|
#### Available Functions
|
|
694
705
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/benchmark/analysis.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code analysis and improvement recommendations
|
|
3
|
+
*
|
|
4
|
+
* Run with: pnpm tsx src/benchmark/analysis.ts
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync, readdirSync, statSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
function analyzeFile(filePath) {
|
|
9
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
10
|
+
const lines = content.split('\n');
|
|
11
|
+
const potentialIssues = [];
|
|
12
|
+
const lodashImports = [];
|
|
13
|
+
// Count functions
|
|
14
|
+
const functionMatches = content.match(/function\s+\w+|=>\s*{|=>\s*[^{]/g) || [];
|
|
15
|
+
// Count imports
|
|
16
|
+
const importMatches = content.match(/^import\s/gm) || [];
|
|
17
|
+
// Count async functions
|
|
18
|
+
const asyncMatches = content.match(/async\s+(function|\w+\s*=|\()/g) || [];
|
|
19
|
+
// Find lodash imports
|
|
20
|
+
const lodashMatch = content.match(/from\s+['"]lodash-es['"]/);
|
|
21
|
+
if (lodashMatch) {
|
|
22
|
+
const importLine = lines.find((l) => l.includes('lodash-es'));
|
|
23
|
+
if (importLine) {
|
|
24
|
+
const namedImports = importLine.match(/{\s*([^}]+)\s*}/);
|
|
25
|
+
if (namedImports) {
|
|
26
|
+
lodashImports.push(...namedImports[1].split(',').map((s) => s.trim()));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Check for potential issues
|
|
31
|
+
// 1. Large functions (rough estimate by checking function size)
|
|
32
|
+
const functionBlocks = content.match(/function\s+\w+[^{]*{[^}]{500,}/g);
|
|
33
|
+
if (functionBlocks) {
|
|
34
|
+
potentialIssues.push(`${functionBlocks.length} potentially large function(s) detected`);
|
|
35
|
+
}
|
|
36
|
+
// 2. Repeated object spreads in loops
|
|
37
|
+
if (content.includes('for') &&
|
|
38
|
+
(content.includes('...') || content.includes('Object.assign'))) {
|
|
39
|
+
potentialIssues.push('Object spreading in loops may cause memory churn');
|
|
40
|
+
}
|
|
41
|
+
// 3. Synchronous event emission
|
|
42
|
+
if (content.includes('emitSync')) {
|
|
43
|
+
potentialIssues.push('Synchronous event emissions may block');
|
|
44
|
+
}
|
|
45
|
+
// 4. JSON.parse/stringify in hot paths
|
|
46
|
+
const jsonOps = (content.match(/JSON\.(parse|stringify)/g) || []).length;
|
|
47
|
+
if (jsonOps > 2) {
|
|
48
|
+
potentialIssues.push(`${jsonOps} JSON operations - consider alternatives for hot paths`);
|
|
49
|
+
}
|
|
50
|
+
// 5. Repeated Map/Set operations
|
|
51
|
+
const mapSetCreation = (content.match(/new (Map|Set)\(/g) || []).length;
|
|
52
|
+
if (mapSetCreation > 3) {
|
|
53
|
+
potentialIssues.push(`${mapSetCreation} Map/Set creations - consider reusing`);
|
|
54
|
+
}
|
|
55
|
+
// 6. String concatenation in loops
|
|
56
|
+
if ((content.includes('for') || content.includes('.forEach')) &&
|
|
57
|
+
content.includes("+ '") &&
|
|
58
|
+
content.includes("'")) {
|
|
59
|
+
potentialIssues.push('String concatenation in loops - consider array join');
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
path: filePath,
|
|
63
|
+
lines: lines.length,
|
|
64
|
+
functions: functionMatches.length,
|
|
65
|
+
imports: importMatches.length,
|
|
66
|
+
lodashImports,
|
|
67
|
+
asyncFunctions: asyncMatches.length,
|
|
68
|
+
potentialIssues,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function analyzeDirectory(dir) {
|
|
72
|
+
const results = [];
|
|
73
|
+
function walkDir(currentDir) {
|
|
74
|
+
const entries = readdirSync(currentDir);
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
const fullPath = join(currentDir, entry);
|
|
77
|
+
const stat = statSync(fullPath);
|
|
78
|
+
if (stat.isDirectory() && !entry.includes('node_modules') && entry !== 'benchmark') {
|
|
79
|
+
walkDir(fullPath);
|
|
80
|
+
}
|
|
81
|
+
else if (entry.endsWith('.ts') && !entry.endsWith('.spec.ts') && !entry.endsWith('.test.ts')) {
|
|
82
|
+
results.push(analyzeFile(fullPath));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
walkDir(dir);
|
|
87
|
+
return results;
|
|
88
|
+
}
|
|
89
|
+
function generateImprovementSuggestions(analyses) {
|
|
90
|
+
const suggestions = [];
|
|
91
|
+
// Aggregate lodash usage
|
|
92
|
+
const allLodashImports = new Map();
|
|
93
|
+
for (const analysis of analyses) {
|
|
94
|
+
for (const imp of analysis.lodashImports) {
|
|
95
|
+
allLodashImports.set(imp, (allLodashImports.get(imp) || 0) + 1);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Check for lodash functions that have native alternatives
|
|
99
|
+
const nativeAlternatives = {
|
|
100
|
+
first: 'array[0] or array.at(0)',
|
|
101
|
+
last: 'array.at(-1)',
|
|
102
|
+
flatten: 'array.flat()',
|
|
103
|
+
flattenDeep: 'array.flat(Infinity)',
|
|
104
|
+
includes: 'array.includes()',
|
|
105
|
+
find: 'array.find()',
|
|
106
|
+
filter: 'array.filter()',
|
|
107
|
+
map: 'array.map()',
|
|
108
|
+
reduce: 'array.reduce()',
|
|
109
|
+
forEach: 'array.forEach()',
|
|
110
|
+
some: 'array.some()',
|
|
111
|
+
every: 'array.every()',
|
|
112
|
+
keys: 'Object.keys()',
|
|
113
|
+
values: 'Object.values()',
|
|
114
|
+
entries: 'Object.entries()',
|
|
115
|
+
assign: 'Object.assign() or spread',
|
|
116
|
+
isArray: 'Array.isArray()',
|
|
117
|
+
isString: "typeof x === 'string'",
|
|
118
|
+
isNumber: "typeof x === 'number'",
|
|
119
|
+
isBoolean: "typeof x === 'boolean'",
|
|
120
|
+
isNull: 'x === null',
|
|
121
|
+
isUndefined: 'x === undefined',
|
|
122
|
+
isNil: 'x == null',
|
|
123
|
+
};
|
|
124
|
+
for (const [fn, count] of allLodashImports) {
|
|
125
|
+
if (nativeAlternatives[fn]) {
|
|
126
|
+
suggestions.push({
|
|
127
|
+
category: 'Dependencies',
|
|
128
|
+
priority: count > 2 ? 'medium' : 'low',
|
|
129
|
+
description: `Replace lodash '${fn}' with native ${nativeAlternatives[fn]}`,
|
|
130
|
+
impact: `Used ${count} times - reduces bundle size and improves performance`,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Large file suggestions
|
|
135
|
+
const largeFiles = analyses.filter((a) => a.lines > 200);
|
|
136
|
+
for (const file of largeFiles) {
|
|
137
|
+
suggestions.push({
|
|
138
|
+
category: 'Code Organization',
|
|
139
|
+
priority: file.lines > 350 ? 'high' : 'medium',
|
|
140
|
+
description: `Consider splitting large file (${file.lines} lines)`,
|
|
141
|
+
file: file.path,
|
|
142
|
+
impact: 'Improves maintainability and tree-shaking',
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// Files with potential issues
|
|
146
|
+
for (const analysis of analyses) {
|
|
147
|
+
for (const issue of analysis.potentialIssues) {
|
|
148
|
+
suggestions.push({
|
|
149
|
+
category: 'Performance',
|
|
150
|
+
priority: issue.includes('loop') ? 'high' : 'medium',
|
|
151
|
+
description: issue,
|
|
152
|
+
file: analysis.path,
|
|
153
|
+
impact: 'May affect generation performance',
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// General architecture suggestions
|
|
158
|
+
suggestions.push({
|
|
159
|
+
category: 'Architecture',
|
|
160
|
+
priority: 'high',
|
|
161
|
+
description: 'Consider using a worker pool for parallel file generation',
|
|
162
|
+
impact: 'Could significantly speed up large schema generation',
|
|
163
|
+
}, {
|
|
164
|
+
category: 'Architecture',
|
|
165
|
+
priority: 'medium',
|
|
166
|
+
description: 'Implement incremental generation based on schema changes',
|
|
167
|
+
impact: 'Faster regeneration for small schema updates',
|
|
168
|
+
}, {
|
|
169
|
+
category: 'Memory',
|
|
170
|
+
priority: 'medium',
|
|
171
|
+
description: 'Use streaming writes instead of building full file in memory',
|
|
172
|
+
impact: 'Reduces memory usage for large schemas',
|
|
173
|
+
}, {
|
|
174
|
+
category: 'Caching',
|
|
175
|
+
priority: 'high',
|
|
176
|
+
description: 'Cache ts-morph Project and SourceFile objects between runs',
|
|
177
|
+
impact: 'Significant speedup for watch mode',
|
|
178
|
+
}, {
|
|
179
|
+
category: 'Dependencies',
|
|
180
|
+
priority: 'low',
|
|
181
|
+
description: 'Consider removing await-event-emitter for simpler async handling',
|
|
182
|
+
impact: 'Reduces dependencies and bundle size',
|
|
183
|
+
});
|
|
184
|
+
return suggestions;
|
|
185
|
+
}
|
|
186
|
+
// Run analysis
|
|
187
|
+
console.log('š Code Analysis for nestjs-prisma-graphql\n');
|
|
188
|
+
console.log('ā'.repeat(70));
|
|
189
|
+
const srcDir = new URL('../', import.meta.url).pathname;
|
|
190
|
+
const analyses = analyzeDirectory(srcDir);
|
|
191
|
+
// Summary statistics
|
|
192
|
+
console.log('\nš CODEBASE STATISTICS\n');
|
|
193
|
+
const totalLines = analyses.reduce((sum, a) => sum + a.lines, 0);
|
|
194
|
+
const totalFunctions = analyses.reduce((sum, a) => sum + a.functions, 0);
|
|
195
|
+
const totalImports = analyses.reduce((sum, a) => sum + a.imports, 0);
|
|
196
|
+
const totalAsync = analyses.reduce((sum, a) => sum + a.asyncFunctions, 0);
|
|
197
|
+
console.log(`Files analyzed: ${analyses.length}`);
|
|
198
|
+
console.log(`Total lines: ${totalLines.toLocaleString()}`);
|
|
199
|
+
console.log(`Total functions: ${totalFunctions}`);
|
|
200
|
+
console.log(`Total imports: ${totalImports}`);
|
|
201
|
+
console.log(`Async functions: ${totalAsync}`);
|
|
202
|
+
// Lodash usage
|
|
203
|
+
console.log('\n\nš¦ LODASH-ES USAGE\n');
|
|
204
|
+
const lodashUsage = new Map();
|
|
205
|
+
for (const analysis of analyses) {
|
|
206
|
+
for (const fn of analysis.lodashImports) {
|
|
207
|
+
lodashUsage.set(fn, (lodashUsage.get(fn) || 0) + 1);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const sortedLodash = [...lodashUsage.entries()].sort((a, b) => b[1] - a[1]);
|
|
211
|
+
console.log('Function Usage Count');
|
|
212
|
+
console.log('ā'.repeat(35));
|
|
213
|
+
for (const [fn, count] of sortedLodash) {
|
|
214
|
+
console.log(`${fn.padEnd(18)} ${count}`);
|
|
215
|
+
}
|
|
216
|
+
// Large files
|
|
217
|
+
console.log('\n\nš LARGEST FILES\n');
|
|
218
|
+
const sortedByLines = [...analyses].sort((a, b) => b.lines - a.lines);
|
|
219
|
+
console.log('Lines File');
|
|
220
|
+
console.log('ā'.repeat(60));
|
|
221
|
+
for (const file of sortedByLines.slice(0, 10)) {
|
|
222
|
+
const relativePath = file.path.replace(srcDir, '');
|
|
223
|
+
console.log(`${String(file.lines).padStart(5)} ${relativePath}`);
|
|
224
|
+
}
|
|
225
|
+
// Files with issues
|
|
226
|
+
console.log('\n\nā ļø FILES WITH POTENTIAL ISSUES\n');
|
|
227
|
+
const filesWithIssues = analyses.filter((a) => a.potentialIssues.length > 0);
|
|
228
|
+
for (const file of filesWithIssues) {
|
|
229
|
+
const relativePath = file.path.replace(srcDir, '');
|
|
230
|
+
console.log(`\n${relativePath}:`);
|
|
231
|
+
for (const issue of file.potentialIssues) {
|
|
232
|
+
console.log(` ⢠${issue}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Improvement suggestions
|
|
236
|
+
console.log('\n\n' + 'ā'.repeat(70));
|
|
237
|
+
console.log('š” IMPROVEMENT SUGGESTIONS\n');
|
|
238
|
+
const suggestions = generateImprovementSuggestions(analyses);
|
|
239
|
+
const byPriority = {
|
|
240
|
+
high: suggestions.filter((s) => s.priority === 'high'),
|
|
241
|
+
medium: suggestions.filter((s) => s.priority === 'medium'),
|
|
242
|
+
low: suggestions.filter((s) => s.priority === 'low'),
|
|
243
|
+
};
|
|
244
|
+
console.log('š“ HIGH PRIORITY\n');
|
|
245
|
+
for (const s of byPriority.high) {
|
|
246
|
+
console.log(`[${s.category}] ${s.description}`);
|
|
247
|
+
if (s.file)
|
|
248
|
+
console.log(` File: ${s.file.replace(srcDir, '')}`);
|
|
249
|
+
console.log(` Impact: ${s.impact}\n`);
|
|
250
|
+
}
|
|
251
|
+
console.log('\nš” MEDIUM PRIORITY\n');
|
|
252
|
+
for (const s of byPriority.medium) {
|
|
253
|
+
console.log(`[${s.category}] ${s.description}`);
|
|
254
|
+
if (s.file)
|
|
255
|
+
console.log(` File: ${s.file.replace(srcDir, '')}`);
|
|
256
|
+
console.log(` Impact: ${s.impact}\n`);
|
|
257
|
+
}
|
|
258
|
+
console.log('\nš¢ LOW PRIORITY\n');
|
|
259
|
+
for (const s of byPriority.low.slice(0, 5)) {
|
|
260
|
+
console.log(`[${s.category}] ${s.description}`);
|
|
261
|
+
console.log(` Impact: ${s.impact}\n`);
|
|
262
|
+
}
|
|
263
|
+
console.log('\n' + 'ā'.repeat(70));
|
|
264
|
+
console.log('ā
Analysis complete!\n');
|
|
265
|
+
//# sourceMappingURL=analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/benchmark/analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/benchmark/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Benchmark suite for nestjs-prisma-graphql generator
|
|
3
|
+
*
|
|
4
|
+
* Run with: pnpm tsx src/benchmark/index.ts
|
|
5
|
+
*/
|
|
6
|
+
import { performance } from 'node:perf_hooks';
|
|
7
|
+
import { createConfig } from '../helpers/create-config.js';
|
|
8
|
+
import { createGetModelName } from '../helpers/get-model-name.js';
|
|
9
|
+
import { buildDependencyGraph, detectCircularDependencies, } from '../helpers/detect-circular-deps.js';
|
|
10
|
+
function benchmark(name, fn, iterations = 1000) {
|
|
11
|
+
const times = [];
|
|
12
|
+
// Warmup
|
|
13
|
+
for (let i = 0; i < Math.min(100, iterations / 10); i++) {
|
|
14
|
+
fn();
|
|
15
|
+
}
|
|
16
|
+
// Actual benchmark
|
|
17
|
+
for (let i = 0; i < iterations; i++) {
|
|
18
|
+
const start = performance.now();
|
|
19
|
+
fn();
|
|
20
|
+
const end = performance.now();
|
|
21
|
+
times.push(end - start);
|
|
22
|
+
}
|
|
23
|
+
const totalMs = times.reduce((a, b) => a + b, 0);
|
|
24
|
+
const avgMs = totalMs / iterations;
|
|
25
|
+
const minMs = Math.min(...times);
|
|
26
|
+
const maxMs = Math.max(...times);
|
|
27
|
+
const opsPerSec = 1000 / avgMs;
|
|
28
|
+
return { name, iterations, totalMs, avgMs, minMs, maxMs, opsPerSec };
|
|
29
|
+
}
|
|
30
|
+
function formatResult(result) {
|
|
31
|
+
return [
|
|
32
|
+
`š ${result.name}`,
|
|
33
|
+
` Iterations: ${result.iterations.toLocaleString()}`,
|
|
34
|
+
` Total: ${result.totalMs.toFixed(2)}ms`,
|
|
35
|
+
` Avg: ${result.avgMs.toFixed(4)}ms`,
|
|
36
|
+
` Min: ${result.minMs.toFixed(4)}ms`,
|
|
37
|
+
` Max: ${result.maxMs.toFixed(4)}ms`,
|
|
38
|
+
` Ops/sec: ${result.opsPerSec.toFixed(0).toLocaleString()}`,
|
|
39
|
+
].join('\n');
|
|
40
|
+
}
|
|
41
|
+
// Generate mock models for benchmarking
|
|
42
|
+
function generateMockModels(count) {
|
|
43
|
+
const models = [];
|
|
44
|
+
for (let i = 0; i < count; i++) {
|
|
45
|
+
const modelName = `Model${i}`;
|
|
46
|
+
const fields = [];
|
|
47
|
+
// Add id field
|
|
48
|
+
fields.push({
|
|
49
|
+
name: 'id',
|
|
50
|
+
kind: 'scalar',
|
|
51
|
+
type: 'String',
|
|
52
|
+
isRequired: true,
|
|
53
|
+
isList: false,
|
|
54
|
+
isUnique: true,
|
|
55
|
+
isId: true,
|
|
56
|
+
hasDefaultValue: true,
|
|
57
|
+
isGenerated: false,
|
|
58
|
+
isUpdatedAt: false,
|
|
59
|
+
});
|
|
60
|
+
// Add some scalar fields
|
|
61
|
+
for (let j = 0; j < 5; j++) {
|
|
62
|
+
fields.push({
|
|
63
|
+
name: `field${j}`,
|
|
64
|
+
kind: 'scalar',
|
|
65
|
+
type: ['String', 'Int', 'DateTime', 'Boolean', 'Float'][j % 5],
|
|
66
|
+
isRequired: j % 2 === 0,
|
|
67
|
+
isList: false,
|
|
68
|
+
isUnique: false,
|
|
69
|
+
isId: false,
|
|
70
|
+
hasDefaultValue: false,
|
|
71
|
+
isGenerated: false,
|
|
72
|
+
isUpdatedAt: false,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Add relation fields (to create circular dependencies)
|
|
76
|
+
if (i > 0) {
|
|
77
|
+
fields.push({
|
|
78
|
+
name: 'parent',
|
|
79
|
+
kind: 'object',
|
|
80
|
+
type: `Model${i - 1}`,
|
|
81
|
+
isRequired: false,
|
|
82
|
+
isList: false,
|
|
83
|
+
isUnique: false,
|
|
84
|
+
isId: false,
|
|
85
|
+
hasDefaultValue: false,
|
|
86
|
+
isGenerated: false,
|
|
87
|
+
isUpdatedAt: false,
|
|
88
|
+
relationName: `Model${i}ToModel${i - 1}`,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (i < count - 1) {
|
|
92
|
+
fields.push({
|
|
93
|
+
name: 'children',
|
|
94
|
+
kind: 'object',
|
|
95
|
+
type: `Model${i + 1}`,
|
|
96
|
+
isRequired: false,
|
|
97
|
+
isList: true,
|
|
98
|
+
isUnique: false,
|
|
99
|
+
isId: false,
|
|
100
|
+
hasDefaultValue: false,
|
|
101
|
+
isGenerated: false,
|
|
102
|
+
isUpdatedAt: false,
|
|
103
|
+
relationName: `Model${i + 1}ToModel${i}`,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// Add circular reference every 10 models
|
|
107
|
+
if (i >= 10 && i % 10 === 0) {
|
|
108
|
+
fields.push({
|
|
109
|
+
name: 'circular',
|
|
110
|
+
kind: 'object',
|
|
111
|
+
type: `Model${i - 10}`,
|
|
112
|
+
isRequired: false,
|
|
113
|
+
isList: false,
|
|
114
|
+
isUnique: false,
|
|
115
|
+
isId: false,
|
|
116
|
+
hasDefaultValue: false,
|
|
117
|
+
isGenerated: false,
|
|
118
|
+
isUpdatedAt: false,
|
|
119
|
+
relationName: `CircularRef${i}`,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
models.push({
|
|
123
|
+
name: modelName,
|
|
124
|
+
dbName: modelName.toLowerCase(),
|
|
125
|
+
fields,
|
|
126
|
+
primaryKey: null,
|
|
127
|
+
uniqueFields: [],
|
|
128
|
+
uniqueIndexes: [],
|
|
129
|
+
isGenerated: false,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return models;
|
|
133
|
+
}
|
|
134
|
+
// Generate mock config data
|
|
135
|
+
function generateMockConfigData() {
|
|
136
|
+
return {
|
|
137
|
+
output: '../src/@generated',
|
|
138
|
+
esmCompatible: 'true',
|
|
139
|
+
fields_Validator_from: 'class-validator',
|
|
140
|
+
fields_Validator_input: 'true',
|
|
141
|
+
combineScalarFilters: 'true',
|
|
142
|
+
noAtomicOperations: 'false',
|
|
143
|
+
reExport: 'All',
|
|
144
|
+
emitSingle: 'false',
|
|
145
|
+
purgeOutput: 'true',
|
|
146
|
+
decorate_1_type: '*CreateInput',
|
|
147
|
+
decorate_1_field: '*',
|
|
148
|
+
decorate_1_name: 'ValidateNested',
|
|
149
|
+
decorate_1_from: 'class-validator',
|
|
150
|
+
decorate_1_arguments: '[]',
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// Run benchmarks
|
|
154
|
+
console.log('š NestJS Prisma GraphQL Generator Benchmarks\n');
|
|
155
|
+
console.log('ā'.repeat(60));
|
|
156
|
+
// Benchmark 1: Config creation
|
|
157
|
+
console.log('\nš¦ Config Creation\n');
|
|
158
|
+
const configData = generateMockConfigData();
|
|
159
|
+
const configResult = benchmark('createConfig', () => {
|
|
160
|
+
createConfig(configData);
|
|
161
|
+
}, 5000);
|
|
162
|
+
console.log(formatResult(configResult));
|
|
163
|
+
// Benchmark 2: Model name extraction
|
|
164
|
+
console.log('\n\nš¦ Model Name Extraction\n');
|
|
165
|
+
const modelNames = Array.from({ length: 100 }, (_, i) => `Model${i}`);
|
|
166
|
+
const getModelName = createGetModelName(modelNames);
|
|
167
|
+
const testNames = [
|
|
168
|
+
'Model50CreateInput',
|
|
169
|
+
'Model25WhereUniqueInput',
|
|
170
|
+
'Model75UpdateManyMutationInput',
|
|
171
|
+
'Model10AvgAggregate',
|
|
172
|
+
'FindManyModel30Args',
|
|
173
|
+
'Model60CountOutputType',
|
|
174
|
+
];
|
|
175
|
+
const modelNameResult = benchmark('getModelName (memoized)', () => {
|
|
176
|
+
for (const name of testNames) {
|
|
177
|
+
getModelName(name);
|
|
178
|
+
}
|
|
179
|
+
}, 10000);
|
|
180
|
+
console.log(formatResult(modelNameResult));
|
|
181
|
+
// Non-memoized version for comparison
|
|
182
|
+
const modelNameNonMemoResult = benchmark('getModelName (fresh calls)', () => {
|
|
183
|
+
const fresh = createGetModelName(modelNames);
|
|
184
|
+
for (const name of testNames) {
|
|
185
|
+
fresh(name);
|
|
186
|
+
}
|
|
187
|
+
}, 5000);
|
|
188
|
+
console.log('\n' + formatResult(modelNameNonMemoResult));
|
|
189
|
+
// Benchmark 3: Circular dependency detection
|
|
190
|
+
console.log('\n\nš¦ Circular Dependency Detection\n');
|
|
191
|
+
const smallModels = generateMockModels(10);
|
|
192
|
+
const mediumModels = generateMockModels(50);
|
|
193
|
+
const largeModels = generateMockModels(100);
|
|
194
|
+
const circDepSmallResult = benchmark('detectCircularDeps (10 models)', () => {
|
|
195
|
+
const graph = buildDependencyGraph(smallModels);
|
|
196
|
+
detectCircularDependencies(graph);
|
|
197
|
+
}, 5000);
|
|
198
|
+
console.log(formatResult(circDepSmallResult));
|
|
199
|
+
const circDepMediumResult = benchmark('detectCircularDeps (50 models)', () => {
|
|
200
|
+
const graph = buildDependencyGraph(mediumModels);
|
|
201
|
+
detectCircularDependencies(graph);
|
|
202
|
+
}, 2000);
|
|
203
|
+
console.log('\n' + formatResult(circDepMediumResult));
|
|
204
|
+
const circDepLargeResult = benchmark('detectCircularDeps (100 models)', () => {
|
|
205
|
+
const graph = buildDependencyGraph(largeModels);
|
|
206
|
+
detectCircularDependencies(graph);
|
|
207
|
+
}, 1000);
|
|
208
|
+
console.log('\n' + formatResult(circDepLargeResult));
|
|
209
|
+
// Benchmark 4: Dependency graph building only
|
|
210
|
+
console.log('\n\nš¦ Dependency Graph Building\n');
|
|
211
|
+
const graphSmallResult = benchmark('buildDependencyGraph (10 models)', () => {
|
|
212
|
+
buildDependencyGraph(smallModels);
|
|
213
|
+
}, 10000);
|
|
214
|
+
console.log(formatResult(graphSmallResult));
|
|
215
|
+
const graphLargeResult = benchmark('buildDependencyGraph (100 models)', () => {
|
|
216
|
+
buildDependencyGraph(largeModels);
|
|
217
|
+
}, 5000);
|
|
218
|
+
console.log('\n' + formatResult(graphLargeResult));
|
|
219
|
+
// Summary
|
|
220
|
+
console.log('\n\n' + 'ā'.repeat(60));
|
|
221
|
+
console.log('š PERFORMANCE SUMMARY\n');
|
|
222
|
+
const results = [
|
|
223
|
+
configResult,
|
|
224
|
+
modelNameResult,
|
|
225
|
+
modelNameNonMemoResult,
|
|
226
|
+
circDepSmallResult,
|
|
227
|
+
circDepMediumResult,
|
|
228
|
+
circDepLargeResult,
|
|
229
|
+
graphSmallResult,
|
|
230
|
+
graphLargeResult,
|
|
231
|
+
];
|
|
232
|
+
console.log('Operation Avg (ms) Ops/sec');
|
|
233
|
+
console.log('ā'.repeat(60));
|
|
234
|
+
for (const r of results) {
|
|
235
|
+
const name = r.name.padEnd(38);
|
|
236
|
+
const avg = r.avgMs.toFixed(4).padStart(8);
|
|
237
|
+
const ops = Math.round(r.opsPerSec).toLocaleString().padStart(10);
|
|
238
|
+
console.log(`${name} ${avg} ${ops}`);
|
|
239
|
+
}
|
|
240
|
+
// Identify bottlenecks
|
|
241
|
+
console.log('\n\n' + 'ā'.repeat(60));
|
|
242
|
+
console.log('ā ļø POTENTIAL BOTTLENECKS\n');
|
|
243
|
+
const sortedByAvg = [...results].sort((a, b) => b.avgMs - a.avgMs);
|
|
244
|
+
for (const r of sortedByAvg.slice(0, 3)) {
|
|
245
|
+
console.log(`⢠${r.name}: ${r.avgMs.toFixed(4)}ms avg`);
|
|
246
|
+
}
|
|
247
|
+
console.log('\n\n' + 'ā'.repeat(60));
|
|
248
|
+
console.log('š” IMPROVEMENT RECOMMENDATIONS\n');
|
|
249
|
+
console.log(`
|
|
250
|
+
1. CONFIG CREATION (${configResult.avgMs.toFixed(4)}ms)
|
|
251
|
+
- Consider caching unflatten results
|
|
252
|
+
- Use Map instead of Object.fromEntries for fields
|
|
253
|
+
- Pre-compile regex patterns in filenamify
|
|
254
|
+
|
|
255
|
+
2. MODEL NAME EXTRACTION
|
|
256
|
+
- Memoization helps: ${((modelNameNonMemoResult.avgMs / modelNameResult.avgMs) * 100 - 100).toFixed(0)}% slower without cache
|
|
257
|
+
- Consider using a trie data structure for keyword matching
|
|
258
|
+
- Pre-sort keywords by frequency of occurrence
|
|
259
|
+
|
|
260
|
+
3. CIRCULAR DEPENDENCY DETECTION (${circDepLargeResult.avgMs.toFixed(4)}ms for 100 models)
|
|
261
|
+
- Current O(V + E) complexity is optimal
|
|
262
|
+
- Consider caching results between runs
|
|
263
|
+
- For very large schemas, consider incremental detection
|
|
264
|
+
|
|
265
|
+
4. GENERAL IMPROVEMENTS
|
|
266
|
+
- Use object pooling for frequently created objects
|
|
267
|
+
- Consider parallel processing for independent operations
|
|
268
|
+
- Profile memory allocation patterns
|
|
269
|
+
`);
|
|
270
|
+
console.log('ā'.repeat(60));
|
|
271
|
+
console.log('ā
Benchmark complete!\n');
|
|
272
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/benchmark/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-names.d.ts","sourceRoot":"","sources":["../src/event-names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,EAAG,qBAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-names.js","sourceRoot":"","sources":["../src/event-names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAA8B,CAAC"}
|