@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.
Files changed (72) hide show
  1. package/agents/object-runtime.md +7 -0
  2. package/agents/schema-paths.md +17 -0
  3. package/dist/cascade.d.ts.map +1 -1
  4. package/dist/cascade.js +9 -6
  5. package/dist/cascade.js.map +1 -1
  6. package/dist/collection.d.ts +0 -1
  7. package/dist/collection.d.ts.map +1 -1
  8. package/dist/collection.js +32 -44
  9. package/dist/collection.js.map +1 -1
  10. package/dist/decorators/compatibility.d.ts +1 -1
  11. package/dist/decorators/compatibility.d.ts.map +1 -1
  12. package/dist/decorators/compatibility.js +2 -2
  13. package/dist/decorators/compatibility.js.map +1 -1
  14. package/dist/decorators/index.d.ts.map +1 -1
  15. package/dist/decorators/index.js +33 -24
  16. package/dist/decorators/index.js.map +1 -1
  17. package/dist/interceptors.d.ts +3 -1
  18. package/dist/interceptors.d.ts.map +1 -1
  19. package/dist/interceptors.js +3 -2
  20. package/dist/interceptors.js.map +1 -1
  21. package/dist/manifest/static-manifest.js +1 -1
  22. package/dist/manifest/static-manifest.js.map +1 -1
  23. package/dist/manifest/store.js +1 -1
  24. package/dist/manifest.json +1 -1
  25. package/dist/object.d.ts +1 -5
  26. package/dist/object.d.ts.map +1 -1
  27. package/dist/object.js +28 -37
  28. package/dist/object.js.map +1 -1
  29. package/dist/registry/class-registration.d.ts +2 -1
  30. package/dist/registry/class-registration.d.ts.map +1 -1
  31. package/dist/registry/class-registration.js +47 -16
  32. package/dist/registry/class-registration.js.map +1 -1
  33. package/dist/registry/name-resolver.d.ts.map +1 -1
  34. package/dist/registry/name-resolver.js +3 -3
  35. package/dist/registry/name-resolver.js.map +1 -1
  36. package/dist/registry/relationship-graph.d.ts +2 -0
  37. package/dist/registry/relationship-graph.d.ts.map +1 -1
  38. package/dist/registry/relationship-graph.js +60 -5
  39. package/dist/registry/relationship-graph.js.map +1 -1
  40. package/dist/registry/schema-builder.d.ts.map +1 -1
  41. package/dist/registry/schema-builder.js +4 -1
  42. package/dist/registry/schema-builder.js.map +1 -1
  43. package/dist/registry/shared-state.d.ts +18 -0
  44. package/dist/registry/shared-state.d.ts.map +1 -1
  45. package/dist/registry/shared-state.js +25 -1
  46. package/dist/registry/shared-state.js.map +1 -1
  47. package/dist/registry/types.d.ts +8 -0
  48. package/dist/registry/types.d.ts.map +1 -1
  49. package/dist/registry.d.ts +32 -5
  50. package/dist/registry.d.ts.map +1 -1
  51. package/dist/registry.js +120 -12
  52. package/dist/registry.js.map +1 -1
  53. package/dist/relationship-loader.d.ts +6 -0
  54. package/dist/relationship-loader.d.ts.map +1 -0
  55. package/dist/relationship-loader.js +35 -0
  56. package/dist/relationship-loader.js.map +1 -0
  57. package/dist/scanner/manifest-generator.d.ts.map +1 -1
  58. package/dist/scanner/manifest-generator.js +6 -3
  59. package/dist/scanner/manifest-generator.js.map +1 -1
  60. package/dist/schema/generator.d.ts +2 -0
  61. package/dist/schema/generator.d.ts.map +1 -1
  62. package/dist/schema/generator.js +16 -9
  63. package/dist/schema/generator.js.map +1 -1
  64. package/dist/schema/utils.d.ts.map +1 -1
  65. package/dist/schema/utils.js +2 -1
  66. package/dist/schema/utils.js.map +1 -1
  67. package/dist/smrt-knowledge.json +7 -7
  68. package/dist/test-utils.d.ts.map +1 -1
  69. package/dist/utils.d.ts.map +1 -1
  70. package/dist/utils.js +2 -1
  71. package/dist/utils.js.map +1 -1
  72. 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":"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"}
1
+ {"version":3,"file":"manifest-generator.d.ts","sourceRoot":"","sources":["../../src/scanner/manifest-generator.ts"],"names":[],"mappings":"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"}
@@ -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 targetObj = Object.values(manifest.objects).find((candidate) => candidate.className === relatedTarget || candidate.qualifiedName === relatedTarget || candidate.name === relatedTarget || candidate.decoratorConfig?.tableName === relatedTarget || candidate.schema?.tableName === relatedTarget);
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;