@happyvertical/smrt-core 0.36.7 → 0.37.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 (82) hide show
  1. package/dist/child-accessors.d.ts +1 -1
  2. package/dist/child-accessors.d.ts.map +1 -1
  3. package/dist/child-accessors.js +1 -1
  4. package/dist/child-accessors.js.map +1 -1
  5. package/dist/class.d.ts.map +1 -1
  6. package/dist/class.js +3 -1
  7. package/dist/class.js.map +1 -1
  8. package/dist/collection-cache.d.ts.map +1 -1
  9. package/dist/collection-cache.js +5 -3
  10. package/dist/collection-cache.js.map +1 -1
  11. package/dist/collection.d.ts +39 -16
  12. package/dist/collection.d.ts.map +1 -1
  13. package/dist/collection.js +40 -19
  14. package/dist/collection.js.map +1 -1
  15. package/dist/decorators/compatibility.d.ts +1 -1
  16. package/dist/decorators/compatibility.d.ts.map +1 -1
  17. package/dist/decorators/compatibility.js.map +1 -1
  18. package/dist/decorators/index.d.ts +4 -4
  19. package/dist/decorators/index.d.ts.map +1 -1
  20. package/dist/decorators/index.js.map +1 -1
  21. package/dist/hierarchical.d.ts.map +1 -1
  22. package/dist/hierarchical.js.map +1 -1
  23. package/dist/junction.d.ts.map +1 -1
  24. package/dist/junction.js.map +1 -1
  25. package/dist/manifest/static-manifest.d.ts.map +1 -1
  26. package/dist/manifest/static-manifest.js +39 -20
  27. package/dist/manifest/static-manifest.js.map +1 -1
  28. package/dist/manifest/store.js +2 -2
  29. package/dist/manifest/store.js.map +1 -1
  30. package/dist/manifest/test-manifest-stub.d.ts.map +1 -1
  31. package/dist/manifest/test-manifest-stub.js +2301 -629
  32. package/dist/manifest/test-manifest-stub.js.map +1 -1
  33. package/dist/manifest.json +39 -20
  34. package/dist/object.d.ts +64 -17
  35. package/dist/object.d.ts.map +1 -1
  36. package/dist/object.js +76 -30
  37. package/dist/object.js.map +1 -1
  38. package/dist/registry/class-registration.d.ts +3 -3
  39. package/dist/registry/class-registration.d.ts.map +1 -1
  40. package/dist/registry/class-registration.js +39 -42
  41. package/dist/registry/class-registration.js.map +1 -1
  42. package/dist/registry/inheritance-resolver.d.ts +17 -3
  43. package/dist/registry/inheritance-resolver.d.ts.map +1 -1
  44. package/dist/registry/inheritance-resolver.js +1 -1
  45. package/dist/registry/inheritance-resolver.js.map +1 -1
  46. package/dist/registry/manifest-field-merge.d.ts +17 -3
  47. package/dist/registry/manifest-field-merge.d.ts.map +1 -1
  48. package/dist/registry/manifest-field-merge.js +8 -6
  49. package/dist/registry/manifest-field-merge.js.map +1 -1
  50. package/dist/registry/schema-builder.d.ts +1 -1
  51. package/dist/registry/schema-builder.d.ts.map +1 -1
  52. package/dist/registry/schema-builder.js.map +1 -1
  53. package/dist/registry/shared-state.d.ts +3 -3
  54. package/dist/registry/shared-state.d.ts.map +1 -1
  55. package/dist/registry/shared-state.js.map +1 -1
  56. package/dist/registry/types.d.ts +78 -19
  57. package/dist/registry/types.d.ts.map +1 -1
  58. package/dist/registry/validator.d.ts +2 -1
  59. package/dist/registry/validator.d.ts.map +1 -1
  60. package/dist/registry/validator.js +38 -39
  61. package/dist/registry/validator.js.map +1 -1
  62. package/dist/registry.d.ts +84 -57
  63. package/dist/registry.d.ts.map +1 -1
  64. package/dist/registry.js +31 -25
  65. package/dist/registry.js.map +1 -1
  66. package/dist/runtime/client.d.ts +6 -6
  67. package/dist/runtime/client.d.ts.map +1 -1
  68. package/dist/runtime/client.js.map +1 -1
  69. package/dist/runtime/mcp.d.ts +11 -4
  70. package/dist/runtime/mcp.d.ts.map +1 -1
  71. package/dist/runtime/mcp.js.map +1 -1
  72. package/dist/runtime/server.d.ts +29 -5
  73. package/dist/runtime/server.d.ts.map +1 -1
  74. package/dist/runtime/server.js +4 -4
  75. package/dist/runtime/server.js.map +1 -1
  76. package/dist/runtime/types.d.ts +12 -12
  77. package/dist/runtime/types.d.ts.map +1 -1
  78. package/dist/smrt-knowledge.json +5 -4
  79. package/dist/system-fields.d.ts +1 -1
  80. package/dist/system-fields.d.ts.map +1 -1
  81. package/dist/system-fields.js.map +1 -1
  82. package/package.json +4 -4
@@ -24,7 +24,7 @@ type SmrtInternalKeys = keyof SmrtClass | '_tableName' | '_loadedRelationships'
24
24
  * ```
25
25
  */
26
26
  export type SmrtCreateInput<T extends SmrtObject> = Partial<Omit<{
27
- [K in keyof T as T[K] extends (...args: any[]) => any ? never : K]: T[K];
27
+ [K in keyof T as T[K] extends (...args: never[]) => unknown ? never : K]: T[K];
28
28
  }, SmrtInternalKeys>> & {
29
29
  /** STI discriminator for polymorphic creation */
30
30
  _meta_type?: string;
@@ -44,6 +44,23 @@ export type SmrtCreateInput<T extends SmrtObject> = Partial<Omit<{
44
44
  * `convertWhereKeys()` handles field and operator checking.
45
45
  */
46
46
  export type SmrtWhereClause<T extends SmrtObject> = Record<string, unknown>;
47
+ /**
48
+ * Minimal runtime shape of a field definition as consumed by the collection's
49
+ * query/hydration helpers (`getFieldsSync()`, `convertWhereKeys()`,
50
+ * `formatDataJs()`). These come from `fieldsFromClass()` /
51
+ * `ObjectRegistry.getFields()` and only a few members are read here: `type`
52
+ * (for `formatDataJs` value coercion) and the `sensitive` markers (for the
53
+ * `@field({ sensitive: true })` WHERE guard, #1540). The index signature keeps
54
+ * the bag open for the other registry-attached members without forcing `any`.
55
+ */
56
+ interface CollectionFieldDefinition {
57
+ type?: string;
58
+ sensitive?: boolean;
59
+ _meta?: {
60
+ sensitive?: boolean;
61
+ } & Record<string, unknown>;
62
+ [key: string]: unknown;
63
+ }
47
64
  /**
48
65
  * Configuration options for SmrtCollection
49
66
  */
@@ -124,7 +141,13 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
124
141
  */
125
142
  getItemClass(): SmrtCollectionItemClass<ModelType>;
126
143
  /**
127
- * Static reference to the item class constructor
144
+ * Static reference to the item class constructor.
145
+ *
146
+ * S4 #1579: kept as `any`. Subclasses assign a concrete model constructor
147
+ * (`static readonly _itemClass = Product`) here; the base declares the slot
148
+ * generically and `SmrtCollection` is invariant in `ModelType`, so a narrower
149
+ * `SmrtObjectConstructor` / `SmrtCollectionItemClass<SmrtObject>` type rejects
150
+ * the heterogeneous concrete assignments. Mirrors the registry escape hatch.
128
151
  */
129
152
  static readonly _itemClass: any;
130
153
  /**
@@ -201,7 +224,7 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
201
224
  * ```
202
225
  */
203
226
  findOne(options: {
204
- where: Record<string, any>;
227
+ where: SmrtWhereClause<ModelType>;
205
228
  }): Promise<ModelType | null>;
206
229
  /**
207
230
  * Find a record by ID (convenience method - delegates to get())
@@ -309,7 +332,7 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
309
332
  * @see {@link list} for multiple results
310
333
  * @see {@link findById} / {@link findOne} for convenience aliases
311
334
  */
312
- get(filter: string | Record<string, any>, options?: {
335
+ get(filter: string | SmrtWhereClause<ModelType>, options?: {
313
336
  cache?: CollectionCacheConfig | false;
314
337
  }): Promise<ModelType | null>;
315
338
  /**
@@ -501,7 +524,7 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
501
524
  * @see {@link create} for always-insert semantics
502
525
  * @see {@link get} for read-only lookup
503
526
  */
504
- getOrUpsert(data: any, defaults?: any): Promise<ModelType>;
527
+ getOrUpsert(data: Record<string, unknown>, defaults?: Record<string, unknown>): Promise<ModelType>;
505
528
  /**
506
529
  * Gets differences between an existing object and new data
507
530
  *
@@ -509,14 +532,14 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
509
532
  * @param data - New data
510
533
  * @returns Object containing only the changed fields
511
534
  */
512
- getDiff(existing: Record<string, any>, data: Record<string, any>): Promise<Record<string, any> | null>;
535
+ getDiff(existing: SmrtObject | Record<string, unknown>, data: Record<string, unknown>): Promise<Record<string, unknown> | null>;
513
536
  private getDiffSync;
514
537
  /**
515
538
  * Gets field definitions for the collection's item class
516
539
  *
517
540
  * @returns Object containing field definitions
518
541
  */
519
- getFields(): Promise<Record<string, unknown>>;
542
+ getFields(): Promise<Record<string, CollectionFieldDefinition>>;
520
543
  /**
521
544
  * Normalize user input into the model's logical field names before diffing or creation.
522
545
  *
@@ -545,7 +568,7 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
545
568
  * @returns Map containing field definitions
546
569
  * @private
547
570
  */
548
- getFieldsSync(): Record<string, any>;
571
+ getFieldsSync(): Record<string, CollectionFieldDefinition>;
549
572
  /**
550
573
  * Generates database schema for the collection's item class
551
574
  *
@@ -607,7 +630,7 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
607
630
  * @see {@link list} for retrieving the actual records
608
631
  */
609
632
  count(options?: {
610
- where?: Record<string, any>;
633
+ where?: SmrtWhereClause<ModelType>;
611
634
  }): Promise<number>;
612
635
  /**
613
636
  * Resolve this collection's STI child discriminator — the qualified item
@@ -662,7 +685,7 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
662
685
  * `, ['Electronics', 100]);
663
686
  * ```
664
687
  */
665
- query(sql: string, params?: any[], options?: {
688
+ query(sql: string, params?: unknown[], options?: {
666
689
  allowRawOnTenantScoped?: boolean;
667
690
  }): Promise<ModelType[]>;
668
691
  private hydrateResultRow;
@@ -698,8 +721,8 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
698
721
  id?: string;
699
722
  scope: string;
700
723
  key: string;
701
- value: any;
702
- metadata?: any;
724
+ value: unknown;
725
+ metadata?: unknown;
703
726
  confidence?: number;
704
727
  version?: number;
705
728
  expiresAt?: Date;
@@ -726,7 +749,7 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
726
749
  key: string;
727
750
  includeAncestors?: boolean;
728
751
  minConfidence?: number;
729
- }): Promise<any | null>;
752
+ }): Promise<unknown>;
730
753
  /**
731
754
  * Recall all collection-level context in a scope
732
755
  *
@@ -747,7 +770,7 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
747
770
  scope?: string;
748
771
  includeDescendants?: boolean;
749
772
  minConfidence?: number;
750
- }): Promise<Map<string, any>>;
773
+ }): Promise<Map<string, unknown>>;
751
774
  /**
752
775
  * Forget collection-level context
753
776
  *
@@ -818,7 +841,7 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
818
841
  field?: string;
819
842
  limit?: number;
820
843
  minSimilarity?: number;
821
- where?: Record<string, any>;
844
+ where?: SmrtWhereClause<ModelType>;
822
845
  }): Promise<Array<ModelType & {
823
846
  _similarity: number;
824
847
  }>>;
@@ -876,7 +899,7 @@ export declare class SmrtCollection<ModelType extends SmrtObject> extends SmrtCl
876
899
  field?: string;
877
900
  limit?: number;
878
901
  minSimilarity?: number;
879
- where?: Record<string, any>;
902
+ where?: SmrtWhereClause<ModelType>;
880
903
  }): Promise<Array<ModelType & {
881
904
  _similarity: number;
882
905
  }>>;
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,9 @@ class SmrtCollection extends SmrtClass {
36
36
  */
37
37
  _cachedFields = null;
38
38
  getRegisteredItemClass() {
39
- return ObjectRegistry.getClassByConstructor(this._itemClass) || ObjectRegistry.getClass(this._itemClass.name);
39
+ return ObjectRegistry.getClassByConstructor(
40
+ this._itemClass
41
+ ) || ObjectRegistry.getClass(this._itemClass.name);
40
42
  }
41
43
  getResolvedItemClassName() {
42
44
  return this.getRegisteredItemClass()?.name || this._itemClass.name;
@@ -81,7 +83,8 @@ class SmrtCollection extends SmrtClass {
81
83
  const sensitiveFieldNames = /* @__PURE__ */ new Set();
82
84
  const collectSensitive = (fieldMap) => {
83
85
  const entries = fieldMap instanceof Map ? fieldMap.entries() : Object.entries(fieldMap);
84
- for (const [fieldName, def] of entries) {
86
+ for (const [fieldName, rawDef] of entries) {
87
+ const def = rawDef;
85
88
  if (def && (def.sensitive === true || def._meta?.sensitive === true)) {
86
89
  sensitiveFieldNames.add(toSnakeCase(fieldName));
87
90
  sensitiveFieldNames.add(fieldName);
@@ -215,8 +218,15 @@ class SmrtCollection extends SmrtClass {
215
218
  return this._itemClass;
216
219
  }
217
220
  /**
218
- * Static reference to the item class constructor
221
+ * Static reference to the item class constructor.
222
+ *
223
+ * S4 #1579: kept as `any`. Subclasses assign a concrete model constructor
224
+ * (`static readonly _itemClass = Product`) here; the base declares the slot
225
+ * generically and `SmrtCollection` is invariant in `ModelType`, so a narrower
226
+ * `SmrtObjectConstructor` / `SmrtCollectionItemClass<SmrtObject>` type rejects
227
+ * the heterogeneous concrete assignments. Mirrors the registry escape hatch.
219
228
  */
229
+ // biome-ignore lint/suspicious/noExplicitAny: subclasses assign a concrete `static _itemClass = Product`; `SmrtCollection` is invariant in `ModelType`, so a narrower constructor type rejects the heterogeneous assignments. S4 #1579.
220
230
  static _itemClass;
221
231
  /**
222
232
  * Validates that the collection is properly configured
@@ -259,10 +269,11 @@ class SmrtCollection extends SmrtClass {
259
269
  */
260
270
  constructor(options = {}) {
261
271
  super(options);
262
- if (this.constructor !== SmrtCollection && this.constructor._itemClass) {
263
- const itemClass = this.constructor._itemClass;
272
+ const collectionCtor = this.constructor;
273
+ if (this.constructor !== SmrtCollection && collectionCtor._itemClass) {
274
+ const itemClass = collectionCtor._itemClass;
264
275
  const itemClassName = ObjectRegistry.getClassByConstructor(itemClass)?.name || itemClass.name;
265
- ObjectRegistry.registerCollection(itemClassName, this.constructor);
276
+ ObjectRegistry.registerCollection(itemClassName, collectionCtor);
266
277
  }
267
278
  }
268
279
  /**
@@ -290,6 +301,12 @@ class SmrtCollection extends SmrtClass {
290
301
  * });
291
302
  * ```
292
303
  */
304
+ // S4 #1579: `SmrtCollection<any>` bound is irreducible. `SmrtCollection` is
305
+ // invariant in `ModelType` (it has `create(options: SmrtCreateInput<ModelType>)`),
306
+ // so a concrete `Products extends SmrtCollection<Product>` does not satisfy
307
+ // `T extends SmrtCollection<SmrtObject>`. The `any` bound is the only constraint
308
+ // every subclass collection satisfies.
309
+ // biome-ignore lint/suspicious/noExplicitAny: `SmrtCollection` is invariant in `ModelType`, so concrete `Products extends SmrtCollection<Product>` fails `T extends SmrtCollection<SmrtObject>`; the `any` bound is the only one every subclass satisfies. S4 #1579.
293
310
  static async create(options = {}) {
294
311
  const {
295
312
  _className,
@@ -317,8 +334,9 @@ class SmrtCollection extends SmrtClass {
317
334
  sanitization,
318
335
  signals
319
336
  };
320
- if (this._isJunctionBase === true) {
321
- const itemCtor = this._itemClass;
337
+ const staticSelf = this;
338
+ if (staticSelf._isJunctionBase === true) {
339
+ const itemCtor = staticSelf._itemClass;
322
340
  const itemRegistered = itemCtor && ObjectRegistry.getClassByConstructor(itemCtor);
323
341
  if (!itemRegistered) {
324
342
  throw new Error(
@@ -764,14 +782,14 @@ class SmrtCollection extends SmrtClass {
764
782
  }
765
783
  const relatedMap = /* @__PURE__ */ new Map();
766
784
  for (const obj of relatedObjects) {
767
- relatedMap.set(obj.id, obj);
785
+ if (obj.id) relatedMap.set(obj.id, obj);
768
786
  }
769
787
  for (const instance of instances) {
770
788
  const foreignKeyValue = instance[fieldName];
771
789
  if (foreignKeyValue && typeof foreignKeyValue === "string") {
772
790
  const relatedObject = relatedMap.get(foreignKeyValue);
773
791
  if (relatedObject) {
774
- instance._loadedRelationships.set(fieldName, relatedObject);
792
+ instance._setLoadedRelationship(fieldName, relatedObject);
775
793
  }
776
794
  }
777
795
  }
@@ -836,7 +854,7 @@ class SmrtCollection extends SmrtClass {
836
854
  }
837
855
  for (const instance of instances) {
838
856
  const relatedArray = relatedMap.get(instance.id) || [];
839
- instance._loadedRelationships.set(fieldName, relatedArray);
857
+ instance._setLoadedRelationship(fieldName, relatedArray);
840
858
  }
841
859
  }
842
860
  /**
@@ -873,7 +891,7 @@ class SmrtCollection extends SmrtClass {
873
891
  return;
874
892
  }
875
893
  for (const instance of instances) {
876
- instance._loadedRelationships.set(fieldName, []);
894
+ instance._setLoadedRelationship(fieldName, []);
877
895
  }
878
896
  const junctionRowsAll = [];
879
897
  for (const idChunk of chunkArray(instanceIds, IN_LIST_CHUNK_SIZE)) {
@@ -925,7 +943,7 @@ class SmrtCollection extends SmrtClass {
925
943
  for (const instance of instances) {
926
944
  const targetIds = sourceToTargets.get(instance.id) ?? [];
927
945
  const objects = targetIds.map((id) => targetById.get(id)).filter((o) => o !== void 0);
928
- instance._loadedRelationships.set(fieldName, objects);
946
+ instance._setLoadedRelationship(fieldName, objects);
929
947
  }
930
948
  }
931
949
  /**
@@ -1011,7 +1029,7 @@ class SmrtCollection extends SmrtClass {
1011
1029
  const { DatabaseError } = await import("./errors.js");
1012
1030
  throw DatabaseError.missingDiscriminator(
1013
1031
  this._itemClass.name,
1014
- options?.id
1032
+ typeof options?.id === "string" ? options.id : void 0
1015
1033
  );
1016
1034
  }
1017
1035
  let registeredClass = ObjectRegistry.getClassByQualifiedName(className);
@@ -1126,9 +1144,10 @@ class SmrtCollection extends SmrtClass {
1126
1144
  "slug",
1127
1145
  "context"
1128
1146
  ]);
1147
+ const existingRecord = existing;
1129
1148
  const diff = Object.keys(data).reduce(
1130
1149
  (acc, key) => {
1131
- if (validKeys.has(key) && !this.areEquivalentValues(existing[key], data[key])) {
1150
+ if (validKeys.has(key) && !this.areEquivalentValues(existingRecord[key], data[key])) {
1132
1151
  acc[key] = data[key];
1133
1152
  }
1134
1153
  return acc;
@@ -1459,9 +1478,10 @@ class SmrtCollection extends SmrtClass {
1459
1478
  const formattedData = this.withHydratedCoreFields(
1460
1479
  formatDataJs(row, fields)
1461
1480
  );
1462
- if (isSTI && formattedData._meta_type) {
1481
+ const metaType = formattedData._meta_type;
1482
+ if (isSTI && metaType) {
1463
1483
  const polymorphicInstance = await this.createPolymorphic(
1464
- formattedData._meta_type,
1484
+ typeof metaType === "string" ? metaType : String(metaType),
1465
1485
  formattedData,
1466
1486
  { hydrateOnly: true }
1467
1487
  );
@@ -1990,9 +2010,10 @@ class SmrtCollection extends SmrtClass {
1990
2010
  const batch = await this.list({ limit: batchSize, offset });
1991
2011
  for (const obj of batch) {
1992
2012
  try {
1993
- const hasStale = await obj.hasStaleEmbeddings();
2013
+ const embeddable = obj;
2014
+ const hasStale = await embeddable.hasStaleEmbeddings();
1994
2015
  if (hasStale) {
1995
- await obj.generateEmbeddings();
2016
+ await embeddable.generateEmbeddings();
1996
2017
  generated++;
1997
2018
  } else {
1998
2019
  skipped++;