UNPKG

apollo-client

Version:
143 lines 5.6 kB
"use strict"; var isArray = require('lodash.isarray'); var isNull = require('lodash.isnull'); var isString = require('lodash.isstring'); var isNumber = require('lodash.isnumber'); var isBoolean = require('lodash.isboolean'); var isUndefined = require('lodash.isundefined'); var assign = require('lodash.assign'); var getFromAST_1 = require('../queries/getFromAST'); var storeUtils_1 = require('./storeUtils'); function writeFragmentToStore(_a) { var result = _a.result, fragment = _a.fragment, _b = _a.store, store = _b === void 0 ? {} : _b, variables = _a.variables, _c = _a.dataIdFromObject, dataIdFromObject = _c === void 0 ? null : _c; if (!fragment) { throw new Error('Must pass fragment.'); } var parsedFragment = getFromAST_1.getFragmentDefinition(fragment); var selectionSet = parsedFragment.selectionSet; if (!result['id']) { throw new Error('Result must have id when writing fragment to store.'); } return writeSelectionSetToStore({ dataId: result['id'], result: result, selectionSet: selectionSet, store: store, variables: variables, dataIdFromObject: dataIdFromObject, }); } exports.writeFragmentToStore = writeFragmentToStore; function writeQueryToStore(_a) { var result = _a.result, query = _a.query, _b = _a.store, store = _b === void 0 ? {} : _b, variables = _a.variables, _c = _a.dataIdFromObject, dataIdFromObject = _c === void 0 ? null : _c; var queryDefinition = getFromAST_1.getQueryDefinition(query); return writeSelectionSetToStore({ dataId: 'ROOT_QUERY', result: result, selectionSet: queryDefinition.selectionSet, store: store, variables: variables, dataIdFromObject: dataIdFromObject, }); } exports.writeQueryToStore = writeQueryToStore; function writeSelectionSetToStore(_a) { var result = _a.result, dataId = _a.dataId, selectionSet = _a.selectionSet, _b = _a.store, store = _b === void 0 ? {} : _b, variables = _a.variables, dataIdFromObject = _a.dataIdFromObject; selectionSet.selections.forEach(function (selection) { if (storeUtils_1.isField(selection)) { var resultFieldKey = storeUtils_1.resultKeyNameFromField(selection); var value = result[resultFieldKey]; if (isUndefined(value)) { throw new Error("Can't find field " + resultFieldKey + " on result object " + dataId + "."); } writeFieldToStore({ dataId: dataId, value: value, variables: variables, store: store, field: selection, dataIdFromObject: dataIdFromObject, }); } else if (storeUtils_1.isInlineFragment(selection)) { writeSelectionSetToStore({ result: result, selectionSet: selection.selectionSet, store: store, variables: variables, dataId: dataId, dataIdFromObject: dataIdFromObject, }); } else { throw new Error('Non-inline fragments not supported.'); } }); return store; } exports.writeSelectionSetToStore = writeSelectionSetToStore; function writeFieldToStore(_a) { var field = _a.field, value = _a.value, variables = _a.variables, store = _a.store, dataId = _a.dataId, dataIdFromObject = _a.dataIdFromObject; var storeValue; var storeFieldName = storeUtils_1.storeKeyNameFromField(field, variables); if (isString(value) || isNumber(value) || isBoolean(value) || isNull(value)) { storeValue = value; } else if (isArray(value)) { if (isNull(field.selectionSet)) { storeValue = value; } else { var thisIdList_1 = []; value.forEach(function (item, index) { if (isNull(item)) { thisIdList_1.push(null); } else { var itemDataId = dataId + "." + storeFieldName + "." + index; if (dataIdFromObject) { var semanticId = dataIdFromObject(item); if (semanticId) { itemDataId = semanticId; } } thisIdList_1.push(itemDataId); writeSelectionSetToStore({ dataId: itemDataId, result: item, store: store, selectionSet: field.selectionSet, variables: variables, dataIdFromObject: dataIdFromObject, }); } }); storeValue = thisIdList_1; } } else { var valueDataId = dataId + "." + storeFieldName; if (dataIdFromObject) { var semanticId = dataIdFromObject(value); if (semanticId) { valueDataId = semanticId; } } writeSelectionSetToStore({ dataId: valueDataId, result: value, store: store, selectionSet: field.selectionSet, variables: variables, dataIdFromObject: dataIdFromObject, }); storeValue = valueDataId; } var newStoreObj = assign({}, store[dataId], (_b = {}, _b[storeFieldName] = storeValue, _b )); store[dataId] = newStoreObj; var _b; } //# sourceMappingURL=writeToStore.js.map