strapi-typed-client 1.2.2 → 1.2.4
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/cli/commands/generate.js +1 -1
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/index.d.ts +0 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +0 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/core/endpoint-converter.d.ts +2 -2
- package/dist/core/endpoint-converter.d.ts.map +1 -1
- package/dist/core/schema-transformer.js +1 -0
- package/dist/core/schema-transformer.js.map +1 -1
- package/dist/generator/auth-api-generator.d.ts +1 -1
- package/dist/generator/auth-api-generator.d.ts.map +1 -1
- package/dist/generator/auth-api-generator.js +2 -3
- package/dist/generator/auth-api-generator.js.map +1 -1
- package/dist/generator/client-generator.d.ts +1 -3
- package/dist/generator/client-generator.d.ts.map +1 -1
- package/dist/generator/client-generator.js +1 -17
- package/dist/generator/client-generator.js.map +1 -1
- package/dist/generator/custom-api-generator.d.ts +2 -2
- package/dist/generator/custom-api-generator.d.ts.map +1 -1
- package/dist/generator/index.d.ts +1 -2
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +2 -4
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/types-generator.d.ts.map +1 -1
- package/dist/generator/types-generator.js +2 -0
- package/dist/generator/types-generator.js.map +1 -1
- package/dist/schema-types.d.ts +1 -0
- package/dist/schema-types.d.ts.map +1 -1
- package/dist/shared/custom-types.d.ts +17 -0
- package/dist/shared/custom-types.d.ts.map +1 -0
- package/dist/shared/custom-types.js +2 -0
- package/dist/shared/custom-types.js.map +1 -0
- package/dist/{parser/routes-parser.d.ts → shared/route-types.d.ts} +1 -9
- package/dist/shared/route-types.d.ts.map +1 -0
- package/dist/shared/route-types.js +2 -0
- package/dist/shared/route-types.js.map +1 -0
- package/package.json +1 -1
- package/dist/parser/custom-types-parser.d.ts +0 -39
- package/dist/parser/custom-types-parser.d.ts.map +0 -1
- package/dist/parser/custom-types-parser.js +0 -206
- package/dist/parser/custom-types-parser.js.map +0 -1
- package/dist/parser/index.d.ts +0 -23
- package/dist/parser/index.d.ts.map +0 -1
- package/dist/parser/index.js +0 -462
- package/dist/parser/index.js.map +0 -1
- package/dist/parser/routes-parser.d.ts.map +0 -1
- package/dist/parser/routes-parser.js +0 -216
- package/dist/parser/routes-parser.js.map +0 -1
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
import * as ts from 'typescript';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
export class RoutesParser {
|
|
5
|
-
parse(routesDir) {
|
|
6
|
-
const result = {
|
|
7
|
-
byController: new Map(),
|
|
8
|
-
all: [],
|
|
9
|
-
};
|
|
10
|
-
// Check if routes directory exists
|
|
11
|
-
if (!fs.existsSync(routesDir)) {
|
|
12
|
-
console.log('⚠️ Routes directory not found, skipping custom routes parsing');
|
|
13
|
-
return result;
|
|
14
|
-
}
|
|
15
|
-
// Parse TypeScript files from API routes
|
|
16
|
-
const tsFiles = fs.readdirSync(routesDir).filter(f => f.endsWith('.ts'));
|
|
17
|
-
for (const file of tsFiles) {
|
|
18
|
-
const filePath = path.join(routesDir, file);
|
|
19
|
-
const routes = this.parseFile(filePath);
|
|
20
|
-
for (const route of routes) {
|
|
21
|
-
result.all.push(route);
|
|
22
|
-
if (!result.byController.has(route.controller)) {
|
|
23
|
-
result.byController.set(route.controller, []);
|
|
24
|
-
}
|
|
25
|
-
result.byController.get(route.controller).push(route);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
// Parse JavaScript files from plugin routes
|
|
29
|
-
const pluginsDir = path.join(routesDir, 'plugins');
|
|
30
|
-
if (fs.existsSync(pluginsDir)) {
|
|
31
|
-
const jsFiles = fs
|
|
32
|
-
.readdirSync(pluginsDir)
|
|
33
|
-
.filter(f => f.endsWith('.js'));
|
|
34
|
-
for (const file of jsFiles) {
|
|
35
|
-
const filePath = path.join(pluginsDir, file);
|
|
36
|
-
const routes = this.parseJavaScriptFile(filePath);
|
|
37
|
-
for (const route of routes) {
|
|
38
|
-
// Set pluginName from handler prefix (e.g., 'plugin::users-permissions.role.find')
|
|
39
|
-
// or default to 'users-permissions' for files in the plugins directory
|
|
40
|
-
if (!route.pluginName) {
|
|
41
|
-
const handlerMatch = route.handler.match(/^plugin::([^.]+)\./);
|
|
42
|
-
route.pluginName = handlerMatch
|
|
43
|
-
? handlerMatch[1]
|
|
44
|
-
: 'users-permissions';
|
|
45
|
-
}
|
|
46
|
-
result.all.push(route);
|
|
47
|
-
if (!result.byController.has(route.controller)) {
|
|
48
|
-
result.byController.set(route.controller, []);
|
|
49
|
-
}
|
|
50
|
-
result.byController.get(route.controller).push(route);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return result;
|
|
55
|
-
}
|
|
56
|
-
parseFile(filePath) {
|
|
57
|
-
const sourceCode = fs.readFileSync(filePath, 'utf-8');
|
|
58
|
-
const sourceFile = ts.createSourceFile(filePath, sourceCode, ts.ScriptTarget.Latest, true);
|
|
59
|
-
const routes = [];
|
|
60
|
-
const visit = (node) => {
|
|
61
|
-
// Look for: export default { routes: [...] }
|
|
62
|
-
if (ts.isExportAssignment(node) &&
|
|
63
|
-
ts.isObjectLiteralExpression(node.expression)) {
|
|
64
|
-
const routesProperty = node.expression.properties.find(p => ts.isPropertyAssignment(p) &&
|
|
65
|
-
ts.isIdentifier(p.name) &&
|
|
66
|
-
p.name.text === 'routes');
|
|
67
|
-
if (routesProperty &&
|
|
68
|
-
ts.isArrayLiteralExpression(routesProperty.initializer)) {
|
|
69
|
-
for (const element of routesProperty.initializer.elements) {
|
|
70
|
-
if (ts.isObjectLiteralExpression(element)) {
|
|
71
|
-
const route = this.parseRouteObject(element);
|
|
72
|
-
if (route) {
|
|
73
|
-
routes.push(route);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
ts.forEachChild(node, visit);
|
|
80
|
-
};
|
|
81
|
-
visit(sourceFile);
|
|
82
|
-
return routes;
|
|
83
|
-
}
|
|
84
|
-
parseRouteObject(obj) {
|
|
85
|
-
let method;
|
|
86
|
-
let pathValue;
|
|
87
|
-
let handler;
|
|
88
|
-
let prefix;
|
|
89
|
-
for (const prop of obj.properties) {
|
|
90
|
-
if (!ts.isPropertyAssignment(prop))
|
|
91
|
-
continue;
|
|
92
|
-
if (!ts.isIdentifier(prop.name))
|
|
93
|
-
continue;
|
|
94
|
-
const propName = prop.name.text;
|
|
95
|
-
let value;
|
|
96
|
-
if (ts.isStringLiteral(prop.initializer)) {
|
|
97
|
-
value = prop.initializer.text;
|
|
98
|
-
}
|
|
99
|
-
if (propName === 'method' && value) {
|
|
100
|
-
method = value;
|
|
101
|
-
}
|
|
102
|
-
else if (propName === 'path' && value) {
|
|
103
|
-
pathValue = value;
|
|
104
|
-
}
|
|
105
|
-
else if (propName === 'handler' && value) {
|
|
106
|
-
handler = value;
|
|
107
|
-
}
|
|
108
|
-
else if (propName === 'config' &&
|
|
109
|
-
ts.isObjectLiteralExpression(prop.initializer)) {
|
|
110
|
-
// Extract config.prefix
|
|
111
|
-
for (const configProp of prop.initializer.properties) {
|
|
112
|
-
if (ts.isPropertyAssignment(configProp) &&
|
|
113
|
-
ts.isIdentifier(configProp.name) &&
|
|
114
|
-
configProp.name.text === 'prefix' &&
|
|
115
|
-
ts.isStringLiteral(configProp.initializer)) {
|
|
116
|
-
prefix = configProp.initializer.text;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
if (!method || !pathValue || !handler) {
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
// Parse handler: strip "api::xxx." or "plugin::xxx." prefix if present
|
|
125
|
-
let normalizedHandler = handler;
|
|
126
|
-
if (normalizedHandler.includes('::')) {
|
|
127
|
-
const afterPrefix = normalizedHandler.split('::')[1];
|
|
128
|
-
const prefixParts = afterPrefix.split('.');
|
|
129
|
-
normalizedHandler = prefixParts.slice(1).join('.') || prefixParts[0];
|
|
130
|
-
}
|
|
131
|
-
const [controller, action] = normalizedHandler.split('.');
|
|
132
|
-
if (!controller || !action) {
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
// Extract path params: '/items/:id/action' → ['id']
|
|
136
|
-
const params = this.extractPathParams(pathValue);
|
|
137
|
-
return {
|
|
138
|
-
method: method,
|
|
139
|
-
path: pathValue,
|
|
140
|
-
handler,
|
|
141
|
-
controller,
|
|
142
|
-
action,
|
|
143
|
-
params,
|
|
144
|
-
...(prefix !== undefined && { prefix }),
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
parseJavaScriptFile(filePath) {
|
|
148
|
-
const sourceCode = fs.readFileSync(filePath, 'utf-8');
|
|
149
|
-
const sourceFile = ts.createSourceFile(filePath, sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.JS);
|
|
150
|
-
const routes = [];
|
|
151
|
-
const visit = (node) => {
|
|
152
|
-
// Look for: module.exports = (strapi) => { return [...] } or module.exports = (strapi) => [...]
|
|
153
|
-
if (ts.isExpressionStatement(node)) {
|
|
154
|
-
const expr = node.expression;
|
|
155
|
-
if (ts.isBinaryExpression(expr) &&
|
|
156
|
-
expr.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
|
|
157
|
-
// Check if left side is module.exports
|
|
158
|
-
const left = expr.left;
|
|
159
|
-
if (ts.isPropertyAccessExpression(left) &&
|
|
160
|
-
ts.isIdentifier(left.expression) &&
|
|
161
|
-
left.expression.text === 'module' &&
|
|
162
|
-
left.name.text === 'exports') {
|
|
163
|
-
// Right side can be an arrow function or a plain array
|
|
164
|
-
const right = expr.right;
|
|
165
|
-
if (ts.isArrayLiteralExpression(right)) {
|
|
166
|
-
// Plain array: module.exports = [...]
|
|
167
|
-
this.parseRoutesArray(right, routes);
|
|
168
|
-
}
|
|
169
|
-
else if (ts.isArrowFunction(right)) {
|
|
170
|
-
// Find the return statement or direct array expression
|
|
171
|
-
const body = right.body;
|
|
172
|
-
if (ts.isBlock(body)) {
|
|
173
|
-
// Function with block: (strapi) => { return [...] }
|
|
174
|
-
body.statements.forEach(stmt => {
|
|
175
|
-
if (ts.isReturnStatement(stmt) &&
|
|
176
|
-
stmt.expression) {
|
|
177
|
-
if (ts.isArrayLiteralExpression(stmt.expression)) {
|
|
178
|
-
this.parseRoutesArray(stmt.expression, routes);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
else if (ts.isArrayLiteralExpression(body)) {
|
|
184
|
-
// Direct array: (strapi) => [...]
|
|
185
|
-
this.parseRoutesArray(body, routes);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
ts.forEachChild(node, visit);
|
|
192
|
-
};
|
|
193
|
-
visit(sourceFile);
|
|
194
|
-
return routes;
|
|
195
|
-
}
|
|
196
|
-
parseRoutesArray(arrayExpr, routes) {
|
|
197
|
-
for (const element of arrayExpr.elements) {
|
|
198
|
-
if (ts.isObjectLiteralExpression(element)) {
|
|
199
|
-
const route = this.parseRouteObject(element);
|
|
200
|
-
if (route) {
|
|
201
|
-
routes.push(route);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
extractPathParams(pathValue) {
|
|
207
|
-
const params = [];
|
|
208
|
-
const regex = /:([a-zA-Z_][a-zA-Z0-9_]*)/g;
|
|
209
|
-
let match;
|
|
210
|
-
while ((match = regex.exec(pathValue)) !== null) {
|
|
211
|
-
params.push(match[1]);
|
|
212
|
-
}
|
|
213
|
-
return params;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
//# sourceMappingURL=routes-parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routes-parser.js","sourceRoot":"","sources":["../../src/parser/routes-parser.ts"],"names":[],"mappings":"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"}
|