@salesforce/lds-runtime-mobile 1.136.5 → 1.136.7
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/main.js +198 -75
- package/package.json +3 -3
- package/sfdc/main.js +198 -75
package/dist/main.js
CHANGED
|
@@ -37,7 +37,7 @@ import formattingOptions from 'lightning/i18nCldrOptions';
|
|
|
37
37
|
const { parse: parse$5, stringify: stringify$5 } = JSON;
|
|
38
38
|
const { join: join$2, push: push$2, unshift } = Array.prototype;
|
|
39
39
|
const { isArray: isArray$5 } = Array;
|
|
40
|
-
const { entries: entries$3, keys: keys$
|
|
40
|
+
const { entries: entries$3, keys: keys$7 } = Object;
|
|
41
41
|
|
|
42
42
|
const UI_API_BASE_URI = '/services/data/v59.0/ui-api';
|
|
43
43
|
|
|
@@ -102,7 +102,7 @@ function isSpanningRecord$1(fieldValue) {
|
|
|
102
102
|
function mergeRecordFields$1(first, second) {
|
|
103
103
|
const { fields: targetFields } = first;
|
|
104
104
|
const { fields: sourceFields } = second;
|
|
105
|
-
const fieldNames = keys$
|
|
105
|
+
const fieldNames = keys$7(sourceFields);
|
|
106
106
|
for (let i = 0, len = fieldNames.length; i < len; i += 1) {
|
|
107
107
|
const fieldName = fieldNames[i];
|
|
108
108
|
const sourceField = sourceFields[fieldName];
|
|
@@ -516,7 +516,7 @@ function isDeprecatedDurableStoreEntry(durableRecord) {
|
|
|
516
516
|
}
|
|
517
517
|
const DefaultDurableSegment = 'DEFAULT';
|
|
518
518
|
|
|
519
|
-
const { keys: keys$
|
|
519
|
+
const { keys: keys$6, create: create$5, assign: assign$4, freeze: freeze$1 } = Object;
|
|
520
520
|
|
|
521
521
|
//Durable store error instrumentation key
|
|
522
522
|
const DURABLE_STORE_ERROR = 'durable-store-error';
|
|
@@ -563,7 +563,7 @@ function publishDurableStoreEntries(durableRecords, put, publishMetadata) {
|
|
|
563
563
|
if (durableRecords === undefined) {
|
|
564
564
|
return { revivedKeys, hadUnexpectedShape };
|
|
565
565
|
}
|
|
566
|
-
const durableKeys = keys$
|
|
566
|
+
const durableKeys = keys$6(durableRecords);
|
|
567
567
|
if (durableKeys.length === 0) {
|
|
568
568
|
// no records to revive
|
|
569
569
|
return { revivedKeys, hadUnexpectedShape };
|
|
@@ -737,7 +737,7 @@ class DurableTTLStore {
|
|
|
737
737
|
overrides,
|
|
738
738
|
};
|
|
739
739
|
}
|
|
740
|
-
const keys$1 = keys$
|
|
740
|
+
const keys$1 = keys$6(entries);
|
|
741
741
|
for (let i = 0, len = keys$1.length; i < len; i++) {
|
|
742
742
|
const key = keys$1[i];
|
|
743
743
|
const entry = entries[key];
|
|
@@ -765,7 +765,7 @@ function flushInMemoryStoreValuesToDurableStore(store, durableStore, durableStor
|
|
|
765
765
|
// TODO: W-8909393 Once metadata is stored in its own segment we need to
|
|
766
766
|
// call setEntries for the visitedIds on default segment and call setEntries
|
|
767
767
|
// on the metadata segment for the refreshedIds
|
|
768
|
-
const keys$1 = keys$
|
|
768
|
+
const keys$1 = keys$6({ ...visitedIds, ...refreshedIds });
|
|
769
769
|
for (let i = 0, len = keys$1.length; i < len; i += 1) {
|
|
770
770
|
const key = keys$1[i];
|
|
771
771
|
const record = records[key];
|
|
@@ -787,7 +787,7 @@ function flushInMemoryStoreValuesToDurableStore(store, durableStore, durableStor
|
|
|
787
787
|
}
|
|
788
788
|
const durableStoreOperations = [];
|
|
789
789
|
// publishes
|
|
790
|
-
const recordKeys = keys$
|
|
790
|
+
const recordKeys = keys$6(durableRecords);
|
|
791
791
|
if (recordKeys.length > 0) {
|
|
792
792
|
durableStoreOperations.push({
|
|
793
793
|
type: 'setEntries',
|
|
@@ -796,7 +796,7 @@ function flushInMemoryStoreValuesToDurableStore(store, durableStore, durableStor
|
|
|
796
796
|
});
|
|
797
797
|
}
|
|
798
798
|
// evicts
|
|
799
|
-
const evictedKeys = keys$
|
|
799
|
+
const evictedKeys = keys$6(evictedRecords);
|
|
800
800
|
if (evictedKeys.length > 0) {
|
|
801
801
|
durableStoreOperations.push({
|
|
802
802
|
type: 'evictEntries',
|
|
@@ -950,7 +950,7 @@ function makeDurable(environment, { durableStore, instrumentation }) {
|
|
|
950
950
|
try {
|
|
951
951
|
const entries = await durableStore.getEntries(adapterContextKeysFromDifferentInstance, AdapterContextSegment);
|
|
952
952
|
if (entries !== undefined) {
|
|
953
|
-
const entryKeys = keys$
|
|
953
|
+
const entryKeys = keys$6(entries);
|
|
954
954
|
for (let i = 0, len = entryKeys.length; i < len; i++) {
|
|
955
955
|
const entryKey = entryKeys[i];
|
|
956
956
|
const entry = entries[entryKey];
|
|
@@ -1767,6 +1767,12 @@ function getRelationshipInfo(apiName, fieldName, infoMap) {
|
|
|
1767
1767
|
function stringLiteral(value, safe = false, isCaseSensitive = false) {
|
|
1768
1768
|
return { type: ValueType.StringLiteral, value, safe, isCaseSensitive };
|
|
1769
1769
|
}
|
|
1770
|
+
function isStringLiteral(expression) {
|
|
1771
|
+
return expression.type === ValueType.StringLiteral;
|
|
1772
|
+
}
|
|
1773
|
+
function isStringArray(expression) {
|
|
1774
|
+
return expression.type === ValueType.StringArray;
|
|
1775
|
+
}
|
|
1770
1776
|
function comparison(left, operator, right) {
|
|
1771
1777
|
return { type: PredicateType$1.comparison, left, right, operator };
|
|
1772
1778
|
}
|
|
@@ -2026,7 +2032,7 @@ function comparisonOperatorToSql(operator) {
|
|
|
2026
2032
|
case ComparisonOperator.eq:
|
|
2027
2033
|
return '=';
|
|
2028
2034
|
case ComparisonOperator.ne:
|
|
2029
|
-
return '
|
|
2035
|
+
return 'IS NOT';
|
|
2030
2036
|
case ComparisonOperator.gt:
|
|
2031
2037
|
return '>';
|
|
2032
2038
|
case ComparisonOperator.gte:
|
|
@@ -2537,6 +2543,9 @@ function compoundOperatorToSql(operator) {
|
|
|
2537
2543
|
}
|
|
2538
2544
|
}
|
|
2539
2545
|
|
|
2546
|
+
const { isArray: isArray$4 } = Array;
|
|
2547
|
+
const { keys: keys$5 } = Object;
|
|
2548
|
+
|
|
2540
2549
|
function isListValueNode(node) {
|
|
2541
2550
|
return node.kind === 'ListValue';
|
|
2542
2551
|
}
|
|
@@ -2589,13 +2598,13 @@ function isScalarDataType(type) {
|
|
|
2589
2598
|
const NotOperator = 'not';
|
|
2590
2599
|
const { eq, ne, gt, gte, lt, lte, nin, like, includes, excludes } = ComparisonOperator;
|
|
2591
2600
|
const inOp = ComparisonOperator.in;
|
|
2592
|
-
function fieldsToFilters(fieldValues, joinAlias, apiName, input, compoundOperator = CompoundOperator.and, joins) {
|
|
2601
|
+
function fieldsToFilters(fieldValues, joinAlias, apiName, input, compoundOperator = CompoundOperator.and, joins, draftFunctions) {
|
|
2593
2602
|
const results = fieldValues
|
|
2594
2603
|
.map((value) => {
|
|
2595
2604
|
if (!isObjectValueNode$1(value)) {
|
|
2596
2605
|
return [failure([message('Parent filter node should be an object.')])];
|
|
2597
2606
|
}
|
|
2598
|
-
return Object.entries(value.fields).map(([key, value]) => filter(key, value, joinAlias, apiName, input, joins));
|
|
2607
|
+
return Object.entries(value.fields).map(([key, value]) => filter(key, value, joinAlias, apiName, input, joins, draftFunctions));
|
|
2599
2608
|
})
|
|
2600
2609
|
.reduce(flatten$1, []);
|
|
2601
2610
|
const failures = results.filter(isFailure).reduce(flatMap(errors), []);
|
|
@@ -2617,22 +2626,22 @@ function fieldsToFilters(fieldValues, joinAlias, apiName, input, compoundOperato
|
|
|
2617
2626
|
return success({ predicate: resolvedPredicate });
|
|
2618
2627
|
}
|
|
2619
2628
|
//{where: {Field: ... | and: ... | or: ... | not: ...}}
|
|
2620
|
-
function recordFilter(where, joinAlias, apiName, input, joins) {
|
|
2629
|
+
function recordFilter(where, joinAlias, apiName, input, joins, draftFunctions) {
|
|
2621
2630
|
if (where === undefined) {
|
|
2622
2631
|
return success(undefined);
|
|
2623
2632
|
}
|
|
2624
2633
|
// when 'recordFilter' starts, there is no 'NotPredicated'
|
|
2625
|
-
return fieldsToFilters([where.value], joinAlias, apiName, input, CompoundOperator.and, joins).map((result) => result.predicate === undefined || isEmptyPredicate(result.predicate) ? undefined : result);
|
|
2634
|
+
return fieldsToFilters([where.value], joinAlias, apiName, input, CompoundOperator.and, joins, draftFunctions).map((result) => result.predicate === undefined || isEmptyPredicate(result.predicate) ? undefined : result);
|
|
2626
2635
|
}
|
|
2627
|
-
function filter(name, value, tableAlias, apiName, input, joins) {
|
|
2636
|
+
function filter(name, value, tableAlias, apiName, input, joins, draftFunctions) {
|
|
2628
2637
|
if (isCompoundOperator(name)) {
|
|
2629
2638
|
if (!isListValueNode(value)) {
|
|
2630
2639
|
return failure([message(`Value for ${name} node must be a list.`)]);
|
|
2631
2640
|
}
|
|
2632
|
-
return compoundPredicate(name, value, tableAlias, apiName, input, joins);
|
|
2641
|
+
return compoundPredicate(name, value, tableAlias, apiName, input, joins, draftFunctions);
|
|
2633
2642
|
}
|
|
2634
2643
|
if (name === NotOperator) {
|
|
2635
|
-
const children = fieldsToFilters([value], tableAlias, apiName, input, CompoundOperator.and, joins);
|
|
2644
|
+
const children = fieldsToFilters([value], tableAlias, apiName, input, CompoundOperator.and, joins, draftFunctions);
|
|
2636
2645
|
// take the children of a not predicate
|
|
2637
2646
|
// and wrap them all inside it
|
|
2638
2647
|
return children.flatMap((container) => {
|
|
@@ -2650,10 +2659,10 @@ function filter(name, value, tableAlias, apiName, input, joins) {
|
|
|
2650
2659
|
if (!isObjectValueNode$1(value)) {
|
|
2651
2660
|
return failure([message('Filter node must be an object or list.')]);
|
|
2652
2661
|
}
|
|
2653
|
-
return fieldFilter(name, value, tableAlias, apiName, input, joins);
|
|
2662
|
+
return fieldFilter(name, value, tableAlias, apiName, input, joins, draftFunctions);
|
|
2654
2663
|
}
|
|
2655
|
-
function compoundPredicate(operator, list, joinAlias, apiName, input, joins) {
|
|
2656
|
-
return fieldsToFilters(list.values, joinAlias, apiName, input, operator, joins);
|
|
2664
|
+
function compoundPredicate(operator, list, joinAlias, apiName, input, joins, draftFunctions) {
|
|
2665
|
+
return fieldsToFilters(list.values, joinAlias, apiName, input, operator, joins, draftFunctions);
|
|
2657
2666
|
}
|
|
2658
2667
|
/**
|
|
2659
2668
|
* spans a FieldNode with its ObjectValueNode is passed. All the predicates is added into the 'join' array.
|
|
@@ -2664,7 +2673,7 @@ function compoundPredicate(operator, list, joinAlias, apiName, input, joins) {
|
|
|
2664
2673
|
* @param joins
|
|
2665
2674
|
* @returns undefined predicate
|
|
2666
2675
|
*/
|
|
2667
|
-
function spanningFilter(fieldInfo, fieldNode, alias, input, joins) {
|
|
2676
|
+
function spanningFilter(fieldInfo, fieldNode, alias, input, joins, draftFunctions) {
|
|
2668
2677
|
const { apiName: fieldName, referenceToInfos, relationshipName } = fieldInfo;
|
|
2669
2678
|
const referenceInfo = referenceToInfos[0];
|
|
2670
2679
|
const jsonAlias = `${alias}.${relationshipName}`;
|
|
@@ -2683,7 +2692,7 @@ function spanningFilter(fieldInfo, fieldNode, alias, input, joins) {
|
|
|
2683
2692
|
joins.push(join);
|
|
2684
2693
|
// moves constraint predicate to where
|
|
2685
2694
|
const constraintPredicates = [];
|
|
2686
|
-
const filterResult = fieldsToFilters([fieldNode], jsonAlias, apiName, input, CompoundOperator.and, joins);
|
|
2695
|
+
const filterResult = fieldsToFilters([fieldNode], jsonAlias, apiName, input, CompoundOperator.and, joins, draftFunctions);
|
|
2687
2696
|
if (filterResult.isSuccess === false) {
|
|
2688
2697
|
return filterResult;
|
|
2689
2698
|
}
|
|
@@ -2695,7 +2704,11 @@ function spanningFilter(fieldInfo, fieldNode, alias, input, joins) {
|
|
|
2695
2704
|
});
|
|
2696
2705
|
return success({ predicate: combinePredicates(constraintPredicates, CompoundOperator.and) });
|
|
2697
2706
|
}
|
|
2698
|
-
function
|
|
2707
|
+
function isIDValueField$1(fieldInfo) {
|
|
2708
|
+
return (fieldInfo.apiName === 'Id' ||
|
|
2709
|
+
(fieldInfo.referenceToInfos !== undefined && fieldInfo.referenceToInfos.length > 0));
|
|
2710
|
+
}
|
|
2711
|
+
function fieldFilter(fieldName, fieldNode, alias, apiName, input, joins, draftFunctions) {
|
|
2699
2712
|
const fieldInfoResult = getFieldInfo(apiName, fieldName, input);
|
|
2700
2713
|
if (fieldInfoResult.isSuccess === false) {
|
|
2701
2714
|
return failure([fieldInfoResult.error]);
|
|
@@ -2705,8 +2718,9 @@ function fieldFilter(fieldName, fieldNode, alias, apiName, input, joins) {
|
|
|
2705
2718
|
return failure([message(`Field ${fieldName} for type ${apiName} not found.`)]);
|
|
2706
2719
|
}
|
|
2707
2720
|
if (fieldInfo.dataType === 'Reference' && fieldInfo.relationshipName === fieldName) {
|
|
2708
|
-
return spanningFilter(fieldInfo, fieldNode, alias, input, joins);
|
|
2721
|
+
return spanningFilter(fieldInfo, fieldNode, alias, input, joins, draftFunctions);
|
|
2709
2722
|
}
|
|
2723
|
+
const idProcessingNeeded = isIDValueField$1(fieldInfo);
|
|
2710
2724
|
const extract = {
|
|
2711
2725
|
type: ValueType.Extract,
|
|
2712
2726
|
jsonAlias: alias,
|
|
@@ -2797,7 +2811,29 @@ function fieldFilter(fieldName, fieldNode, alias, apiName, input, joins) {
|
|
|
2797
2811
|
children,
|
|
2798
2812
|
};
|
|
2799
2813
|
}
|
|
2800
|
-
|
|
2814
|
+
const rightOperand = op.value;
|
|
2815
|
+
if (idProcessingNeeded) {
|
|
2816
|
+
if (isStringLiteral(rightOperand)) {
|
|
2817
|
+
if (rightOperand.value !== null) {
|
|
2818
|
+
if (draftFunctions.isDraftId(rightOperand.value)) {
|
|
2819
|
+
rightOperand.value = draftFunctions.getCanonicalId(rightOperand.value);
|
|
2820
|
+
}
|
|
2821
|
+
}
|
|
2822
|
+
}
|
|
2823
|
+
else if (isStringArray(rightOperand)) {
|
|
2824
|
+
if (rightOperand.value !== null) {
|
|
2825
|
+
rightOperand.value = rightOperand.value.map((originalId) => {
|
|
2826
|
+
if (originalId !== null) {
|
|
2827
|
+
if (draftFunctions.isDraftId(originalId)) {
|
|
2828
|
+
return draftFunctions.getCanonicalId(originalId);
|
|
2829
|
+
}
|
|
2830
|
+
}
|
|
2831
|
+
return originalId;
|
|
2832
|
+
});
|
|
2833
|
+
}
|
|
2834
|
+
}
|
|
2835
|
+
}
|
|
2836
|
+
return comparison(extract, op.operator, rightOperand);
|
|
2801
2837
|
});
|
|
2802
2838
|
const combined = combinePredicates(comparisons.concat(...dateFunction.value), CompoundOperator.and);
|
|
2803
2839
|
const container = {
|
|
@@ -3899,7 +3935,7 @@ function recordQuery(selection, apiName, alias, predicates, input) {
|
|
|
3899
3935
|
const orderByJoins = [];
|
|
3900
3936
|
const orderByResult = parseOrderBy(orderByArg, alias, apiName, input.objectInfoMap, orderByJoins);
|
|
3901
3937
|
const filterJoins = [];
|
|
3902
|
-
const whereResult = recordFilter(whereArg, alias, apiName, input.objectInfoMap, filterJoins);
|
|
3938
|
+
const whereResult = recordFilter(whereArg, alias, apiName, input.objectInfoMap, filterJoins, input.draftFunctions);
|
|
3903
3939
|
const scopeJoins = [];
|
|
3904
3940
|
const scopeResult = scopeFilter(scopeArg, alias, apiName, input, scopeJoins);
|
|
3905
3941
|
let additionalPredicates = [];
|
|
@@ -4061,27 +4097,19 @@ function generateVariableGQLQuery(document, variables) {
|
|
|
4061
4097
|
? node.arguments
|
|
4062
4098
|
.map((args) => {
|
|
4063
4099
|
const { value, name } = args;
|
|
4100
|
+
//The variable is on the top level, for example `where: ${filter}`
|
|
4064
4101
|
if (is(value, 'Variable')) {
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
return `${name}: ${transform(query)}`;
|
|
4070
|
-
};
|
|
4071
|
-
switch (name) {
|
|
4072
|
-
case 'scope':
|
|
4073
|
-
case 'orderBy':
|
|
4074
|
-
return buildRecordQueryString(name, jsonString, removeAllQuotations);
|
|
4075
|
-
default:
|
|
4076
|
-
return buildRecordQueryString(name, jsonString, removeQuotationsFromKeys);
|
|
4077
|
-
}
|
|
4078
|
-
}
|
|
4079
|
-
return '';
|
|
4102
|
+
return generateVariableNodeQuery(value, name, name, variables);
|
|
4103
|
+
}
|
|
4104
|
+
else if (isObjectValueNode$1(value)) {
|
|
4105
|
+
return generateVariableSubQuery(value, name, name, variables);
|
|
4080
4106
|
}
|
|
4081
4107
|
})
|
|
4082
4108
|
.filter(Boolean)
|
|
4083
4109
|
: undefined;
|
|
4084
|
-
return gqlArguments
|
|
4110
|
+
return gqlArguments
|
|
4111
|
+
? `${node.name} ${gqlArguments.length > 0 ? '(' + gqlArguments.join(',') + ')' : ''} { Id }`
|
|
4112
|
+
: '';
|
|
4085
4113
|
})
|
|
4086
4114
|
//remove empty strings
|
|
4087
4115
|
.filter(Boolean)
|
|
@@ -4091,6 +4119,51 @@ function generateVariableGQLQuery(document, variables) {
|
|
|
4091
4119
|
return [accu.slice(0, 1), query, accu.slice(1, length)].join('');
|
|
4092
4120
|
}, '{ }'));
|
|
4093
4121
|
}
|
|
4122
|
+
/**
|
|
4123
|
+
* Given a LuvioValueNode, generates a sql with its variable node replaced with actual value.
|
|
4124
|
+
* @param valueNode G
|
|
4125
|
+
* @param name
|
|
4126
|
+
* @param type
|
|
4127
|
+
* @param variables
|
|
4128
|
+
* @returns
|
|
4129
|
+
*/
|
|
4130
|
+
function generateVariableSubQuery(valueNode, name, type, variables) {
|
|
4131
|
+
switch (valueNode.kind) {
|
|
4132
|
+
case Kind.OBJECT: {
|
|
4133
|
+
// For example, `{ Id: { eq: $draftId } }` is a `ObjectValueNode`, which has field keys 'Id'
|
|
4134
|
+
const resultQuery = keys$5(valueNode.fields)
|
|
4135
|
+
.map((key) => generateVariableSubQuery(valueNode.fields[key], key, type, variables))
|
|
4136
|
+
.filter((subquery) => subquery.length > 0)
|
|
4137
|
+
.join(',');
|
|
4138
|
+
if (resultQuery.length > 0) {
|
|
4139
|
+
return `${name}: {${resultQuery}}`;
|
|
4140
|
+
}
|
|
4141
|
+
return resultQuery;
|
|
4142
|
+
}
|
|
4143
|
+
case Kind.VARIABLE:
|
|
4144
|
+
return generateVariableNodeQuery(valueNode, name, type, variables);
|
|
4145
|
+
default:
|
|
4146
|
+
return '';
|
|
4147
|
+
}
|
|
4148
|
+
}
|
|
4149
|
+
// Generate a sql for the variable node with its actual value.
|
|
4150
|
+
function generateVariableNodeQuery(value, name, type, variables) {
|
|
4151
|
+
const variable = variables[value.name];
|
|
4152
|
+
if (variable) {
|
|
4153
|
+
const jsonString = JSON.stringify(variable);
|
|
4154
|
+
const buildRecordQueryString = (name, query, transform) => {
|
|
4155
|
+
return `${name}: ${transform(query)}`;
|
|
4156
|
+
};
|
|
4157
|
+
switch (type) {
|
|
4158
|
+
case 'scope':
|
|
4159
|
+
case 'orderBy':
|
|
4160
|
+
return buildRecordQueryString(name, jsonString, removeAllQuotations);
|
|
4161
|
+
default:
|
|
4162
|
+
return buildRecordQueryString(name, jsonString, removeQuotationsFromKeys);
|
|
4163
|
+
}
|
|
4164
|
+
}
|
|
4165
|
+
return '';
|
|
4166
|
+
}
|
|
4094
4167
|
/**
|
|
4095
4168
|
* Given an AST with variables
|
|
4096
4169
|
* Swap out the LuvioArgumentNodes on the original AST with ones generated from its variables.
|
|
@@ -4109,14 +4182,43 @@ function swapVariableArguments(document, variables) {
|
|
|
4109
4182
|
const { name } = node;
|
|
4110
4183
|
const first = allArgumentRecords.find((n) => n.name === name);
|
|
4111
4184
|
if (first) {
|
|
4112
|
-
|
|
4113
|
-
first.arguments =
|
|
4114
|
-
? first.arguments.filter((x) => x.value.kind !== 'Variable')
|
|
4115
|
-
: [], node.arguments ? node.arguments : []);
|
|
4185
|
+
const swappedArgments = swapArgumentWithVariableNodes(node.arguments, first.arguments);
|
|
4186
|
+
first.arguments = swappedArgments ? swappedArgments : [];
|
|
4116
4187
|
}
|
|
4117
4188
|
});
|
|
4118
4189
|
}
|
|
4119
4190
|
}
|
|
4191
|
+
// Replaces the variable node in original LuvioArgumentNode with the actual value in the swapped node with the same path.
|
|
4192
|
+
function swapArgumentWithVariableNodes(swapped, original) {
|
|
4193
|
+
if (swapped === undefined || original === undefined) {
|
|
4194
|
+
return original;
|
|
4195
|
+
}
|
|
4196
|
+
return original.map((x) => {
|
|
4197
|
+
const targetNode = swapped.find((y) => y.name === x.name);
|
|
4198
|
+
if (targetNode === undefined) {
|
|
4199
|
+
return x;
|
|
4200
|
+
}
|
|
4201
|
+
if (x.value.kind === 'Variable') {
|
|
4202
|
+
return targetNode;
|
|
4203
|
+
}
|
|
4204
|
+
swapValueNodeWithVariableNodes(x.value, targetNode.value);
|
|
4205
|
+
return x;
|
|
4206
|
+
});
|
|
4207
|
+
}
|
|
4208
|
+
function swapValueNodeWithVariableNodes(original, swapped) {
|
|
4209
|
+
if (original.kind === Kind.OBJECT) {
|
|
4210
|
+
for (const key of keys$5(original.fields)) {
|
|
4211
|
+
if (isObjectValueNode$1(swapped) && swapped.fields[key]) {
|
|
4212
|
+
if (is(original.fields[key], 'Variable')) {
|
|
4213
|
+
original.fields[key] = swapped.fields[key];
|
|
4214
|
+
}
|
|
4215
|
+
else {
|
|
4216
|
+
swapValueNodeWithVariableNodes(original.fields[key], swapped.fields[key]);
|
|
4217
|
+
}
|
|
4218
|
+
}
|
|
4219
|
+
}
|
|
4220
|
+
}
|
|
4221
|
+
}
|
|
4120
4222
|
//find top level record queries
|
|
4121
4223
|
function findRecordSelections(document) {
|
|
4122
4224
|
return document.definitions
|
|
@@ -4151,7 +4253,7 @@ class StoreEvalPreconditioner {
|
|
|
4151
4253
|
* Missing object info records triggers the objectInfoService (same instance shared with Drafts code), to
|
|
4152
4254
|
* use the getObjectInfos adapter to efficiently fetch the necessary records.
|
|
4153
4255
|
*/
|
|
4154
|
-
async createRootQuery(config, objectInfoService, userId) {
|
|
4256
|
+
async createRootQuery(config, objectInfoService, userId, draftFunctions) {
|
|
4155
4257
|
const { query: ast, variables } = config;
|
|
4156
4258
|
swapVariableArguments(ast, variables);
|
|
4157
4259
|
// Parse out top-level record queries types we know we will need, since spanning fields will
|
|
@@ -4198,6 +4300,7 @@ class StoreEvalPreconditioner {
|
|
|
4198
4300
|
astTransformResult = transform(ast, {
|
|
4199
4301
|
userId,
|
|
4200
4302
|
objectInfoMap,
|
|
4303
|
+
draftFunctions,
|
|
4201
4304
|
});
|
|
4202
4305
|
if (astTransformResult.isSuccess === false) {
|
|
4203
4306
|
for (const error of astTransformResult.error) {
|
|
@@ -4235,8 +4338,6 @@ class StoreEvalPreconditioner {
|
|
|
4235
4338
|
}
|
|
4236
4339
|
}
|
|
4237
4340
|
|
|
4238
|
-
const { isArray: isArray$4 } = Array;
|
|
4239
|
-
|
|
4240
4341
|
/**
|
|
4241
4342
|
* Checks a GraphQL-shaped network response for errors, returning true if it does
|
|
4242
4343
|
* and false otherwise
|
|
@@ -4282,7 +4383,7 @@ const wrapStartEndEvents = (storeEval) => {
|
|
|
4282
4383
|
return snapshot;
|
|
4283
4384
|
};
|
|
4284
4385
|
};
|
|
4285
|
-
function sqliteStoreEvalFactory(userId, sqliteStore, objectInfoService) {
|
|
4386
|
+
function sqliteStoreEvalFactory(userId, sqliteStore, objectInfoService, draftFunctions) {
|
|
4286
4387
|
// if the store does not support eval then use the noop version
|
|
4287
4388
|
if (sqliteStore.isEvalSupported() === false) {
|
|
4288
4389
|
return noopStoreEval;
|
|
@@ -4290,7 +4391,7 @@ function sqliteStoreEvalFactory(userId, sqliteStore, objectInfoService) {
|
|
|
4290
4391
|
const preconditioner = new StoreEvalPreconditioner();
|
|
4291
4392
|
return makeStoreEval(preconditioner, objectInfoService, userId, async () => {
|
|
4292
4393
|
return undefined;
|
|
4293
|
-
}, (query, _context, eventEmitter) => evaluateSqlite(query, eventEmitter, sqliteStore));
|
|
4394
|
+
}, (query, _context, eventEmitter) => evaluateSqlite(query, eventEmitter, sqliteStore), draftFunctions);
|
|
4294
4395
|
}
|
|
4295
4396
|
async function noopStoreEval(_config, nonEvaluatedSnapshotOrPromise, _observers) {
|
|
4296
4397
|
return nonEvaluatedSnapshotOrPromise;
|
|
@@ -4309,7 +4410,7 @@ function isErrorSnapshotThatShouldGetReturnedToCaller$1(snapshot) {
|
|
|
4309
4410
|
function generateUniqueRecordId$1() {
|
|
4310
4411
|
return `${GRAPHQL_ROOT_KEY$1}${Date.now() + Math.random().toFixed(5).split('.')[1]}`;
|
|
4311
4412
|
}
|
|
4312
|
-
function makeStoreEval(preconditioner, objectInfoService, userId, contextProvider, queryEvaluator) {
|
|
4413
|
+
function makeStoreEval(preconditioner, objectInfoService, userId, contextProvider, queryEvaluator, draftFunctions) {
|
|
4313
4414
|
const storeEval = async (config, nonEvaluatedSnapshotOrPromise, observers) => {
|
|
4314
4415
|
const eventEmitter = createCustomAdapterEventEmitter(GRAPHQL_EVAL_NAMESPACE$1, observers);
|
|
4315
4416
|
// the non-eval'ed input could either be a snapshot or promise of one so
|
|
@@ -4339,7 +4440,7 @@ function makeStoreEval(preconditioner, objectInfoService, userId, contextProvide
|
|
|
4339
4440
|
context = await contextProvider();
|
|
4340
4441
|
// Ensures ObjectInfo metadata is available for the request. Sourcing records from L1/L2/Network
|
|
4341
4442
|
// is delegated to the getObjectInfo adapter via objectInfoService
|
|
4342
|
-
rootQuery = await preconditioner.createRootQuery(config, objectInfoService, userId);
|
|
4443
|
+
rootQuery = await preconditioner.createRootQuery(config, objectInfoService, userId, draftFunctions);
|
|
4343
4444
|
}
|
|
4344
4445
|
catch (error) {
|
|
4345
4446
|
eventEmitter({
|
|
@@ -11939,6 +12040,19 @@ function makeRecordDenormalizingDurableStore(luvio, durableStore, getStoreRecord
|
|
|
11939
12040
|
});
|
|
11940
12041
|
}
|
|
11941
12042
|
|
|
12043
|
+
/**
|
|
12044
|
+
* This function takes an unknown error and normalizes it to an Error object
|
|
12045
|
+
*/
|
|
12046
|
+
function normalizeError$1(error) {
|
|
12047
|
+
if (typeof error === 'object' && error instanceof Error) {
|
|
12048
|
+
return error;
|
|
12049
|
+
}
|
|
12050
|
+
else if (typeof error === 'string') {
|
|
12051
|
+
return new Error(error);
|
|
12052
|
+
}
|
|
12053
|
+
return new Error(stringify$2(error));
|
|
12054
|
+
}
|
|
12055
|
+
|
|
11942
12056
|
const PERFORM_QUICK_ACTION_ENDPOINT_REGEX = /^\/ui-api\/actions\/perform-quick-action\/.*$/;
|
|
11943
12057
|
/**
|
|
11944
12058
|
* Checks if a provided resource request is a POST operation on the record
|
|
@@ -11957,7 +12071,7 @@ function performQuickActionDraftEnvironment(luvio, env, handler) {
|
|
|
11957
12071
|
return env.dispatchResourceRequest(request, context, eventObservers);
|
|
11958
12072
|
}
|
|
11959
12073
|
const { data } = await handler.enqueue(request).catch((err) => {
|
|
11960
|
-
throw createDraftSynthesisErrorResponse(err.message);
|
|
12074
|
+
throw createDraftSynthesisErrorResponse(normalizeError$1(err).message);
|
|
11961
12075
|
});
|
|
11962
12076
|
if (data === undefined) {
|
|
11963
12077
|
return Promise.reject(createDraftSynthesisErrorResponse());
|
|
@@ -13954,15 +14068,15 @@ class NimbusDraftQueue {
|
|
|
13954
14068
|
enqueue(handlerId, data) {
|
|
13955
14069
|
const callProxyMethod = __nimbus.plugins.LdsDraftQueue.callProxyMethod;
|
|
13956
14070
|
if (callProxyMethod === undefined) {
|
|
13957
|
-
return Promise.reject('callProxyMethod not defined on the nimbus plugin');
|
|
14071
|
+
return Promise.reject(new Error('callProxyMethod not defined on the nimbus plugin'));
|
|
13958
14072
|
}
|
|
13959
14073
|
const serializedAction = stringify([handlerId, data]);
|
|
13960
14074
|
return new Promise((resolve, reject) => {
|
|
13961
14075
|
callProxyMethod('enqueue', serializedAction, (serializedActionResponse) => {
|
|
13962
14076
|
const response = parse(serializedActionResponse);
|
|
13963
14077
|
resolve(response);
|
|
13964
|
-
}, (
|
|
13965
|
-
reject(
|
|
14078
|
+
}, (errorMessage) => {
|
|
14079
|
+
reject(new Error(errorMessage));
|
|
13966
14080
|
});
|
|
13967
14081
|
});
|
|
13968
14082
|
}
|
|
@@ -13972,18 +14086,18 @@ class NimbusDraftQueue {
|
|
|
13972
14086
|
return Promise.resolve;
|
|
13973
14087
|
}
|
|
13974
14088
|
processNextAction() {
|
|
13975
|
-
return Promise.reject('Cannot call processNextAction from the NimbusDraftQueue');
|
|
14089
|
+
return Promise.reject(new Error('Cannot call processNextAction from the NimbusDraftQueue'));
|
|
13976
14090
|
}
|
|
13977
14091
|
getQueueActions() {
|
|
13978
14092
|
const callProxyMethod = __nimbus.plugins.LdsDraftQueue.callProxyMethod;
|
|
13979
14093
|
if (callProxyMethod === undefined) {
|
|
13980
|
-
return Promise.reject('callProxyMethod not defined on the nimbus plugin');
|
|
14094
|
+
return Promise.reject(new Error('callProxyMethod not defined on the nimbus plugin'));
|
|
13981
14095
|
}
|
|
13982
14096
|
return new Promise((resolve, reject) => {
|
|
13983
14097
|
callProxyMethod('getQueueActions', stringify([]), (serializedQueue) => {
|
|
13984
14098
|
resolve(parse(serializedQueue));
|
|
13985
|
-
}, (
|
|
13986
|
-
reject(
|
|
14099
|
+
}, (errorMessage) => {
|
|
14100
|
+
reject(new Error(errorMessage));
|
|
13987
14101
|
});
|
|
13988
14102
|
});
|
|
13989
14103
|
}
|
|
@@ -14011,32 +14125,32 @@ class NimbusDraftQueue {
|
|
|
14011
14125
|
throw new Error('Cannot call getQueueState from the NimbusDraftQueue');
|
|
14012
14126
|
}
|
|
14013
14127
|
removeDraftAction(_actionId) {
|
|
14014
|
-
return Promise.reject('Cannot call removeDraftAction from the NimbusDraftQueue');
|
|
14128
|
+
return Promise.reject(new Error('Cannot call removeDraftAction from the NimbusDraftQueue'));
|
|
14015
14129
|
}
|
|
14016
14130
|
startQueue() {
|
|
14017
|
-
return Promise.reject('Cannot call startQueue from the NimbusDraftQueue');
|
|
14131
|
+
return Promise.reject(new Error('Cannot call startQueue from the NimbusDraftQueue'));
|
|
14018
14132
|
}
|
|
14019
14133
|
stopQueue() {
|
|
14020
|
-
return Promise.reject('Cannot call stopQueue from the NimbusDraftQueue');
|
|
14134
|
+
return Promise.reject(new Error('Cannot call stopQueue from the NimbusDraftQueue'));
|
|
14021
14135
|
}
|
|
14022
14136
|
replaceAction(_actionId, _withActionId) {
|
|
14023
|
-
return Promise.reject('Cannot call replaceAction from the NimbusDraftQueue');
|
|
14137
|
+
return Promise.reject(new Error('Cannot call replaceAction from the NimbusDraftQueue'));
|
|
14024
14138
|
}
|
|
14025
14139
|
mergeActions(_targetActionId, _sourceActionId) {
|
|
14026
|
-
return Promise.reject('Cannot call mergeActions from the NimbusDraftQueue');
|
|
14140
|
+
return Promise.reject(new Error('Cannot call mergeActions from the NimbusDraftQueue'));
|
|
14027
14141
|
}
|
|
14028
14142
|
setMetadata(_actionId, _metadata) {
|
|
14029
|
-
return Promise.reject('Cannot call setMetadata from the NimbusDraftQueue');
|
|
14143
|
+
return Promise.reject(new Error('Cannot call setMetadata from the NimbusDraftQueue'));
|
|
14030
14144
|
}
|
|
14031
14145
|
addHandler(_handler) {
|
|
14032
14146
|
// no-op -- all registration occurs against concrete draft queue
|
|
14033
14147
|
return Promise.resolve();
|
|
14034
14148
|
}
|
|
14035
14149
|
addCustomHandler(_id, _executor) {
|
|
14036
|
-
return Promise.reject('Cannot call setMetadata from the NimbusDraftQueue');
|
|
14150
|
+
return Promise.reject(new Error('Cannot call setMetadata from the NimbusDraftQueue'));
|
|
14037
14151
|
}
|
|
14038
14152
|
removeHandler(_id) {
|
|
14039
|
-
return Promise.reject('Cannot call setMetadata from the NimbusDraftQueue');
|
|
14153
|
+
return Promise.reject(new Error('Cannot call setMetadata from the NimbusDraftQueue'));
|
|
14040
14154
|
}
|
|
14041
14155
|
}
|
|
14042
14156
|
|
|
@@ -15632,11 +15746,6 @@ function getRuntime() {
|
|
|
15632
15746
|
getIngestMetadataForInternalAdapters =
|
|
15633
15747
|
internalAdapterDurableEnvironment.getIngestStagingStoreRecords;
|
|
15634
15748
|
lazyObjectInfoService = new ObjectInfoService(getObjectInfo, getObjectInfos, internalAdapterDurableStore);
|
|
15635
|
-
// set storeEval function for lds-adapters-graghql to use
|
|
15636
|
-
withRegistration('@salesforce/lds-adapters-graphql', (registration) => {
|
|
15637
|
-
const { configuration: { setStoreEval }, } = registration;
|
|
15638
|
-
setStoreEval(sqliteStoreEvalFactory(userId, lazyBaseDurableStore, lazyObjectInfoService));
|
|
15639
|
-
});
|
|
15640
15749
|
// creates a durable store that denormalizes scalar fields for records
|
|
15641
15750
|
let getIngestRecords;
|
|
15642
15751
|
let getIngestMetadata;
|
|
@@ -15675,6 +15784,20 @@ function getRuntime() {
|
|
|
15675
15784
|
setupMobileInstrumentation(lazyLuvio, store);
|
|
15676
15785
|
// If the inspection nimbus plugin is configured, inspection is enabled otherwise this is a no-op
|
|
15677
15786
|
setupInspection(lazyLuvio);
|
|
15787
|
+
// set storeEval function for lds-adapters-graghql to use
|
|
15788
|
+
withRegistration('@salesforce/lds-adapters-graphql', (registration) => {
|
|
15789
|
+
const { configuration: { setStoreEval, setDraftFunctions }, } = registration;
|
|
15790
|
+
const getCanonicalId = (id) => {
|
|
15791
|
+
var _a;
|
|
15792
|
+
return ((_a = extractRecordIdFromStoreKey(lazyLuvio.storeGetCanonicalKey(RECORD_ID_PREFIX + id))) !== null && _a !== void 0 ? _a : id);
|
|
15793
|
+
};
|
|
15794
|
+
const draftFuncs = {
|
|
15795
|
+
isDraftId: isGenerated,
|
|
15796
|
+
getCanonicalId,
|
|
15797
|
+
};
|
|
15798
|
+
setStoreEval(sqliteStoreEvalFactory(userId, lazyBaseDurableStore, lazyObjectInfoService, draftFuncs));
|
|
15799
|
+
setDraftFunctions(draftFuncs);
|
|
15800
|
+
});
|
|
15678
15801
|
// on core the graphql configuration is split so we need to set configureUIAPIGraphQL both in the
|
|
15679
15802
|
// graphql registration and the uiapi for off core
|
|
15680
15803
|
const configureUIAPIGraphQL = (registration) => {
|
|
@@ -15727,4 +15850,4 @@ register({
|
|
|
15727
15850
|
});
|
|
15728
15851
|
|
|
15729
15852
|
export { getRuntime, registerReportObserver, reportGraphqlQueryParseError };
|
|
15730
|
-
// version: 1.136.
|
|
15853
|
+
// version: 1.136.7-777657471
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/lds-runtime-mobile",
|
|
3
|
-
"version": "1.136.
|
|
3
|
+
"version": "1.136.7",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
5
5
|
"description": "LDS runtime for mobile/hybrid environments.",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"maxSize": {
|
|
60
60
|
"none": "650 kB",
|
|
61
61
|
"min": "255 kB",
|
|
62
|
-
"compressed": "
|
|
62
|
+
"compressed": "102 kB"
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
65
|
{
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"maxSize": {
|
|
68
68
|
"none": "650 kB",
|
|
69
69
|
"min": "255 kB",
|
|
70
|
-
"compressed": "
|
|
70
|
+
"compressed": "102 kB"
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
],
|
package/sfdc/main.js
CHANGED
|
@@ -37,7 +37,7 @@ import formattingOptions from 'lightning/i18nCldrOptions';
|
|
|
37
37
|
const { parse: parse$5, stringify: stringify$5 } = JSON;
|
|
38
38
|
const { join: join$2, push: push$2, unshift } = Array.prototype;
|
|
39
39
|
const { isArray: isArray$5 } = Array;
|
|
40
|
-
const { entries: entries$3, keys: keys$
|
|
40
|
+
const { entries: entries$3, keys: keys$7 } = Object;
|
|
41
41
|
|
|
42
42
|
const UI_API_BASE_URI = '/services/data/v59.0/ui-api';
|
|
43
43
|
|
|
@@ -102,7 +102,7 @@ function isSpanningRecord$1(fieldValue) {
|
|
|
102
102
|
function mergeRecordFields$1(first, second) {
|
|
103
103
|
const { fields: targetFields } = first;
|
|
104
104
|
const { fields: sourceFields } = second;
|
|
105
|
-
const fieldNames = keys$
|
|
105
|
+
const fieldNames = keys$7(sourceFields);
|
|
106
106
|
for (let i = 0, len = fieldNames.length; i < len; i += 1) {
|
|
107
107
|
const fieldName = fieldNames[i];
|
|
108
108
|
const sourceField = sourceFields[fieldName];
|
|
@@ -516,7 +516,7 @@ function isDeprecatedDurableStoreEntry(durableRecord) {
|
|
|
516
516
|
}
|
|
517
517
|
const DefaultDurableSegment = 'DEFAULT';
|
|
518
518
|
|
|
519
|
-
const { keys: keys$
|
|
519
|
+
const { keys: keys$6, create: create$5, assign: assign$4, freeze: freeze$1 } = Object;
|
|
520
520
|
|
|
521
521
|
//Durable store error instrumentation key
|
|
522
522
|
const DURABLE_STORE_ERROR = 'durable-store-error';
|
|
@@ -563,7 +563,7 @@ function publishDurableStoreEntries(durableRecords, put, publishMetadata) {
|
|
|
563
563
|
if (durableRecords === undefined) {
|
|
564
564
|
return { revivedKeys, hadUnexpectedShape };
|
|
565
565
|
}
|
|
566
|
-
const durableKeys = keys$
|
|
566
|
+
const durableKeys = keys$6(durableRecords);
|
|
567
567
|
if (durableKeys.length === 0) {
|
|
568
568
|
// no records to revive
|
|
569
569
|
return { revivedKeys, hadUnexpectedShape };
|
|
@@ -737,7 +737,7 @@ class DurableTTLStore {
|
|
|
737
737
|
overrides,
|
|
738
738
|
};
|
|
739
739
|
}
|
|
740
|
-
const keys$1 = keys$
|
|
740
|
+
const keys$1 = keys$6(entries);
|
|
741
741
|
for (let i = 0, len = keys$1.length; i < len; i++) {
|
|
742
742
|
const key = keys$1[i];
|
|
743
743
|
const entry = entries[key];
|
|
@@ -765,7 +765,7 @@ function flushInMemoryStoreValuesToDurableStore(store, durableStore, durableStor
|
|
|
765
765
|
// TODO: W-8909393 Once metadata is stored in its own segment we need to
|
|
766
766
|
// call setEntries for the visitedIds on default segment and call setEntries
|
|
767
767
|
// on the metadata segment for the refreshedIds
|
|
768
|
-
const keys$1 = keys$
|
|
768
|
+
const keys$1 = keys$6({ ...visitedIds, ...refreshedIds });
|
|
769
769
|
for (let i = 0, len = keys$1.length; i < len; i += 1) {
|
|
770
770
|
const key = keys$1[i];
|
|
771
771
|
const record = records[key];
|
|
@@ -787,7 +787,7 @@ function flushInMemoryStoreValuesToDurableStore(store, durableStore, durableStor
|
|
|
787
787
|
}
|
|
788
788
|
const durableStoreOperations = [];
|
|
789
789
|
// publishes
|
|
790
|
-
const recordKeys = keys$
|
|
790
|
+
const recordKeys = keys$6(durableRecords);
|
|
791
791
|
if (recordKeys.length > 0) {
|
|
792
792
|
durableStoreOperations.push({
|
|
793
793
|
type: 'setEntries',
|
|
@@ -796,7 +796,7 @@ function flushInMemoryStoreValuesToDurableStore(store, durableStore, durableStor
|
|
|
796
796
|
});
|
|
797
797
|
}
|
|
798
798
|
// evicts
|
|
799
|
-
const evictedKeys = keys$
|
|
799
|
+
const evictedKeys = keys$6(evictedRecords);
|
|
800
800
|
if (evictedKeys.length > 0) {
|
|
801
801
|
durableStoreOperations.push({
|
|
802
802
|
type: 'evictEntries',
|
|
@@ -950,7 +950,7 @@ function makeDurable(environment, { durableStore, instrumentation }) {
|
|
|
950
950
|
try {
|
|
951
951
|
const entries = await durableStore.getEntries(adapterContextKeysFromDifferentInstance, AdapterContextSegment);
|
|
952
952
|
if (entries !== undefined) {
|
|
953
|
-
const entryKeys = keys$
|
|
953
|
+
const entryKeys = keys$6(entries);
|
|
954
954
|
for (let i = 0, len = entryKeys.length; i < len; i++) {
|
|
955
955
|
const entryKey = entryKeys[i];
|
|
956
956
|
const entry = entries[entryKey];
|
|
@@ -1767,6 +1767,12 @@ function getRelationshipInfo(apiName, fieldName, infoMap) {
|
|
|
1767
1767
|
function stringLiteral(value, safe = false, isCaseSensitive = false) {
|
|
1768
1768
|
return { type: ValueType.StringLiteral, value, safe, isCaseSensitive };
|
|
1769
1769
|
}
|
|
1770
|
+
function isStringLiteral(expression) {
|
|
1771
|
+
return expression.type === ValueType.StringLiteral;
|
|
1772
|
+
}
|
|
1773
|
+
function isStringArray(expression) {
|
|
1774
|
+
return expression.type === ValueType.StringArray;
|
|
1775
|
+
}
|
|
1770
1776
|
function comparison(left, operator, right) {
|
|
1771
1777
|
return { type: PredicateType$1.comparison, left, right, operator };
|
|
1772
1778
|
}
|
|
@@ -2026,7 +2032,7 @@ function comparisonOperatorToSql(operator) {
|
|
|
2026
2032
|
case ComparisonOperator.eq:
|
|
2027
2033
|
return '=';
|
|
2028
2034
|
case ComparisonOperator.ne:
|
|
2029
|
-
return '
|
|
2035
|
+
return 'IS NOT';
|
|
2030
2036
|
case ComparisonOperator.gt:
|
|
2031
2037
|
return '>';
|
|
2032
2038
|
case ComparisonOperator.gte:
|
|
@@ -2537,6 +2543,9 @@ function compoundOperatorToSql(operator) {
|
|
|
2537
2543
|
}
|
|
2538
2544
|
}
|
|
2539
2545
|
|
|
2546
|
+
const { isArray: isArray$4 } = Array;
|
|
2547
|
+
const { keys: keys$5 } = Object;
|
|
2548
|
+
|
|
2540
2549
|
function isListValueNode(node) {
|
|
2541
2550
|
return node.kind === 'ListValue';
|
|
2542
2551
|
}
|
|
@@ -2589,13 +2598,13 @@ function isScalarDataType(type) {
|
|
|
2589
2598
|
const NotOperator = 'not';
|
|
2590
2599
|
const { eq, ne, gt, gte, lt, lte, nin, like, includes, excludes } = ComparisonOperator;
|
|
2591
2600
|
const inOp = ComparisonOperator.in;
|
|
2592
|
-
function fieldsToFilters(fieldValues, joinAlias, apiName, input, compoundOperator = CompoundOperator.and, joins) {
|
|
2601
|
+
function fieldsToFilters(fieldValues, joinAlias, apiName, input, compoundOperator = CompoundOperator.and, joins, draftFunctions) {
|
|
2593
2602
|
const results = fieldValues
|
|
2594
2603
|
.map((value) => {
|
|
2595
2604
|
if (!isObjectValueNode$1(value)) {
|
|
2596
2605
|
return [failure([message('Parent filter node should be an object.')])];
|
|
2597
2606
|
}
|
|
2598
|
-
return Object.entries(value.fields).map(([key, value]) => filter(key, value, joinAlias, apiName, input, joins));
|
|
2607
|
+
return Object.entries(value.fields).map(([key, value]) => filter(key, value, joinAlias, apiName, input, joins, draftFunctions));
|
|
2599
2608
|
})
|
|
2600
2609
|
.reduce(flatten$1, []);
|
|
2601
2610
|
const failures = results.filter(isFailure).reduce(flatMap(errors), []);
|
|
@@ -2617,22 +2626,22 @@ function fieldsToFilters(fieldValues, joinAlias, apiName, input, compoundOperato
|
|
|
2617
2626
|
return success({ predicate: resolvedPredicate });
|
|
2618
2627
|
}
|
|
2619
2628
|
//{where: {Field: ... | and: ... | or: ... | not: ...}}
|
|
2620
|
-
function recordFilter(where, joinAlias, apiName, input, joins) {
|
|
2629
|
+
function recordFilter(where, joinAlias, apiName, input, joins, draftFunctions) {
|
|
2621
2630
|
if (where === undefined) {
|
|
2622
2631
|
return success(undefined);
|
|
2623
2632
|
}
|
|
2624
2633
|
// when 'recordFilter' starts, there is no 'NotPredicated'
|
|
2625
|
-
return fieldsToFilters([where.value], joinAlias, apiName, input, CompoundOperator.and, joins).map((result) => result.predicate === undefined || isEmptyPredicate(result.predicate) ? undefined : result);
|
|
2634
|
+
return fieldsToFilters([where.value], joinAlias, apiName, input, CompoundOperator.and, joins, draftFunctions).map((result) => result.predicate === undefined || isEmptyPredicate(result.predicate) ? undefined : result);
|
|
2626
2635
|
}
|
|
2627
|
-
function filter(name, value, tableAlias, apiName, input, joins) {
|
|
2636
|
+
function filter(name, value, tableAlias, apiName, input, joins, draftFunctions) {
|
|
2628
2637
|
if (isCompoundOperator(name)) {
|
|
2629
2638
|
if (!isListValueNode(value)) {
|
|
2630
2639
|
return failure([message(`Value for ${name} node must be a list.`)]);
|
|
2631
2640
|
}
|
|
2632
|
-
return compoundPredicate(name, value, tableAlias, apiName, input, joins);
|
|
2641
|
+
return compoundPredicate(name, value, tableAlias, apiName, input, joins, draftFunctions);
|
|
2633
2642
|
}
|
|
2634
2643
|
if (name === NotOperator) {
|
|
2635
|
-
const children = fieldsToFilters([value], tableAlias, apiName, input, CompoundOperator.and, joins);
|
|
2644
|
+
const children = fieldsToFilters([value], tableAlias, apiName, input, CompoundOperator.and, joins, draftFunctions);
|
|
2636
2645
|
// take the children of a not predicate
|
|
2637
2646
|
// and wrap them all inside it
|
|
2638
2647
|
return children.flatMap((container) => {
|
|
@@ -2650,10 +2659,10 @@ function filter(name, value, tableAlias, apiName, input, joins) {
|
|
|
2650
2659
|
if (!isObjectValueNode$1(value)) {
|
|
2651
2660
|
return failure([message('Filter node must be an object or list.')]);
|
|
2652
2661
|
}
|
|
2653
|
-
return fieldFilter(name, value, tableAlias, apiName, input, joins);
|
|
2662
|
+
return fieldFilter(name, value, tableAlias, apiName, input, joins, draftFunctions);
|
|
2654
2663
|
}
|
|
2655
|
-
function compoundPredicate(operator, list, joinAlias, apiName, input, joins) {
|
|
2656
|
-
return fieldsToFilters(list.values, joinAlias, apiName, input, operator, joins);
|
|
2664
|
+
function compoundPredicate(operator, list, joinAlias, apiName, input, joins, draftFunctions) {
|
|
2665
|
+
return fieldsToFilters(list.values, joinAlias, apiName, input, operator, joins, draftFunctions);
|
|
2657
2666
|
}
|
|
2658
2667
|
/**
|
|
2659
2668
|
* spans a FieldNode with its ObjectValueNode is passed. All the predicates is added into the 'join' array.
|
|
@@ -2664,7 +2673,7 @@ function compoundPredicate(operator, list, joinAlias, apiName, input, joins) {
|
|
|
2664
2673
|
* @param joins
|
|
2665
2674
|
* @returns undefined predicate
|
|
2666
2675
|
*/
|
|
2667
|
-
function spanningFilter(fieldInfo, fieldNode, alias, input, joins) {
|
|
2676
|
+
function spanningFilter(fieldInfo, fieldNode, alias, input, joins, draftFunctions) {
|
|
2668
2677
|
const { apiName: fieldName, referenceToInfos, relationshipName } = fieldInfo;
|
|
2669
2678
|
const referenceInfo = referenceToInfos[0];
|
|
2670
2679
|
const jsonAlias = `${alias}.${relationshipName}`;
|
|
@@ -2683,7 +2692,7 @@ function spanningFilter(fieldInfo, fieldNode, alias, input, joins) {
|
|
|
2683
2692
|
joins.push(join);
|
|
2684
2693
|
// moves constraint predicate to where
|
|
2685
2694
|
const constraintPredicates = [];
|
|
2686
|
-
const filterResult = fieldsToFilters([fieldNode], jsonAlias, apiName, input, CompoundOperator.and, joins);
|
|
2695
|
+
const filterResult = fieldsToFilters([fieldNode], jsonAlias, apiName, input, CompoundOperator.and, joins, draftFunctions);
|
|
2687
2696
|
if (filterResult.isSuccess === false) {
|
|
2688
2697
|
return filterResult;
|
|
2689
2698
|
}
|
|
@@ -2695,7 +2704,11 @@ function spanningFilter(fieldInfo, fieldNode, alias, input, joins) {
|
|
|
2695
2704
|
});
|
|
2696
2705
|
return success({ predicate: combinePredicates(constraintPredicates, CompoundOperator.and) });
|
|
2697
2706
|
}
|
|
2698
|
-
function
|
|
2707
|
+
function isIDValueField$1(fieldInfo) {
|
|
2708
|
+
return (fieldInfo.apiName === 'Id' ||
|
|
2709
|
+
(fieldInfo.referenceToInfos !== undefined && fieldInfo.referenceToInfos.length > 0));
|
|
2710
|
+
}
|
|
2711
|
+
function fieldFilter(fieldName, fieldNode, alias, apiName, input, joins, draftFunctions) {
|
|
2699
2712
|
const fieldInfoResult = getFieldInfo(apiName, fieldName, input);
|
|
2700
2713
|
if (fieldInfoResult.isSuccess === false) {
|
|
2701
2714
|
return failure([fieldInfoResult.error]);
|
|
@@ -2705,8 +2718,9 @@ function fieldFilter(fieldName, fieldNode, alias, apiName, input, joins) {
|
|
|
2705
2718
|
return failure([message(`Field ${fieldName} for type ${apiName} not found.`)]);
|
|
2706
2719
|
}
|
|
2707
2720
|
if (fieldInfo.dataType === 'Reference' && fieldInfo.relationshipName === fieldName) {
|
|
2708
|
-
return spanningFilter(fieldInfo, fieldNode, alias, input, joins);
|
|
2721
|
+
return spanningFilter(fieldInfo, fieldNode, alias, input, joins, draftFunctions);
|
|
2709
2722
|
}
|
|
2723
|
+
const idProcessingNeeded = isIDValueField$1(fieldInfo);
|
|
2710
2724
|
const extract = {
|
|
2711
2725
|
type: ValueType.Extract,
|
|
2712
2726
|
jsonAlias: alias,
|
|
@@ -2797,7 +2811,29 @@ function fieldFilter(fieldName, fieldNode, alias, apiName, input, joins) {
|
|
|
2797
2811
|
children,
|
|
2798
2812
|
};
|
|
2799
2813
|
}
|
|
2800
|
-
|
|
2814
|
+
const rightOperand = op.value;
|
|
2815
|
+
if (idProcessingNeeded) {
|
|
2816
|
+
if (isStringLiteral(rightOperand)) {
|
|
2817
|
+
if (rightOperand.value !== null) {
|
|
2818
|
+
if (draftFunctions.isDraftId(rightOperand.value)) {
|
|
2819
|
+
rightOperand.value = draftFunctions.getCanonicalId(rightOperand.value);
|
|
2820
|
+
}
|
|
2821
|
+
}
|
|
2822
|
+
}
|
|
2823
|
+
else if (isStringArray(rightOperand)) {
|
|
2824
|
+
if (rightOperand.value !== null) {
|
|
2825
|
+
rightOperand.value = rightOperand.value.map((originalId) => {
|
|
2826
|
+
if (originalId !== null) {
|
|
2827
|
+
if (draftFunctions.isDraftId(originalId)) {
|
|
2828
|
+
return draftFunctions.getCanonicalId(originalId);
|
|
2829
|
+
}
|
|
2830
|
+
}
|
|
2831
|
+
return originalId;
|
|
2832
|
+
});
|
|
2833
|
+
}
|
|
2834
|
+
}
|
|
2835
|
+
}
|
|
2836
|
+
return comparison(extract, op.operator, rightOperand);
|
|
2801
2837
|
});
|
|
2802
2838
|
const combined = combinePredicates(comparisons.concat(...dateFunction.value), CompoundOperator.and);
|
|
2803
2839
|
const container = {
|
|
@@ -3899,7 +3935,7 @@ function recordQuery(selection, apiName, alias, predicates, input) {
|
|
|
3899
3935
|
const orderByJoins = [];
|
|
3900
3936
|
const orderByResult = parseOrderBy(orderByArg, alias, apiName, input.objectInfoMap, orderByJoins);
|
|
3901
3937
|
const filterJoins = [];
|
|
3902
|
-
const whereResult = recordFilter(whereArg, alias, apiName, input.objectInfoMap, filterJoins);
|
|
3938
|
+
const whereResult = recordFilter(whereArg, alias, apiName, input.objectInfoMap, filterJoins, input.draftFunctions);
|
|
3903
3939
|
const scopeJoins = [];
|
|
3904
3940
|
const scopeResult = scopeFilter(scopeArg, alias, apiName, input, scopeJoins);
|
|
3905
3941
|
let additionalPredicates = [];
|
|
@@ -4061,27 +4097,19 @@ function generateVariableGQLQuery(document, variables) {
|
|
|
4061
4097
|
? node.arguments
|
|
4062
4098
|
.map((args) => {
|
|
4063
4099
|
const { value, name } = args;
|
|
4100
|
+
//The variable is on the top level, for example `where: ${filter}`
|
|
4064
4101
|
if (is(value, 'Variable')) {
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
return `${name}: ${transform(query)}`;
|
|
4070
|
-
};
|
|
4071
|
-
switch (name) {
|
|
4072
|
-
case 'scope':
|
|
4073
|
-
case 'orderBy':
|
|
4074
|
-
return buildRecordQueryString(name, jsonString, removeAllQuotations);
|
|
4075
|
-
default:
|
|
4076
|
-
return buildRecordQueryString(name, jsonString, removeQuotationsFromKeys);
|
|
4077
|
-
}
|
|
4078
|
-
}
|
|
4079
|
-
return '';
|
|
4102
|
+
return generateVariableNodeQuery(value, name, name, variables);
|
|
4103
|
+
}
|
|
4104
|
+
else if (isObjectValueNode$1(value)) {
|
|
4105
|
+
return generateVariableSubQuery(value, name, name, variables);
|
|
4080
4106
|
}
|
|
4081
4107
|
})
|
|
4082
4108
|
.filter(Boolean)
|
|
4083
4109
|
: undefined;
|
|
4084
|
-
return gqlArguments
|
|
4110
|
+
return gqlArguments
|
|
4111
|
+
? `${node.name} ${gqlArguments.length > 0 ? '(' + gqlArguments.join(',') + ')' : ''} { Id }`
|
|
4112
|
+
: '';
|
|
4085
4113
|
})
|
|
4086
4114
|
//remove empty strings
|
|
4087
4115
|
.filter(Boolean)
|
|
@@ -4091,6 +4119,51 @@ function generateVariableGQLQuery(document, variables) {
|
|
|
4091
4119
|
return [accu.slice(0, 1), query, accu.slice(1, length)].join('');
|
|
4092
4120
|
}, '{ }'));
|
|
4093
4121
|
}
|
|
4122
|
+
/**
|
|
4123
|
+
* Given a LuvioValueNode, generates a sql with its variable node replaced with actual value.
|
|
4124
|
+
* @param valueNode G
|
|
4125
|
+
* @param name
|
|
4126
|
+
* @param type
|
|
4127
|
+
* @param variables
|
|
4128
|
+
* @returns
|
|
4129
|
+
*/
|
|
4130
|
+
function generateVariableSubQuery(valueNode, name, type, variables) {
|
|
4131
|
+
switch (valueNode.kind) {
|
|
4132
|
+
case Kind.OBJECT: {
|
|
4133
|
+
// For example, `{ Id: { eq: $draftId } }` is a `ObjectValueNode`, which has field keys 'Id'
|
|
4134
|
+
const resultQuery = keys$5(valueNode.fields)
|
|
4135
|
+
.map((key) => generateVariableSubQuery(valueNode.fields[key], key, type, variables))
|
|
4136
|
+
.filter((subquery) => subquery.length > 0)
|
|
4137
|
+
.join(',');
|
|
4138
|
+
if (resultQuery.length > 0) {
|
|
4139
|
+
return `${name}: {${resultQuery}}`;
|
|
4140
|
+
}
|
|
4141
|
+
return resultQuery;
|
|
4142
|
+
}
|
|
4143
|
+
case Kind.VARIABLE:
|
|
4144
|
+
return generateVariableNodeQuery(valueNode, name, type, variables);
|
|
4145
|
+
default:
|
|
4146
|
+
return '';
|
|
4147
|
+
}
|
|
4148
|
+
}
|
|
4149
|
+
// Generate a sql for the variable node with its actual value.
|
|
4150
|
+
function generateVariableNodeQuery(value, name, type, variables) {
|
|
4151
|
+
const variable = variables[value.name];
|
|
4152
|
+
if (variable) {
|
|
4153
|
+
const jsonString = JSON.stringify(variable);
|
|
4154
|
+
const buildRecordQueryString = (name, query, transform) => {
|
|
4155
|
+
return `${name}: ${transform(query)}`;
|
|
4156
|
+
};
|
|
4157
|
+
switch (type) {
|
|
4158
|
+
case 'scope':
|
|
4159
|
+
case 'orderBy':
|
|
4160
|
+
return buildRecordQueryString(name, jsonString, removeAllQuotations);
|
|
4161
|
+
default:
|
|
4162
|
+
return buildRecordQueryString(name, jsonString, removeQuotationsFromKeys);
|
|
4163
|
+
}
|
|
4164
|
+
}
|
|
4165
|
+
return '';
|
|
4166
|
+
}
|
|
4094
4167
|
/**
|
|
4095
4168
|
* Given an AST with variables
|
|
4096
4169
|
* Swap out the LuvioArgumentNodes on the original AST with ones generated from its variables.
|
|
@@ -4109,14 +4182,43 @@ function swapVariableArguments(document, variables) {
|
|
|
4109
4182
|
const { name } = node;
|
|
4110
4183
|
const first = allArgumentRecords.find((n) => n.name === name);
|
|
4111
4184
|
if (first) {
|
|
4112
|
-
|
|
4113
|
-
first.arguments =
|
|
4114
|
-
? first.arguments.filter((x) => x.value.kind !== 'Variable')
|
|
4115
|
-
: [], node.arguments ? node.arguments : []);
|
|
4185
|
+
const swappedArgments = swapArgumentWithVariableNodes(node.arguments, first.arguments);
|
|
4186
|
+
first.arguments = swappedArgments ? swappedArgments : [];
|
|
4116
4187
|
}
|
|
4117
4188
|
});
|
|
4118
4189
|
}
|
|
4119
4190
|
}
|
|
4191
|
+
// Replaces the variable node in original LuvioArgumentNode with the actual value in the swapped node with the same path.
|
|
4192
|
+
function swapArgumentWithVariableNodes(swapped, original) {
|
|
4193
|
+
if (swapped === undefined || original === undefined) {
|
|
4194
|
+
return original;
|
|
4195
|
+
}
|
|
4196
|
+
return original.map((x) => {
|
|
4197
|
+
const targetNode = swapped.find((y) => y.name === x.name);
|
|
4198
|
+
if (targetNode === undefined) {
|
|
4199
|
+
return x;
|
|
4200
|
+
}
|
|
4201
|
+
if (x.value.kind === 'Variable') {
|
|
4202
|
+
return targetNode;
|
|
4203
|
+
}
|
|
4204
|
+
swapValueNodeWithVariableNodes(x.value, targetNode.value);
|
|
4205
|
+
return x;
|
|
4206
|
+
});
|
|
4207
|
+
}
|
|
4208
|
+
function swapValueNodeWithVariableNodes(original, swapped) {
|
|
4209
|
+
if (original.kind === Kind.OBJECT) {
|
|
4210
|
+
for (const key of keys$5(original.fields)) {
|
|
4211
|
+
if (isObjectValueNode$1(swapped) && swapped.fields[key]) {
|
|
4212
|
+
if (is(original.fields[key], 'Variable')) {
|
|
4213
|
+
original.fields[key] = swapped.fields[key];
|
|
4214
|
+
}
|
|
4215
|
+
else {
|
|
4216
|
+
swapValueNodeWithVariableNodes(original.fields[key], swapped.fields[key]);
|
|
4217
|
+
}
|
|
4218
|
+
}
|
|
4219
|
+
}
|
|
4220
|
+
}
|
|
4221
|
+
}
|
|
4120
4222
|
//find top level record queries
|
|
4121
4223
|
function findRecordSelections(document) {
|
|
4122
4224
|
return document.definitions
|
|
@@ -4151,7 +4253,7 @@ class StoreEvalPreconditioner {
|
|
|
4151
4253
|
* Missing object info records triggers the objectInfoService (same instance shared with Drafts code), to
|
|
4152
4254
|
* use the getObjectInfos adapter to efficiently fetch the necessary records.
|
|
4153
4255
|
*/
|
|
4154
|
-
async createRootQuery(config, objectInfoService, userId) {
|
|
4256
|
+
async createRootQuery(config, objectInfoService, userId, draftFunctions) {
|
|
4155
4257
|
const { query: ast, variables } = config;
|
|
4156
4258
|
swapVariableArguments(ast, variables);
|
|
4157
4259
|
// Parse out top-level record queries types we know we will need, since spanning fields will
|
|
@@ -4198,6 +4300,7 @@ class StoreEvalPreconditioner {
|
|
|
4198
4300
|
astTransformResult = transform(ast, {
|
|
4199
4301
|
userId,
|
|
4200
4302
|
objectInfoMap,
|
|
4303
|
+
draftFunctions,
|
|
4201
4304
|
});
|
|
4202
4305
|
if (astTransformResult.isSuccess === false) {
|
|
4203
4306
|
for (const error of astTransformResult.error) {
|
|
@@ -4235,8 +4338,6 @@ class StoreEvalPreconditioner {
|
|
|
4235
4338
|
}
|
|
4236
4339
|
}
|
|
4237
4340
|
|
|
4238
|
-
const { isArray: isArray$4 } = Array;
|
|
4239
|
-
|
|
4240
4341
|
/**
|
|
4241
4342
|
* Checks a GraphQL-shaped network response for errors, returning true if it does
|
|
4242
4343
|
* and false otherwise
|
|
@@ -4282,7 +4383,7 @@ const wrapStartEndEvents = (storeEval) => {
|
|
|
4282
4383
|
return snapshot;
|
|
4283
4384
|
};
|
|
4284
4385
|
};
|
|
4285
|
-
function sqliteStoreEvalFactory(userId, sqliteStore, objectInfoService) {
|
|
4386
|
+
function sqliteStoreEvalFactory(userId, sqliteStore, objectInfoService, draftFunctions) {
|
|
4286
4387
|
// if the store does not support eval then use the noop version
|
|
4287
4388
|
if (sqliteStore.isEvalSupported() === false) {
|
|
4288
4389
|
return noopStoreEval;
|
|
@@ -4290,7 +4391,7 @@ function sqliteStoreEvalFactory(userId, sqliteStore, objectInfoService) {
|
|
|
4290
4391
|
const preconditioner = new StoreEvalPreconditioner();
|
|
4291
4392
|
return makeStoreEval(preconditioner, objectInfoService, userId, async () => {
|
|
4292
4393
|
return undefined;
|
|
4293
|
-
}, (query, _context, eventEmitter) => evaluateSqlite(query, eventEmitter, sqliteStore));
|
|
4394
|
+
}, (query, _context, eventEmitter) => evaluateSqlite(query, eventEmitter, sqliteStore), draftFunctions);
|
|
4294
4395
|
}
|
|
4295
4396
|
async function noopStoreEval(_config, nonEvaluatedSnapshotOrPromise, _observers) {
|
|
4296
4397
|
return nonEvaluatedSnapshotOrPromise;
|
|
@@ -4309,7 +4410,7 @@ function isErrorSnapshotThatShouldGetReturnedToCaller$1(snapshot) {
|
|
|
4309
4410
|
function generateUniqueRecordId$1() {
|
|
4310
4411
|
return `${GRAPHQL_ROOT_KEY$1}${Date.now() + Math.random().toFixed(5).split('.')[1]}`;
|
|
4311
4412
|
}
|
|
4312
|
-
function makeStoreEval(preconditioner, objectInfoService, userId, contextProvider, queryEvaluator) {
|
|
4413
|
+
function makeStoreEval(preconditioner, objectInfoService, userId, contextProvider, queryEvaluator, draftFunctions) {
|
|
4313
4414
|
const storeEval = async (config, nonEvaluatedSnapshotOrPromise, observers) => {
|
|
4314
4415
|
const eventEmitter = createCustomAdapterEventEmitter(GRAPHQL_EVAL_NAMESPACE$1, observers);
|
|
4315
4416
|
// the non-eval'ed input could either be a snapshot or promise of one so
|
|
@@ -4339,7 +4440,7 @@ function makeStoreEval(preconditioner, objectInfoService, userId, contextProvide
|
|
|
4339
4440
|
context = await contextProvider();
|
|
4340
4441
|
// Ensures ObjectInfo metadata is available for the request. Sourcing records from L1/L2/Network
|
|
4341
4442
|
// is delegated to the getObjectInfo adapter via objectInfoService
|
|
4342
|
-
rootQuery = await preconditioner.createRootQuery(config, objectInfoService, userId);
|
|
4443
|
+
rootQuery = await preconditioner.createRootQuery(config, objectInfoService, userId, draftFunctions);
|
|
4343
4444
|
}
|
|
4344
4445
|
catch (error) {
|
|
4345
4446
|
eventEmitter({
|
|
@@ -11939,6 +12040,19 @@ function makeRecordDenormalizingDurableStore(luvio, durableStore, getStoreRecord
|
|
|
11939
12040
|
});
|
|
11940
12041
|
}
|
|
11941
12042
|
|
|
12043
|
+
/**
|
|
12044
|
+
* This function takes an unknown error and normalizes it to an Error object
|
|
12045
|
+
*/
|
|
12046
|
+
function normalizeError$1(error) {
|
|
12047
|
+
if (typeof error === 'object' && error instanceof Error) {
|
|
12048
|
+
return error;
|
|
12049
|
+
}
|
|
12050
|
+
else if (typeof error === 'string') {
|
|
12051
|
+
return new Error(error);
|
|
12052
|
+
}
|
|
12053
|
+
return new Error(stringify$2(error));
|
|
12054
|
+
}
|
|
12055
|
+
|
|
11942
12056
|
const PERFORM_QUICK_ACTION_ENDPOINT_REGEX = /^\/ui-api\/actions\/perform-quick-action\/.*$/;
|
|
11943
12057
|
/**
|
|
11944
12058
|
* Checks if a provided resource request is a POST operation on the record
|
|
@@ -11957,7 +12071,7 @@ function performQuickActionDraftEnvironment(luvio, env, handler) {
|
|
|
11957
12071
|
return env.dispatchResourceRequest(request, context, eventObservers);
|
|
11958
12072
|
}
|
|
11959
12073
|
const { data } = await handler.enqueue(request).catch((err) => {
|
|
11960
|
-
throw createDraftSynthesisErrorResponse(err.message);
|
|
12074
|
+
throw createDraftSynthesisErrorResponse(normalizeError$1(err).message);
|
|
11961
12075
|
});
|
|
11962
12076
|
if (data === undefined) {
|
|
11963
12077
|
return Promise.reject(createDraftSynthesisErrorResponse());
|
|
@@ -13954,15 +14068,15 @@ class NimbusDraftQueue {
|
|
|
13954
14068
|
enqueue(handlerId, data) {
|
|
13955
14069
|
const callProxyMethod = __nimbus.plugins.LdsDraftQueue.callProxyMethod;
|
|
13956
14070
|
if (callProxyMethod === undefined) {
|
|
13957
|
-
return Promise.reject('callProxyMethod not defined on the nimbus plugin');
|
|
14071
|
+
return Promise.reject(new Error('callProxyMethod not defined on the nimbus plugin'));
|
|
13958
14072
|
}
|
|
13959
14073
|
const serializedAction = stringify([handlerId, data]);
|
|
13960
14074
|
return new Promise((resolve, reject) => {
|
|
13961
14075
|
callProxyMethod('enqueue', serializedAction, (serializedActionResponse) => {
|
|
13962
14076
|
const response = parse(serializedActionResponse);
|
|
13963
14077
|
resolve(response);
|
|
13964
|
-
}, (
|
|
13965
|
-
reject(
|
|
14078
|
+
}, (errorMessage) => {
|
|
14079
|
+
reject(new Error(errorMessage));
|
|
13966
14080
|
});
|
|
13967
14081
|
});
|
|
13968
14082
|
}
|
|
@@ -13972,18 +14086,18 @@ class NimbusDraftQueue {
|
|
|
13972
14086
|
return Promise.resolve;
|
|
13973
14087
|
}
|
|
13974
14088
|
processNextAction() {
|
|
13975
|
-
return Promise.reject('Cannot call processNextAction from the NimbusDraftQueue');
|
|
14089
|
+
return Promise.reject(new Error('Cannot call processNextAction from the NimbusDraftQueue'));
|
|
13976
14090
|
}
|
|
13977
14091
|
getQueueActions() {
|
|
13978
14092
|
const callProxyMethod = __nimbus.plugins.LdsDraftQueue.callProxyMethod;
|
|
13979
14093
|
if (callProxyMethod === undefined) {
|
|
13980
|
-
return Promise.reject('callProxyMethod not defined on the nimbus plugin');
|
|
14094
|
+
return Promise.reject(new Error('callProxyMethod not defined on the nimbus plugin'));
|
|
13981
14095
|
}
|
|
13982
14096
|
return new Promise((resolve, reject) => {
|
|
13983
14097
|
callProxyMethod('getQueueActions', stringify([]), (serializedQueue) => {
|
|
13984
14098
|
resolve(parse(serializedQueue));
|
|
13985
|
-
}, (
|
|
13986
|
-
reject(
|
|
14099
|
+
}, (errorMessage) => {
|
|
14100
|
+
reject(new Error(errorMessage));
|
|
13987
14101
|
});
|
|
13988
14102
|
});
|
|
13989
14103
|
}
|
|
@@ -14011,32 +14125,32 @@ class NimbusDraftQueue {
|
|
|
14011
14125
|
throw new Error('Cannot call getQueueState from the NimbusDraftQueue');
|
|
14012
14126
|
}
|
|
14013
14127
|
removeDraftAction(_actionId) {
|
|
14014
|
-
return Promise.reject('Cannot call removeDraftAction from the NimbusDraftQueue');
|
|
14128
|
+
return Promise.reject(new Error('Cannot call removeDraftAction from the NimbusDraftQueue'));
|
|
14015
14129
|
}
|
|
14016
14130
|
startQueue() {
|
|
14017
|
-
return Promise.reject('Cannot call startQueue from the NimbusDraftQueue');
|
|
14131
|
+
return Promise.reject(new Error('Cannot call startQueue from the NimbusDraftQueue'));
|
|
14018
14132
|
}
|
|
14019
14133
|
stopQueue() {
|
|
14020
|
-
return Promise.reject('Cannot call stopQueue from the NimbusDraftQueue');
|
|
14134
|
+
return Promise.reject(new Error('Cannot call stopQueue from the NimbusDraftQueue'));
|
|
14021
14135
|
}
|
|
14022
14136
|
replaceAction(_actionId, _withActionId) {
|
|
14023
|
-
return Promise.reject('Cannot call replaceAction from the NimbusDraftQueue');
|
|
14137
|
+
return Promise.reject(new Error('Cannot call replaceAction from the NimbusDraftQueue'));
|
|
14024
14138
|
}
|
|
14025
14139
|
mergeActions(_targetActionId, _sourceActionId) {
|
|
14026
|
-
return Promise.reject('Cannot call mergeActions from the NimbusDraftQueue');
|
|
14140
|
+
return Promise.reject(new Error('Cannot call mergeActions from the NimbusDraftQueue'));
|
|
14027
14141
|
}
|
|
14028
14142
|
setMetadata(_actionId, _metadata) {
|
|
14029
|
-
return Promise.reject('Cannot call setMetadata from the NimbusDraftQueue');
|
|
14143
|
+
return Promise.reject(new Error('Cannot call setMetadata from the NimbusDraftQueue'));
|
|
14030
14144
|
}
|
|
14031
14145
|
addHandler(_handler) {
|
|
14032
14146
|
// no-op -- all registration occurs against concrete draft queue
|
|
14033
14147
|
return Promise.resolve();
|
|
14034
14148
|
}
|
|
14035
14149
|
addCustomHandler(_id, _executor) {
|
|
14036
|
-
return Promise.reject('Cannot call setMetadata from the NimbusDraftQueue');
|
|
14150
|
+
return Promise.reject(new Error('Cannot call setMetadata from the NimbusDraftQueue'));
|
|
14037
14151
|
}
|
|
14038
14152
|
removeHandler(_id) {
|
|
14039
|
-
return Promise.reject('Cannot call setMetadata from the NimbusDraftQueue');
|
|
14153
|
+
return Promise.reject(new Error('Cannot call setMetadata from the NimbusDraftQueue'));
|
|
14040
14154
|
}
|
|
14041
14155
|
}
|
|
14042
14156
|
|
|
@@ -15632,11 +15746,6 @@ function getRuntime() {
|
|
|
15632
15746
|
getIngestMetadataForInternalAdapters =
|
|
15633
15747
|
internalAdapterDurableEnvironment.getIngestStagingStoreRecords;
|
|
15634
15748
|
lazyObjectInfoService = new ObjectInfoService(getObjectInfo, getObjectInfos, internalAdapterDurableStore);
|
|
15635
|
-
// set storeEval function for lds-adapters-graghql to use
|
|
15636
|
-
withRegistration('@salesforce/lds-adapters-graphql', (registration) => {
|
|
15637
|
-
const { configuration: { setStoreEval }, } = registration;
|
|
15638
|
-
setStoreEval(sqliteStoreEvalFactory(userId, lazyBaseDurableStore, lazyObjectInfoService));
|
|
15639
|
-
});
|
|
15640
15749
|
// creates a durable store that denormalizes scalar fields for records
|
|
15641
15750
|
let getIngestRecords;
|
|
15642
15751
|
let getIngestMetadata;
|
|
@@ -15675,6 +15784,20 @@ function getRuntime() {
|
|
|
15675
15784
|
setupMobileInstrumentation(lazyLuvio, store);
|
|
15676
15785
|
// If the inspection nimbus plugin is configured, inspection is enabled otherwise this is a no-op
|
|
15677
15786
|
setupInspection(lazyLuvio);
|
|
15787
|
+
// set storeEval function for lds-adapters-graghql to use
|
|
15788
|
+
withRegistration('@salesforce/lds-adapters-graphql', (registration) => {
|
|
15789
|
+
const { configuration: { setStoreEval, setDraftFunctions }, } = registration;
|
|
15790
|
+
const getCanonicalId = (id) => {
|
|
15791
|
+
var _a;
|
|
15792
|
+
return ((_a = extractRecordIdFromStoreKey(lazyLuvio.storeGetCanonicalKey(RECORD_ID_PREFIX + id))) !== null && _a !== void 0 ? _a : id);
|
|
15793
|
+
};
|
|
15794
|
+
const draftFuncs = {
|
|
15795
|
+
isDraftId: isGenerated,
|
|
15796
|
+
getCanonicalId,
|
|
15797
|
+
};
|
|
15798
|
+
setStoreEval(sqliteStoreEvalFactory(userId, lazyBaseDurableStore, lazyObjectInfoService, draftFuncs));
|
|
15799
|
+
setDraftFunctions(draftFuncs);
|
|
15800
|
+
});
|
|
15678
15801
|
// on core the graphql configuration is split so we need to set configureUIAPIGraphQL both in the
|
|
15679
15802
|
// graphql registration and the uiapi for off core
|
|
15680
15803
|
const configureUIAPIGraphQL = (registration) => {
|
|
@@ -15727,4 +15850,4 @@ register({
|
|
|
15727
15850
|
});
|
|
15728
15851
|
|
|
15729
15852
|
export { getRuntime, registerReportObserver, reportGraphqlQueryParseError };
|
|
15730
|
-
// version: 1.136.
|
|
15853
|
+
// version: 1.136.7-777657471
|