@goboost/scanner-typescript 1.2.1 → 1.2.2
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/dist/controller-extractor.d.ts +40 -0
- package/dist/controller-extractor.d.ts.map +1 -0
- package/dist/controller-extractor.js +288 -0
- package/dist/controller-extractor.js.map +1 -0
- package/dist/dto-extractor.d.ts +30 -0
- package/dist/dto-extractor.d.ts.map +1 -0
- package/dist/dto-extractor.js +294 -0
- package/dist/dto-extractor.js.map +1 -0
- package/dist/guard-extractor.d.ts +15 -0
- package/dist/guard-extractor.d.ts.map +1 -0
- package/dist/guard-extractor.js +158 -0
- package/dist/guard-extractor.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +232 -0
- package/dist/index.js.map +1 -0
- package/dist/prisma-schema-extractor.d.ts +47 -0
- package/dist/prisma-schema-extractor.d.ts.map +1 -0
- package/dist/prisma-schema-extractor.js +298 -0
- package/dist/prisma-schema-extractor.js.map +1 -0
- package/dist/unsupported-detector.d.ts +31 -0
- package/dist/unsupported-detector.d.ts.map +1 -0
- package/dist/unsupported-detector.js +204 -0
- package/dist/unsupported-detector.js.map +1 -0
- package/package.json +11 -1
- package/tsconfig.json +0 -20
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dto-extractor.js","sourceRoot":"","sources":["../src/dto-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guard extractor - finds @UseGuards references and classifies them
|
|
3
|
+
* Resolves guard class definitions, classifies as jwt/basic/custom
|
|
4
|
+
*/
|
|
5
|
+
import { Project } from 'ts-morph';
|
|
6
|
+
interface GuardSpec {
|
|
7
|
+
name: string;
|
|
8
|
+
sourceFile: string;
|
|
9
|
+
type: 'jwt' | 'basic' | 'custom';
|
|
10
|
+
canGenerate: boolean;
|
|
11
|
+
failureReason: string | null;
|
|
12
|
+
}
|
|
13
|
+
export declare function extractGuards(project: Project): Record<string, GuardSpec>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=guard-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard-extractor.d.ts","sourceRoot":"","sources":["../src/guard-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAA8D,MAAM,UAAU,CAAC;AAE/F,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAuBzE"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractGuards = extractGuards;
|
|
4
|
+
function extractGuards(project) {
|
|
5
|
+
const guards = {};
|
|
6
|
+
// First pass: find all guard class definitions
|
|
7
|
+
for (const sourceFile of project.getSourceFiles()) {
|
|
8
|
+
for (const classDecl of sourceFile.getClasses()) {
|
|
9
|
+
if (isGuardClass(classDecl)) {
|
|
10
|
+
const guard = extractGuard(classDecl, sourceFile);
|
|
11
|
+
if (guard && !guards[guard.name]) {
|
|
12
|
+
guards[guard.name] = guard;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// Second pass: find @UseGuards usages and ensure all guards are tracked
|
|
18
|
+
for (const sourceFile of project.getSourceFiles()) {
|
|
19
|
+
for (const classDecl of sourceFile.getClasses()) {
|
|
20
|
+
collectGuardsFromClass(classDecl, guards, sourceFile);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return guards;
|
|
24
|
+
}
|
|
25
|
+
function isGuardClass(classDecl) {
|
|
26
|
+
// Check if class implements CanActivate
|
|
27
|
+
const implementsList = classDecl.getImplements();
|
|
28
|
+
for (const impl of implementsList) {
|
|
29
|
+
const text = impl.getText();
|
|
30
|
+
if (text.includes('CanActivate')) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Check extends AuthGuard
|
|
35
|
+
const ext = classDecl.getExtends();
|
|
36
|
+
if (ext) {
|
|
37
|
+
const extText = ext.getText();
|
|
38
|
+
if (extText.includes('AuthGuard')) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Check for @Injectable decorator with guard-like patterns
|
|
43
|
+
const hasInjectable = classDecl.getDecorators().some(d => d.getName() === 'Injectable');
|
|
44
|
+
const className = classDecl.getName() || '';
|
|
45
|
+
const isGuardByName = className.includes('Guard') || className.includes('AuthGuard');
|
|
46
|
+
return hasInjectable && isGuardByName;
|
|
47
|
+
}
|
|
48
|
+
function extractGuard(classDecl, sourceFile) {
|
|
49
|
+
const name = classDecl.getName();
|
|
50
|
+
if (!name)
|
|
51
|
+
return null;
|
|
52
|
+
const guardType = classifyGuard(classDecl);
|
|
53
|
+
const canGenerate = guardType !== 'custom';
|
|
54
|
+
const failureReason = canGenerate ? null : 'Custom guard logic cannot be automatically translated';
|
|
55
|
+
return {
|
|
56
|
+
name,
|
|
57
|
+
sourceFile: getRelativePath(sourceFile.getFilePath()),
|
|
58
|
+
type: guardType,
|
|
59
|
+
canGenerate,
|
|
60
|
+
failureReason,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function classifyGuard(classDecl) {
|
|
64
|
+
const name = classDecl.getName() || '';
|
|
65
|
+
const ext = classDecl.getExtends();
|
|
66
|
+
// Check by name patterns
|
|
67
|
+
const nameLower = name.toLowerCase();
|
|
68
|
+
if (nameLower.includes('jwt') || nameLower.includes('jwtauth')) {
|
|
69
|
+
return 'jwt';
|
|
70
|
+
}
|
|
71
|
+
if (nameLower.includes('basic') || nameLower.includes('basicauth')) {
|
|
72
|
+
return 'basic';
|
|
73
|
+
}
|
|
74
|
+
// Check by extends
|
|
75
|
+
if (ext) {
|
|
76
|
+
const extText = ext.getText();
|
|
77
|
+
if (extText.includes('JwtAuthGuard') || extText.includes("AuthGuard('jwt')")) {
|
|
78
|
+
return 'jwt';
|
|
79
|
+
}
|
|
80
|
+
if (extText.includes("AuthGuard('basic')") || extText.includes('BasicAuthGuard')) {
|
|
81
|
+
return 'basic';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Check source file content for patterns
|
|
85
|
+
const sourceFile = classDecl.getSourceFile();
|
|
86
|
+
const text = sourceFile.getFullText();
|
|
87
|
+
// JWT patterns
|
|
88
|
+
if (text.includes('JwtService') ||
|
|
89
|
+
text.includes('jwt.verify') ||
|
|
90
|
+
text.includes('extractToken') ||
|
|
91
|
+
text.includes('JwtPayload') ||
|
|
92
|
+
text.includes('fromAuthHeaderAsBearerToken')) {
|
|
93
|
+
return 'jwt';
|
|
94
|
+
}
|
|
95
|
+
// Basic auth patterns
|
|
96
|
+
if (text.includes('BasicAuth') ||
|
|
97
|
+
text.includes('btoa') ||
|
|
98
|
+
text.includes('atob') ||
|
|
99
|
+
text.includes('fromAuthHeaderAsBasicAuth')) {
|
|
100
|
+
return 'basic';
|
|
101
|
+
}
|
|
102
|
+
return 'custom';
|
|
103
|
+
}
|
|
104
|
+
function collectGuardsFromClass(classDecl, guards, sourceFile) {
|
|
105
|
+
// Check class-level @UseGuards
|
|
106
|
+
const classGuards = classDecl.getDecorators().find(d => d.getName() === 'UseGuards');
|
|
107
|
+
if (classGuards) {
|
|
108
|
+
parseGuardsFromDecorator(classGuards, guards, sourceFile);
|
|
109
|
+
}
|
|
110
|
+
// Check method-level @UseGuards
|
|
111
|
+
for (const method of classDecl.getMethods()) {
|
|
112
|
+
const methodGuards = method.getDecorators().find(d => d.getName() === 'UseGuards');
|
|
113
|
+
if (methodGuards) {
|
|
114
|
+
parseGuardsFromDecorator(methodGuards, guards, sourceFile);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function parseGuardsFromDecorator(decorator, guards, sourceFile) {
|
|
119
|
+
const args = decorator.getArguments();
|
|
120
|
+
for (const arg of args) {
|
|
121
|
+
let guardName = arg.getText().replace('()', '').trim();
|
|
122
|
+
// Handle new expressions or complex references
|
|
123
|
+
if (guardName.startsWith('new ')) {
|
|
124
|
+
guardName = guardName.replace('new ', '').replace(/\(.*\)/, '');
|
|
125
|
+
}
|
|
126
|
+
if (!guards[guardName]) {
|
|
127
|
+
// Try to classify the guard based on name
|
|
128
|
+
const guardType = classifyGuardByName(guardName);
|
|
129
|
+
const canGenerate = guardType !== 'custom';
|
|
130
|
+
guards[guardName] = {
|
|
131
|
+
name: guardName,
|
|
132
|
+
sourceFile: getRelativePath(sourceFile.getFilePath()),
|
|
133
|
+
type: guardType,
|
|
134
|
+
canGenerate,
|
|
135
|
+
failureReason: canGenerate ? null : 'Custom guard logic cannot be automatically translated',
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function classifyGuardByName(name) {
|
|
141
|
+
const nameLower = name.toLowerCase();
|
|
142
|
+
if (nameLower.includes('jwt') || nameLower.includes('bearer')) {
|
|
143
|
+
return 'jwt';
|
|
144
|
+
}
|
|
145
|
+
if (nameLower.includes('basic')) {
|
|
146
|
+
return 'basic';
|
|
147
|
+
}
|
|
148
|
+
return 'custom';
|
|
149
|
+
}
|
|
150
|
+
function getRelativePath(filePath) {
|
|
151
|
+
const parts = filePath.split(/[\\/]/);
|
|
152
|
+
const srcIndex = parts.indexOf('src');
|
|
153
|
+
if (srcIndex !== -1) {
|
|
154
|
+
return parts.slice(srcIndex).join('/');
|
|
155
|
+
}
|
|
156
|
+
return filePath;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=guard-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard-extractor.js","sourceRoot":"","sources":["../src/guard-extractor.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { DBRoot } from './prisma-schema-extractor';
|
|
2
|
+
interface ScanOptions {
|
|
3
|
+
projectPath: string;
|
|
4
|
+
tsConfigPath?: string;
|
|
5
|
+
prismaSchemaPath?: string;
|
|
6
|
+
}
|
|
7
|
+
/** API IR root (goboost.api.json v2.0.0) — matches internal/ir/api_types.go */
|
|
8
|
+
interface APIRoot {
|
|
9
|
+
version: string;
|
|
10
|
+
sourceFramework: string;
|
|
11
|
+
projectRoot: string;
|
|
12
|
+
scannedAt: string;
|
|
13
|
+
controllers: any[];
|
|
14
|
+
dtos: Record<string, any>;
|
|
15
|
+
guards: Record<string, any>;
|
|
16
|
+
meta?: {
|
|
17
|
+
generatorVersion?: string;
|
|
18
|
+
scanDuration?: string;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
interface ScanResult {
|
|
22
|
+
apiIR: APIRoot;
|
|
23
|
+
dbIR: DBRoot;
|
|
24
|
+
}
|
|
25
|
+
export declare function scan(options: ScanOptions): Promise<ScanResult>;
|
|
26
|
+
export { scan as scanProject };
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAuB,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAMxE,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,+EAA+E;AAC/E,UAAU,OAAO;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7D;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAyFpE;AAuJD,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scan = scan;
|
|
4
|
+
exports.scanProject = scan;
|
|
5
|
+
/**
|
|
6
|
+
* Scanner entrypoint — orchestrates all extractors and outputs normalized IR JSON.
|
|
7
|
+
*
|
|
8
|
+
* Produces DUAL IR per the goBoost Decoupled Universal Extractor architecture:
|
|
9
|
+
* - goboost.api.json (API IR v2.0.0) — controllers, DTOs, guards
|
|
10
|
+
* - goboost.db.json (DB IR v1.0.0) — tables, columns, relations, enums (from Prisma)
|
|
11
|
+
*
|
|
12
|
+
* Constitution v1.2.0 compliance:
|
|
13
|
+
* - Principle V: Prisma as single source of truth for DB schema
|
|
14
|
+
* - Principle VIII: The Framework Rosetta Stone — JSII-compliant IR
|
|
15
|
+
*/
|
|
16
|
+
const ts_morph_1 = require("ts-morph");
|
|
17
|
+
const controller_extractor_1 = require("./controller-extractor");
|
|
18
|
+
const dto_extractor_1 = require("./dto-extractor");
|
|
19
|
+
const prisma_schema_extractor_1 = require("./prisma-schema-extractor");
|
|
20
|
+
const guard_extractor_1 = require("./guard-extractor");
|
|
21
|
+
const unsupported_detector_1 = require("./unsupported-detector");
|
|
22
|
+
const API_IR_VERSION = '2.0.0';
|
|
23
|
+
async function scan(options) {
|
|
24
|
+
const { projectPath, tsConfigPath } = options;
|
|
25
|
+
const startTime = Date.now();
|
|
26
|
+
// Initialize ts-morph project for API extraction
|
|
27
|
+
const project = new ts_morph_1.Project({
|
|
28
|
+
tsConfigFilePath: tsConfigPath || `${projectPath}/tsconfig.json`,
|
|
29
|
+
skipAddingFilesFromTsConfig: false,
|
|
30
|
+
});
|
|
31
|
+
// ---- API IR extraction ----
|
|
32
|
+
// Extract controllers
|
|
33
|
+
const controllers = (0, controller_extractor_1.extractControllers)(project);
|
|
34
|
+
// Detect circular service dependencies
|
|
35
|
+
const circularDeps = detectCircularDependencies(project, controllers);
|
|
36
|
+
if (circularDeps.length > 0) {
|
|
37
|
+
console.error('Warning: Circular service dependencies detected:');
|
|
38
|
+
for (const dep of circularDeps) {
|
|
39
|
+
console.error(` - ${dep}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Collect and extract DTOs
|
|
43
|
+
const referencedDTOs = (0, dto_extractor_1.collectReferencedDTOs)(controllers);
|
|
44
|
+
const dtos = (0, dto_extractor_1.extractDTOs)(project, referencedDTOs);
|
|
45
|
+
(0, dto_extractor_1.markSharedDTOs)(dtos, controllers);
|
|
46
|
+
// Extract guards
|
|
47
|
+
const guards = (0, guard_extractor_1.extractGuards)(project);
|
|
48
|
+
// Detect unsupported features per route
|
|
49
|
+
for (const controller of controllers) {
|
|
50
|
+
const controllerUnsupported = [];
|
|
51
|
+
const controllerCyclicDeps = circularDeps.filter(d => d.startsWith(controller.name));
|
|
52
|
+
for (const dep of controllerCyclicDeps) {
|
|
53
|
+
if (!controllerUnsupported.includes('circular-dependency')) {
|
|
54
|
+
controllerUnsupported.push('circular-dependency');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
for (const route of controller.routes) {
|
|
58
|
+
const unsupported = (0, unsupported_detector_1.detectUnsupported)(project, {
|
|
59
|
+
handlerName: route.handlerName,
|
|
60
|
+
unsupportedFeatures: [],
|
|
61
|
+
});
|
|
62
|
+
route.unsupportedFeatures = unsupported;
|
|
63
|
+
route.canGenerate = (0, unsupported_detector_1.canGenerate)(unsupported);
|
|
64
|
+
for (const feature of unsupported) {
|
|
65
|
+
if (!controllerUnsupported.includes(feature)) {
|
|
66
|
+
controllerUnsupported.push(feature);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
controller.unsupportedFeatures = controllerUnsupported;
|
|
71
|
+
}
|
|
72
|
+
const scanDuration = `${Date.now() - startTime}ms`;
|
|
73
|
+
// Build API IR
|
|
74
|
+
const apiIR = {
|
|
75
|
+
version: API_IR_VERSION,
|
|
76
|
+
sourceFramework: 'nestjs',
|
|
77
|
+
projectRoot: projectPath,
|
|
78
|
+
scannedAt: new Date().toISOString(),
|
|
79
|
+
controllers,
|
|
80
|
+
dtos,
|
|
81
|
+
guards,
|
|
82
|
+
meta: {
|
|
83
|
+
generatorVersion: '1.1.0',
|
|
84
|
+
scanDuration,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
// Normalize API IR for determinism
|
|
88
|
+
normalizeAPIIR(apiIR);
|
|
89
|
+
// ---- DB IR extraction (Prisma DMMF) ----
|
|
90
|
+
const dbIR = await (0, prisma_schema_extractor_1.extractPrismaSchema)({
|
|
91
|
+
projectPath,
|
|
92
|
+
schemaPath: options.prismaSchemaPath,
|
|
93
|
+
});
|
|
94
|
+
return { apiIR, dbIR };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Detect circular dependencies between services in controllers
|
|
98
|
+
*/
|
|
99
|
+
function detectCircularDependencies(project, controllers) {
|
|
100
|
+
const circularDeps = [];
|
|
101
|
+
const visited = new Set();
|
|
102
|
+
const dependencyGraph = new Map();
|
|
103
|
+
for (const controller of controllers) {
|
|
104
|
+
if (controller.dependencies && controller.dependencies.length > 0) {
|
|
105
|
+
const deps = new Set();
|
|
106
|
+
for (const dep of controller.dependencies) {
|
|
107
|
+
const serviceName = extractServiceName(dep);
|
|
108
|
+
if (serviceName) {
|
|
109
|
+
deps.add(serviceName);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
dependencyGraph.set(controller.name, deps);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function dfs(node, path) {
|
|
116
|
+
if (visited.has(node)) {
|
|
117
|
+
const cycleStart = path.indexOf(node);
|
|
118
|
+
if (cycleStart !== -1) {
|
|
119
|
+
const cycle = [...path.slice(cycleStart), node].join(' -> ');
|
|
120
|
+
circularDeps.push(`${node}: ${cycle}`);
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
visited.add(node);
|
|
125
|
+
path.push(node);
|
|
126
|
+
const deps = dependencyGraph.get(node);
|
|
127
|
+
if (deps) {
|
|
128
|
+
for (const dep of deps) {
|
|
129
|
+
if (path.includes(dep) || dfs(dep, [...path])) {
|
|
130
|
+
// Continue to find all cycles
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
path.pop();
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
for (const controller of controllers) {
|
|
138
|
+
visited.clear();
|
|
139
|
+
dfs(controller.name, []);
|
|
140
|
+
}
|
|
141
|
+
return circularDeps;
|
|
142
|
+
}
|
|
143
|
+
function extractServiceName(typeText) {
|
|
144
|
+
const match = typeText.match(/(\w+Service)/);
|
|
145
|
+
return match ? match[1] : null;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Normalize API IR for deterministic output
|
|
149
|
+
*/
|
|
150
|
+
function normalizeAPIIR(ir) {
|
|
151
|
+
for (const controller of ir.controllers) {
|
|
152
|
+
controller.routes.sort((a, b) => {
|
|
153
|
+
const methodCompare = a.httpMethod.localeCompare(b.httpMethod);
|
|
154
|
+
if (methodCompare !== 0)
|
|
155
|
+
return methodCompare;
|
|
156
|
+
return a.path.localeCompare(b.path);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
ir.dtos = sortObjectKeys(ir.dtos);
|
|
160
|
+
ir.guards = sortObjectKeys(ir.guards);
|
|
161
|
+
}
|
|
162
|
+
function sortObjectKeys(obj) {
|
|
163
|
+
const sorted = {};
|
|
164
|
+
const keys = Object.keys(obj).sort();
|
|
165
|
+
for (const key of keys) {
|
|
166
|
+
sorted[key] = obj[key];
|
|
167
|
+
}
|
|
168
|
+
return sorted;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* CLI entrypoint — outputs dual IR JSON to stdout or files
|
|
172
|
+
*/
|
|
173
|
+
if (require.main === module) {
|
|
174
|
+
const args = process.argv.slice(2);
|
|
175
|
+
let projectPath = process.cwd();
|
|
176
|
+
let tsConfigPath;
|
|
177
|
+
let prismaSchemaPath;
|
|
178
|
+
let outputApiPath;
|
|
179
|
+
let outputDbPath;
|
|
180
|
+
for (let i = 0; i < args.length; i++) {
|
|
181
|
+
if (args[i] === '--project' || args[i] === '-p') {
|
|
182
|
+
projectPath = args[++i];
|
|
183
|
+
}
|
|
184
|
+
else if (args[i] === '--tsconfig' || args[i] === '-t') {
|
|
185
|
+
tsConfigPath = args[++i];
|
|
186
|
+
}
|
|
187
|
+
else if (args[i] === '--prisma-schema') {
|
|
188
|
+
prismaSchemaPath = args[++i];
|
|
189
|
+
}
|
|
190
|
+
else if (args[i] === '--output-api') {
|
|
191
|
+
outputApiPath = args[++i];
|
|
192
|
+
}
|
|
193
|
+
else if (args[i] === '--output-db') {
|
|
194
|
+
outputDbPath = args[++i];
|
|
195
|
+
}
|
|
196
|
+
else if (!args[i].startsWith('-') && i === 0) {
|
|
197
|
+
projectPath = args[i];
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
scan({ projectPath, tsConfigPath, prismaSchemaPath })
|
|
201
|
+
.then(({ apiIR, dbIR }) => {
|
|
202
|
+
const apiJson = JSON.stringify(apiIR, null, 2);
|
|
203
|
+
const dbJson = JSON.stringify(dbIR, null, 2);
|
|
204
|
+
if (outputApiPath) {
|
|
205
|
+
const fs = require('fs');
|
|
206
|
+
const path = require('path');
|
|
207
|
+
fs.mkdirSync(path.dirname(outputApiPath), { recursive: true });
|
|
208
|
+
fs.writeFileSync(outputApiPath, apiJson, 'utf-8');
|
|
209
|
+
console.error(`API IR written to: ${outputApiPath}`);
|
|
210
|
+
}
|
|
211
|
+
if (outputDbPath) {
|
|
212
|
+
const fs = require('fs');
|
|
213
|
+
const path = require('path');
|
|
214
|
+
fs.mkdirSync(path.dirname(outputDbPath), { recursive: true });
|
|
215
|
+
fs.writeFileSync(outputDbPath, dbJson, 'utf-8');
|
|
216
|
+
console.error(`DB IR written to: ${outputDbPath}`);
|
|
217
|
+
}
|
|
218
|
+
// If no output paths specified, write both to stdout as a combined object
|
|
219
|
+
if (!outputApiPath && !outputDbPath) {
|
|
220
|
+
console.log(JSON.stringify({ api: apiIR, db: dbIR }, null, 2));
|
|
221
|
+
}
|
|
222
|
+
})
|
|
223
|
+
.catch((err) => {
|
|
224
|
+
console.error(JSON.stringify({
|
|
225
|
+
error: true,
|
|
226
|
+
message: err.message,
|
|
227
|
+
stack: err.stack,
|
|
228
|
+
}));
|
|
229
|
+
process.exit(1);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export interface DBRoot {
|
|
2
|
+
version: string;
|
|
3
|
+
source: string;
|
|
4
|
+
databaseType: string;
|
|
5
|
+
schemaName: string;
|
|
6
|
+
extractedAt: string;
|
|
7
|
+
tables: TableSpec[];
|
|
8
|
+
enums: EnumSpec[];
|
|
9
|
+
}
|
|
10
|
+
export interface TableSpec {
|
|
11
|
+
name: string;
|
|
12
|
+
schema: string;
|
|
13
|
+
columns: ColumnSpec[];
|
|
14
|
+
relations: RelationSpec[];
|
|
15
|
+
}
|
|
16
|
+
export interface ColumnSpec {
|
|
17
|
+
name: string;
|
|
18
|
+
goType: string;
|
|
19
|
+
dbType: string;
|
|
20
|
+
isPrimary: boolean;
|
|
21
|
+
isAutoIncrement: boolean;
|
|
22
|
+
isNullable: boolean;
|
|
23
|
+
isUnique: boolean;
|
|
24
|
+
defaultValue?: string;
|
|
25
|
+
gormTag?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface RelationSpec {
|
|
28
|
+
name: string;
|
|
29
|
+
type: string;
|
|
30
|
+
fromTable: string;
|
|
31
|
+
toTable: string;
|
|
32
|
+
fromColumns?: string[];
|
|
33
|
+
}
|
|
34
|
+
export interface EnumSpec {
|
|
35
|
+
name: string;
|
|
36
|
+
values: string[];
|
|
37
|
+
}
|
|
38
|
+
export interface ExtractOptions {
|
|
39
|
+
projectPath: string;
|
|
40
|
+
schemaPath?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extract DB IR from a Prisma schema file using @prisma/internals getDMMF().
|
|
44
|
+
* Output format matches internal/ir/db_types.go (DBRoot).
|
|
45
|
+
*/
|
|
46
|
+
export declare function extractPrismaSchema(options: ExtractOptions): Promise<DBRoot>;
|
|
47
|
+
//# sourceMappingURL=prisma-schema-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-schema-extractor.d.ts","sourceRoot":"","sources":["../src/prisma-schema-extractor.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAwCD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwBD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAyElF"}
|