You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.9 KiB
96 lines
3.9 KiB
import { isReference, isField, DeepMerger, resultKeyNameFromField, shouldInclude, isNonNullObject, compact, createFragmentMap, getFragmentDefinitions, isArray, } from "../../utilities/index.js"; |
|
export var hasOwn = Object.prototype.hasOwnProperty; |
|
export function isNullish(value) { |
|
return value === null || value === void 0; |
|
} |
|
export { isArray }; |
|
export function defaultDataIdFromObject(_a, context) { |
|
var __typename = _a.__typename, id = _a.id, _id = _a._id; |
|
if (typeof __typename === "string") { |
|
if (context) { |
|
context.keyObject = |
|
!isNullish(id) ? { id: id } |
|
: !isNullish(_id) ? { _id: _id } |
|
: void 0; |
|
} |
|
// If there is no object.id, fall back to object._id. |
|
if (isNullish(id) && !isNullish(_id)) { |
|
id = _id; |
|
} |
|
if (!isNullish(id)) { |
|
return "".concat(__typename, ":").concat(typeof id === "number" || typeof id === "string" ? |
|
id |
|
: JSON.stringify(id)); |
|
} |
|
} |
|
} |
|
var defaultConfig = { |
|
dataIdFromObject: defaultDataIdFromObject, |
|
addTypename: true, |
|
resultCaching: true, |
|
// Thanks to the shouldCanonizeResults helper, this should be the only line |
|
// you have to change to reenable canonization by default in the future. |
|
canonizeResults: false, |
|
}; |
|
export function normalizeConfig(config) { |
|
return compact(defaultConfig, config); |
|
} |
|
export function shouldCanonizeResults(config) { |
|
var value = config.canonizeResults; |
|
return value === void 0 ? defaultConfig.canonizeResults : value; |
|
} |
|
export function getTypenameFromStoreObject(store, objectOrReference) { |
|
return isReference(objectOrReference) ? |
|
store.get(objectOrReference.__ref, "__typename") |
|
: objectOrReference && objectOrReference.__typename; |
|
} |
|
export var TypeOrFieldNameRegExp = /^[_a-z][_0-9a-z]*/i; |
|
export function fieldNameFromStoreName(storeFieldName) { |
|
var match = storeFieldName.match(TypeOrFieldNameRegExp); |
|
return match ? match[0] : storeFieldName; |
|
} |
|
export function selectionSetMatchesResult(selectionSet, result, variables) { |
|
if (isNonNullObject(result)) { |
|
return isArray(result) ? |
|
result.every(function (item) { |
|
return selectionSetMatchesResult(selectionSet, item, variables); |
|
}) |
|
: selectionSet.selections.every(function (field) { |
|
if (isField(field) && shouldInclude(field, variables)) { |
|
var key = resultKeyNameFromField(field); |
|
return (hasOwn.call(result, key) && |
|
(!field.selectionSet || |
|
selectionSetMatchesResult(field.selectionSet, result[key], variables))); |
|
} |
|
// If the selection has been skipped with @skip(true) or |
|
// @include(false), it should not count against the matching. If |
|
// the selection is not a field, it must be a fragment (inline or |
|
// named). We will determine if selectionSetMatchesResult for that |
|
// fragment when we get to it, so for now we return true. |
|
return true; |
|
}); |
|
} |
|
return false; |
|
} |
|
export function storeValueIsStoreObject(value) { |
|
return isNonNullObject(value) && !isReference(value) && !isArray(value); |
|
} |
|
export function makeProcessedFieldsMerger() { |
|
return new DeepMerger(); |
|
} |
|
export function extractFragmentContext(document, fragments) { |
|
// FragmentMap consisting only of fragments defined directly in document, not |
|
// including other fragments registered in the FragmentRegistry. |
|
var fragmentMap = createFragmentMap(getFragmentDefinitions(document)); |
|
return { |
|
fragmentMap: fragmentMap, |
|
lookupFragment: function (name) { |
|
var def = fragmentMap[name]; |
|
if (!def && fragments) { |
|
def = fragments.lookup(name); |
|
} |
|
return def || null; |
|
}, |
|
}; |
|
} |
|
//# sourceMappingURL=helpers.js.map
|