@happyvertical/smrt-core 0.48.0 → 0.49.1
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/agents/object-runtime.md +7 -0
- package/agents/schema-paths.md +17 -0
- package/dist/cascade.d.ts.map +1 -1
- package/dist/cascade.js +9 -6
- package/dist/cascade.js.map +1 -1
- package/dist/collection.d.ts +0 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +32 -44
- package/dist/collection.js.map +1 -1
- package/dist/decorators/compatibility.d.ts +1 -1
- package/dist/decorators/compatibility.d.ts.map +1 -1
- package/dist/decorators/compatibility.js +2 -2
- package/dist/decorators/compatibility.js.map +1 -1
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +33 -24
- package/dist/decorators/index.js.map +1 -1
- package/dist/interceptors.d.ts +3 -1
- package/dist/interceptors.d.ts.map +1 -1
- package/dist/interceptors.js +3 -2
- package/dist/interceptors.js.map +1 -1
- package/dist/manifest/static-manifest.js +1 -1
- package/dist/manifest/static-manifest.js.map +1 -1
- package/dist/manifest/store.js +1 -1
- package/dist/manifest.json +1 -1
- package/dist/object.d.ts +1 -5
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +28 -37
- package/dist/object.js.map +1 -1
- package/dist/registry/class-registration.d.ts +2 -1
- package/dist/registry/class-registration.d.ts.map +1 -1
- package/dist/registry/class-registration.js +47 -16
- package/dist/registry/class-registration.js.map +1 -1
- package/dist/registry/name-resolver.d.ts.map +1 -1
- package/dist/registry/name-resolver.js +3 -3
- package/dist/registry/name-resolver.js.map +1 -1
- package/dist/registry/relationship-graph.d.ts +2 -0
- package/dist/registry/relationship-graph.d.ts.map +1 -1
- package/dist/registry/relationship-graph.js +60 -5
- package/dist/registry/relationship-graph.js.map +1 -1
- package/dist/registry/schema-builder.d.ts.map +1 -1
- package/dist/registry/schema-builder.js +4 -1
- package/dist/registry/schema-builder.js.map +1 -1
- package/dist/registry/shared-state.d.ts +18 -0
- package/dist/registry/shared-state.d.ts.map +1 -1
- package/dist/registry/shared-state.js +25 -1
- package/dist/registry/shared-state.js.map +1 -1
- package/dist/registry/types.d.ts +8 -0
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry.d.ts +32 -5
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +120 -12
- package/dist/registry.js.map +1 -1
- package/dist/relationship-loader.d.ts +6 -0
- package/dist/relationship-loader.d.ts.map +1 -0
- package/dist/relationship-loader.js +35 -0
- package/dist/relationship-loader.js.map +1 -0
- package/dist/scanner/manifest-generator.d.ts.map +1 -1
- package/dist/scanner/manifest-generator.js +6 -3
- package/dist/scanner/manifest-generator.js.map +1 -1
- package/dist/schema/generator.d.ts +2 -0
- package/dist/schema/generator.d.ts.map +1 -1
- package/dist/schema/generator.js +16 -9
- package/dist/schema/generator.js.map +1 -1
- package/dist/schema/utils.d.ts.map +1 -1
- package/dist/schema/utils.js +2 -1
- package/dist/schema/utils.js.map +1 -1
- package/dist/smrt-knowledge.json +7 -7
- package/dist/test-utils.d.ts.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +2 -1
- package/dist/utils.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RelationshipMetadata } from './registry';
|
|
2
|
+
/** Resolve the identity used for I/O, never the public display-name alias. */
|
|
3
|
+
export declare function resolveRelationshipTargetName(relationship: RelationshipMetadata): Promise<string>;
|
|
4
|
+
/** One inverse selection contract for lazy, eager and joined readers. */
|
|
5
|
+
export declare function resolveOneToManyInverse(sourceQualifiedName: string, relationship: RelationshipMetadata, targetQualifiedName: string): RelationshipMetadata;
|
|
6
|
+
//# sourceMappingURL=relationship-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship-loader.d.ts","sourceRoot":"","sources":["../src/relationship-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvE,8EAA8E;AAC9E,wBAAsB,6BAA6B,CACjD,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,yEAAyE;AACzE,wBAAgB,uBAAuB,CACrC,mBAAmB,EAAE,MAAM,EAC3B,YAAY,EAAE,oBAAoB,EAClC,mBAAmB,EAAE,MAAM,GAC1B,oBAAoB,CAuBtB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { RuntimeError } from "./errors.js";
|
|
2
|
+
import { ObjectRegistry } from "./registry.js";
|
|
3
|
+
//#region src/relationship-loader.ts
|
|
4
|
+
/** Resolve the identity used for I/O, never the public display-name alias. */
|
|
5
|
+
async function resolveRelationshipTargetName(relationship) {
|
|
6
|
+
const source = relationship.sourceQualifiedClass ?? relationship.sourceClass;
|
|
7
|
+
const resolve = () => ObjectRegistry.resolveRelationshipTarget(source, relationship.fieldName);
|
|
8
|
+
let target = resolve();
|
|
9
|
+
if (target === null) throw RuntimeError.invalidState(`Relationship target is unresolved or ambiguous for ${source}.${relationship.fieldName}`, {
|
|
10
|
+
sourceClass: source,
|
|
11
|
+
fieldName: relationship.fieldName
|
|
12
|
+
});
|
|
13
|
+
await ObjectRegistry.ensureManifestLoaded(target ?? relationship.targetClass);
|
|
14
|
+
target = resolve();
|
|
15
|
+
if (!target) throw RuntimeError.invalidState(`Relationship target is unresolved or ambiguous for ${source}.${relationship.fieldName}`, {
|
|
16
|
+
sourceClass: source,
|
|
17
|
+
fieldName: relationship.fieldName
|
|
18
|
+
});
|
|
19
|
+
return target;
|
|
20
|
+
}
|
|
21
|
+
/** One inverse selection contract for lazy, eager and joined readers. */
|
|
22
|
+
function resolveOneToManyInverse(sourceQualifiedName, relationship, targetQualifiedName) {
|
|
23
|
+
const candidates = ObjectRegistry.getInverseRelationshipsForSelf(sourceQualifiedName).filter((candidate) => candidate.type === "foreignKey" && candidate.sourceQualifiedClass === targetQualifiedName);
|
|
24
|
+
const explicit = relationship.options?.foreignKey;
|
|
25
|
+
const selected = explicit ? candidates.find((candidate) => candidate.fieldName === explicit) : candidates.find((candidate) => candidate.targetQualifiedClass === sourceQualifiedName) ?? candidates[0];
|
|
26
|
+
if (!selected) throw RuntimeError.invalidState(explicit ? `oneToMany ${relationship.fieldName} specifies foreignKey '${explicit}', but ${relationship.targetClass} has no matching inverse foreignKey. Candidates: ${candidates.map((candidate) => candidate.fieldName).join(", ") || "(none)"}` : `Could not find inverse foreignKey on ${relationship.targetClass} for oneToMany relationship ${relationship.fieldName}`, {
|
|
27
|
+
sourceClass: sourceQualifiedName,
|
|
28
|
+
fieldName: relationship.fieldName
|
|
29
|
+
});
|
|
30
|
+
return selected;
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { resolveOneToManyInverse, resolveRelationshipTargetName };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=relationship-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship-loader.js","names":[],"sources":["../src/relationship-loader.ts"],"sourcesContent":["import { RuntimeError } from './errors';\nimport { ObjectRegistry, type RelationshipMetadata } from './registry';\n\n/** Resolve the identity used for I/O, never the public display-name alias. */\nexport async function resolveRelationshipTargetName(\n relationship: RelationshipMetadata,\n): Promise<string> {\n const source = relationship.sourceQualifiedClass ?? relationship.sourceClass;\n const resolve = () =>\n ObjectRegistry.resolveRelationshipTarget(source, relationship.fieldName);\n let target = resolve();\n if (target === null) {\n throw RuntimeError.invalidState(\n `Relationship target is unresolved or ambiguous for ${source}.${relationship.fieldName}`,\n { sourceClass: source, fieldName: relationship.fieldName },\n );\n }\n // A qualified external target can be known before its package is loaded.\n // Truly missing legacy string targets retain manifest auto-discovery, but an\n // unresolved exact constructor must never fall back to its display name.\n await ObjectRegistry.ensureManifestLoaded(target ?? relationship.targetClass);\n target = resolve();\n if (!target) {\n throw RuntimeError.invalidState(\n `Relationship target is unresolved or ambiguous for ${source}.${relationship.fieldName}`,\n { sourceClass: source, fieldName: relationship.fieldName },\n );\n }\n return target;\n}\n\n/** One inverse selection contract for lazy, eager and joined readers. */\nexport function resolveOneToManyInverse(\n sourceQualifiedName: string,\n relationship: RelationshipMetadata,\n targetQualifiedName: string,\n): RelationshipMetadata {\n const candidates = ObjectRegistry.getInverseRelationshipsForSelf(\n sourceQualifiedName,\n ).filter(\n (candidate) =>\n candidate.type === 'foreignKey' &&\n candidate.sourceQualifiedClass === targetQualifiedName,\n );\n const explicit = relationship.options?.foreignKey;\n const selected = explicit\n ? candidates.find((candidate) => candidate.fieldName === explicit)\n : (candidates.find(\n (candidate) => candidate.targetQualifiedClass === sourceQualifiedName,\n ) ?? candidates[0]);\n if (!selected) {\n throw RuntimeError.invalidState(\n explicit\n ? `oneToMany ${relationship.fieldName} specifies foreignKey '${explicit}', but ${relationship.targetClass} has no matching inverse foreignKey. Candidates: ${candidates.map((candidate) => candidate.fieldName).join(', ') || '(none)'}`\n : `Could not find inverse foreignKey on ${relationship.targetClass} for oneToMany relationship ${relationship.fieldName}`,\n { sourceClass: sourceQualifiedName, fieldName: relationship.fieldName },\n );\n }\n return selected;\n}\n"],"mappings":";;;;AAIA,eAAsB,8BACpB,cACiB;CACjB,MAAM,SAAS,aAAa,wBAAwB,aAAa;CACjE,MAAM,gBACJ,eAAe,0BAA0B,QAAQ,aAAa,SAAS;CACzE,IAAI,SAAS,QAAQ;CACrB,IAAI,WAAW,MACb,MAAM,aAAa,aACjB,sDAAsD,OAAO,GAAG,aAAa,aAC7E;EAAE,aAAa;EAAQ,WAAW,aAAa;CAAU,CAC3D;CAKF,MAAM,eAAe,qBAAqB,UAAU,aAAa,WAAW;CAC5E,SAAS,QAAQ;CACjB,IAAI,CAAC,QACH,MAAM,aAAa,aACjB,sDAAsD,OAAO,GAAG,aAAa,aAC7E;EAAE,aAAa;EAAQ,WAAW,aAAa;CAAU,CAC3D;CAEF,OAAO;AACT;;AAGA,SAAgB,wBACd,qBACA,cACA,qBACsB;CACtB,MAAM,aAAa,eAAe,+BAChC,mBACF,CAAC,CAAC,QACC,cACC,UAAU,SAAS,gBACnB,UAAU,yBAAyB,mBACvC;CACA,MAAM,WAAW,aAAa,SAAS;CACvC,MAAM,WAAW,WACb,WAAW,MAAM,cAAc,UAAU,cAAc,QAAQ,IAC9D,WAAW,MACT,cAAc,UAAU,yBAAyB,mBACpD,KAAK,WAAW;CACpB,IAAI,CAAC,UACH,MAAM,aAAa,aACjB,WACI,aAAa,aAAa,UAAU,yBAAyB,SAAS,SAAS,aAAa,YAAY,mDAAmD,WAAW,KAAK,cAAc,UAAU,SAAS,CAAC,CAAC,KAAK,IAAI,KAAK,aAC5N,wCAAwC,aAAa,YAAY,8BAA8B,aAAa,aAChH;EAAE,aAAa;EAAqB,WAAW,aAAa;CAAU,CACxE;CAEF,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-generator.d.ts","sourceRoot":"","sources":["../../src/scanner/manifest-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH,OAAO,KAAK,EAYV,UAAU,EAEV,mBAAmB,EACnB,cAAc,EAEf,MAAM,YAAY,CAAC;AAGpB,2EAA2E;AAC3E,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAmJD,qBAAa,iBAAiB;IAC5B;;;;;;;;;;;;OAYG;IACH,gBAAgB,CACd,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,eAAe,CAAC;QAC9B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,iBAAiB,CAAC,EAAE,cAAc,EAAE,CAAC;KACtC,GACA,mBAAmB;IA6GtB;;;;;;;;;;;;OAYG;IACH,qBAAqB,CACnB,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,GAChE,IAAI;IA0CP;;;;;;OAMG;IACH,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAM7D,OAAO,CAAC,uBAAuB;IAsD/B,gCAAgC,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IA0DrE,OAAO,CAAC,0BAA0B;IAoBlC,OAAO,CAAC,+BAA+B;IAqBvC,OAAO,CAAC,2BAA2B;IAyBnC;;;;;;;;;;OAUG;IACH,uBAAuB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAiH5D;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IA8EpD,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAiC3D,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAO/D;;;;;;;;;;;;;;;;;;;OAmBG;IACH,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IA0B7D,OAAO,CAAC,uCAAuC;
|
|
1
|
+
{"version":3,"file":"manifest-generator.d.ts","sourceRoot":"","sources":["../../src/scanner/manifest-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH,OAAO,KAAK,EAYV,UAAU,EAEV,mBAAmB,EACnB,cAAc,EAEf,MAAM,YAAY,CAAC;AAGpB,2EAA2E;AAC3E,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAmJD,qBAAa,iBAAiB;IAC5B;;;;;;;;;;;;OAYG;IACH,gBAAgB,CACd,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,eAAe,CAAC;QAC9B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,iBAAiB,CAAC,EAAE,cAAc,EAAE,CAAC;KACtC,GACA,mBAAmB;IA6GtB;;;;;;;;;;;;OAYG;IACH,qBAAqB,CACnB,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,GAChE,IAAI;IA0CP;;;;;;OAMG;IACH,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAM7D,OAAO,CAAC,uBAAuB;IAsD/B,gCAAgC,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IA0DrE,OAAO,CAAC,0BAA0B;IAoBlC,OAAO,CAAC,+BAA+B;IAqBvC,OAAO,CAAC,2BAA2B;IAyBnC;;;;;;;;;;OAUG;IACH,uBAAuB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAiH5D;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IA8EpD,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAiC3D,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAO/D;;;;;;;;;;;;;;;;;;;OAmBG;IACH,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IA0B7D,OAAO,CAAC,uCAAuC;IAuI/C,OAAO,CAAC,0BAA0B;IAwClC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,wBAAwB;IA4DhC,OAAO,CAAC,4BAA4B;IAqCpC,OAAO,CAAC,yBAAyB;IAqCjC,OAAO,CAAC,qBAAqB;IAyB7B,OAAO,CAAC,gBAAgB;IAkBxB;;;;;;;;OAQG;IACH,OAAO,CAAC,wBAAwB;IAiChC;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAgDvB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IA6DvB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,gCAAgC;IAyBxC,OAAO,CAAC,eAAe;IAMvB;;;;;;;;;;;;;;OAcG;IACI,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAgThE;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAyBzB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,aAAa;IA4HrB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,UAAU;IAqDlB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW;IAyDnB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,6BAA6B;IA6BrC;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IA4C3B;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAqB9D;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAa5D;;OAEG;IACH,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAa/D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8C3B,OAAO,CAAC,kBAAkB;IAkE1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+F5B;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAUvD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,mBAAmB;IA0B3B,kDAAkD;IAClD,OAAO,CAAC,WAAW;IAInB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,uBAAuB;IA0C/B,8EAA8E;IAC9E,OAAO,CAAC,kBAAkB;IAuB1B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAa3D;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkC7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsGvB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsBhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CACpB,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,eAAe,GAC5B,IAAI;IAkIP;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKnE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB;CAKpD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,cAAc,EAAE,CAAC;CACtC,GACA,mBAAmB,CAGrB"}
|
|
@@ -474,7 +474,7 @@ var ManifestGenerator = class {
|
|
|
474
474
|
if (field.type !== "foreignKey" || !field.related || field._meta?.__tenancy?.isTenantIdField === true) continue;
|
|
475
475
|
const emitConstraint = field._meta?.constraint !== false;
|
|
476
476
|
const columnName = toSnakeCase(fieldName);
|
|
477
|
-
const targetSchema = this.findForeignKeyTargetSchema(field.related, manifest, schemaByTable);
|
|
477
|
+
const targetSchema = this.findForeignKeyTargetSchema(field.related, manifest, schemaByTable, obj.packageName);
|
|
478
478
|
if (!targetSchema) {
|
|
479
479
|
for (const sourceSchema of sourceSchemas) {
|
|
480
480
|
const sourceColumn = sourceSchema.columns[columnName];
|
|
@@ -520,10 +520,13 @@ var ManifestGenerator = class {
|
|
|
520
520
|
}
|
|
521
521
|
for (const schema of changedSchemas) this.refreshManifestSchemaDDL(schema, generator, ownerBySchema.get(schema), manifest);
|
|
522
522
|
}
|
|
523
|
-
findForeignKeyTargetSchema(related, manifest, schemaByTable) {
|
|
523
|
+
findForeignKeyTargetSchema(related, manifest, schemaByTable, sourcePackageName) {
|
|
524
524
|
const relatedTarget = related.split(".")[0];
|
|
525
525
|
if (schemaByTable.has(relatedTarget)) return schemaByTable.get(relatedTarget);
|
|
526
|
-
const
|
|
526
|
+
const candidates = Object.values(manifest.objects).filter((candidate) => candidate.className === relatedTarget || candidate.qualifiedName === relatedTarget || candidate.name === relatedTarget || candidate.decoratorConfig?.tableName === relatedTarget || candidate.schema?.tableName === relatedTarget);
|
|
527
|
+
const localTarget = candidates.find((candidate) => candidate.packageName === sourcePackageName);
|
|
528
|
+
if (!localTarget && candidates.length > 1) throw new Error(`Ambiguous foreign key target ${relatedTarget} from package ${sourcePackageName}`);
|
|
529
|
+
const targetObj = localTarget ?? candidates[0];
|
|
527
530
|
if (!targetObj && relatedTarget.includes(":")) return;
|
|
528
531
|
const targetTable = targetObj ? this.getObjectTableName(targetObj) : this.classNameToTableName(relatedTarget);
|
|
529
532
|
return targetTable ? schemaByTable.get(targetTable) : void 0;
|