Skip to content

Commit fee35a9

Browse files
committed
feat: Enhance object loading to infer names from filenames and improve multi-object handling
1 parent 96039c0 commit fee35a9

1 file changed

Lines changed: 25 additions & 8 deletions

File tree

packages/core/src/loader.ts

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,33 @@ export class ObjectLoader {
2121
const doc = yaml.load(ctx.content) as any;
2222
if (!doc) return;
2323

24-
if (doc.name && doc.fields) {
24+
// Calculate ID from filename
25+
const basename = path.basename(ctx.file);
26+
const filenameId = basename.replace(/\.object\.(yml|yaml)$/, '');
27+
28+
// 1. Single Object definition (Standard)
29+
// If fields are present, we treat it as a single object definition
30+
if (doc.fields) {
31+
if (!doc.name) {
32+
// If name is missing, infer from filename
33+
doc.name = filenameId;
34+
} else if (doc.name !== filenameId) {
35+
// warn if mismatch
36+
console.warn(`[ObjectQL] Warning: Object name '${doc.name}' in ${basename} does not match filename. Using '${doc.name}'.`);
37+
}
38+
2539
const packageEntry = ctx.registry.getEntry('package-map', ctx.file);
2640
registerObject(ctx.registry, doc, ctx.file, ctx.packageName || (packageEntry && packageEntry.package));
27-
} else {
28-
for (const [key, value] of Object.entries(doc)) {
29-
if (typeof value === 'object' && (value as any).fields) {
30-
const obj = value as any;
31-
if (!obj.name) obj.name = key;
32-
registerObject(ctx.registry, obj, ctx.file, ctx.packageName);
33-
}
41+
return;
42+
}
43+
44+
// 2. Multi-object map (Legacy/Bundle mode)
45+
// e.g. { object1: { fields... }, object2: { fields... } }
46+
for (const [key, value] of Object.entries(doc)) {
47+
if (typeof value === 'object' && (value as any).fields) {
48+
const obj = value as any;
49+
if (!obj.name) obj.name = key;
50+
registerObject(ctx.registry, obj, ctx.file, ctx.packageName);
3451
}
3552
}
3653
} catch (e) {

0 commit comments

Comments
 (0)