@happyvertical/smrt-core 0.40.69 → 0.41.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.
- package/AGENTS.md +29 -4
- package/README.md +20 -1
- package/agents/change-feed.md +1 -1
- package/agents/query-bounds.md +45 -0
- package/agents/schema-paths.md +786 -0
- package/dist/browser.d.ts +1 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +5 -3
- package/dist/cascade.d.ts +120 -0
- package/dist/cascade.d.ts.map +1 -0
- package/dist/cascade.js +430 -0
- package/dist/cascade.js.map +1 -0
- package/dist/change-feed.d.ts +34 -2
- package/dist/change-feed.d.ts.map +1 -1
- package/dist/change-feed.js +52 -11
- package/dist/change-feed.js.map +1 -1
- package/dist/class.d.ts +36 -3
- package/dist/class.d.ts.map +1 -1
- package/dist/class.js +87 -9
- package/dist/class.js.map +1 -1
- package/dist/collection-cache.js +0 -0
- package/dist/collection-cache.js.map +1 -1
- package/dist/collection.d.ts +130 -2
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +290 -57
- package/dist/collection.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/database.d.ts +8 -0
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +16 -8
- package/dist/database.js.map +1 -1
- package/dist/db-errors.d.ts +105 -0
- package/dist/db-errors.d.ts.map +1 -0
- package/dist/db-errors.js +382 -0
- package/dist/db-errors.js.map +1 -0
- package/dist/decorators/index.d.ts +80 -6
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +102 -12
- package/dist/decorators/index.js.map +1 -1
- package/dist/dispatch/bus.d.ts.map +1 -1
- package/dist/dispatch/bus.js +4 -3
- package/dist/dispatch/bus.js.map +1 -1
- package/dist/dispatch/collections/Dispatches.d.ts.map +1 -1
- package/dist/dispatch/collections/Dispatches.js +19 -4
- package/dist/dispatch/collections/Dispatches.js.map +1 -1
- package/dist/dispatch/types.d.ts +5 -0
- package/dist/dispatch/types.d.ts.map +1 -1
- package/dist/embedded-write-queue.d.ts +46 -0
- package/dist/embedded-write-queue.d.ts.map +1 -0
- package/dist/embedded-write-queue.js +66 -0
- package/dist/embedded-write-queue.js.map +1 -0
- package/dist/embeddings/storage.d.ts +7 -0
- package/dist/embeddings/storage.d.ts.map +1 -1
- package/dist/embeddings/storage.js +29 -12
- package/dist/embeddings/storage.js.map +1 -1
- package/dist/errors.d.ts +31 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +34 -2
- package/dist/errors.js.map +1 -1
- package/dist/generators/changes-route.d.ts.map +1 -1
- package/dist/generators/changes-route.js +6 -3
- package/dist/generators/changes-route.js.map +1 -1
- package/dist/generators/mcp-runtime-template.d.ts +8 -0
- package/dist/generators/mcp-runtime-template.d.ts.map +1 -1
- package/dist/generators/mcp-runtime-template.js +38 -4
- package/dist/generators/mcp-runtime-template.js.map +1 -1
- package/dist/generators/mcp.d.ts +16 -0
- package/dist/generators/mcp.d.ts.map +1 -1
- package/dist/generators/mcp.js +41 -3
- package/dist/generators/mcp.js.map +1 -1
- package/dist/generators/rest.d.ts +22 -0
- package/dist/generators/rest.d.ts.map +1 -1
- package/dist/generators/rest.js +34 -3
- package/dist/generators/rest.js.map +1 -1
- package/dist/hierarchical.js +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -5
- package/dist/interceptors.d.ts +21 -0
- package/dist/interceptors.d.ts.map +1 -1
- package/dist/interceptors.js +27 -1
- package/dist/interceptors.js.map +1 -1
- package/dist/manifest/generator.d.ts.map +1 -1
- package/dist/manifest/generator.js +4 -7
- package/dist/manifest/generator.js.map +1 -1
- package/dist/manifest/static-manifest.js +10 -10
- package/dist/manifest/static-manifest.js.map +1 -1
- package/dist/manifest/store.js +1 -1
- package/dist/manifest/store.js.map +1 -1
- package/dist/manifest.json +19 -19
- package/dist/migrations/differ.d.ts +211 -9
- package/dist/migrations/differ.d.ts.map +1 -1
- package/dist/migrations/differ.js +613 -50
- package/dist/migrations/differ.js.map +1 -1
- package/dist/migrations/generator.d.ts +31 -4
- package/dist/migrations/generator.d.ts.map +1 -1
- package/dist/migrations/generator.js +49 -5
- package/dist/migrations/generator.js.map +1 -1
- package/dist/migrations/index.d.ts +4 -2
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +6 -3
- package/dist/migrations/minor-units.d.ts +162 -0
- package/dist/migrations/minor-units.d.ts.map +1 -0
- package/dist/migrations/minor-units.js +381 -0
- package/dist/migrations/minor-units.js.map +1 -0
- package/dist/migrations/orchestrate.js +35 -6
- package/dist/migrations/orchestrate.js.map +1 -1
- package/dist/migrations/sqlite-rebuild.d.ts +142 -0
- package/dist/migrations/sqlite-rebuild.d.ts.map +1 -0
- package/dist/migrations/sqlite-rebuild.js +514 -0
- package/dist/migrations/sqlite-rebuild.js.map +1 -0
- package/dist/migrations/tracker.d.ts +114 -1
- package/dist/migrations/tracker.d.ts.map +1 -1
- package/dist/migrations/tracker.js +331 -16
- package/dist/migrations/tracker.js.map +1 -1
- package/dist/migrations/types.d.ts +19 -4
- package/dist/migrations/types.d.ts.map +1 -1
- package/dist/migrations.js +6 -3
- package/dist/object.d.ts +142 -10
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +196 -41
- package/dist/object.js.map +1 -1
- package/dist/postgres-timeouts.d.ts +240 -0
- package/dist/postgres-timeouts.d.ts.map +1 -0
- package/dist/postgres-timeouts.js +204 -0
- package/dist/postgres-timeouts.js.map +1 -0
- package/dist/query-bounds.d.ts +101 -0
- package/dist/query-bounds.d.ts.map +1 -0
- package/dist/query-bounds.js +177 -0
- package/dist/query-bounds.js.map +1 -0
- package/dist/registry/class-registration.d.ts.map +1 -1
- package/dist/registry/class-registration.js +3 -1
- package/dist/registry/class-registration.js.map +1 -1
- package/dist/registry/manifest-field-merge.d.ts +12 -0
- package/dist/registry/manifest-field-merge.d.ts.map +1 -1
- package/dist/registry/manifest-field-merge.js +14 -2
- package/dist/registry/manifest-field-merge.js.map +1 -1
- package/dist/registry/schema-builder.d.ts +22 -1
- package/dist/registry/schema-builder.d.ts.map +1 -1
- package/dist/registry/schema-builder.js +205 -165
- package/dist/registry/schema-builder.js.map +1 -1
- package/dist/registry/types.d.ts +35 -3
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry.d.ts +41 -46
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +61 -83
- package/dist/registry.js.map +1 -1
- package/dist/scanner/manifest-generator.d.ts +45 -0
- package/dist/scanner/manifest-generator.d.ts.map +1 -1
- package/dist/scanner/manifest-generator.js +92 -28
- package/dist/scanner/manifest-generator.js.map +1 -1
- package/dist/scanner/types.d.ts +5 -0
- package/dist/scanner/types.d.ts.map +1 -1
- package/dist/scanner/types.js.map +1 -1
- package/dist/schema/conflict-target.d.ts +104 -0
- package/dist/schema/conflict-target.d.ts.map +1 -0
- package/dist/schema/conflict-target.js +129 -0
- package/dist/schema/conflict-target.js.map +1 -0
- package/dist/schema/ddl/base-strategy.d.ts.map +1 -1
- package/dist/schema/ddl/base-strategy.js +2 -2
- package/dist/schema/ddl/base-strategy.js.map +1 -1
- package/dist/schema/ddl/duckdb-strategy.d.ts.map +1 -1
- package/dist/schema/ddl/duckdb-strategy.js +2 -1
- package/dist/schema/ddl/duckdb-strategy.js.map +1 -1
- package/dist/schema/ddl/postgres-strategy.d.ts.map +1 -1
- package/dist/schema/ddl/postgres-strategy.js +12 -1
- package/dist/schema/ddl/postgres-strategy.js.map +1 -1
- package/dist/schema/generator.d.ts +307 -6
- package/dist/schema/generator.d.ts.map +1 -1
- package/dist/schema/generator.js +510 -87
- package/dist/schema/generator.js.map +1 -1
- package/dist/schema/index-utils.d.ts +120 -0
- package/dist/schema/index-utils.d.ts.map +1 -1
- package/dist/schema/index-utils.js +242 -1
- package/dist/schema/index-utils.js.map +1 -1
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +4 -1
- package/dist/schema/live-parity.d.ts +90 -0
- package/dist/schema/live-parity.d.ts.map +1 -0
- package/dist/schema/live-parity.js +602 -0
- package/dist/schema/live-parity.js.map +1 -0
- package/dist/schema/manifest-schema.d.ts +121 -0
- package/dist/schema/manifest-schema.d.ts.map +1 -0
- package/dist/schema/manifest-schema.js +267 -0
- package/dist/schema/manifest-schema.js.map +1 -0
- package/dist/schema/schema-aggregator.d.ts +24 -10
- package/dist/schema/schema-aggregator.d.ts.map +1 -1
- package/dist/schema/schema-aggregator.js +35 -90
- package/dist/schema/schema-aggregator.js.map +1 -1
- package/dist/schema/system-table-shapes.d.ts +65 -0
- package/dist/schema/system-table-shapes.d.ts.map +1 -0
- package/dist/schema/system-table-shapes.js +187 -0
- package/dist/schema/system-table-shapes.js.map +1 -0
- package/dist/schema/types.d.ts +103 -4
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/utils.d.ts +2 -1
- package/dist/schema/utils.d.ts.map +1 -1
- package/dist/schema/utils.js +5 -3
- package/dist/schema/utils.js.map +1 -1
- package/dist/schema.js +4 -1
- package/dist/smrt-knowledge.json +20 -8
- package/dist/sync/apply.d.ts.map +1 -1
- package/dist/sync/apply.js +9 -16
- package/dist/sync/apply.js.map +1 -1
- package/dist/system/compatibility.d.ts +42 -0
- package/dist/system/compatibility.d.ts.map +1 -1
- package/dist/system/compatibility.js +182 -9
- package/dist/system/compatibility.js.map +1 -1
- package/dist/system/index.d.ts +1 -0
- package/dist/system/index.d.ts.map +1 -1
- package/dist/system/index.js +3 -2
- package/dist/system/retention.d.ts +237 -0
- package/dist/system/retention.d.ts.map +1 -0
- package/dist/system/retention.js +497 -0
- package/dist/system/retention.js.map +1 -0
- package/dist/system/schema.d.ts +100 -15
- package/dist/system/schema.d.ts.map +1 -1
- package/dist/system/schema.js +81 -45
- package/dist/system/schema.js.map +1 -1
- package/dist/system/types.d.ts +0 -2
- package/dist/system/types.d.ts.map +1 -1
- package/dist/testing/database.d.ts.map +1 -1
- package/dist/testing/database.js +1 -0
- package/dist/testing/database.js.map +1 -1
- package/dist/vite-plugin/index.d.ts.map +1 -1
- package/dist/vite-plugin/index.js +4 -9
- package/dist/vite-plugin/index.js.map +1 -1
- package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -1
- package/dist/vite-plugin/sveltekit-generator.js +71 -5
- package/dist/vite-plugin/sveltekit-generator.js.map +1 -1
- package/dist/vite-plugin/web-collections.d.ts.map +1 -1
- package/dist/vite-plugin/web-collections.js +6 -4
- package/dist/vite-plugin/web-collections.js.map +1 -1
- package/package.json +5 -5
package/dist/registry.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { ConfigurationError } from "./errors.js";
|
|
2
|
+
import { classnameToTablename, toSnakeCase } from "./utils/naming.js";
|
|
1
3
|
import { applyOneToManyChildAccessors } from "./child-accessors.js";
|
|
2
4
|
import { applyPendingDecoratorRegistrations } from "./decorators/compatibility.js";
|
|
3
|
-
import { ConfigurationError } from "./errors.js";
|
|
4
5
|
import { clearRegistryDiagnostics, flushRegistryDiagnostics, getRegistryDiagnostics, recordRegistryDiagnostic } from "./registry/diagnostics.js";
|
|
5
6
|
import { createQualifiedName, isQualifiedName, parseQualifiedName } from "./utils/qualified-names.js";
|
|
6
7
|
import { cloneManifestSchemaColumns, discoverCachedManifestSync, getNodeBuiltins, loadExternalManifestSyncWithNode } from "./manifest/store.js";
|
|
@@ -11,7 +12,7 @@ import { getClasses, getCollectionCache, getCollectionTableNames, getCollections
|
|
|
11
12
|
import { findClass, findClassesByName, getAllClasses, getCanonicalClassName, getClass, getClassByConstructor, getClassByQualifiedName, getClassInPackage, getClassNames, getClassesByPackage, getClassesByVisibility, getPublicClasses, getQualifiedClassNames, hasClass, hasClassCaseInsensitive, resolveType } from "./registry/name-resolver.js";
|
|
12
13
|
import { getAllFields, getAllMethods, getInheritanceChain, mergeFieldConfigs } from "./registry/inheritance-resolver.js";
|
|
13
14
|
import { resolveCollectionCacheConfig } from "./registry/cache-config.js";
|
|
14
|
-
import {
|
|
15
|
+
import { defaultConflictColumns, resolveTenantColumn } from "./schema/conflict-target.js";
|
|
15
16
|
import "./utils.js";
|
|
16
17
|
import { createFieldFromManifest, manifestFieldDiffers, mergeManifestField } from "./registry/manifest-field-merge.js";
|
|
17
18
|
import { compileValidators } from "./registry/validator.js";
|
|
@@ -1664,16 +1665,29 @@ var ObjectRegistry = class ObjectRegistry {
|
|
|
1664
1665
|
/**
|
|
1665
1666
|
* Get the conflict columns for UPSERT operations on a class
|
|
1666
1667
|
*
|
|
1667
|
-
*
|
|
1668
|
-
* table
|
|
1669
|
-
*
|
|
1670
|
-
*
|
|
1668
|
+
* The conflict target is a property of the TABLE, resolved from its
|
|
1669
|
+
* schema-owning class — the STI root for a single-table hierarchy, the
|
|
1670
|
+
* class itself otherwise — so every class sharing a table upserts on the
|
|
1671
|
+
* same key the schema indexes. In order:
|
|
1672
|
+
*
|
|
1673
|
+
* 1. explicit `@smrt({ conflictColumns })` on the schema owner;
|
|
1674
|
+
* 2. `@report` classes: `[tenant column, ...group/bucket columns]`, or
|
|
1675
|
+
* `['id']` when the report declares no grouping;
|
|
1676
|
+
* 3. a custom primary key (`@field({ primaryKey: true })`): the declared
|
|
1677
|
+
* primary-key column(s) — the only unique key such a table has;
|
|
1678
|
+
* 4. the strategy default — CTI `['slug', 'context']`, STI
|
|
1679
|
+
* `['slug', 'context', '_meta_type']` — led by the tenant column when
|
|
1680
|
+
* the schema owner is tenant-scoped (#2360): tenant-scoped rows are
|
|
1681
|
+
* unique per tenant, and without the tenant column a second tenant's
|
|
1682
|
+
* `save()` of the same natural key updated the first tenant's row
|
|
1683
|
+
* through `DO UPDATE SET`.
|
|
1671
1684
|
*
|
|
1672
1685
|
* STI subclasses share a table, so the discriminator participates in
|
|
1673
1686
|
* identity — two subtypes can coexist with the same (slug, context). The
|
|
1674
|
-
* matching unique
|
|
1675
|
-
*
|
|
1676
|
-
*
|
|
1687
|
+
* matching unique index must exist in the live schema; if a deployment
|
|
1688
|
+
* carries a stale shape, `smrt db:migrate` swaps it in place (issue #1165,
|
|
1689
|
+
* #2360). NULL-tenant rows dedup through the SDK's null-aware upsert
|
|
1690
|
+
* (`IS NOT DISTINCT FROM`), see `schema/conflict-target.ts`.
|
|
1677
1691
|
*
|
|
1678
1692
|
* @param className - Name of the class to get conflict columns for
|
|
1679
1693
|
* @returns Array of column names to use for conflict detection
|
|
@@ -1686,26 +1700,53 @@ var ObjectRegistry = class ObjectRegistry {
|
|
|
1686
1700
|
*
|
|
1687
1701
|
* ObjectRegistry.getConflictColumns('EventParticipant');
|
|
1688
1702
|
* // Returns: ['event_id', 'profile_id']
|
|
1703
|
+
*
|
|
1704
|
+
* @smrt({ tenantScoped: true })
|
|
1705
|
+
* class Document extends SmrtObject {}
|
|
1706
|
+
*
|
|
1707
|
+
* ObjectRegistry.getConflictColumns('Document');
|
|
1708
|
+
* // Returns: ['tenant_id', 'slug', 'context']
|
|
1689
1709
|
* ```
|
|
1690
1710
|
*/
|
|
1691
1711
|
static getConflictColumns(className) {
|
|
1692
1712
|
const registered = ObjectRegistry.findClass(className);
|
|
1693
|
-
if (!registered) return
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1713
|
+
if (!registered) return defaultConflictColumns("cti");
|
|
1714
|
+
const tableStrategy = ObjectRegistry.getTableStrategy(className);
|
|
1715
|
+
const ownerName = tableStrategy === "sti" ? ObjectRegistry.getSTIBase(className) : null;
|
|
1716
|
+
const owner = ownerName && ownerName !== className ? ObjectRegistry.findClass(ownerName) ?? registered : registered;
|
|
1717
|
+
if (owner.config?.conflictColumns) return owner.config.conflictColumns;
|
|
1718
|
+
if (owner.config?.report) {
|
|
1719
|
+
const reportConflictColumns = Array.from(owner.fields.entries()).filter(([, field]) => {
|
|
1699
1720
|
const kind = field?._meta?.__report?.kind ?? field?.__report?.kind;
|
|
1700
1721
|
return kind === "group" || kind === "bucket";
|
|
1701
1722
|
}).map(([fieldName]) => toSnakeCase(fieldName));
|
|
1723
|
+
const tenantColumn = ObjectRegistry.getTenantColumn(className);
|
|
1702
1724
|
return reportConflictColumns.length > 0 ? [...tenantColumn ? [tenantColumn] : [], ...reportConflictColumns] : ["id"];
|
|
1703
1725
|
}
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1726
|
+
const primaryKeyColumns = Array.from(owner.fields.entries()).filter(([, field]) => field?._meta?.primaryKey === true).map(([fieldName]) => toSnakeCase(fieldName));
|
|
1727
|
+
if (primaryKeyColumns.length > 0) return primaryKeyColumns;
|
|
1728
|
+
return defaultConflictColumns(tableStrategy, ObjectRegistry.getTenantColumn(className));
|
|
1729
|
+
}
|
|
1730
|
+
/**
|
|
1731
|
+
* The tenant column of the table a class writes to, or `undefined` when its
|
|
1732
|
+
* schema owner (the STI root for a single-table hierarchy, the class itself
|
|
1733
|
+
* otherwise) is not tenant-scoped (#2360).
|
|
1734
|
+
*
|
|
1735
|
+
* Resolved from the owner's normalized `tenantScoped` configuration
|
|
1736
|
+
* (`@smrt({ tenantScoped })`, or `@TenantScoped()` carried by the
|
|
1737
|
+
* manifest), never from the standalone tenancy registry: the schema
|
|
1738
|
+
* generator and `getConflictColumns()` must agree before any interceptor
|
|
1739
|
+
* is enabled.
|
|
1740
|
+
*
|
|
1741
|
+
* @param className - Name of the class (simple or qualified)
|
|
1742
|
+
* @returns The snake_case tenant column name, e.g. `tenant_id`
|
|
1743
|
+
*/
|
|
1744
|
+
static getTenantColumn(className) {
|
|
1745
|
+
const registered = ObjectRegistry.findClass(className);
|
|
1746
|
+
if (!registered) return void 0;
|
|
1747
|
+
const ownerName = ObjectRegistry.getTableStrategy(className) === "sti" ? ObjectRegistry.getSTIBase(className) : null;
|
|
1748
|
+
const owner = ownerName && ownerName !== className ? ObjectRegistry.findClass(ownerName) ?? registered : registered;
|
|
1749
|
+
return resolveTenantColumn(owner.tenantScopedConfig?.field, (fieldName) => owner.fields.has(fieldName), toSnakeCase);
|
|
1709
1750
|
}
|
|
1710
1751
|
/**
|
|
1711
1752
|
* Get the tenant scoping configuration for a class (Issue #688)
|
|
@@ -1830,69 +1871,6 @@ var ObjectRegistry = class ObjectRegistry {
|
|
|
1830
1871
|
return descendants;
|
|
1831
1872
|
}
|
|
1832
1873
|
/**
|
|
1833
|
-
* Persist registry state to system tables
|
|
1834
|
-
*
|
|
1835
|
-
* Saves all registered class metadata to the _smrt_registry system table
|
|
1836
|
-
* for runtime introspection and debugging. This enables applications to
|
|
1837
|
-
* query what SMRT objects exist and their configurations.
|
|
1838
|
-
*
|
|
1839
|
-
* @param db - Database interface to persist to
|
|
1840
|
-
* @returns Promise that resolves when persistence is complete
|
|
1841
|
-
* @example
|
|
1842
|
-
* ```typescript
|
|
1843
|
-
* // After registering all classes
|
|
1844
|
-
* await ObjectRegistry.persistToDatabase(db);
|
|
1845
|
-
*
|
|
1846
|
-
* // Later, query the system table
|
|
1847
|
-
* const rows = await db.all('SELECT * FROM _smrt_registry');
|
|
1848
|
-
* console.log('Registered classes:', rows.map(r => r.class_name));
|
|
1849
|
-
* ```
|
|
1850
|
-
*/
|
|
1851
|
-
static async persistToDatabase(db) {
|
|
1852
|
-
for (const [className, registered] of ObjectRegistry.classes.entries()) {
|
|
1853
|
-
const fieldsData = {};
|
|
1854
|
-
for (const [key, value] of registered.fields) fieldsData[key] = {
|
|
1855
|
-
type: value.type,
|
|
1856
|
-
options: value.options
|
|
1857
|
-
};
|
|
1858
|
-
await db.upsert("_smrt_registry", ["class_name"], {
|
|
1859
|
-
class_name: className,
|
|
1860
|
-
schema_version: "1.0.0",
|
|
1861
|
-
fields: JSON.stringify(fieldsData),
|
|
1862
|
-
relationships: JSON.stringify(ObjectRegistry.getRelationships(className)),
|
|
1863
|
-
config: JSON.stringify(registered.config),
|
|
1864
|
-
manifest: JSON.stringify({
|
|
1865
|
-
name: registered.name,
|
|
1866
|
-
tableName: registered.schema?.tableName,
|
|
1867
|
-
tools: registered.tools
|
|
1868
|
-
}),
|
|
1869
|
-
last_updated: /* @__PURE__ */ new Date()
|
|
1870
|
-
});
|
|
1871
|
-
}
|
|
1872
|
-
}
|
|
1873
|
-
/**
|
|
1874
|
-
* Load registry metadata from system tables
|
|
1875
|
-
*
|
|
1876
|
-
* Reads the _smrt_registry system table to inspect what classes
|
|
1877
|
-
* have been registered. This is primarily for introspection and
|
|
1878
|
-
* debugging - actual class registration happens via @smrt() decorator.
|
|
1879
|
-
*
|
|
1880
|
-
* @param db - Database interface to load from
|
|
1881
|
-
* @returns Promise resolving to array of class metadata
|
|
1882
|
-
* @example
|
|
1883
|
-
* ```typescript
|
|
1884
|
-
* const metadata = await ObjectRegistry.loadFromDatabase(db);
|
|
1885
|
-
* for (const meta of metadata) {
|
|
1886
|
-
* console.log(`Class: ${meta.class_name}`);
|
|
1887
|
-
* console.log(`Table: ${JSON.parse(meta.manifest).tableName}`);
|
|
1888
|
-
* }
|
|
1889
|
-
* ```
|
|
1890
|
-
*/
|
|
1891
|
-
static async loadFromDatabase(db) {
|
|
1892
|
-
const { rows } = await db.query("SELECT * FROM _smrt_registry ORDER BY class_name");
|
|
1893
|
-
return rows;
|
|
1894
|
-
}
|
|
1895
|
-
/**
|
|
1896
1874
|
* Get embedding configuration for a class
|
|
1897
1875
|
*
|
|
1898
1876
|
* Returns the class-specific embedding config if embeddings are enabled.
|