relay-runtime
Version:
A core runtime for building GraphQL-driven applications.
161 lines (160 loc) • 6.3 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var getRelayHandleKey = require('../util/getRelayHandleKey');
var RelayConcreteNode = require('../util/RelayConcreteNode');
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
var _require = require('../util/stableCopy'),
stableCopy = _require.stableCopy;
var invariant = require('invariant');
var VARIABLE = RelayConcreteNode.VARIABLE,
LITERAL = RelayConcreteNode.LITERAL,
OBJECT_VALUE = RelayConcreteNode.OBJECT_VALUE,
LIST_VALUE = RelayConcreteNode.LIST_VALUE;
var ERRORS_KEY = '__errors';
var MODULE_COMPONENT_KEY_PREFIX = '__module_component_';
var MODULE_OPERATION_KEY_PREFIX = '__module_operation_';
var RELAY_READ_TIME_RESOLVER_KEY_PREFIX = '$r:';
function getArgumentValue(arg, variables) {
if (arg.kind === VARIABLE) {
return getStableVariableValue(arg.variableName, variables);
} else if (arg.kind === LITERAL) {
return arg.value;
} else if (arg.kind === OBJECT_VALUE) {
var value = {};
arg.fields.forEach(function (field) {
value[field.name] = getArgumentValue(field, variables);
});
return value;
} else if (arg.kind === LIST_VALUE) {
var _value = [];
arg.items.forEach(function (item) {
item != null ? _value.push(getArgumentValue(item, variables)) : null;
});
return _value;
}
}
function getArgumentValues(args, variables, isWithinUnmatchedTypeRefinement) {
var values = {};
if (isWithinUnmatchedTypeRefinement) {
values[RelayStoreUtils.FRAGMENT_POINTER_IS_WITHIN_UNMATCHED_TYPE_REFINEMENT] = true;
}
if (args) {
args.forEach(function (arg) {
values[arg.name] = getArgumentValue(arg, variables);
});
}
return values;
}
function getHandleStorageKey(handleField, variables) {
var dynamicKey = handleField.dynamicKey,
handle = handleField.handle,
key = handleField.key,
name = handleField.name,
args = handleField.args,
filters = handleField.filters;
var handleName = getRelayHandleKey(handle, key, name);
var filterArgs = null;
if (args && filters && args.length !== 0 && filters.length !== 0) {
filterArgs = args.filter(function (arg) {
return filters.indexOf(arg.name) > -1;
});
}
if (dynamicKey) {
filterArgs = filterArgs != null ? [dynamicKey].concat((0, _toConsumableArray2["default"])(filterArgs)) : [dynamicKey];
}
if (filterArgs === null) {
return handleName;
} else {
return formatStorageKey(handleName, getArgumentValues(filterArgs, variables));
}
}
function getStorageKey(field, variables) {
if (field.storageKey) {
return field.storageKey;
}
var args = getArguments(field);
var name = field.name;
return args && args.length !== 0 ? formatStorageKey(name, getArgumentValues(args, variables)) : name;
}
function getReadTimeResolverStorageKey(field, variables) {
var storageKey = getStorageKey(field, variables);
return RelayFeatureFlags.ENABLE_READ_TIME_RESOLVER_STORAGE_KEY_PREFIX ? '$r:' + storageKey : storageKey;
}
function getArguments(field) {
if (field.kind === 'RelayResolver' || field.kind === 'RelayLiveResolver') {
var _field$fragment2;
if (field.args == null) {
var _field$fragment;
return (_field$fragment = field.fragment) === null || _field$fragment === void 0 ? void 0 : _field$fragment.args;
}
if (((_field$fragment2 = field.fragment) === null || _field$fragment2 === void 0 ? void 0 : _field$fragment2.args) == null) {
return field.args;
}
return field.args.concat(field.fragment.args);
}
var args = typeof field.args === 'undefined' ? undefined : field.args;
return args;
}
function getStableStorageKey(name, args) {
return formatStorageKey(name, stableCopy(args));
}
function formatStorageKey(name, argValues) {
if (!argValues) {
return name;
}
var values = [];
for (var argName in argValues) {
if (argValues.hasOwnProperty(argName)) {
var value = argValues[argName];
if (value != null) {
var _JSON$stringify;
values.push(argName + ':' + ((_JSON$stringify = JSON.stringify(value)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : 'undefined'));
}
}
}
return values.length === 0 ? name : name + "(".concat(values.join(','), ")");
}
function getStableVariableValue(name, variables) {
!variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'getVariableValue(): Undefined variable `%s`.', name) : invariant(false) : void 0;
return stableCopy(variables[name]);
}
function getModuleComponentKey(documentName) {
return "".concat(MODULE_COMPONENT_KEY_PREFIX).concat(documentName);
}
function getModuleOperationKey(documentName) {
return "".concat(MODULE_OPERATION_KEY_PREFIX).concat(documentName);
}
var RelayStoreUtils = {
ACTOR_IDENTIFIER_KEY: '__actorIdentifier',
CLIENT_EDGE_TRAVERSAL_PATH: '__clientEdgeTraversalPath',
FRAGMENTS_KEY: '__fragments',
FRAGMENT_OWNER_KEY: '__fragmentOwner',
FRAGMENT_POINTER_IS_WITHIN_UNMATCHED_TYPE_REFINEMENT: '$isWithinUnmatchedTypeRefinement',
FRAGMENT_PROP_NAME_KEY: '__fragmentPropName',
MODULE_COMPONENT_KEY: '__module_component',
ERRORS_KEY: ERRORS_KEY,
ID_KEY: '__id',
REF_KEY: '__ref',
REFS_KEY: '__refs',
ROOT_ID: 'client:root',
ROOT_TYPE: '__Root',
TYPENAME_KEY: '__typename',
INVALIDATED_AT_KEY: '__invalidated_at',
RELAY_RESOLVER_VALUE_KEY: '__resolverValue',
RELAY_RESOLVER_INVALIDATION_KEY: '__resolverValueMayBeInvalid',
RELAY_RESOLVER_SNAPSHOT_KEY: '__resolverSnapshot',
RELAY_RESOLVER_ERROR_KEY: '__resolverError',
RELAY_RESOLVER_OUTPUT_TYPE_RECORD_IDS: '__resolverOutputTypeRecordIDs',
RELAY_READ_TIME_RESOLVER_KEY_PREFIX: RELAY_READ_TIME_RESOLVER_KEY_PREFIX,
formatStorageKey: formatStorageKey,
getArgumentValue: getArgumentValue,
getArgumentValues: getArgumentValues,
getHandleStorageKey: getHandleStorageKey,
getStorageKey: getStorageKey,
getReadTimeResolverStorageKey: getReadTimeResolverStorageKey,
getStableStorageKey: getStableStorageKey,
getModuleComponentKey: getModuleComponentKey,
getModuleOperationKey: getModuleOperationKey
};
module.exports = RelayStoreUtils;
;