@happyvertical/smrt-core 0.51.23 → 0.51.25

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 (37) hide show
  1. package/AGENTS.md +8 -0
  2. package/dist/index.js +1 -1
  3. package/dist/manifest/manifest-loader.d.ts +0 -25
  4. package/dist/manifest/manifest-loader.d.ts.map +1 -1
  5. package/dist/manifest/manifest-loader.js +21 -8
  6. package/dist/manifest/manifest-loader.js.map +1 -1
  7. package/dist/manifest/static-manifest.js +1 -1
  8. package/dist/manifest/static-manifest.js.map +1 -1
  9. package/dist/manifest/store.d.ts.map +1 -1
  10. package/dist/manifest/store.js +7 -2
  11. package/dist/manifest/store.js.map +1 -1
  12. package/dist/manifest.json +1 -1
  13. package/dist/object.d.ts.map +1 -1
  14. package/dist/object.js +26 -26
  15. package/dist/object.js.map +1 -1
  16. package/dist/registry/class-registration.d.ts.map +1 -1
  17. package/dist/registry/class-registration.js +31 -11
  18. package/dist/registry/class-registration.js.map +1 -1
  19. package/dist/registry/inheritance-resolver.js +1 -1
  20. package/dist/registry/name-resolver.d.ts.map +1 -1
  21. package/dist/registry/name-resolver.js +11 -0
  22. package/dist/registry/name-resolver.js.map +1 -1
  23. package/dist/registry/schema-builder.d.ts.map +1 -1
  24. package/dist/registry/schema-builder.js +71 -31
  25. package/dist/registry/schema-builder.js.map +1 -1
  26. package/dist/registry/shared-state.js +1 -1
  27. package/dist/registry.d.ts.map +1 -1
  28. package/dist/registry.js +11 -7
  29. package/dist/registry.js.map +1 -1
  30. package/dist/scanner/manifest-generator.js +1 -1
  31. package/dist/smrt-knowledge.json +5 -5
  32. package/dist/testing/database.js +1 -1
  33. package/dist/utils/stack-frames.d.ts +7 -0
  34. package/dist/utils/stack-frames.d.ts.map +1 -1
  35. package/dist/utils/stack-frames.js +21 -2
  36. package/dist/utils/stack-frames.js.map +1 -1
  37. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"class-registration.d.ts","sourceRoot":"","sources":["../../src/registry/class-registration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAKV,qBAAqB,EAGtB,MAAM,qBAAqB,CAAC;AAyC7B,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EAElB,MAAM,YAAY,CAAC;AA2gBpB;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,OAAO,UAAU,EACvB,MAAM,GAAE,iBAAsB,GAC7B,IAAI,CAON;AA+4BD,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAMlB,qBAAqB,EAAE,WAAW,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC,GAC3E,IAAI,CAeN;AA+BD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EACpC,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,GAAG,SAAS,GACpE,IAAI,CAyCN;AAoHD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,eAAe,EACzB,gBAAgB,CAAC,EAAE;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GACA,IAAI,CA4CN;AA2KD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,qBAAqB,EAChC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,IAAI,CAQN"}
1
+ {"version":3,"file":"class-registration.d.ts","sourceRoot":"","sources":["../../src/registry/class-registration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAKV,qBAAqB,EAGtB,MAAM,qBAAqB,CAAC;AA0C7B,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAqiBpB;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,OAAO,UAAU,EACvB,MAAM,GAAE,iBAAsB,GAC7B,IAAI,CAON;AAy7BD,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAMlB,qBAAqB,EAAE,WAAW,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC,GAC3E,IAAI,CAeN;AA+BD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EACpC,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,GAAG,SAAS,GACpE,IAAI,CAyCN;AAoHD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,eAAe,EACzB,gBAAgB,CAAC,EAAE;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GACA,IAAI,CA4CN;AA2KD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,qBAAqB,EAChC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,IAAI,CAQN"}
@@ -3,11 +3,11 @@ import { toSnakeCase } from "../utils/naming.js";
3
3
  import { declareChangeFeedSensitiveTable, setChangeFeedSensitiveClassResolver } from "../change-feed-sensitivity.js";
4
4
  import { bumpRegistryGeneration } from "./generation.js";
5
5
  import { createQualifiedName, isQualifiedName } from "../utils/qualified-names.js";
6
- import { cloneManifestSchemaColumns } from "../manifest/store.js";
7
6
  import { getClasses, getCollections, getConstructorFieldDecorators, getConstructorIndex, getConstructorTenantScopedDeclarations, getInheritanceCache, getLegacyFieldDecorators, getSourceFileFromStack, getStiSiblingsLoaded, verboseLog } from "./shared-state.js";
8
- import { findClass, getCanonicalClassName, hasClassCaseInsensitive, qualifyExtendsName } from "./name-resolver.js";
9
- import { buildInheritanceChain } from "./inheritance-resolver.js";
7
+ import { cloneManifestSchemaColumns } from "../manifest/store.js";
10
8
  import { discoverManifestSync, discoverSTISiblingsSync, getPackageName, lookupInManifest } from "../manifest/manifest-loader.js";
9
+ import { findClass, findClassesByName, getCanonicalClassName, hasClassCaseInsensitive, qualifyExtendsName } from "./name-resolver.js";
10
+ import { buildInheritanceChain } from "./inheritance-resolver.js";
11
11
  import { compileValidators } from "./validator.js";
12
12
  import { tableNameFromClass } from "../utils.js";
13
13
  import { SmrtObject } from "../object.js";
@@ -194,9 +194,22 @@ function applyManifestCollisionPolicy(args) {
194
194
  }
195
195
  }
196
196
  function resolveTableName(ctor, name, config) {
197
- const manifestEntry = config._manifest ? lookupRegistrationManifest(config._manifest, name, config.packageName, config._manifestKey) : discoverManifestSync(name);
197
+ const manifestEntry = config._manifest ? lookupRegistrationManifest(config._manifest, name, config.packageName, config._manifestKey) : discoverManifestSync(config.packageName ? createQualifiedName(config.packageName, name) : name);
198
198
  return manifestEntry?.schema?.tableName || manifestEntry?.decoratorConfig?.tableName || config.tableName || tableNameFromClass(ctor);
199
199
  }
200
+ /**
201
+ * Whether `packageName` itself declares the class `qualifiedKey` names: it is
202
+ * registered under that key (a manifest stub or an earlier registration), or
203
+ * a manifest owned by that package describes it. A stack-derived package is
204
+ * only trusted as a class's identity on this evidence — a consumer bundle
205
+ * that inlined a dependency reports the consumer's package, whose manifest
206
+ * describes the dependency's classes under the dependency's name (#3098).
207
+ */
208
+ function packageDeclaresClass(packageName, qualifiedKey) {
209
+ if (getClasses().has(qualifiedKey)) return true;
210
+ const entry = discoverManifestSync(qualifiedKey);
211
+ return !!entry && (entry.packageName === void 0 || entry.packageName === packageName);
212
+ }
200
213
  function lookupRegistrationManifest(manifest, name, _packageName, manifestKey) {
201
214
  if (manifestKey) return manifest.objects[manifestKey];
202
215
  return lookupInManifest(manifest, name);
@@ -320,7 +333,8 @@ function registerUntracked(ctor, config = {}) {
320
333
  existing.qualifiedName = nextPackageName ? createQualifiedName(nextPackageName, name) : void 0;
321
334
  const nextTableName = resolveTableName(ctor, name, {
322
335
  ...existing.config,
323
- ...config
336
+ ...config,
337
+ ...nextPackageName ? { packageName: nextPackageName } : {}
324
338
  });
325
339
  existing.config = {
326
340
  ...existing.config,
@@ -385,16 +399,18 @@ function registerUntracked(ctor, config = {}) {
385
399
  upsertExistingEntry(constructorKey, constructorEntry);
386
400
  return;
387
401
  }
388
- if (getClasses().has(name)) {
389
- const existing = getClasses().get(name);
390
- if (!existing) throw new Error(`Registry inconsistency: ${name} exists in classes Map but get() returned undefined`);
402
+ const ownQualifiedKey = newPackageName ? createQualifiedName(newPackageName, name) : void 0;
403
+ const ownPackageDeclaresClass = !!ownQualifiedKey && !!newPackageName && (!!explicitPackageName || packageDeclaresClass(newPackageName, ownQualifiedKey));
404
+ const belongsToAnotherPackage = (existing) => ownPackageDeclaresClass && !!existing.packageName && existing.packageName !== newPackageName;
405
+ const exactExisting = getClasses().get(name);
406
+ if (exactExisting && !belongsToAnotherPackage(exactExisting)) {
391
407
  if (applyRegisterCollisionPolicy({
392
408
  ctor,
393
409
  name,
394
410
  newPackageName,
395
411
  newSourceFile,
396
412
  newInBundledContext,
397
- existing,
413
+ existing: exactExisting,
398
414
  existingKey: name,
399
415
  matchKind: "exact-key",
400
416
  upsertExistingEntry
@@ -406,6 +422,7 @@ function registerUntracked(ctor, config = {}) {
406
422
  const nameMatches = existing.name?.toLowerCase() === lowerName;
407
423
  if (!(keyMatches || nameMatches) || existingKey === name) continue;
408
424
  if (explicitPackageName && existing.packageName && explicitPackageName !== existing.packageName && isQualifiedName(existingKey)) continue;
425
+ if (belongsToAnotherPackage(existing)) continue;
409
426
  if (applyRegisterCollisionPolicy({
410
427
  ctor,
411
428
  name,
@@ -422,7 +439,7 @@ function registerUntracked(ctor, config = {}) {
422
439
  const sourceFilePath = getSourceFileFromStack();
423
440
  let manifestEntry;
424
441
  if (config._manifest) manifestEntry = lookupRegistrationManifest(config._manifest, name, explicitPackageName, config._manifestKey);
425
- if (!manifestEntry) manifestEntry = discoverManifestSync(name);
442
+ if (!manifestEntry) manifestEntry = ownQualifiedKey && ownPackageDeclaresClass ? discoverManifestSync(ownQualifiedKey) ?? (findClassesByName(name).some((candidate) => !!candidate.packageName && candidate.packageName !== newPackageName) ? void 0 : discoverManifestSync(name)) : discoverManifestSync(name);
426
443
  const runtimeTenantScopedDeclaration = getConstructorTenantScopedDeclarations().get(ctor);
427
444
  if (manifestEntry && config.tenantScoped === void 0 && normalizeTenantScopedConfig(manifestEntry.decoratorConfig?.tenantScoped) === void 0 && runtimeTenantScopedDeclaration) throw new ConfigurationError(`Manifest for '${name}' omits or disables tenantScoped but its runtime constructor is decorated with @TenantScoped(). Regenerate the manifest so tenancy schema and runtime enforcement agree.`, "CONFIG_TENANT_MANIFEST_CONFLICT");
428
445
  const fields = /* @__PURE__ */ new Map();
@@ -552,7 +569,10 @@ function registerUntracked(ctor, config = {}) {
552
569
  if (childStrategy !== void 0 && parentStrategy !== childStrategy) throw ConfigurationError.incompatibleStrategy(name, childStrategy, parentName, parentStrategy);
553
570
  }
554
571
  }
555
- const tableName = resolveTableName(ctor, name, config);
572
+ const tableName = resolveTableName(ctor, name, {
573
+ ...config,
574
+ ...ownPackageDeclaresClass && newPackageName ? { packageName: newPackageName } : {}
575
+ });
556
576
  setSmrtTableName(ctor, tableName);
557
577
  let schema;
558
578
  if (manifestEntry?.schema) {