@memberjunction/core 6.1.3 → 6.2.0-edge.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/dist/generic/JSONType-interfaces/IQueryConfiguration.d.ts +60 -0
- package/dist/generic/JSONType-interfaces/IQueryConfiguration.d.ts.map +1 -0
- package/dist/generic/JSONType-interfaces/IQueryConfiguration.js +6 -0
- package/dist/generic/JSONType-interfaces/IQueryConfiguration.js.map +1 -0
- package/dist/generic/baseEngine.d.ts +7 -0
- package/dist/generic/baseEngine.d.ts.map +1 -1
- package/dist/generic/baseEngine.js +48 -17
- package/dist/generic/baseEngine.js.map +1 -1
- package/dist/generic/baseEntity.d.ts +11 -1
- package/dist/generic/baseEntity.d.ts.map +1 -1
- package/dist/generic/baseEntity.js +44 -1
- package/dist/generic/baseEntity.js.map +1 -1
- package/dist/generic/databaseProviderBase.d.ts +7 -0
- package/dist/generic/databaseProviderBase.d.ts.map +1 -1
- package/dist/generic/databaseProviderBase.js +17 -2
- package/dist/generic/databaseProviderBase.js.map +1 -1
- package/dist/generic/entityInfo.d.ts +38 -0
- package/dist/generic/entityInfo.d.ts.map +1 -1
- package/dist/generic/entityInfo.js +49 -0
- package/dist/generic/entityInfo.js.map +1 -1
- package/dist/generic/interfaces.d.ts +34 -0
- package/dist/generic/interfaces.d.ts.map +1 -1
- package/dist/generic/interfaces.js.map +1 -1
- package/dist/generic/providerBase.d.ts +28 -0
- package/dist/generic/providerBase.d.ts.map +1 -1
- package/dist/generic/providerBase.js +61 -1
- package/dist/generic/providerBase.js.map +1 -1
- package/dist/generic/queryInfo.d.ts +47 -0
- package/dist/generic/queryInfo.d.ts.map +1 -1
- package/dist/generic/queryInfo.js +76 -0
- package/dist/generic/queryInfo.js.map +1 -1
- package/dist/generic/queryInfoInterfaces.d.ts +6 -0
- package/dist/generic/queryInfoInterfaces.d.ts.map +1 -1
- package/dist/generic/util.d.ts +22 -0
- package/dist/generic/util.d.ts.map +1 -1
- package/dist/generic/util.js +33 -0
- package/dist/generic/util.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -8,7 +8,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
10
|
var EntityField_1;
|
|
11
|
-
import { DeserializeValidationErrors, IsMemberOverridden, MJEventType, MJGlobal, OptionalKeyedSpecialization, uuidv4, UUIDsEqual, WarningManager } from '@memberjunction/global';
|
|
11
|
+
import { DeserializeValidationErrors, IsMemberOverridden, MJEventType, MJGlobal, OptionalKeyedSpecialization, uuidv4, UUIDsEqual, WarningManager, ComputeContentHashAsync } from '@memberjunction/global';
|
|
12
12
|
import { GetDataHooks } from './dataHooks.js';
|
|
13
13
|
import { EntityFieldInfo, EntityInfo, EntityFieldTSType, EntityPermissionType, FieldSecurityError, RecordChange, ValidationErrorInfo, ValidationResult } from './entityInfo.js';
|
|
14
14
|
import { EntitySubtypeResolver } from './entitySubtypeResolver.js';
|
|
@@ -3118,6 +3118,49 @@ export class BaseEntity {
|
|
|
3118
3118
|
GetChangesSinceLastSave() {
|
|
3119
3119
|
return this.GetAll(false, true);
|
|
3120
3120
|
}
|
|
3121
|
+
/**
|
|
3122
|
+
* Computes a deterministic SHA-256 content hash of the entity's field values using
|
|
3123
|
+
* the canonicalizer and Web Crypto API from `@memberjunction/global`.
|
|
3124
|
+
*
|
|
3125
|
+
* By default, hashes all loaded non-system fields (excluding `__mj_*` columns).
|
|
3126
|
+
* The result is byte-for-byte identical across client and server tiers.
|
|
3127
|
+
*
|
|
3128
|
+
* @param options Optional configuration specifying subset of fields and/or whether to exclude system fields.
|
|
3129
|
+
*/
|
|
3130
|
+
async ComputeContentHash(options) {
|
|
3131
|
+
const excludeSystem = options?.ExcludeSystemFields ?? true;
|
|
3132
|
+
const allData = this.GetAll(false, false);
|
|
3133
|
+
// If specific fields are requested, validate each exists (case-insensitively) and resolve canonical name
|
|
3134
|
+
let targetFieldNames;
|
|
3135
|
+
if (options?.Fields && options.Fields.length > 0) {
|
|
3136
|
+
targetFieldNames = options.Fields.map((req) => {
|
|
3137
|
+
const fieldInfo = this.GetFieldByName(req);
|
|
3138
|
+
if (!fieldInfo) {
|
|
3139
|
+
throw new Error(`ComputeContentHash: field '${req}' does not exist on entity '${this.EntityInfo.Name}'`);
|
|
3140
|
+
}
|
|
3141
|
+
return fieldInfo.Name;
|
|
3142
|
+
});
|
|
3143
|
+
}
|
|
3144
|
+
else {
|
|
3145
|
+
targetFieldNames = Object.keys(allData);
|
|
3146
|
+
}
|
|
3147
|
+
const excludeSet = new Set((options?.ExcludeFields ?? []).map((f) => f.trim().toLowerCase()));
|
|
3148
|
+
const data = {};
|
|
3149
|
+
for (const name of targetFieldNames) {
|
|
3150
|
+
if (excludeSystem && name.startsWith('__mj_'))
|
|
3151
|
+
continue;
|
|
3152
|
+
if (excludeSet.has(name.toLowerCase()))
|
|
3153
|
+
continue;
|
|
3154
|
+
const val = allData[name];
|
|
3155
|
+
if (val !== undefined) {
|
|
3156
|
+
data[name] = val;
|
|
3157
|
+
}
|
|
3158
|
+
}
|
|
3159
|
+
if (Object.keys(data).length === 0) {
|
|
3160
|
+
throw new Error(`ComputeContentHash: cannot compute content hash on empty basis for entity '${this.EntityInfo.Name}'`);
|
|
3161
|
+
}
|
|
3162
|
+
return ComputeContentHashAsync(data);
|
|
3163
|
+
}
|
|
3121
3164
|
/**
|
|
3122
3165
|
* This utility method calls GetDataObject() internally and formats the result as a JSON string. If you want to get the data as an object instead of a string, call GetDataObject() directly.
|
|
3123
3166
|
* @param params
|