@happyvertical/smrt-core 0.51.10 → 0.51.11

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 (39) hide show
  1. package/agents/change-feed.md +82 -0
  2. package/agents/generators.md +3 -1
  3. package/dist/change-feed-sensitivity.d.ts +155 -0
  4. package/dist/change-feed-sensitivity.d.ts.map +1 -0
  5. package/dist/change-feed-sensitivity.js +139 -0
  6. package/dist/change-feed-sensitivity.js.map +1 -0
  7. package/dist/change-feed.d.ts +37 -10
  8. package/dist/change-feed.d.ts.map +1 -1
  9. package/dist/change-feed.js +128 -12
  10. package/dist/change-feed.js.map +1 -1
  11. package/dist/change-signals.d.ts.map +1 -1
  12. package/dist/change-signals.js +3 -0
  13. package/dist/change-signals.js.map +1 -1
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -1
  17. package/dist/manifest/static-manifest.js +1 -1
  18. package/dist/manifest/static-manifest.js.map +1 -1
  19. package/dist/manifest/store.js +1 -1
  20. package/dist/manifest.json +1 -1
  21. package/dist/registry/class-registration.d.ts +1 -1
  22. package/dist/registry/class-registration.d.ts.map +1 -1
  23. package/dist/registry/class-registration.js +50 -4
  24. package/dist/registry/class-registration.js.map +1 -1
  25. package/dist/registry/types.d.ts +43 -0
  26. package/dist/registry/types.d.ts.map +1 -1
  27. package/dist/registry.d.ts +14 -1
  28. package/dist/registry.d.ts.map +1 -1
  29. package/dist/registry.js +15 -2
  30. package/dist/registry.js.map +1 -1
  31. package/dist/schema/types.d.ts +8 -1
  32. package/dist/schema/types.d.ts.map +1 -1
  33. package/dist/smrt-knowledge.json +7 -7
  34. package/dist/vite-plugin/dev-plane-route.js +1 -1
  35. package/dist/vite-plugin/dev-plane-route.js.map +1 -1
  36. package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -1
  37. package/dist/vite-plugin/sveltekit-generator.js +54 -7
  38. package/dist/vite-plugin/sveltekit-generator.js.map +1 -1
  39. 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;AAUH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAKV,qBAAqB,EAGtB,MAAM,qBAAqB,CAAC;AAwC7B,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EAElB,MAAM,YAAY,CAAC;AA0dpB,wBAAgB,QAAQ,CACtB,IAAI,EAAE,OAAO,UAAU,EACvB,MAAM,GAAE,iBAAsB,GAC7B,IAAI,CA8zBN;AAyCD,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,CAuCN;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,CA2CN;AA6JD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,qBAAqB,EAChC,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CA6QN"}
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;AAwC7B,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EAElB,MAAM,YAAY,CAAC;AA2gBpB,wBAAgB,QAAQ,CACtB,IAAI,EAAE,OAAO,UAAU,EACvB,MAAM,GAAE,iBAAsB,GAC7B,IAAI,CAg2BN;AAyCD,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,CAuCN;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,CA2CN;AA2KD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,qBAAqB,EAChC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,IAAI,CAoSN"}
@@ -1,5 +1,6 @@
1
1
  import { ConfigurationError } from "../errors.js";
2
2
  import { toSnakeCase } from "../utils/naming.js";
3
+ import { declareChangeFeedSensitiveTable, setChangeFeedSensitiveClassResolver } from "../change-feed-sensitivity.js";
3
4
  import { createQualifiedName, isQualifiedName } from "../utils/qualified-names.js";
4
5
  import { cloneManifestSchemaColumns } from "../manifest/store.js";
5
6
  import { getClasses, getCollections, getConstructorFieldDecorators, getConstructorIndex, getConstructorTenantScopedDeclarations, getInheritanceCache, getLegacyFieldDecorators, getSourceFileFromStack, getStiSiblingsLoaded, verboseLog } from "./shared-state.js";
@@ -211,6 +212,43 @@ function validateIsolatedRegistrationManifest(manifest, manifestKey, name, packa
211
212
  });
212
213
  return objectDef;
213
214
  }
215
+ /**
216
+ * Publish a `@smrt({ sensitive: true })` declaration to the change feed
217
+ * (issue #2937).
218
+ *
219
+ * Declares **every candidate name**, not just one. The name a class declares
220
+ * and the name its rows are recorded under can diverge: a manifest stub
221
+ * derives the name from `decoratorConfig` but installs
222
+ * `objectDef.schema.tableName`, and the merge path can overwrite
223
+ * `existing.schema.tableName`. A declaration landing on a name nothing writes
224
+ * under is a silent fail-open, and the set is monotonic, so a superset is the
225
+ * safe direction. (The STI case — a child declaring `sensitive` while writing
226
+ * to its base class's table — is closed authoritatively at the write path by
227
+ * `isChangeFeedSensitiveWrite`, which sees the real name.)
228
+ *
229
+ * Only `true` is acted on: the sensitive set is one-way by design, so there is
230
+ * nothing here to undo a previous declaration.
231
+ */
232
+ /**
233
+ * Whether any config source declares the object credential-bearing (#2937).
234
+ *
235
+ * `sensitive` is one-way, so it is combined across sources with OR rather than
236
+ * by spread precedence: only `=== true` carries meaning, and a `false` from any
237
+ * source must never erase a `true` from another.
238
+ */
239
+ function anySensitive(...configs) {
240
+ return configs.some((config) => config?.sensitive === true);
241
+ }
242
+ function declareSensitiveTable(config, ...tableNames) {
243
+ if (config.sensitive !== true) return;
244
+ for (const tableName of tableNames) if (tableName) declareChangeFeedSensitiveTable(tableName);
245
+ }
246
+ setChangeFeedSensitiveClassResolver((ctor) => {
247
+ if (typeof ctor !== "function") return false;
248
+ const key = getConstructorIndex().get(ctor);
249
+ if (!key) return false;
250
+ return getClasses().get(key)?.config?.sensitive === true;
251
+ });
214
252
  function setSmrtTableName(ctor, tableName) {
215
253
  if (Object.getOwnPropertyDescriptor(ctor, "SMRT_TABLE_NAME")?.value === tableName) return;
216
254
  Object.defineProperty(ctor, "SMRT_TABLE_NAME", {
@@ -272,7 +310,8 @@ function register(ctor, config = {}) {
272
310
  existing.config = {
273
311
  ...existing.config,
274
312
  ...config,
275
- tableName: nextTableName
313
+ tableName: nextTableName,
314
+ ...anySensitive(existing.config, config) ? { sensitive: true } : {}
276
315
  };
277
316
  if (!existing.schema) existing.schema = {
278
317
  ddl: "",
@@ -287,6 +326,7 @@ function register(ctor, config = {}) {
287
326
  existing.schema.tableName = nextTableName;
288
327
  existing.constructor = ctor;
289
328
  setSmrtTableName(ctor, nextTableName);
329
+ declareSensitiveTable(existing.config, nextTableName, existing.schema?.tableName);
290
330
  setSmrtQualifiedName(ctor, existing.qualifiedName);
291
331
  if (existingKey !== nextKey) {
292
332
  const classes = getClasses();
@@ -549,8 +589,10 @@ function register(ctor, config = {}) {
549
589
  ...promotedRuntimeConfig,
550
590
  ...manifestEntry?.decoratorConfig,
551
591
  ...config,
552
- tableName
592
+ tableName,
593
+ ...anySensitive(promotedRuntimeConfig, manifestEntry?.decoratorConfig, config) ? { sensitive: true } : {}
553
594
  };
595
+ declareSensitiveTable(mergedConfig, tableName, schema?.tableName, manifestEntry?.schema?.tableName);
554
596
  const qualifiedName = packageName ? createQualifiedName(packageName, name) : void 0;
555
597
  const visibility = config.visibility || manifestEntry?.visibility || "public";
556
598
  const registrationKey = qualifiedName || name;
@@ -752,8 +794,10 @@ function mergeManifestIntoExistingRegistration(existing, objectDef, packageName)
752
794
  existing.config = {
753
795
  ...manifestConfig,
754
796
  ...existing.config,
755
- tableName: manifestTableName
797
+ tableName: manifestTableName,
798
+ ...anySensitive(manifestConfig, existing.config) ? { sensitive: true } : {}
756
799
  };
800
+ declareSensitiveTable(existing.config, manifestTableName, objectDef.schema?.tableName, existing.schema?.tableName);
757
801
  if (objectDef.fields) for (const [fieldName, fd] of Object.entries(objectDef.fields)) {
758
802
  if (!existing.fields.has(fieldName)) {
759
803
  existing.fields.set(fieldName, createFieldFromManifest(fd));
@@ -831,7 +875,8 @@ function mergeManifestIntoExistingRegistration(existing, objectDef, packageName)
831
875
  existing.visibility = objectDef.visibility || manifestConfig.visibility || existing.visibility;
832
876
  invalidateInheritanceEntries(existing);
833
877
  }
834
- function registerFromManifest(name, objectDef, packageName) {
878
+ function registerFromManifest(name, objectDef, manifestPackageName) {
879
+ const packageName = objectDef.packageName || manifestPackageName;
835
880
  const simpleClassName = objectDef.className || name;
836
881
  const qualifiedNameEarly = packageName ? createQualifiedName(packageName, simpleClassName) : objectDef.qualifiedName;
837
882
  const registrationKey = qualifiedNameEarly || name;
@@ -875,6 +920,7 @@ function registerFromManifest(name, objectDef, packageName) {
875
920
  if (objectDef.methods) for (const [methodName, methodDef] of Object.entries(objectDef.methods)) methods.set(methodName, methodDef);
876
921
  const config = objectDef.decoratorConfig || {};
877
922
  const tableName = config.tableName || tableNameFromClass(stubConstructor);
923
+ declareSensitiveTable(config, tableName, objectDef.schema?.tableName);
878
924
  let schema;
879
925
  if (objectDef.schema) {
880
926
  schema = {