@happyvertical/smrt-core 0.47.2 → 0.49.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.
Files changed (110) hide show
  1. package/agents/generators.md +12 -0
  2. package/agents/object-runtime.md +7 -0
  3. package/agents/schema-paths.md +62 -0
  4. package/agents/system-diagnostics.md +6 -1
  5. package/dist/cascade.d.ts.map +1 -1
  6. package/dist/cascade.js +9 -6
  7. package/dist/cascade.js.map +1 -1
  8. package/dist/collection.d.ts +0 -1
  9. package/dist/collection.d.ts.map +1 -1
  10. package/dist/collection.js +35 -45
  11. package/dist/collection.js.map +1 -1
  12. package/dist/decorators/compatibility.d.ts +1 -1
  13. package/dist/decorators/compatibility.d.ts.map +1 -1
  14. package/dist/decorators/compatibility.js +2 -2
  15. package/dist/decorators/compatibility.js.map +1 -1
  16. package/dist/decorators/index.d.ts.map +1 -1
  17. package/dist/decorators/index.js +33 -24
  18. package/dist/decorators/index.js.map +1 -1
  19. package/dist/interceptors.d.ts +3 -1
  20. package/dist/interceptors.d.ts.map +1 -1
  21. package/dist/interceptors.js +3 -2
  22. package/dist/interceptors.js.map +1 -1
  23. package/dist/manifest/static-manifest.js +1 -1
  24. package/dist/manifest/static-manifest.js.map +1 -1
  25. package/dist/manifest/store.js +1 -1
  26. package/dist/manifest.json +1 -1
  27. package/dist/migrations/differ.d.ts +10 -4
  28. package/dist/migrations/differ.d.ts.map +1 -1
  29. package/dist/migrations/differ.js +173 -5
  30. package/dist/migrations/differ.js.map +1 -1
  31. package/dist/object.d.ts +1 -5
  32. package/dist/object.d.ts.map +1 -1
  33. package/dist/object.js +28 -37
  34. package/dist/object.js.map +1 -1
  35. package/dist/registry/class-registration.d.ts +2 -1
  36. package/dist/registry/class-registration.d.ts.map +1 -1
  37. package/dist/registry/class-registration.js +47 -16
  38. package/dist/registry/class-registration.js.map +1 -1
  39. package/dist/registry/name-resolver.d.ts.map +1 -1
  40. package/dist/registry/name-resolver.js +3 -3
  41. package/dist/registry/name-resolver.js.map +1 -1
  42. package/dist/registry/relationship-graph.d.ts +2 -0
  43. package/dist/registry/relationship-graph.d.ts.map +1 -1
  44. package/dist/registry/relationship-graph.js +60 -5
  45. package/dist/registry/relationship-graph.js.map +1 -1
  46. package/dist/registry/schema-builder.d.ts.map +1 -1
  47. package/dist/registry/schema-builder.js +4 -1
  48. package/dist/registry/schema-builder.js.map +1 -1
  49. package/dist/registry/shared-state.d.ts +18 -0
  50. package/dist/registry/shared-state.d.ts.map +1 -1
  51. package/dist/registry/shared-state.js +25 -1
  52. package/dist/registry/shared-state.js.map +1 -1
  53. package/dist/registry/types.d.ts +8 -0
  54. package/dist/registry/types.d.ts.map +1 -1
  55. package/dist/registry.d.ts +32 -5
  56. package/dist/registry.d.ts.map +1 -1
  57. package/dist/registry.js +120 -12
  58. package/dist/registry.js.map +1 -1
  59. package/dist/relationship-loader.d.ts +6 -0
  60. package/dist/relationship-loader.d.ts.map +1 -0
  61. package/dist/relationship-loader.js +35 -0
  62. package/dist/relationship-loader.js.map +1 -0
  63. package/dist/scanner/manifest-generator.d.ts.map +1 -1
  64. package/dist/scanner/manifest-generator.js +6 -3
  65. package/dist/scanner/manifest-generator.js.map +1 -1
  66. package/dist/schema/foreign-key-ddl.d.ts +8 -0
  67. package/dist/schema/foreign-key-ddl.d.ts.map +1 -1
  68. package/dist/schema/foreign-key-ddl.js +12 -1
  69. package/dist/schema/foreign-key-ddl.js.map +1 -1
  70. package/dist/schema/foreign-key-orphan-report.d.ts.map +1 -1
  71. package/dist/schema/foreign-key-orphan-report.js +18 -1
  72. package/dist/schema/foreign-key-orphan-report.js.map +1 -1
  73. package/dist/schema/generator.d.ts +2 -0
  74. package/dist/schema/generator.d.ts.map +1 -1
  75. package/dist/schema/generator.js +16 -9
  76. package/dist/schema/generator.js.map +1 -1
  77. package/dist/schema/index.d.ts +1 -1
  78. package/dist/schema/index.d.ts.map +1 -1
  79. package/dist/schema/index.js +2 -2
  80. package/dist/schema/live-parity.d.ts.map +1 -1
  81. package/dist/schema/live-parity.js +74 -0
  82. package/dist/schema/live-parity.js.map +1 -1
  83. package/dist/schema/text-cast-probe.d.ts +66 -0
  84. package/dist/schema/text-cast-probe.d.ts.map +1 -0
  85. package/dist/schema/text-cast-probe.js +142 -0
  86. package/dist/schema/text-cast-probe.js.map +1 -0
  87. package/dist/schema/types.d.ts +28 -0
  88. package/dist/schema/types.d.ts.map +1 -1
  89. package/dist/schema/utils.d.ts.map +1 -1
  90. package/dist/schema/utils.js +2 -1
  91. package/dist/schema/utils.js.map +1 -1
  92. package/dist/schema.js +2 -2
  93. package/dist/smrt-knowledge.json +11 -11
  94. package/dist/system/diagnostics.d.ts +22 -0
  95. package/dist/system/diagnostics.d.ts.map +1 -1
  96. package/dist/system/diagnostics.js +88 -31
  97. package/dist/system/diagnostics.js.map +1 -1
  98. package/dist/test-utils.d.ts.map +1 -1
  99. package/dist/utils.d.ts.map +1 -1
  100. package/dist/utils.js +2 -1
  101. package/dist/utils.js.map +1 -1
  102. package/dist/vite-plugin/dev-plane-route.d.ts +5 -0
  103. package/dist/vite-plugin/dev-plane-route.d.ts.map +1 -0
  104. package/dist/vite-plugin/dev-plane-route.js +91 -0
  105. package/dist/vite-plugin/dev-plane-route.js.map +1 -0
  106. package/dist/vite-plugin/sveltekit-generator.d.ts +8 -0
  107. package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -1
  108. package/dist/vite-plugin/sveltekit-generator.js +2 -0
  109. package/dist/vite-plugin/sveltekit-generator.js.map +1 -1
  110. package/package.json +4 -4
@@ -9,6 +9,7 @@ import { SmrtClass } from "./class.js";
9
9
  import { EmbeddingProvider } from "./embeddings/provider.js";
10
10
  import { EmbeddingStorage } from "./embeddings/storage.js";
11
11
  import { MAX_LIST_LIMIT, QueryBoundsError, QueryOrderByError } from "./query-bounds.js";
12
+ import { resolveOneToManyInverse, resolveRelationshipTargetName } from "./relationship-loader.js";
12
13
  import { verifyPersistenceTable } from "./schema/table-verifier.js";
13
14
  import { fieldsFromClass, formatDataJs, toCamelCase } from "./utils.js";
14
15
  import { ObjectRegistry } from "./registry.js";
@@ -552,7 +553,7 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
552
553
  const itemClassName = this.getResolvedItemClassName();
553
554
  const itemQualifiedName = this.getResolvedItemQualifiedName();
554
555
  const schema = ObjectRegistry.getSchema(itemQualifiedName) ?? ObjectRegistry.getSchema(itemClassName);
555
- const schemaColumnNames = schema?.columns ? new Set(Object.keys(schema.columns)) : void 0;
556
+ const schemaColumnNames = schema?.columns && Object.keys(schema.columns).length > 0 ? new Set(Object.keys(schema.columns)) : void 0;
556
557
  const registeredFields = ObjectRegistry.getFields(itemQualifiedName);
557
558
  const explicitFields = registeredFields.size > 0 ? registeredFields : ObjectRegistry.getFields(itemClassName);
558
559
  const explicitFieldNames = new Set(explicitFields.keys());
@@ -626,36 +627,28 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
626
627
  return [`CASE WHEN ${column} IS NULL THEN 1 ELSE 0 END ASC`, `${column} ${term.direction}`];
627
628
  }).join(", ");
628
629
  }
629
- resolveOneToManyInverseForeignKey(relationship) {
630
- const inverseCandidates = ObjectRegistry.getInverseRelationshipsForSelf(this._itemClass.name).filter((candidate) => candidate.sourceClass === relationship.targetClass && candidate.type === "foreignKey");
631
- const explicitForeignKey = relationship.options?.foreignKey;
632
- const matchedForeignKey = explicitForeignKey ? inverseCandidates.find((candidate) => candidate.fieldName === explicitForeignKey) : void 0;
633
- if (explicitForeignKey && !matchedForeignKey) throw new Error(`oneToMany ${relationship.fieldName} specifies foreignKey '${explicitForeignKey}', but ${relationship.targetClass} has no matching inverse foreignKey. Candidates: ${inverseCandidates.map((candidate) => candidate.fieldName).join(", ") || "(none)"}`);
634
- const inverseForeignKey = matchedForeignKey ?? inverseCandidates.find((candidate) => candidate.targetClass === this._itemClass.name) ?? inverseCandidates[0];
635
- if (!inverseForeignKey) throw new Error(`Could not find inverse foreignKey on ${relationship.targetClass} for oneToMany relationship ${relationship.fieldName}`);
636
- return inverseForeignKey;
637
- }
638
630
  async listWithLatestRelated(options) {
639
631
  await this.ensureStorageReady();
640
632
  const itemClassName = this.getResolvedItemClassName();
641
633
  const itemQualifiedName = this.getResolvedItemQualifiedName();
642
- const interceptorContext = createInterceptorContext(itemClassName, "list", this.constructor.name);
634
+ const interceptorContext = createInterceptorContext(itemClassName, "list", this.constructor.name, void 0, itemQualifiedName);
643
635
  const interceptedOptions = await GlobalInterceptors.executeBeforeList(itemClassName, options, interceptorContext) ?? options;
644
636
  let { where, offset, limit, orderBy, stiScope } = interceptedOptions;
645
637
  const latestOptions = interceptedOptions.latestRelated ?? options.latestRelated;
646
638
  const isSTI = ObjectRegistry.getTableStrategy(itemQualifiedName) === "sti";
647
639
  where = this.applyStiReadScope(where, stiScope);
648
640
  where = resolveMetaTypeInWhere(where);
649
- const relationship = ObjectRegistry.getRelationships(this._itemClass.name).find((candidate) => candidate.fieldName === latestOptions.relation && candidate.type === "oneToMany");
641
+ const relationship = ObjectRegistry.getRelationships(itemQualifiedName).find((candidate) => candidate.fieldName === latestOptions.relation && candidate.type === "oneToMany");
650
642
  if (!relationship) throw new Error(`latestRelated.relation '${latestOptions.relation}' is not a declared oneToMany relationship on ${itemClassName}.`);
651
- const inverseForeignKey = this.resolveOneToManyInverseForeignKey(relationship);
652
- const relatedCollection = await ObjectRegistry.getCollection(relationship.targetClass, this.options);
643
+ const targetName = await resolveRelationshipTargetName(relationship);
644
+ const inverseForeignKey = resolveOneToManyInverse(itemQualifiedName, relationship, targetName);
645
+ const relatedCollection = await ObjectRegistry.getCollection(targetName, this.options);
653
646
  await relatedCollection.ensureStorageReady();
654
647
  const relatedFields = relatedCollection.getFieldsSync();
655
648
  const relatedItemClassName = relatedCollection.getResolvedItemClassName();
656
649
  const relatedQualifiedName = relatedCollection.getResolvedItemQualifiedName();
657
650
  const relatedIsSTI = ObjectRegistry.getTableStrategy(relatedQualifiedName) === "sti";
658
- const relatedInterceptorContext = createInterceptorContext(relatedItemClassName, "list", relatedCollection.constructor.name);
651
+ const relatedInterceptorContext = createInterceptorContext(relatedItemClassName, "list", relatedCollection.constructor.name, void 0, relatedQualifiedName);
659
652
  let relatedWhere = (await GlobalInterceptors.executeBeforeList(relatedItemClassName, { where: {} }, relatedInterceptorContext) ?? { where: {} }).where;
660
653
  if (relatedIsSTI) {
661
654
  const relatedStiBase = ObjectRegistry.getSTIBase(relatedQualifiedName);
@@ -855,7 +848,8 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
855
848
  const collectionCtor = this.constructor;
856
849
  if (this.constructor !== SmrtCollection && collectionCtor._itemClass) {
857
850
  const itemClass = collectionCtor._itemClass;
858
- const itemClassName = ObjectRegistry.getClassByConstructor(itemClass)?.name || itemClass.name;
851
+ const registeredItem = ObjectRegistry.getClassByConstructor(itemClass);
852
+ const itemClassName = registeredItem?.qualifiedName ?? registeredItem?.name ?? itemClass.name;
859
853
  ObjectRegistry.registerCollection(itemClassName, collectionCtor);
860
854
  }
861
855
  }
@@ -885,9 +879,11 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
885
879
  * ```
886
880
  */
887
881
  static async create(options = {}) {
888
- const { _className, db, defaultListLimit, persistence, ai, fs, logging, maxListLimit, metrics, pubsub, sanitization, signals } = options;
882
+ const { _className, _deferRuntimeInitialization, _reuseInitializedDb, db, defaultListLimit, persistence, ai, fs, logging, maxListLimit, metrics, pubsub, sanitization, signals } = options;
889
883
  const collectionOptions = {
890
884
  _className,
885
+ _deferRuntimeInitialization,
886
+ _reuseInitializedDb,
891
887
  db,
892
888
  persistence,
893
889
  ai,
@@ -1120,7 +1116,7 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1120
1116
  await this.ensureStorageReady();
1121
1117
  const itemClassName = this.getResolvedItemClassName();
1122
1118
  const itemQualifiedName = this.getResolvedItemQualifiedName();
1123
- const interceptorContext = createInterceptorContext(itemClassName, "get", this.constructor.name);
1119
+ const interceptorContext = createInterceptorContext(itemClassName, "get", this.constructor.name, void 0, itemQualifiedName);
1124
1120
  const interceptedFilter = await GlobalInterceptors.executeBeforeGet(itemClassName, filter, interceptorContext);
1125
1121
  let where = typeof interceptedFilter === "string" ? resolveGetStringFilter(interceptedFilter) : interceptedFilter;
1126
1122
  const isSTI = ObjectRegistry.getTableStrategy(itemQualifiedName) === "sti";
@@ -1143,7 +1139,7 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1143
1139
  await this.ensureStorageReady();
1144
1140
  const itemClassName = this.getResolvedItemClassName();
1145
1141
  const itemQualifiedName = this.getResolvedItemQualifiedName();
1146
- const interceptorContext = createInterceptorContext(itemClassName, "list", this.constructor.name);
1142
+ const interceptorContext = createInterceptorContext(itemClassName, "list", this.constructor.name, void 0, itemQualifiedName);
1147
1143
  const interceptedOptions = await GlobalInterceptors.executeBeforeList(itemClassName, options, interceptorContext) ?? options ?? {};
1148
1144
  let { where, offset, limit, orderBy, select, stiScope } = interceptedOptions;
1149
1145
  const isSTI = ObjectRegistry.getTableStrategy(itemQualifiedName) === "sti";
@@ -1187,15 +1183,13 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1187
1183
  async eagerLoadRelationships(instances, relationships) {
1188
1184
  if (instances.length === 0) return;
1189
1185
  for (const fieldName of relationships) {
1190
- const relationship = ObjectRegistry.getRelationships(this._itemClass.name).find((r) => r.fieldName === fieldName);
1186
+ const relationship = ObjectRegistry.getRelationships(this.getResolvedItemQualifiedName()).find((r) => r.fieldName === fieldName);
1191
1187
  if (!relationship) {
1192
1188
  logger.warn(`Relationship ${fieldName} not found on ${this._itemClass.name}, skipping eager load`);
1193
1189
  continue;
1194
1190
  }
1195
- if (relationship.type === "foreignKey" || relationship.type === "crossPackageRef") {
1196
- if (relationship.type === "crossPackageRef") await ObjectRegistry.ensureManifestLoaded(relationship.targetClass);
1197
- await this.batchLoadForeignKeys(instances, fieldName, relationship);
1198
- } else if (relationship.type === "oneToMany") await this.batchLoadOneToMany(instances, fieldName, relationship);
1191
+ if (relationship.type === "foreignKey" || relationship.type === "crossPackageRef") await this.batchLoadForeignKeys(instances, fieldName, relationship);
1192
+ else if (relationship.type === "oneToMany") await this.batchLoadOneToMany(instances, fieldName, relationship);
1199
1193
  else if (relationship.type === "manyToMany") await this.batchLoadManyToMany(instances, fieldName, relationship);
1200
1194
  }
1201
1195
  }
@@ -1214,9 +1208,10 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1214
1208
  if (value && typeof value === "string") foreignKeyValues.add(value);
1215
1209
  }
1216
1210
  if (foreignKeyValues.size === 0) return;
1211
+ const targetName = await resolveRelationshipTargetName(relationship);
1217
1212
  let targetCollection;
1218
1213
  try {
1219
- targetCollection = await ObjectRegistry.getCollection(relationship.targetClass, this.options);
1214
+ targetCollection = await ObjectRegistry.getCollection(targetName, this.options);
1220
1215
  } catch (error) {
1221
1216
  logger.warn(`Could not get collection for ${relationship.targetClass}`, { error });
1222
1217
  return;
@@ -1246,20 +1241,13 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1246
1241
  * @private
1247
1242
  */
1248
1243
  async batchLoadOneToMany(instances, fieldName, relationship) {
1249
- const inverseCandidates = ObjectRegistry.getInverseRelationshipsForSelf(this._itemClass.name).filter((r) => r.sourceClass === relationship.targetClass && r.type === "foreignKey");
1250
- const explicitForeignKey = relationship.options?.foreignKey;
1251
- const matchedForeignKey = explicitForeignKey ? inverseCandidates.find((r) => r.fieldName === explicitForeignKey) : void 0;
1252
- if (explicitForeignKey && !matchedForeignKey) throw new Error(`oneToMany ${fieldName} specifies foreignKey '${explicitForeignKey}', but ${relationship.targetClass} has no matching inverse foreignKey. Candidates: ${inverseCandidates.map((r) => r.fieldName).join(", ") || "(none)"}`);
1253
- const inverseForeignKey = matchedForeignKey ?? inverseCandidates.find((r) => r.targetClass === this._itemClass.name) ?? inverseCandidates[0];
1254
- if (!inverseForeignKey) {
1255
- logger.warn(`Could not find inverse foreignKey for oneToMany ${fieldName}`);
1256
- return;
1257
- }
1244
+ const targetName = await resolveRelationshipTargetName(relationship);
1245
+ const inverseForeignKey = resolveOneToManyInverse(this.getResolvedItemQualifiedName(), relationship, targetName);
1258
1246
  const instanceIds = instances.map((i) => i.id).filter((id) => !!id);
1259
1247
  if (instanceIds.length === 0) return;
1260
1248
  let targetCollection;
1261
1249
  try {
1262
- targetCollection = await ObjectRegistry.getCollection(relationship.targetClass, this.options);
1250
+ targetCollection = await ObjectRegistry.getCollection(targetName, this.options);
1263
1251
  } catch (error) {
1264
1252
  logger.warn(`Could not get collection for ${relationship.targetClass}`, { error });
1265
1253
  return;
@@ -1295,6 +1283,7 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1295
1283
  async batchLoadManyToMany(instances, fieldName, relationship) {
1296
1284
  const instanceIds = instances.map((i) => i.id).filter((id) => !!id);
1297
1285
  if (instanceIds.length === 0) return;
1286
+ await resolveRelationshipTargetName(relationship);
1298
1287
  let through;
1299
1288
  let sourceColumn;
1300
1289
  let targetColumn;
@@ -1311,9 +1300,10 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1311
1300
  }
1312
1301
  for (const instance of instances) instance._setLoadedRelationship(fieldName, []);
1313
1302
  const junctionRowsAll = [];
1303
+ const junctionProjection = [sourceColumn, targetColumn].map((column) => this.getDatabaseEngine() === "duckdb" ? `CAST("${column}" AS VARCHAR) AS "${column}"` : `"${column}"`).join(", ");
1314
1304
  for (const idChunk of chunkArray(instanceIds, 900)) {
1315
1305
  const placeholders = idChunk.map(() => "?").join(", ");
1316
- const result = await this.db.query(`SELECT "${sourceColumn}", "${targetColumn}" FROM "${through}" WHERE "${sourceColumn}" IN (${placeholders})`, idChunk);
1306
+ const result = await this.db.query(`SELECT ${junctionProjection} FROM "${through}" WHERE "${sourceColumn}" IN (${placeholders})`, idChunk);
1317
1307
  junctionRowsAll.push(...result.rows);
1318
1308
  }
1319
1309
  if (junctionRowsAll.length === 0) return;
@@ -1607,8 +1597,7 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1607
1597
  */
1608
1598
  getFieldsSync() {
1609
1599
  if (this._cachedFields) return this._cachedFields;
1610
- const className = this.getResolvedItemClassName();
1611
- const fields = ObjectRegistry.getFields(className);
1600
+ const fields = ObjectRegistry.getFields(this.getResolvedItemQualifiedName());
1612
1601
  return Object.fromEntries(fields);
1613
1602
  }
1614
1603
  /**
@@ -1637,15 +1626,15 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1637
1626
  const baseSchema = ObjectRegistry.getSchema(stiBase);
1638
1627
  if (baseSchema?.tableName) this._tableName = baseSchema.tableName;
1639
1628
  else {
1640
- const ownSchema = ObjectRegistry.getSchema(className);
1629
+ const ownSchema = ObjectRegistry.getSchema(qualifiedName);
1641
1630
  this._tableName = ownSchema?.tableName || fallbackTableName;
1642
1631
  }
1643
1632
  } else {
1644
- const ownSchema = ObjectRegistry.getSchema(className);
1633
+ const ownSchema = ObjectRegistry.getSchema(qualifiedName);
1645
1634
  this._tableName = ownSchema?.tableName || fallbackTableName;
1646
1635
  }
1647
1636
  } else {
1648
- const ownSchema = ObjectRegistry.getSchema(className);
1637
+ const ownSchema = ObjectRegistry.getSchema(qualifiedName);
1649
1638
  this._tableName = ownSchema?.tableName || fallbackTableName;
1650
1639
  }
1651
1640
  }
@@ -1710,7 +1699,8 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1710
1699
  async count(options = {}) {
1711
1700
  await this.ensureStorageReady();
1712
1701
  const itemClassName = this.getResolvedItemClassName();
1713
- const interceptorContext = createInterceptorContext(itemClassName, "list", this.constructor.name);
1702
+ const itemQualifiedName = this.getResolvedItemQualifiedName();
1703
+ const interceptorContext = createInterceptorContext(itemClassName, "list", this.constructor.name, void 0, itemQualifiedName);
1714
1704
  let { where, stiScope } = await GlobalInterceptors.executeBeforeList(itemClassName, options, interceptorContext) ?? options ?? {};
1715
1705
  where = this.applyStiReadScope(where, stiScope);
1716
1706
  where = resolveMetaTypeInWhere(where);
@@ -1756,7 +1746,7 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1756
1746
  if (options.fields.length > 20) throw new Error(`Invalid facets option: at most 20 fields are allowed.`);
1757
1747
  const itemClassName = this.getResolvedItemClassName();
1758
1748
  const itemQualifiedName = this.getResolvedItemQualifiedName();
1759
- const interceptorContext = createInterceptorContext(itemClassName, "list", this.constructor.name);
1749
+ const interceptorContext = createInterceptorContext(itemClassName, "list", this.constructor.name, void 0, itemQualifiedName);
1760
1750
  const interceptedOptions = await GlobalInterceptors.executeBeforeList(itemClassName, options, interceptorContext) ?? options ?? {};
1761
1751
  let { where, stiScope } = interceptedOptions;
1762
1752
  const isSTI = ObjectRegistry.getTableStrategy(itemQualifiedName) === "sti";
@@ -1874,7 +1864,7 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
1874
1864
  */
1875
1865
  async query(sql, params = [], options = {}) {
1876
1866
  await this.ensureStorageReady();
1877
- const interceptorContext = createInterceptorContext(this._itemClass.name, "query", this.constructor.name);
1867
+ const interceptorContext = createInterceptorContext(this._itemClass.name, "query", this.constructor.name, void 0, this.getResolvedItemQualifiedName());
1878
1868
  const interceptedQuery = await GlobalInterceptors.executeBeforeQuery(this._itemClass.name, {
1879
1869
  sql,
1880
1870
  params,
@@ -2346,7 +2336,7 @@ var SmrtCollection = class SmrtCollection extends SmrtClass {
2346
2336
  }, this.ai).getModelName();
2347
2337
  const vector = (ObjectRegistry.getProjectEmbeddingConfig()?.storage || "json") === "native" ? this.systemDb.vector : void 0;
2348
2338
  const itemClassName = this.getResolvedItemClassName();
2349
- const tenantPrefilterContext = createInterceptorContext(itemClassName, "list", this.constructor.name);
2339
+ const tenantPrefilterContext = createInterceptorContext(itemClassName, "list", this.constructor.name, void 0, this.getResolvedItemQualifiedName());
2350
2340
  const tenantPrefilter = await GlobalInterceptors.executeBeforeList(itemClassName, { where: {} }, tenantPrefilterContext);
2351
2341
  let candidateObjectIds;
2352
2342
  if (tenantPrefilter.where && Object.keys(tenantPrefilter.where).length > 0) {