@memberjunction/core 6.1.0-edge.2 → 6.1.0-edge.3
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/LICENSE +180 -4
- package/dist/generic/JSONType-interfaces/IEntityConfiguration.d.ts +120 -0
- package/dist/generic/JSONType-interfaces/IEntityConfiguration.d.ts.map +1 -0
- package/dist/generic/JSONType-interfaces/IEntityConfiguration.js +6 -0
- package/dist/generic/JSONType-interfaces/IEntityConfiguration.js.map +1 -0
- package/dist/generic/JSONType-interfaces/IEntityFieldConfiguration.d.ts +31 -0
- package/dist/generic/JSONType-interfaces/IEntityFieldConfiguration.d.ts.map +1 -0
- package/dist/generic/JSONType-interfaces/IEntityFieldConfiguration.js +6 -0
- package/dist/generic/JSONType-interfaces/IEntityFieldConfiguration.js.map +1 -0
- package/dist/generic/JSONType-interfaces/IEntityRelationshipConfiguration.d.ts +75 -0
- package/dist/generic/JSONType-interfaces/IEntityRelationshipConfiguration.d.ts.map +1 -0
- package/dist/generic/JSONType-interfaces/IEntityRelationshipConfiguration.js +6 -0
- package/dist/generic/JSONType-interfaces/IEntityRelationshipConfiguration.js.map +1 -0
- package/dist/generic/JSONType-interfaces/IFileStorageProviderConfiguration.d.ts +19 -0
- package/dist/generic/JSONType-interfaces/IFileStorageProviderConfiguration.d.ts.map +1 -0
- package/dist/generic/JSONType-interfaces/IFileStorageProviderConfiguration.js +6 -0
- package/dist/generic/JSONType-interfaces/IFileStorageProviderConfiguration.js.map +1 -0
- package/dist/generic/authTypes.d.ts +69 -0
- package/dist/generic/authTypes.d.ts.map +1 -1
- package/dist/generic/baseEngine.d.ts +14 -0
- package/dist/generic/baseEngine.d.ts.map +1 -1
- package/dist/generic/baseEngine.js +53 -13
- package/dist/generic/baseEngine.js.map +1 -1
- package/dist/generic/baseEntity.d.ts +113 -20
- package/dist/generic/baseEntity.d.ts.map +1 -1
- package/dist/generic/baseEntity.js +351 -49
- package/dist/generic/baseEntity.js.map +1 -1
- package/dist/generic/baseInfo.d.ts.map +1 -1
- package/dist/generic/baseInfo.js +16 -4
- package/dist/generic/baseInfo.js.map +1 -1
- package/dist/generic/compositeKey.d.ts +30 -0
- package/dist/generic/compositeKey.d.ts.map +1 -1
- package/dist/generic/compositeKey.js +97 -0
- package/dist/generic/compositeKey.js.map +1 -1
- package/dist/generic/databaseProviderBase.d.ts.map +1 -1
- package/dist/generic/databaseProviderBase.js +9 -5
- package/dist/generic/databaseProviderBase.js.map +1 -1
- package/dist/generic/embeddedRecord.d.ts +123 -0
- package/dist/generic/embeddedRecord.d.ts.map +1 -0
- package/dist/generic/embeddedRecord.js +356 -0
- package/dist/generic/embeddedRecord.js.map +1 -0
- package/dist/generic/entityCompanion.d.ts +20 -2
- package/dist/generic/entityCompanion.d.ts.map +1 -1
- package/dist/generic/entityCompanion.js +17 -1
- package/dist/generic/entityCompanion.js.map +1 -1
- package/dist/generic/entityConfiguration.d.ts +131 -0
- package/dist/generic/entityConfiguration.d.ts.map +1 -0
- package/dist/generic/entityConfiguration.js +346 -0
- package/dist/generic/entityConfiguration.js.map +1 -0
- package/dist/generic/entityInfo.d.ts +274 -4
- package/dist/generic/entityInfo.d.ts.map +1 -1
- package/dist/generic/entityInfo.js +502 -14
- package/dist/generic/entityInfo.js.map +1 -1
- package/dist/generic/entitySavePlan.d.ts +40 -11
- package/dist/generic/entitySavePlan.d.ts.map +1 -1
- package/dist/generic/entitySavePlan.js +70 -2
- package/dist/generic/entitySavePlan.js.map +1 -1
- package/dist/generic/interfaces.d.ts +6 -24
- package/dist/generic/interfaces.d.ts.map +1 -1
- package/dist/generic/interfaces.js +6 -24
- package/dist/generic/interfaces.js.map +1 -1
- package/dist/generic/localCacheManager.d.ts.map +1 -1
- package/dist/generic/localCacheManager.js +10 -0
- package/dist/generic/localCacheManager.js.map +1 -1
- package/dist/generic/providerBase.d.ts +19 -0
- package/dist/generic/providerBase.d.ts.map +1 -1
- package/dist/generic/providerBase.js +71 -6
- package/dist/generic/providerBase.js.map +1 -1
- package/dist/generic/relatedRecordCollection.d.ts +25 -3
- package/dist/generic/relatedRecordCollection.d.ts.map +1 -1
- package/dist/generic/relatedRecordCollection.js +53 -7
- package/dist/generic/relatedRecordCollection.js.map +1 -1
- package/dist/generic/runQuery.d.ts +14 -0
- package/dist/generic/runQuery.d.ts.map +1 -1
- package/dist/generic/runQuery.js.map +1 -1
- package/dist/generic/saveEntityGraphOperation.js +1 -1
- package/dist/generic/saveEntityGraphOperation.js.map +1 -1
- package/dist/generic/securityInfo.d.ts.map +1 -1
- package/dist/generic/securityInfo.js +15 -5
- package/dist/generic/securityInfo.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/views/runView.d.ts +23 -0
- package/dist/views/runView.d.ts.map +1 -1
- package/dist/views/runView.js +20 -0
- package/dist/views/runView.js.map +1 -1
- package/package.json +5 -4
- package/readme.md +20 -1
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime view of `MJ: Entities.Configuration` and
|
|
3
|
+
* `MJ: Entity Relationships.Configuration`.
|
|
4
|
+
*
|
|
5
|
+
* Keep this file in lockstep with:
|
|
6
|
+
* - `metadata/entities/JSONType-interfaces/IEntityConfiguration.ts`
|
|
7
|
+
* - `metadata/entities/JSONType-interfaces/IEntityRelationshipConfiguration.ts`
|
|
8
|
+
*
|
|
9
|
+
* Those files are CodeGen's source of truth (the generated
|
|
10
|
+
* `MJEntityEntity_IEntityConfiguration` / ER counterpart). This file is what
|
|
11
|
+
* `EntityInfo` / the form-chrome ranker consume — `@memberjunction/core` cannot
|
|
12
|
+
* import the generated entity package.
|
|
13
|
+
*
|
|
14
|
+
* NULL / `{}` / omitted keys = accordion until AutoLeftNavAt, then left-nav.
|
|
15
|
+
* Related-role policy defaults to `'smart'`: a budgeted ranker over Auto
|
|
16
|
+
* leftovers. L1 `inclusion: 'None'` never enters the ranker.
|
|
17
|
+
*
|
|
18
|
+
* @see guides/FORMS_ARCHITECTURE_GUIDE.md §7d
|
|
19
|
+
*/
|
|
20
|
+
import { SafeJSONParse } from '@memberjunction/global';
|
|
21
|
+
export const DEFAULT_AUTO_LEFT_NAV_AT = 8;
|
|
22
|
+
export const DEFAULT_PRIMARY_RELATED_BUDGET = 6;
|
|
23
|
+
export const RELATED_ROLE_SCORE = {
|
|
24
|
+
RelatedRecordCollection: 200,
|
|
25
|
+
CustomDisplayComponent: 150,
|
|
26
|
+
SameSchema: 100,
|
|
27
|
+
OneToMany: 50,
|
|
28
|
+
BeforeFieldTabs: 40,
|
|
29
|
+
/**
|
|
30
|
+
* Cap for the inbound-relationship hub boost. A related entity that many
|
|
31
|
+
* other entities point at (Order Headers) outranks a satellite with two
|
|
32
|
+
* incoming keys (Task Activities). Applied as `min(cap, 20 * log2(count))`.
|
|
33
|
+
*/
|
|
34
|
+
InboundHubCap: 120,
|
|
35
|
+
CreatedByJoin: -90,
|
|
36
|
+
SatelliteName: -70,
|
|
37
|
+
PlatformSchema: -80,
|
|
38
|
+
};
|
|
39
|
+
export const PLATFORM_SCHEMA_NAME = '__mj';
|
|
40
|
+
export * from './JSONType-interfaces/IEntityConfiguration.js';
|
|
41
|
+
export * from './JSONType-interfaces/IEntityFieldConfiguration.js';
|
|
42
|
+
export * from './JSONType-interfaces/IEntityRelationshipConfiguration.js';
|
|
43
|
+
export function ParseEntityConfiguration(raw) {
|
|
44
|
+
if (raw == null)
|
|
45
|
+
return null;
|
|
46
|
+
if (typeof raw === 'object')
|
|
47
|
+
return raw;
|
|
48
|
+
if (typeof raw !== 'string' || raw.trim().length === 0)
|
|
49
|
+
return null;
|
|
50
|
+
return SafeJSONParse(raw, false) ?? null;
|
|
51
|
+
}
|
|
52
|
+
export function ParseEntityRelationshipConfiguration(raw) {
|
|
53
|
+
if (raw == null)
|
|
54
|
+
return null;
|
|
55
|
+
if (typeof raw === 'object')
|
|
56
|
+
return raw;
|
|
57
|
+
if (typeof raw !== 'string' || raw.trim().length === 0)
|
|
58
|
+
return null;
|
|
59
|
+
return SafeJSONParse(raw, false) ?? null;
|
|
60
|
+
}
|
|
61
|
+
export function ResolveFormLayout(formConfig, firstClassSectionCount) {
|
|
62
|
+
const layout = formConfig?.Layout ?? 'auto';
|
|
63
|
+
if (layout === 'accordion' || layout === 'left-nav')
|
|
64
|
+
return layout;
|
|
65
|
+
const threshold = formConfig?.AutoLeftNavAt ?? DEFAULT_AUTO_LEFT_NAV_AT;
|
|
66
|
+
return firstClassSectionCount >= threshold ? 'left-nav' : 'accordion';
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Read L1 inclusion from a relationship Configuration bag.
|
|
70
|
+
* `inclusion` wins. `FormRole: 'Detail'` maps to More. `FormRole: 'Primary'` maps to Primary.
|
|
71
|
+
*/
|
|
72
|
+
export function ReadRelationshipInclusion(raw) {
|
|
73
|
+
const parsed = ParseEntityRelationshipConfiguration(raw);
|
|
74
|
+
const ui = parsed?.UI;
|
|
75
|
+
if (ui?.inclusion === 'Primary' || ui?.inclusion === 'More' || ui?.inclusion === 'None') {
|
|
76
|
+
return ui.inclusion;
|
|
77
|
+
}
|
|
78
|
+
if (ui?.FormRole === 'Primary')
|
|
79
|
+
return 'Primary';
|
|
80
|
+
if (ui?.FormRole === 'Detail')
|
|
81
|
+
return 'More';
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
/** Higher = earlier among first-class related rail items. Omit / invalid = null. */
|
|
85
|
+
export function ReadRelationshipSortKey(raw) {
|
|
86
|
+
const sort = ParseEntityRelationshipConfiguration(raw)?.UI?.sortKey;
|
|
87
|
+
if (typeof sort !== 'number' || !Number.isFinite(sort))
|
|
88
|
+
return null;
|
|
89
|
+
return sort;
|
|
90
|
+
}
|
|
91
|
+
export function ReadRelationshipJoinFields(raw) {
|
|
92
|
+
const fields = ParseEntityRelationshipConfiguration(raw)?.UI?.join?.fields;
|
|
93
|
+
if (!fields || fields.length === 0)
|
|
94
|
+
return null;
|
|
95
|
+
const cleaned = fields.map((f) => f.trim()).filter((f) => f.length > 0);
|
|
96
|
+
return cleaned.length > 0 ? cleaned : null;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Score a DisplayInForm relationship for the smart ranker. Explicit inclusion
|
|
100
|
+
* is not applied here — callers separate the L1 pool first.
|
|
101
|
+
*/
|
|
102
|
+
export function ScoreRelatedFormRole(candidate, parentSchemaName) {
|
|
103
|
+
let score = 0;
|
|
104
|
+
if (hasText(candidate.RelatedRecordCollection)) {
|
|
105
|
+
score += RELATED_ROLE_SCORE.RelatedRecordCollection;
|
|
106
|
+
}
|
|
107
|
+
if (hasText(candidate.DisplayComponentID)) {
|
|
108
|
+
score += RELATED_ROLE_SCORE.CustomDisplayComponent;
|
|
109
|
+
}
|
|
110
|
+
if (schemasEqual(candidate.RelatedEntitySchemaName, parentSchemaName)) {
|
|
111
|
+
score += RELATED_ROLE_SCORE.SameSchema;
|
|
112
|
+
}
|
|
113
|
+
if (isOneToMany(candidate)) {
|
|
114
|
+
score += RELATED_ROLE_SCORE.OneToMany;
|
|
115
|
+
}
|
|
116
|
+
if (candidate.DisplayLocation === 'Before Field Tabs') {
|
|
117
|
+
score += RELATED_ROLE_SCORE.BeforeFieldTabs;
|
|
118
|
+
}
|
|
119
|
+
score += inboundHubBoost(candidate.InboundRelationshipCount);
|
|
120
|
+
score += createdByJoinPenalty(candidate.RelatedEntityJoinField);
|
|
121
|
+
score += satelliteNamePenalty(candidate.RelatedEntity);
|
|
122
|
+
if (isPlatformSchema(candidate.RelatedEntitySchemaName) && !isPlatformSchema(parentSchemaName)) {
|
|
123
|
+
score += RELATED_ROLE_SCORE.PlatformSchema;
|
|
124
|
+
}
|
|
125
|
+
return score;
|
|
126
|
+
}
|
|
127
|
+
export function ResolveRelatedFormRoles(parentSchemaName, formConfig, candidates) {
|
|
128
|
+
const policy = formConfig?.RelatedRolePolicy ?? 'smart';
|
|
129
|
+
const budget = resolveBudget(formConfig?.PrimaryRelatedBudget);
|
|
130
|
+
const visible = candidates.filter((c) => c.DisplayInForm);
|
|
131
|
+
const assignments = [];
|
|
132
|
+
const untagged = [];
|
|
133
|
+
const joinSiblingNone = impliedJoinSiblingNoneIds(visible);
|
|
134
|
+
for (const candidate of visible) {
|
|
135
|
+
const explicit = ReadRelationshipInclusion(candidate.Configuration);
|
|
136
|
+
const inclusion = explicit ?? (joinSiblingNone.has(candidate.ID) ? 'None' : null);
|
|
137
|
+
const score = ScoreRelatedFormRole(candidate, parentSchemaName);
|
|
138
|
+
if (inclusion === 'None') {
|
|
139
|
+
const reason = explicit === 'None' ? 'explicit-none' : 'join-sibling-none';
|
|
140
|
+
assignments.push(toAssignment(candidate, 'Detail', 'None', score, reason, explicit));
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (inclusion === 'Primary') {
|
|
144
|
+
assignments.push(toAssignment(candidate, 'Primary', 'Primary', score, 'explicit-primary', inclusion));
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (inclusion === 'More') {
|
|
148
|
+
assignments.push(toAssignment(candidate, 'Detail', 'More', score, 'explicit-detail', inclusion));
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
untagged.push({ candidate, score });
|
|
152
|
+
}
|
|
153
|
+
if (policy === 'keep-all-primary') {
|
|
154
|
+
for (const item of untagged) {
|
|
155
|
+
assignments.push(toAssignment(item.candidate, 'Primary', 'Primary', item.score, 'keep-all-primary', null));
|
|
156
|
+
}
|
|
157
|
+
return { Policy: policy, Budget: budget, Assignments: sortAssignments(assignments) };
|
|
158
|
+
}
|
|
159
|
+
if (untagged.length <= budget) {
|
|
160
|
+
for (const item of untagged) {
|
|
161
|
+
assignments.push(toAssignment(item.candidate, 'Primary', 'Primary', item.score, 'under-budget', null));
|
|
162
|
+
}
|
|
163
|
+
return { Policy: policy, Budget: budget, Assignments: sortAssignments(assignments) };
|
|
164
|
+
}
|
|
165
|
+
const ranked = [...untagged].sort(compareUntagged);
|
|
166
|
+
ranked.forEach((item, index) => {
|
|
167
|
+
const isPrimary = index < budget;
|
|
168
|
+
assignments.push(toAssignment(item.candidate, isPrimary ? 'Primary' : 'Detail', isPrimary ? 'Primary' : 'More', item.score, isPrimary ? 'ranked-primary' : 'ranked-detail', null));
|
|
169
|
+
});
|
|
170
|
+
return { Policy: policy, Budget: budget, Assignments: sortAssignments(assignments) };
|
|
171
|
+
}
|
|
172
|
+
function resolveBudget(raw) {
|
|
173
|
+
if (raw == null || !Number.isFinite(raw))
|
|
174
|
+
return DEFAULT_PRIMARY_RELATED_BUDGET;
|
|
175
|
+
return Math.max(0, Math.floor(raw));
|
|
176
|
+
}
|
|
177
|
+
function toAssignment(candidate, role, inclusion, score, reason, explicitInclusion) {
|
|
178
|
+
const explicitRole = explicitInclusion === 'Primary' ? 'Primary'
|
|
179
|
+
: explicitInclusion === 'More' ? 'Detail'
|
|
180
|
+
: null;
|
|
181
|
+
return {
|
|
182
|
+
RelationshipID: candidate.ID,
|
|
183
|
+
RelatedEntity: candidate.RelatedEntity,
|
|
184
|
+
RelatedEntityID: candidate.RelatedEntityID,
|
|
185
|
+
RelatedEntityJoinField: candidate.RelatedEntityJoinField,
|
|
186
|
+
Role: role,
|
|
187
|
+
Inclusion: inclusion,
|
|
188
|
+
Score: score,
|
|
189
|
+
Reason: reason,
|
|
190
|
+
ExplicitFormRole: explicitRole,
|
|
191
|
+
ExplicitInclusion: explicitInclusion,
|
|
192
|
+
JoinFields: ReadRelationshipJoinFields(candidate.Configuration),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* When one relationship to a related entity carries `join.fields`, sibling
|
|
197
|
+
* FKs to that same entity with no explicit inclusion are not candidates.
|
|
198
|
+
*/
|
|
199
|
+
function impliedJoinSiblingNoneIds(candidates) {
|
|
200
|
+
const ownerKeys = new Set();
|
|
201
|
+
for (const candidate of candidates) {
|
|
202
|
+
if (ReadRelationshipJoinFields(candidate.Configuration)) {
|
|
203
|
+
ownerKeys.add(relatedEntityKey(candidate));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
const noneIds = new Set();
|
|
207
|
+
if (ownerKeys.size === 0)
|
|
208
|
+
return noneIds;
|
|
209
|
+
for (const candidate of candidates) {
|
|
210
|
+
if (!ownerKeys.has(relatedEntityKey(candidate)))
|
|
211
|
+
continue;
|
|
212
|
+
if (ReadRelationshipInclusion(candidate.Configuration) != null)
|
|
213
|
+
continue;
|
|
214
|
+
if (ReadRelationshipJoinFields(candidate.Configuration))
|
|
215
|
+
continue;
|
|
216
|
+
noneIds.add(candidate.ID);
|
|
217
|
+
}
|
|
218
|
+
return noneIds;
|
|
219
|
+
}
|
|
220
|
+
function relatedEntityKey(candidate) {
|
|
221
|
+
const id = (candidate.RelatedEntityID ?? '').trim().toLowerCase();
|
|
222
|
+
if (id.length > 0)
|
|
223
|
+
return id;
|
|
224
|
+
return (candidate.RelatedEntity ?? '').trim().toLowerCase();
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* L3 install overlay. Pins Inclusion / JoinFields on matching relationship
|
|
228
|
+
* assignments. Later Sequence wins. Contribution rules are applied by the
|
|
229
|
+
* chrome resolver (they are not ranker assignments).
|
|
230
|
+
*/
|
|
231
|
+
export function ApplyFormChromeRules(parentEntityId, assignments, rules) {
|
|
232
|
+
const parent = parentEntityId.trim().toLowerCase();
|
|
233
|
+
if (parent.length === 0 || rules.length === 0)
|
|
234
|
+
return [...assignments];
|
|
235
|
+
const applicable = rules
|
|
236
|
+
.filter((rule) => rule.TargetKind === 'Relationship' && idsEqual(rule.EntityID, parent))
|
|
237
|
+
.sort((a, b) => (a.Sequence ?? 0) - (b.Sequence ?? 0));
|
|
238
|
+
if (applicable.length === 0)
|
|
239
|
+
return [...assignments];
|
|
240
|
+
return assignments.map((assignment) => {
|
|
241
|
+
const rule = lastMatchingRelationshipRule(applicable, assignment);
|
|
242
|
+
return rule ? applyRelationshipRule(assignment, rule) : assignment;
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
export function ContributionInclusionFromRules(parentEntityId, contributionKey, rules) {
|
|
246
|
+
const parent = parentEntityId.trim().toLowerCase();
|
|
247
|
+
const key = contributionKey.trim().toLowerCase();
|
|
248
|
+
if (parent.length === 0 || key.length === 0)
|
|
249
|
+
return null;
|
|
250
|
+
const matches = rules
|
|
251
|
+
.filter((rule) => rule.TargetKind === 'Contribution'
|
|
252
|
+
&& idsEqual(rule.EntityID, parent)
|
|
253
|
+
&& (rule.ContributionKey ?? '').trim().toLowerCase() === key)
|
|
254
|
+
.sort((a, b) => (a.Sequence ?? 0) - (b.Sequence ?? 0));
|
|
255
|
+
return matches.at(-1)?.Inclusion ?? null;
|
|
256
|
+
}
|
|
257
|
+
function lastMatchingRelationshipRule(rules, assignment) {
|
|
258
|
+
const matches = rules.filter((rule) => idsEqual(rule.RelatedEntityID, assignment.RelatedEntityID));
|
|
259
|
+
return matches.at(-1);
|
|
260
|
+
}
|
|
261
|
+
function applyRelationshipRule(assignment, rule) {
|
|
262
|
+
const inclusion = rule.Inclusion;
|
|
263
|
+
const role = inclusion === 'Primary' ? 'Primary' : 'Detail';
|
|
264
|
+
const reason = inclusion === 'Primary' ? 'install-primary'
|
|
265
|
+
: inclusion === 'More' ? 'install-more'
|
|
266
|
+
: 'install-none';
|
|
267
|
+
const join = rule.JoinFields && rule.JoinFields.length > 0
|
|
268
|
+
? rule.JoinFields
|
|
269
|
+
: assignment.JoinFields;
|
|
270
|
+
return { ...assignment, Role: role, Inclusion: inclusion, Reason: reason, JoinFields: join };
|
|
271
|
+
}
|
|
272
|
+
function idsEqual(a, b) {
|
|
273
|
+
return (a ?? '').trim().toLowerCase() === (b ?? '').trim().toLowerCase()
|
|
274
|
+
&& (a ?? '').trim().length > 0;
|
|
275
|
+
}
|
|
276
|
+
function sortAssignments(assignments) {
|
|
277
|
+
return [...assignments].sort((a, b) => {
|
|
278
|
+
if (b.Score !== a.Score)
|
|
279
|
+
return b.Score - a.Score;
|
|
280
|
+
return a.RelatedEntity.localeCompare(b.RelatedEntity);
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
function compareUntagged(a, b) {
|
|
284
|
+
if (b.score !== a.score)
|
|
285
|
+
return b.score - a.score;
|
|
286
|
+
const aSeq = effectiveSequence(a.candidate.Sequence);
|
|
287
|
+
const bSeq = effectiveSequence(b.candidate.Sequence);
|
|
288
|
+
if (aSeq !== bSeq)
|
|
289
|
+
return aSeq - bSeq;
|
|
290
|
+
return a.candidate.RelatedEntity.localeCompare(b.candidate.RelatedEntity);
|
|
291
|
+
}
|
|
292
|
+
function isOneToMany(candidate) {
|
|
293
|
+
if (hasText(candidate.JoinView))
|
|
294
|
+
return false;
|
|
295
|
+
const type = (candidate.Type ?? '').trim().toUpperCase();
|
|
296
|
+
if (type.length === 0)
|
|
297
|
+
return true;
|
|
298
|
+
return type === 'ONE TO MANY';
|
|
299
|
+
}
|
|
300
|
+
function inboundHubBoost(count) {
|
|
301
|
+
if (count == null || count <= 2)
|
|
302
|
+
return 0;
|
|
303
|
+
return Math.min(RELATED_ROLE_SCORE.InboundHubCap, Math.round(20 * Math.log2(count)));
|
|
304
|
+
}
|
|
305
|
+
function createdByJoinPenalty(joinField) {
|
|
306
|
+
const field = (joinField ?? '').trim();
|
|
307
|
+
if (/^(CreatedBy|UpdatedBy|DeletedBy|OwnedBy)/i.test(field)) {
|
|
308
|
+
return RELATED_ROLE_SCORE.CreatedByJoin;
|
|
309
|
+
}
|
|
310
|
+
return 0;
|
|
311
|
+
}
|
|
312
|
+
function satelliteNamePenalty(relatedEntity) {
|
|
313
|
+
const name = (relatedEntity ?? '').toLowerCase();
|
|
314
|
+
if (/(activit|comment|log|notification|exemption|intent|assignment|dependenc|decision|tag link|stored value|payment method|entitlement|promotion code)/.test(name)) {
|
|
315
|
+
return RELATED_ROLE_SCORE.SatelliteName;
|
|
316
|
+
}
|
|
317
|
+
return 0;
|
|
318
|
+
}
|
|
319
|
+
function effectiveSequence(sequence) {
|
|
320
|
+
if (sequence == null || sequence === 0)
|
|
321
|
+
return 999;
|
|
322
|
+
return sequence;
|
|
323
|
+
}
|
|
324
|
+
function isPlatformSchema(schemaName) {
|
|
325
|
+
return (schemaName ?? '').trim().toLowerCase() === PLATFORM_SCHEMA_NAME;
|
|
326
|
+
}
|
|
327
|
+
function schemasEqual(a, b) {
|
|
328
|
+
return (a ?? '').trim().toLowerCase() === (b ?? '').trim().toLowerCase()
|
|
329
|
+
&& (a ?? '').trim().length > 0;
|
|
330
|
+
}
|
|
331
|
+
function hasText(value) {
|
|
332
|
+
return value != null && value.trim().length > 0;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Safely parses an `EntityField.Configuration` JSON string or returns the object.
|
|
336
|
+
*/
|
|
337
|
+
export function ParseEntityFieldConfiguration(raw) {
|
|
338
|
+
if (raw == null)
|
|
339
|
+
return null;
|
|
340
|
+
if (typeof raw === 'object')
|
|
341
|
+
return raw;
|
|
342
|
+
if (typeof raw !== 'string' || raw.trim().length === 0)
|
|
343
|
+
return null;
|
|
344
|
+
return SafeJSONParse(raw, false) ?? null;
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=entityConfiguration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityConfiguration.js","sourceRoot":"","sources":["../../src/generic/entityConfiguration.ts"],"names":[],"mappings":"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"}
|