sirius-framework-mcp 0.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/LICENSE +191 -0
- package/README.md +160 -0
- package/dist/grammars/tree-sitter-java.wasm +0 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +247 -0
- package/dist/index.js.map +1 -0
- package/dist/java-parser.d.ts +25 -0
- package/dist/java-parser.js +281 -0
- package/dist/java-parser.js.map +1 -0
- package/dist/prompts/index.d.ts +9 -0
- package/dist/prompts/index.js +15 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/workflows.d.ts +27 -0
- package/dist/prompts/workflows.js +317 -0
- package/dist/prompts/workflows.js.map +1 -0
- package/dist/resources/biz/analytics.md +157 -0
- package/dist/resources/biz/biz-controller.md +151 -0
- package/dist/resources/biz/codelists.md +154 -0
- package/dist/resources/biz/entity-triple.md +142 -0
- package/dist/resources/biz/importer.md +153 -0
- package/dist/resources/biz/isenguard.md +156 -0
- package/dist/resources/biz/jobs.md +145 -0
- package/dist/resources/biz/processes.md +155 -0
- package/dist/resources/biz/storage.md +149 -0
- package/dist/resources/biz/tenants.md +159 -0
- package/dist/resources/biz/testing.md +127 -0
- package/dist/resources/db/composites.md +145 -0
- package/dist/resources/db/entities.md +156 -0
- package/dist/resources/db/mixing.md +176 -0
- package/dist/resources/db/queries.md +178 -0
- package/dist/resources/db/refs.md +135 -0
- package/dist/resources/index.d.ts +27 -0
- package/dist/resources/index.js +68 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/kernel/async.md +189 -0
- package/dist/resources/kernel/commons.md +203 -0
- package/dist/resources/kernel/config.md +155 -0
- package/dist/resources/kernel/di.md +138 -0
- package/dist/resources/kernel/lifecycle.md +146 -0
- package/dist/resources/loader.d.ts +9 -0
- package/dist/resources/loader.js +17 -0
- package/dist/resources/loader.js.map +1 -0
- package/dist/resources/web/controllers.md +151 -0
- package/dist/resources/web/services.md +136 -0
- package/dist/resources/web/templates.md +162 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/introspection.d.ts +55 -0
- package/dist/tools/introspection.js +233 -0
- package/dist/tools/introspection.js.map +1 -0
- package/dist/tools/scaffold.d.ts +64 -0
- package/dist/tools/scaffold.js +505 -0
- package/dist/tools/scaffold.js.map +1 -0
- package/dist/workspace.d.ts +37 -0
- package/dist/workspace.js +185 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scaffold tools for generating Sirius framework Java/Kotlin boilerplate code.
|
|
3
|
+
*
|
|
4
|
+
* These tools generate code as strings (NOT file writes). The AI assistant will write the files.
|
|
5
|
+
*/
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Helpers
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
/**
|
|
10
|
+
* Converts a camelCase field name to UPPER_SNAKE_CASE.
|
|
11
|
+
*
|
|
12
|
+
* Examples:
|
|
13
|
+
* "invoiceNumber" -> "INVOICE_NUMBER"
|
|
14
|
+
* "name" -> "NAME"
|
|
15
|
+
* "firstName" -> "FIRST_NAME"
|
|
16
|
+
*/
|
|
17
|
+
export function toUpperSnake(camelCase) {
|
|
18
|
+
return camelCase
|
|
19
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1_$2")
|
|
20
|
+
.toUpperCase();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Converts a PascalCase name to kebab-case.
|
|
24
|
+
*
|
|
25
|
+
* Examples:
|
|
26
|
+
* "ProductImport" -> "product-import"
|
|
27
|
+
* "SampleJob" -> "sample-job"
|
|
28
|
+
*/
|
|
29
|
+
function toKebabCase(name) {
|
|
30
|
+
return name
|
|
31
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1-$2")
|
|
32
|
+
.toLowerCase();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Extracts the last segment of a dot-separated package name.
|
|
36
|
+
*
|
|
37
|
+
* Example: "sirius.biz.products" -> "products"
|
|
38
|
+
*/
|
|
39
|
+
function lastPackageSegment(pkg) {
|
|
40
|
+
const parts = pkg.split(".");
|
|
41
|
+
return parts[parts.length - 1];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Converts a package name to a file path.
|
|
45
|
+
*
|
|
46
|
+
* Example: "sirius.biz.products" -> "sirius/biz/products"
|
|
47
|
+
*/
|
|
48
|
+
function packageToPath(pkg) {
|
|
49
|
+
return pkg.replace(/\./g, "/");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Pluralizes a name using simple English rules.
|
|
53
|
+
* Used for route generation in controllers.
|
|
54
|
+
*/
|
|
55
|
+
function pluralize(name) {
|
|
56
|
+
if (name.endsWith("y") && !/[aeiou]y$/i.test(name)) {
|
|
57
|
+
return name.slice(0, -1) + "ies";
|
|
58
|
+
}
|
|
59
|
+
if (name.endsWith("s") ||
|
|
60
|
+
name.endsWith("x") ||
|
|
61
|
+
name.endsWith("z") ||
|
|
62
|
+
name.endsWith("ch") ||
|
|
63
|
+
name.endsWith("sh")) {
|
|
64
|
+
return name + "es";
|
|
65
|
+
}
|
|
66
|
+
return name + "s";
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Lowercases the first character of a string.
|
|
70
|
+
* If the entire string is uppercase (e.g., "OMA"), lowercases it all.
|
|
71
|
+
* If it starts with consecutive uppercase letters followed by lowercase (e.g., "HTMLParser"),
|
|
72
|
+
* lowercases all but the last uppercase letter.
|
|
73
|
+
*/
|
|
74
|
+
function lcFirst(s) {
|
|
75
|
+
if (s.length === 0)
|
|
76
|
+
return s;
|
|
77
|
+
// If the whole string is uppercase, lowercase everything
|
|
78
|
+
if (s === s.toUpperCase()) {
|
|
79
|
+
return s.toLowerCase();
|
|
80
|
+
}
|
|
81
|
+
return s.charAt(0).toLowerCase() + s.slice(1);
|
|
82
|
+
}
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// scaffoldEntity
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
export function scaffoldEntity(options) {
|
|
87
|
+
const { name, package: pkg, targets = ["jdbc", "mongo"], tenantAware = true, fields = [], mixins = [], } = options;
|
|
88
|
+
const files = [];
|
|
89
|
+
// 1. Generate the interface file
|
|
90
|
+
files.push(generateEntityInterface(name, pkg, fields, mixins));
|
|
91
|
+
// 2. Generate implementation files for each target
|
|
92
|
+
for (const target of targets) {
|
|
93
|
+
switch (target) {
|
|
94
|
+
case "jdbc":
|
|
95
|
+
files.push(generateJdbcEntity(name, pkg, tenantAware, fields));
|
|
96
|
+
break;
|
|
97
|
+
case "mongo":
|
|
98
|
+
files.push(generateMongoEntity(name, pkg, tenantAware, fields));
|
|
99
|
+
break;
|
|
100
|
+
case "elastic":
|
|
101
|
+
files.push(generateElasticEntity(name, pkg, fields));
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return { files };
|
|
106
|
+
}
|
|
107
|
+
function generateEntityInterface(name, pkg, fields, mixins) {
|
|
108
|
+
const extendsClause = ["Entity", ...mixins].join(", ");
|
|
109
|
+
const fieldDeclarations = fields
|
|
110
|
+
.map((f) => {
|
|
111
|
+
const upperSnake = toUpperSnake(f.name);
|
|
112
|
+
const mappingLine = ` Mapping ${upperSnake} = Mapping.named("${f.name}");`;
|
|
113
|
+
const getterName = `get${f.name.charAt(0).toUpperCase()}${f.name.slice(1)}`;
|
|
114
|
+
const getterLine = ` ${f.type} ${getterName}();`;
|
|
115
|
+
return `\n${mappingLine}\n\n${getterLine}`;
|
|
116
|
+
})
|
|
117
|
+
.join("\n");
|
|
118
|
+
const content = `package ${pkg};
|
|
119
|
+
|
|
120
|
+
import sirius.db.mixing.Entity;
|
|
121
|
+
import sirius.db.mixing.Mapping;
|
|
122
|
+
|
|
123
|
+
import java.io.Serializable;
|
|
124
|
+
|
|
125
|
+
public interface ${name}<I extends Serializable> extends ${extendsClause} {
|
|
126
|
+
${fieldDeclarations}
|
|
127
|
+
}
|
|
128
|
+
`;
|
|
129
|
+
return {
|
|
130
|
+
fileName: `${name}.java`,
|
|
131
|
+
path: `src/main/java/${packageToPath(pkg)}/${name}.java`,
|
|
132
|
+
content,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function generateJdbcEntity(name, pkg, tenantAware, fields) {
|
|
136
|
+
const jdbcPkg = `${pkg}.jdbc`;
|
|
137
|
+
const framework = lastPackageSegment(pkg);
|
|
138
|
+
const superClass = tenantAware ? "SQLTenantAware" : "BizEntity";
|
|
139
|
+
const superImport = tenantAware
|
|
140
|
+
? "import sirius.biz.tenants.jdbc.SQLTenantAware;"
|
|
141
|
+
: "import sirius.biz.jdbc.BizEntity;";
|
|
142
|
+
const fieldDeclarations = generateFieldDeclarations(fields);
|
|
143
|
+
const content = `package ${jdbcPkg};
|
|
144
|
+
|
|
145
|
+
${superImport}
|
|
146
|
+
import sirius.db.mixing.Mapping;
|
|
147
|
+
import sirius.db.mixing.annotations.Length;
|
|
148
|
+
import sirius.db.mixing.annotations.TranslationSource;
|
|
149
|
+
import sirius.biz.web.Autoloaded;
|
|
150
|
+
import sirius.kernel.di.std.Framework;
|
|
151
|
+
import ${pkg}.${name};
|
|
152
|
+
|
|
153
|
+
@Framework("${framework}")
|
|
154
|
+
@TranslationSource(${name}.class)
|
|
155
|
+
public class SQL${name} extends ${superClass} implements ${name}<Long> {
|
|
156
|
+
${fieldDeclarations}
|
|
157
|
+
}
|
|
158
|
+
`;
|
|
159
|
+
return {
|
|
160
|
+
fileName: `SQL${name}.java`,
|
|
161
|
+
path: `src/main/java/${packageToPath(jdbcPkg)}/SQL${name}.java`,
|
|
162
|
+
content,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function generateMongoEntity(name, pkg, tenantAware, fields) {
|
|
166
|
+
const mongoPkg = `${pkg}.mongo`;
|
|
167
|
+
const framework = lastPackageSegment(pkg);
|
|
168
|
+
const superClass = tenantAware ? "MongoTenantAware" : "MongoBizEntity";
|
|
169
|
+
const superImport = tenantAware
|
|
170
|
+
? "import sirius.biz.tenants.mongo.MongoTenantAware;"
|
|
171
|
+
: "import sirius.biz.mongo.MongoBizEntity;";
|
|
172
|
+
const fieldDeclarations = generateFieldDeclarations(fields);
|
|
173
|
+
const content = `package ${mongoPkg};
|
|
174
|
+
|
|
175
|
+
${superImport}
|
|
176
|
+
import sirius.db.mixing.Mapping;
|
|
177
|
+
import sirius.db.mixing.annotations.Length;
|
|
178
|
+
import sirius.db.mixing.annotations.TranslationSource;
|
|
179
|
+
import sirius.biz.web.Autoloaded;
|
|
180
|
+
import sirius.kernel.di.std.Framework;
|
|
181
|
+
import ${pkg}.${name};
|
|
182
|
+
|
|
183
|
+
@Framework("${framework}")
|
|
184
|
+
@TranslationSource(${name}.class)
|
|
185
|
+
public class Mongo${name} extends ${superClass} implements ${name}<String> {
|
|
186
|
+
${fieldDeclarations}
|
|
187
|
+
}
|
|
188
|
+
`;
|
|
189
|
+
return {
|
|
190
|
+
fileName: `Mongo${name}.java`,
|
|
191
|
+
path: `src/main/java/${packageToPath(mongoPkg)}/Mongo${name}.java`,
|
|
192
|
+
content,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
function generateElasticEntity(name, pkg, fields) {
|
|
196
|
+
const elasticPkg = `${pkg}.elastic`;
|
|
197
|
+
const framework = lastPackageSegment(pkg);
|
|
198
|
+
const fieldDeclarations = generateFieldDeclarations(fields);
|
|
199
|
+
const content = `package ${elasticPkg};
|
|
200
|
+
|
|
201
|
+
import sirius.biz.elastic.SearchableEntity;
|
|
202
|
+
import sirius.db.mixing.Mapping;
|
|
203
|
+
import sirius.db.mixing.annotations.Length;
|
|
204
|
+
import sirius.db.mixing.annotations.TranslationSource;
|
|
205
|
+
import sirius.biz.web.Autoloaded;
|
|
206
|
+
import sirius.kernel.di.std.Framework;
|
|
207
|
+
import ${pkg}.${name};
|
|
208
|
+
|
|
209
|
+
@Framework("${framework}")
|
|
210
|
+
@TranslationSource(${name}.class)
|
|
211
|
+
public class Elastic${name} extends SearchableEntity implements ${name}<String> {
|
|
212
|
+
${fieldDeclarations}
|
|
213
|
+
}
|
|
214
|
+
`;
|
|
215
|
+
return {
|
|
216
|
+
fileName: `Elastic${name}.java`,
|
|
217
|
+
path: `src/main/java/${packageToPath(elasticPkg)}/Elastic${name}.java`,
|
|
218
|
+
content,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function generateFieldDeclarations(fields) {
|
|
222
|
+
if (fields.length === 0)
|
|
223
|
+
return "";
|
|
224
|
+
return fields
|
|
225
|
+
.map((f) => {
|
|
226
|
+
const upperSnake = toUpperSnake(f.name);
|
|
227
|
+
const lines = [];
|
|
228
|
+
lines.push(` public static final Mapping ${upperSnake} = Mapping.named("${f.name}");`);
|
|
229
|
+
// Annotations
|
|
230
|
+
const annotations = f.annotations ?? [];
|
|
231
|
+
if (f.length) {
|
|
232
|
+
lines.push(` @Length(${f.length})`);
|
|
233
|
+
}
|
|
234
|
+
for (const ann of annotations) {
|
|
235
|
+
if (ann.startsWith("@")) {
|
|
236
|
+
lines.push(` ${ann}`);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
lines.push(` @${ann}`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
lines.push(` private ${f.type} ${f.name};`);
|
|
243
|
+
// Getter
|
|
244
|
+
const getterName = `get${f.name.charAt(0).toUpperCase()}${f.name.slice(1)}`;
|
|
245
|
+
lines.push("");
|
|
246
|
+
lines.push(` public ${f.type} ${getterName}() {`);
|
|
247
|
+
lines.push(` return ${f.name};`);
|
|
248
|
+
lines.push(` }`);
|
|
249
|
+
return "\n" + lines.join("\n");
|
|
250
|
+
})
|
|
251
|
+
.join("\n");
|
|
252
|
+
}
|
|
253
|
+
// ---------------------------------------------------------------------------
|
|
254
|
+
// scaffoldJob
|
|
255
|
+
// ---------------------------------------------------------------------------
|
|
256
|
+
export function scaffoldJob(options) {
|
|
257
|
+
const { name, package: pkg, type = "SimpleBatchProcessJobFactory", framework, parameters = [], } = options;
|
|
258
|
+
const kebabName = toKebabCase(name);
|
|
259
|
+
const registerAnnotation = framework
|
|
260
|
+
? `@Register(framework = "${framework}")`
|
|
261
|
+
: "@Register";
|
|
262
|
+
const isReport = type === "ReportJobFactory";
|
|
263
|
+
const parameterImports = parameters.length > 0
|
|
264
|
+
? "\nimport sirius.biz.jobs.params.Parameter;\nimport java.util.Map;\nimport java.util.function.BiConsumer;\nimport java.util.function.Consumer;"
|
|
265
|
+
: "";
|
|
266
|
+
const collectParametersMethod = parameters.length > 0
|
|
267
|
+
? `
|
|
268
|
+
@Override
|
|
269
|
+
protected void collectParameters(Consumer<Parameter<?, ?>> parameterCollector) {
|
|
270
|
+
// TODO: Add parameters
|
|
271
|
+
${parameters.map((p) => ` // parameterCollector.accept(${p});`).join("\n")}
|
|
272
|
+
}
|
|
273
|
+
`
|
|
274
|
+
: `
|
|
275
|
+
@Override
|
|
276
|
+
protected void collectParameters(Consumer<Parameter<?, ?>> parameterCollector) {
|
|
277
|
+
// TODO: Add parameters
|
|
278
|
+
}
|
|
279
|
+
`;
|
|
280
|
+
const executeMethod = isReport
|
|
281
|
+
? `
|
|
282
|
+
@Override
|
|
283
|
+
protected void computeReport(Map<String, String> context,
|
|
284
|
+
Report report,
|
|
285
|
+
BiConsumer<String, Cell> additionalMetricConsumer) throws Exception {
|
|
286
|
+
// TODO: Implement report computation
|
|
287
|
+
}
|
|
288
|
+
`
|
|
289
|
+
: `
|
|
290
|
+
@Override
|
|
291
|
+
protected void execute(ProcessContext process) throws Exception {
|
|
292
|
+
// TODO: Implement job execution
|
|
293
|
+
}
|
|
294
|
+
`;
|
|
295
|
+
const typeImport = isReport
|
|
296
|
+
? "import sirius.biz.jobs.interactive.ReportJobFactory;\nimport sirius.biz.analytics.reports.Cell;\nimport sirius.biz.analytics.reports.Report;"
|
|
297
|
+
: "import sirius.biz.jobs.batch.SimpleBatchProcessJobFactory;\nimport sirius.biz.process.ProcessContext;";
|
|
298
|
+
const content = `package ${pkg};
|
|
299
|
+
|
|
300
|
+
${typeImport}
|
|
301
|
+
import sirius.biz.jobs.StandardCategories;
|
|
302
|
+
import sirius.kernel.di.std.Register;${parameterImports}
|
|
303
|
+
|
|
304
|
+
${registerAnnotation}
|
|
305
|
+
public class ${name} extends ${type} {
|
|
306
|
+
|
|
307
|
+
@Override
|
|
308
|
+
public String getName() {
|
|
309
|
+
return "${kebabName}";
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
@Override
|
|
313
|
+
public String getCategory() {
|
|
314
|
+
return StandardCategories.MISC;
|
|
315
|
+
}
|
|
316
|
+
${collectParametersMethod}${executeMethod}
|
|
317
|
+
}
|
|
318
|
+
`;
|
|
319
|
+
return {
|
|
320
|
+
files: [
|
|
321
|
+
{
|
|
322
|
+
fileName: `${name}.java`,
|
|
323
|
+
path: `src/main/java/${packageToPath(pkg)}/${name}.java`,
|
|
324
|
+
content,
|
|
325
|
+
},
|
|
326
|
+
],
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
// ---------------------------------------------------------------------------
|
|
330
|
+
// scaffoldTest
|
|
331
|
+
// ---------------------------------------------------------------------------
|
|
332
|
+
export function scaffoldTest(options) {
|
|
333
|
+
const { name, package: pkg, setupParts = [] } = options;
|
|
334
|
+
const partDeclarations = setupParts
|
|
335
|
+
.map((part) => {
|
|
336
|
+
const varName = lcFirst(part);
|
|
337
|
+
return ` @Part\n private lateinit var ${varName}: ${part}`;
|
|
338
|
+
})
|
|
339
|
+
.join("\n\n");
|
|
340
|
+
const setupBody = setupParts.length > 0
|
|
341
|
+
? ` ${lcFirst(setupParts[0])}.readyFuture.await(Duration.ofSeconds(60))`
|
|
342
|
+
: " // Wait for system readiness";
|
|
343
|
+
const content = `package ${pkg}
|
|
344
|
+
|
|
345
|
+
import org.junit.jupiter.api.BeforeAll
|
|
346
|
+
import org.junit.jupiter.api.Test
|
|
347
|
+
import org.junit.jupiter.api.extension.ExtendWith
|
|
348
|
+
import sirius.kernel.SiriusExtension
|
|
349
|
+
import sirius.kernel.di.std.Part
|
|
350
|
+
import java.time.Duration
|
|
351
|
+
|
|
352
|
+
@ExtendWith(SiriusExtension::class)
|
|
353
|
+
class ${name} {
|
|
354
|
+
|
|
355
|
+
companion object {
|
|
356
|
+
${partDeclarations}
|
|
357
|
+
|
|
358
|
+
@BeforeAll
|
|
359
|
+
@JvmStatic
|
|
360
|
+
fun setup() {
|
|
361
|
+
${setupBody}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
@Test
|
|
366
|
+
fun \`sample test\`() {
|
|
367
|
+
// TODO: Implement test
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
`;
|
|
371
|
+
return {
|
|
372
|
+
files: [
|
|
373
|
+
{
|
|
374
|
+
fileName: `${name}.kt`,
|
|
375
|
+
path: `src/test/kotlin/${packageToPath(pkg)}/${name}.kt`,
|
|
376
|
+
content,
|
|
377
|
+
},
|
|
378
|
+
],
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
// ---------------------------------------------------------------------------
|
|
382
|
+
// scaffoldComposite
|
|
383
|
+
// ---------------------------------------------------------------------------
|
|
384
|
+
export function scaffoldComposite(options) {
|
|
385
|
+
const { name, package: pkg, fields = [] } = options;
|
|
386
|
+
const fieldDeclarations = generateCompositeFieldDeclarations(fields);
|
|
387
|
+
const content = `package ${pkg};
|
|
388
|
+
|
|
389
|
+
import sirius.db.mixing.Composite;
|
|
390
|
+
import sirius.db.mixing.Mapping;
|
|
391
|
+
import sirius.db.mixing.annotations.Length;
|
|
392
|
+
import sirius.db.mixing.annotations.Trim;
|
|
393
|
+
import sirius.db.mixing.annotations.NullAllowed;
|
|
394
|
+
import sirius.biz.web.Autoloaded;
|
|
395
|
+
|
|
396
|
+
public class ${name} extends Composite {
|
|
397
|
+
${fieldDeclarations}
|
|
398
|
+
}
|
|
399
|
+
`;
|
|
400
|
+
return {
|
|
401
|
+
files: [
|
|
402
|
+
{
|
|
403
|
+
fileName: `${name}.java`,
|
|
404
|
+
path: `src/main/java/${packageToPath(pkg)}/${name}.java`,
|
|
405
|
+
content,
|
|
406
|
+
},
|
|
407
|
+
],
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
function generateCompositeFieldDeclarations(fields) {
|
|
411
|
+
if (fields.length === 0)
|
|
412
|
+
return "";
|
|
413
|
+
return fields
|
|
414
|
+
.map((f) => {
|
|
415
|
+
const upperSnake = toUpperSnake(f.name);
|
|
416
|
+
const lines = [];
|
|
417
|
+
lines.push(` public static final Mapping ${upperSnake} = Mapping.named("${f.name}");`);
|
|
418
|
+
// Annotations
|
|
419
|
+
const annotations = f.annotations ?? [];
|
|
420
|
+
if (f.length) {
|
|
421
|
+
lines.push(` @Length(${f.length})`);
|
|
422
|
+
}
|
|
423
|
+
for (const ann of annotations) {
|
|
424
|
+
if (ann.startsWith("@")) {
|
|
425
|
+
lines.push(` ${ann}`);
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
lines.push(` @${ann}`);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
lines.push(` private ${f.type} ${f.name};`);
|
|
432
|
+
// Getter
|
|
433
|
+
const getterName = `get${f.name.charAt(0).toUpperCase()}${f.name.slice(1)}`;
|
|
434
|
+
lines.push("");
|
|
435
|
+
lines.push(` public ${f.type} ${getterName}() {`);
|
|
436
|
+
lines.push(` return ${f.name};`);
|
|
437
|
+
lines.push(` }`);
|
|
438
|
+
// Setter
|
|
439
|
+
const setterName = `set${f.name.charAt(0).toUpperCase()}${f.name.slice(1)}`;
|
|
440
|
+
lines.push("");
|
|
441
|
+
lines.push(` public void ${setterName}(${f.type} ${f.name}) {`);
|
|
442
|
+
lines.push(` this.${f.name} = ${f.name};`);
|
|
443
|
+
lines.push(` }`);
|
|
444
|
+
return "\n" + lines.join("\n");
|
|
445
|
+
})
|
|
446
|
+
.join("\n");
|
|
447
|
+
}
|
|
448
|
+
// ---------------------------------------------------------------------------
|
|
449
|
+
// scaffoldController
|
|
450
|
+
// ---------------------------------------------------------------------------
|
|
451
|
+
export function scaffoldController(options) {
|
|
452
|
+
const { name, package: pkg, entity, permissions = [] } = options;
|
|
453
|
+
const permissionConstants = permissions
|
|
454
|
+
.map((p) => {
|
|
455
|
+
const constName = p.toUpperCase().replace(/-/g, "_");
|
|
456
|
+
return ` public static final String ${constName} = "${p}";`;
|
|
457
|
+
})
|
|
458
|
+
.join("\n");
|
|
459
|
+
let routeMethods = "";
|
|
460
|
+
if (entity) {
|
|
461
|
+
const entityLower = lcFirst(entity);
|
|
462
|
+
const entityPlural = pluralize(entityLower);
|
|
463
|
+
const listPermAnnotation = permissions.length > 0
|
|
464
|
+
? `\n @Permission(${permissions[0].toUpperCase().replace(/-/g, "_")})`
|
|
465
|
+
: "";
|
|
466
|
+
routeMethods = `
|
|
467
|
+
@Routed("/${entityPlural}")
|
|
468
|
+
@LoginRequired${listPermAnnotation}
|
|
469
|
+
public void ${entityPlural}(WebContext webContext) {
|
|
470
|
+
// TODO: Implement list view
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
@Routed("/${entityLower}/:1")
|
|
474
|
+
@LoginRequired${listPermAnnotation}
|
|
475
|
+
public void ${entityLower}(WebContext webContext, String id) {
|
|
476
|
+
// TODO: Implement edit view
|
|
477
|
+
}
|
|
478
|
+
`;
|
|
479
|
+
}
|
|
480
|
+
const content = `package ${pkg};
|
|
481
|
+
|
|
482
|
+
import sirius.biz.web.BizController;
|
|
483
|
+
import sirius.kernel.di.std.Register;
|
|
484
|
+
import sirius.web.controller.Routed;
|
|
485
|
+
import sirius.web.http.WebContext;
|
|
486
|
+
import sirius.web.security.LoginRequired;
|
|
487
|
+
import sirius.web.security.Permission;
|
|
488
|
+
|
|
489
|
+
@Register
|
|
490
|
+
public class ${name} extends BizController {
|
|
491
|
+
|
|
492
|
+
${permissionConstants ? permissionConstants + "\n" : ""}${routeMethods}
|
|
493
|
+
}
|
|
494
|
+
`;
|
|
495
|
+
return {
|
|
496
|
+
files: [
|
|
497
|
+
{
|
|
498
|
+
fileName: `${name}.java`,
|
|
499
|
+
path: `src/main/java/${packageToPath(pkg)}/${name}.java`,
|
|
500
|
+
content,
|
|
501
|
+
},
|
|
502
|
+
],
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/tools/scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents the Sirius framework layers, ordered from lowest to highest.
|
|
3
|
+
*/
|
|
4
|
+
export declare enum SiriusLayer {
|
|
5
|
+
KERNEL = "KERNEL",
|
|
6
|
+
WEB = "WEB",
|
|
7
|
+
DB = "DB",
|
|
8
|
+
BIZ = "BIZ",
|
|
9
|
+
APP = "APP"
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Information about the detected workspace and which framework layers it exposes.
|
|
13
|
+
*/
|
|
14
|
+
export interface WorkspaceInfo {
|
|
15
|
+
/** The detected framework layer for this workspace. */
|
|
16
|
+
layer: SiriusLayer;
|
|
17
|
+
/** The set of layers whose resources/tools should be exposed. */
|
|
18
|
+
exposedLayers: SiriusLayer[];
|
|
19
|
+
/** The artifactId from the POM, if available. */
|
|
20
|
+
artifactId: string | undefined;
|
|
21
|
+
/** Whether this is a multi-module parent POM. */
|
|
22
|
+
isMultiModule: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Detects workspace information by parsing the given POM XML content.
|
|
26
|
+
*
|
|
27
|
+
* Detection logic:
|
|
28
|
+
* 1. If the POM's own artifactId matches a known Sirius module, use that layer.
|
|
29
|
+
* 2. Otherwise, scan dependencies for Sirius artifacts and pick the highest layer.
|
|
30
|
+
* 3. If nothing matches, default to APP (expose all layers).
|
|
31
|
+
* 4. Detect multi-module POMs by the presence of a <modules> section.
|
|
32
|
+
*/
|
|
33
|
+
export declare function detectWorkspace(pomXml: string): WorkspaceInfo;
|
|
34
|
+
/**
|
|
35
|
+
* Detects workspace information by reading a pom.xml file from the given directory path.
|
|
36
|
+
*/
|
|
37
|
+
export declare function detectWorkspaceFromPath(path: string): Promise<WorkspaceInfo>;
|