@happyvertical/smrt-core 0.51.9 → 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.
- package/agents/change-feed.md +82 -0
- package/agents/generators.md +3 -1
- package/dist/change-feed-sensitivity.d.ts +155 -0
- package/dist/change-feed-sensitivity.d.ts.map +1 -0
- package/dist/change-feed-sensitivity.js +139 -0
- package/dist/change-feed-sensitivity.js.map +1 -0
- package/dist/change-feed.d.ts +37 -10
- package/dist/change-feed.d.ts.map +1 -1
- package/dist/change-feed.js +128 -12
- package/dist/change-feed.js.map +1 -1
- package/dist/change-signals.d.ts.map +1 -1
- package/dist/change-signals.js +3 -0
- package/dist/change-signals.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/manifest/static-manifest.js +1 -1
- package/dist/manifest/static-manifest.js.map +1 -1
- package/dist/manifest/store.js +1 -1
- package/dist/manifest.json +1 -1
- package/dist/registry/class-registration.d.ts +1 -1
- package/dist/registry/class-registration.d.ts.map +1 -1
- package/dist/registry/class-registration.js +50 -4
- package/dist/registry/class-registration.js.map +1 -1
- package/dist/registry/types.d.ts +43 -0
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry.d.ts +14 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +15 -2
- package/dist/registry.js.map +1 -1
- package/dist/schema/types.d.ts +8 -1
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/smrt-knowledge.json +7 -7
- package/dist/vite-plugin/dev-plane-route.js +1 -1
- package/dist/vite-plugin/dev-plane-route.js.map +1 -1
- package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -1
- package/dist/vite-plugin/sveltekit-generator.js +54 -7
- package/dist/vite-plugin/sveltekit-generator.js.map +1 -1
- 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;
|
|
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,
|
|
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 = {
|