{"version":3,"sources":["../../../../client-data/packages/overreact/src/store/consts.js","../../../../client-data/packages/overreact/src/utils/observer-pattern/subject.js","../../../../client-data/packages/overreact/src/store/schema-extension/data-ref.js","../../../../client-data/packages/overreact/src/store/schema-extension/data-node.js","../../../../client-data/packages/overreact/src/store/schema-extension/schema-extension.js","../../../../client-data/packages/overreact/src/store/record.js","../../../../client-data/packages/overreact/src/store/record-group.js","../../../../client-data/packages/overreact/src/store/store.js","../../../../client-data/packages/overreact/src/store/record-group-helper.js","../../../../client-data/packages/overreact/src/spec/request-verbs.js","../../../../client-data/packages/overreact/src/spec/request-contract.js","../../../../client-data/packages/overreact/src/spec/response-handler/sideEffectFnHelper.js","../../../../client-data/packages/overreact/src/spec/response-contract.js","../../../../client-data/packages/overreact/src/spec/response-handler/fetch.js","../../../../client-data/packages/overreact/src/spec/response-handler/mutation.js","../../../../client-data/packages/overreact/src/spec/response-handler/refetch.js","../../../../client-data/packages/overreact/src/spec/response-handler/error.js","../../../../client-data/packages/overreact/src/spec/spec.js","../../../../client-data/packages/overreact/src/middleware/fetch-policy/fetch-policy-utils.js","../../../../client-data/packages/overreact/src/middleware/fetch-policy/fetch-policy-middleware.js","../../../../client-data/packages/overreact/src/middleware/middleware-types.js","../../../../client-data/packages/overreact/src/middleware/request-with-middleware.js","../../../../client-data/packages/overreact/src/middleware/wrapped-requestor.js","../../../../client-data/packages/overreact/src/middleware/error/error-middleware.js","../../../../client-data/packages/overreact/src/middleware/instrumentation/instrumentation-utils.js","../../../../client-data/packages/overreact/src/middleware/instrumentation/instrumentation-context.js","../../../../client-data/packages/overreact/src/middleware/instrumentation/instrumentation-middleware.js","../../../../client-data/packages/overreact/src/test-utils/use-clean-all-cache.js","../../../../client-data/packages/overreact/src/environment/context.js","../../../../client-data/packages/overreact/src/utils/primitive-utilities/date.js","../../../../client-data/packages/overreact/src/utils/primitive-utilities/primitive-hooks.js","../../../../client-data/packages/overreact/src/spec/spec-types.js","../../../../client-data/packages/overreact/src/hooks/overreact-request.js","../../../../client-data/packages/overreact/src/hooks/lookup-cache.js","../../../../client-data/packages/overreact/src/hooks/helper.js","../../../../client-data/packages/overreact/src/hooks/use-component.js","../../../../client-data/packages/overreact/src/hooks/use-fetch.js","../../../../client-data/packages/overreact/src/hooks/merge-config.js","../../../../client-data/packages/overreact/src/hooks/use-mutation.js","../../../../client-data/packages/overreact/src/hooks/use-refetch.js","../../../../client-data/packages/overreact/src/hooks/use-pagination.js","../../../../client-data/packages/overreact/src/hooks/use-data-ref-id.js","../../../../client-data/packages/overreact/src/hooks/use-promisify.js","../../../../client-data/packages/overreact/src/environment/environment.js","../../../../client-data/packages/overreact/src/environment/use-environment.js","../../../../client-data/packages/overreact/src/spec/response-types.js","../../../../client-data/packages/overreact/src/data-fetcher/index.js","../../../../client-data/packages/overreact/src/schema/schema-node.js","../../../../client-data/packages/overreact/src/schema/index.js"],"names":["__webpack_require__","d","__webpack_exports__","OVERREACT_ID_FIELD_NAME","createOverreactId","id","parentId","parentType","concat","Subject","_createClass","_classCallCheck","this","observers","Set","key","value","observer","Object","Error","add","delete","action","_this","_len","arguments","length","args","Array","_key","forEach","apply","DataRef","_Subject","_callSuper","idRefs","status","previousVariables","undefined","lastUpdateTimestamp","Date","now","error","includes","bind","push","onUpdate","updateStatus","onError","clearError","onEntitiesCreated","onEntitiesDeleted","reset","cursor","UiComponents","_inherits","_ref","componentName","_","uniq","_toConsumableArray","updateDevTools","_ref2","without","window","__OVERREACT_DEVTOOLS__","onDataRefChange","components","ids","intersection","difference","notify","newStatus","_objectSpread","updatedIds","request","isEmpty","DataNode","dataRefs","getDataRef","dataRefIdsUpdate","entitiesCreated","entitiesDeleted","recordGroup","keys","_this2","_this3","_this4","map","k","toJson","EXTENSION_NAME","createDataNode","schemaNode","store","dataNode","getRecordGroup","modelName","subscribe","setExtension","getDataNode","getExtension","Record","type","data","setValue","getValue","setData","getData","_defineProperty","RecordGroup","schemaType","records","addOrUpdateRecords","getRecords","getRecordsByEntityKeys","dataId","findIndex","r","recordId","rawData","newRecord","dataItems","updatedDataIDs","addOrUpdateRecordInternal","notifyUpdate","filter","record","contains","find","keySelector","chain","compact","onRecordGroupChange","storeId","uniqueId","JSON","parse","stringify","Store","recordGroups","preemptiveRecords","Map","getStore","set","get","requestContract","getSchemaNode","getRecordsById","getRecordsByEntityKey","spec","responseContract","getRecordsFromResponseDataArray","dataArray","dataIds","dataRefId","updateDataRefWithIds","dataRef","clear","requestVerbs","GET","POST","DELETE","PATCH","PUT","RequestContract","schema","dataPath","verb","fetchPolicy","uriFactoryFn","headerFactoryFn","payloadFactoryFn","parentKeySelector","insert","createRequestContract","getSideEffectCacheStoreHelpers","environment","schemaToModelMapping","tryMergeItemsToCacheStore","items","schemaName","itemKeySelector","parentSchemaName","keysInCache","itemsToAddWithOverreactId","item","include","overreactId","itemsMerged","itemToMerge","tryDeleteItemsInCacheStore","_ref4","keysToDelete","recordsIdsToRemove","deleteRecords","ResponseContract","responseType","processorFn","errorConvertFn","selectKey","onGetResponse","onGetError","applyId","variables","entity","parentNode","name","response","processedResponse","specType","middlewareStates","isResponseFromStore","specTypes","FETCH","PAGINATION","context","locator","descriptor","order","sideEffectFn","dataWithOverreactId","responseTypes","ENTITY","COLL","cacheStoreHelper","fetchResponseHandler","ADD","MUTATION","dataCb","isArray","NONE","mutationResponseHandler","REFETCH","refetchResponseHandler","errorCb","isFunction","errorResponseHandler","createResponseContract","_ref3","createSpec","environmentLookupFn","DEFAULT_STORE_EXPIRATION_DURATION","FetchPolicy","StoreOnly","NetworkOnly","StoreOrNetwork","NetworkOrStore","IsNetworkPolicy","IsStorePolicy","IsStoreSecondaryPolicy","getDataFromStore","dataInStore","shouldForceNetwork","storeExpirationDuration","currentTimestamp","requestFetchPolicy","_ref2$status","_ref2$status2","updateDataRefStatus","_regeneratorRuntime","e","t","prototype","n","hasOwnProperty","o","defineProperty","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","resolve","__await","then","callInvokeWithMethodAndArg","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","isNaN","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","delegateYield","createFetchPolicyMiddleware","fetchPolicyMiddlewareOptions","_ref$fetchPolicy","_ref$cacheExpirationD","cacheExpirationDuration","_asyncToGenerator","_callee","req","fetchPolicyInReq","isStoreSecondaryPolicy","isNetworkPolicy","isStorePolicy","isForceNetwork","res","_context","options","fetchPolicyOption","fetchPolicyInEnv","omit","_x","middlewareTypes","ERROR","FETCH_POLICY","INSTRUMENTATION","executeRequestor","wrappedRequestor","executeRequest","requestWithMiddleware","middlewares","baseMiddlewares","instrumentationMiddleware","pick","compose","wrappedRequest","WrappedRequestor","parameter","requestor","uri","headers","payload","createErrorMiddleware","errorMiddlewareOptions","_ref$errorProcessor","errorProcessor","noop","_ref$errorConvertor","errorConvertor","envErrorConverter","_ref3$spec","_ref3$spec2$responseC","processedError","errorToString","stringError","toString","stringifiedJson","defaultStubOptions","serverErrorCodes","detectError","respData","result","pass","Errors","Code","message","Message","impactUser","getServerPerf","getResponseHeader","perfTimings","perf","each","header","beforeSendHandler","instrumentationContext","perfFunc","shouldAddHeaders","requestStartTime","getTimestamp","x-ms-pagetrackingid","pageTrackingId","x-ms-lcid","stubOptions","lcid","x-ms-requestid","requestId","api","url","isMethodEnter","httpMethod","timeTaken","successHandler","errorFunc","requestTimeTaken","requestResult","statusCode","errorHandler","isUserError","traceFunc","responseJSON","errMsg","isError","InstrumentationContext","errorMappers","defaults","createInstrumentationMiddleware","instrumentationOptions","_ref$loggerFunc","loggerFunc","_ref$loggerFunc2","_ref$loggerFunc2$trac","_ref$loggerFunc2$erro","_ref$loggerFunc2$perf","constant","any","errorMapper","check","_req$headers","_req$headers2$xMsRe","uuidv4","useCleanAllCache","_useContext","useContext","EnvironmentContext","environments","_slicedToArray","useCallback","allRecordGroups","allRecords","allRecordsIdsToRemove","pluck","react__WEBPACK_IMPORTED_MODULE_0__","React","createContext","useDeepMemo","ref","useRef","isEqual","current","useDeepEqualEffect","fn","deps","isFirst","prevDeps","useEffect","isSame","every","obj","useDebugValue","OverreactRequest","assign","getCacheIds","lookupFn","cacheHit","flatten","getDataFromRecords","getLookupCacheFn","lookupCacheFn","varKeySelector","dataKeySelector","useComponent","useMemo","ex","stacks","stack","split","funcName","trim","startsWith","equalityFn","newData","oldData","useFetch","config","memoedConfig","requestRequired","currentData","currentError","_useReducer","useReducer","x","forceRender","useEnvironment","postponeRead","lookupCacheByVariables","_ref2$options","dataCallback","registerComponent","errorCallback","_dataRef$status","dataObserver","update","unsubscribe","overreactIds","pushRequest","getMergedConfig","origin","newInstance","getRawData","getDataWithOverreactIdFromRecords","mutateRecords","recordsBeforeMutation","newRecords","addRecords","replacePreemptiveRecords","removePreemptiveRecords","useMutation","recordsBeforeMutationRef","mergedConfig","onComplete","preemptiveResponseFn","dataBeforeWithId","dataWithId","mutationData","rest","preemptiveData","_getRecordsByEntityKe","addPreemptiveRecords","useRefetch","_ref2$onError","_ref3$options","getRecordsDataInDataRef","getRecordsDataById","usePagination","fetchVariables","_memoedConfig$strictM","strictMode","mergeNewRecords","refId","cursorIndex","loadingId","_useState","useState","_useState2","isLoading","setIsLoading","_useState3","_useState4","_useState5","_useState6","setError","resetInternalState","setInternalStateOnResponse","hasMore","loadMoreCallback","__","recordsData","onErrorCallback","err","isUndefined","newIds","recordsToShow","storeRecordsToShow","loadMore","requestConfig","pageSize","_fetchVariables$optio","requestVars","myId","generateNewDataRefId","useDataRefId","dataRefIdRef","dataRefIdPool","usePromisify","actions","reject","mergedArgs","Environment","networkRequestor","tag","requestQueue","dataFetcherSubscriber","notifyObservers","removeRequest","requestCount","getSchema","getRequestor","additionalParams","requestorWithDevTools","_window$__OVERREACT_D","onRequest","responseValue","exception","execute","sink","shift","notifyCb","splice","_useContext2","specificEnv","env","first","MAX_REQUEST_BATCH_SIZE","FETCH_INTERVAL","INIT_MIDDLEWARE_STATES","executeRequests","requests","pendingRequests","_loop","batchRequests","batchSize","useEnvironmentInitialization","timer","clearTimeout","setTimeout","DataFetcher","memo","props","children","createElement","Provider","defaultProps","SchemaNode","modelSchema","childNodes","extensions","append","node","ext","Schema","modelGetter","root","modelToSchemaMapping","buildModelToSchemaMap","getSchemaNames","path","parts","currentNode","partName","existingPathFound","j","newNode"],"mappings":"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","file":"static/js/application.initial~4536320a.f238555b.chunk.js","sourcesContent":["export const OVERREACT_ID_FIELD_NAME = '_OVERREACT_ID';\r\n\r\nexport function createOverreactId(id, parentId, parentType) {\r\n return `${parentType}:${parentId}:${id}`;\r\n}\r\n","// Use the basic APIs of ES6 Set. If your site supports browsers not\r\n// having Set natively, you should use a polyfill\r\n\r\n/* Subject to observe */\r\nexport class Subject {\r\n constructor() {\r\n // eslint-disable-next-line no-undef\r\n this.observers = new Set();\r\n }\r\n\r\n /**\r\n * Subscribe an observer to the subject\r\n * @param {Object} observer - The observer subscribing to the subject\r\n * @returns {void}\r\n */\r\n subscribe(observer) {\r\n if (!(observer instanceof Object)) {\r\n throw new Error('Invalid observer');\r\n }\r\n this.observers.add(observer);\r\n }\r\n\r\n /**\r\n * Unsubscribe an observer from the subject\r\n * @param {Object} observer - The observer to unsubscribe\r\n * @returns {void}\r\n */\r\n unsubscribe(observer) {\r\n this.observers.delete(observer);\r\n }\r\n\r\n /**\r\n * Notify the observers for a certain action\r\n * @param {string} action -\r\n * Name of the action, it will map to the handler method name on the observer\r\n * @param {...*} args - Additional arguments\r\n * @returns {void}\r\n */\r\n notify(action, ...args) {\r\n this.observers.forEach(observer => {\r\n if (typeof observer[action] === 'function') {\r\n observer[action](this, ...args);\r\n }\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { Subject } from '../../utils/observer-pattern';\r\n\r\nexport class DataRef extends Subject {\r\n constructor(key) {\r\n super();\r\n this.key = key;\r\n this.idRefs = [];\r\n this.status = {\r\n previousVariables: undefined,\r\n lastUpdateTimestamp: Date.now(),\r\n error: undefined,\r\n };\r\n\r\n this.includes = this.includes.bind(this);\r\n this.push = this.push.bind(this);\r\n this.add = this.add.bind(this);\r\n this.delete = this.delete.bind(this);\r\n this.onUpdate = this.onUpdate.bind(this);\r\n this.updateStatus = this.updateStatus.bind(this);\r\n this.onError = this.onError.bind(this);\r\n this.clearError = this.clearError.bind(this);\r\n this.onEntitiesCreated = this.onEntitiesCreated.bind(this);\r\n this.onEntitiesDeleted = this.onEntitiesDeleted.bind(this);\r\n this.reset = this.reset.bind(this);\r\n\r\n // TODO: use \"cursor\" for specific pagination needs\r\n this.cursor = {};\r\n\r\n this.UiComponents = [];\r\n }\r\n\r\n registerComponent({\r\n componentName,\r\n }) {\r\n this.UiComponents = _.uniq([...this.UiComponents, componentName]);\r\n this.updateDevTools();\r\n }\r\n\r\n unregisterComponent({\r\n componentName,\r\n }) {\r\n this.UiComponents = _.without(this.UiComponents, componentName);\r\n this.updateDevTools();\r\n }\r\n\r\n updateDevTools() {\r\n if (window.__OVERREACT_DEVTOOLS__) {\r\n const { onDataRefChange } = window.__OVERREACT_DEVTOOLS__;\r\n onDataRefChange({\r\n components: this.UiComponents,\r\n key: this.key,\r\n idRefs: this.idRefs,\r\n });\r\n }\r\n }\r\n\r\n includes(id) {\r\n return this.idRefs.includes(id);\r\n }\r\n\r\n push(id) {\r\n const ret = this.idRefs.push(id);\r\n\r\n return ret;\r\n }\r\n\r\n add(id) {\r\n // add/merge an id. If id exists in idRefs, do nothing\r\n if (this.includes(id)) {\r\n return;\r\n }\r\n\r\n this.push(id);\r\n }\r\n\r\n delete(ids) {\r\n if (_.intersection(this.idRefs, ids).length > 0) {\r\n this.idRefs = _.difference(this.idRefs, ids);\r\n }\r\n }\r\n\r\n onError(error, ...args) {\r\n this.status.error = error;\r\n this.notify('onError', error, ...args);\r\n }\r\n\r\n clearError() {\r\n this.onError(undefined);\r\n }\r\n\r\n // currently, we will always add something to this data ref after clear, and trigger event then\r\n // so here we don't trigger a notification anymore: this.notify('update', []);\r\n // otherwise UI component will get a incorrect empty status for short time\r\n clear() {\r\n this.idRefs = [];\r\n this.clearError();\r\n }\r\n\r\n reset(ids) {\r\n this.idRefs = ids;\r\n this.notify('update', ids);\r\n }\r\n\r\n updateStatus(newStatus) {\r\n this.status = {\r\n ...this.status,\r\n ...newStatus,\r\n };\r\n }\r\n\r\n onUpdate(updatedIds, request) {\r\n if (_.intersection(this.idRefs, updatedIds).length > 0) {\r\n this.notify('update', updatedIds, request);\r\n }\r\n }\r\n\r\n onEntitiesCreated(ids) {\r\n if (!_.isEmpty(ids)) {\r\n this.notify('onEntitiesCreated', ids);\r\n }\r\n }\r\n\r\n onEntitiesDeleted(ids) {\r\n if (_.intersection(this.idRefs, ids).length > 0) {\r\n this.delete(ids);\r\n this.notify('update', this.idRefs);\r\n }\r\n }\r\n\r\n toJson() {\r\n return ({\r\n key: this.key,\r\n idRefs: this.idRefs,\r\n status: this.status,\r\n });\r\n }\r\n}\r\n","import { DataRef } from './data-ref';\r\n\r\n// this will be attached to the schema node as an extension\r\n// and represent all data stored under the data path given by the schema node\r\n// each data node contains an array of data IDs\r\n// which refers to the actual data record in the store.\r\nexport class DataNode {\r\n constructor() {\r\n this.dataRefs = {};\r\n\r\n this.getDataRef = this.getDataRef.bind(this);\r\n this.dataRefIdsUpdate = this.dataRefIdsUpdate.bind(this);\r\n this.entitiesCreated = this.entitiesCreated.bind(this);\r\n this.entitiesDeleted = this.entitiesDeleted.bind(this);\r\n }\r\n\r\n getDataRef(key) {\r\n if (!this.dataRefs[key]) {\r\n this.dataRefs[key] = new DataRef(key);\r\n }\r\n\r\n return this.dataRefs[key];\r\n }\r\n\r\n dataRefIdsUpdate(recordGroup, updatedIds, request) {\r\n Object.keys(this.dataRefs).forEach(key => this.dataRefs[key].onUpdate(updatedIds, request));\r\n }\r\n\r\n entitiesCreated(recordGroup, ids) {\r\n Object.keys(this.dataRefs).forEach(key => this.dataRefs[key].onEntitiesCreated(ids));\r\n }\r\n\r\n entitiesDeleted(recordGroup, ids) {\r\n Object.keys(this.dataRefs).forEach(key => this.dataRefs[key].onEntitiesDeleted(ids));\r\n }\r\n\r\n toJson() {\r\n return ({\r\n dataRefs: Object.keys(this.dataRefs).map(k => this.dataRefs[k].toJson()),\r\n });\r\n }\r\n}\r\n","import { DataNode } from './data-node';\r\n\r\nconst EXTENSION_NAME = 'DATA';\r\n\r\nexport function createDataNode(schemaNode, store) {\r\n if (!schemaNode) {\r\n throw new Error('Invalid schema node');\r\n }\r\n\r\n const dataNode = new DataNode();\r\n store.getRecordGroup(schemaNode.modelName).subscribe(dataNode);\r\n\r\n schemaNode.setExtension(EXTENSION_NAME, dataNode);\r\n\r\n return dataNode;\r\n}\r\n\r\nexport function getDataNode(schemaNode) {\r\n if (!schemaNode) {\r\n return null;\r\n }\r\n\r\n return schemaNode.getExtension(EXTENSION_NAME);\r\n}\r\n","export class Record {\r\n constructor(id, type, data) {\r\n this.id = id;\r\n this.type = type;\r\n this.data = data;\r\n\r\n this.setValue = this.setValue.bind(this);\r\n this.getValue = this.getValue.bind(this);\r\n this.setData = this.setData.bind(this);\r\n this.getData = this.getData.bind(this);\r\n }\r\n\r\n setValue(key, value) {\r\n this.data = {\r\n ...this.data,\r\n [key]: value,\r\n };\r\n }\r\n\r\n getValue(key) {\r\n return this.data[key];\r\n }\r\n\r\n setData(data) {\r\n this.data = {\r\n ...this.data,\r\n ...data,\r\n };\r\n }\r\n\r\n getData() {\r\n return this.data;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { Record } from './record';\r\nimport { OVERREACT_ID_FIELD_NAME } from './consts';\r\nimport { Subject } from '../utils/observer-pattern';\r\n\r\nexport class RecordGroup extends Subject {\r\n constructor({\r\n schemaType,\r\n store,\r\n }) {\r\n super();\r\n\r\n this.schemaType = schemaType;\r\n this.store = store;\r\n\r\n // records will be kept in chronological order\r\n // new records will always be kept at the end of the list\r\n this.records = [];\r\n\r\n this.addOrUpdateRecords = this.addOrUpdateRecords.bind(this);\r\n\r\n this.getRecords = this.getRecords.bind(this);\r\n this.getRecordsByEntityKeys = this.getRecordsByEntityKeys.bind(this);\r\n }\r\n\r\n findIndex(dataId) {\r\n return this.records.findIndex(r => r.id === dataId);\r\n }\r\n\r\n addOrUpdateRecordInternal(data) {\r\n const dataId = data[OVERREACT_ID_FIELD_NAME];\r\n const recordId = this.findIndex(dataId);\r\n\r\n if (recordId > -1) {\r\n // we're updating\r\n this.records[recordId].setData(data.rawData);\r\n } else {\r\n // \"add\" record - because we'll be appending\r\n const newRecord = new Record(dataId, this.schemaType, data.rawData);\r\n this.records.push(newRecord);\r\n }\r\n\r\n return dataId;\r\n }\r\n\r\n addOrUpdateRecords(dataItems, request) {\r\n const updatedDataIDs = dataItems.map(data => this.addOrUpdateRecordInternal(data));\r\n this.notify('dataRefIdsUpdate', updatedDataIDs, request);\r\n this.notifyUpdate();\r\n }\r\n\r\n deleteRecords(ids) {\r\n this.records = this.records.filter(record => !_.contains(ids, record.id));\r\n this.notifyUpdate();\r\n }\r\n\r\n getRecords(ids) {\r\n return ids.map(id => this.records.find(r => r.id === id));\r\n }\r\n\r\n getRecordsByEntityKeys(keySelector, keys) {\r\n return _.chain(keys)\r\n .map(key => this.records.find(r => keySelector(r.getData()) === key))\r\n .compact()\r\n .value();\r\n }\r\n\r\n notifyUpdate() {\r\n if (window.__OVERREACT_DEVTOOLS__) {\r\n const { onRecordGroupChange } = window.__OVERREACT_DEVTOOLS__;\r\n onRecordGroupChange({\r\n storeId: this.store.uniqueId,\r\n schemaType: this.schemaType,\r\n records: JSON.parse(JSON.stringify(this.records)),\r\n });\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\n// Use the basic APIs of ES6 Map. If your site supports browsers not\r\n// having Map natively, you should use a polyfill\r\nimport { RecordGroup } from './record-group';\r\n\r\nexport class Store {\r\n constructor(uniqueId) {\r\n this.uniqueId = uniqueId || _.uniqueId('Overreact_store_');\r\n this.recordGroups = {};\r\n // eslint-disable-next-line no-undef\r\n this.preemptiveRecords = new Map();\r\n\r\n this.getRecordGroup = this.getRecordGroup.bind(this);\r\n\r\n if (window.__OVERREACT_DEVTOOLS__) {\r\n window.__OVERREACT_DEVTOOLS__.store = this;\r\n window.__OVERREACT_DEVTOOLS__.getStore(this);\r\n }\r\n }\r\n\r\n getRecordGroup(modelName) {\r\n if (!this.recordGroups[modelName]) {\r\n this.recordGroups[modelName] = new RecordGroup({\r\n schemaType: modelName,\r\n store: this,\r\n });\r\n }\r\n return this.recordGroups[modelName];\r\n }\r\n\r\n addPreemptiveRecords(key, records) {\r\n this.preemptiveRecords.set(key, records);\r\n }\r\n\r\n removePreemptiveRecords(key) {\r\n const records = this.preemptiveRecords.get(key);\r\n this.preemptiveRecords.delete(key);\r\n return records;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { getDataNode, createDataNode } from './schema-extension/schema-extension';\r\n\r\nexport function getRecordGroup(store, requestContract) {\r\n if (store) {\r\n const schemaNode = requestContract.getSchemaNode();\r\n const recordGroup = store.getRecordGroup(schemaNode.modelName);\r\n\r\n return recordGroup;\r\n }\r\n return null;\r\n}\r\n\r\nexport function getRecordsById(store, requestContract, ids) {\r\n const recordGroup = getRecordGroup(store, requestContract);\r\n return recordGroup.getRecords(ids);\r\n}\r\n\r\nexport function getRecordsByEntityKey(store, spec, keys) {\r\n const { requestContract, responseContract } = spec;\r\n const recordGroup = getRecordGroup(store, requestContract);\r\n const { keySelector } = responseContract;\r\n return recordGroup.getRecordsByEntityKeys(keySelector, keys);\r\n}\r\n\r\nexport function getRecordsFromResponseDataArray(store, spec, dataArray) {\r\n const { responseContract } = spec;\r\n const { keySelector } = responseContract;\r\n const entityKeys = _.map(dataArray, d => keySelector(d));\r\n return getRecordsByEntityKey(store, spec, entityKeys);\r\n}\r\n\r\nexport function getRecords(store, requestContract, key) {\r\n if (store) {\r\n const schemaNode = requestContract.getSchemaNode();\r\n const dataNode = getDataNode(schemaNode) || createDataNode(schemaNode, store);\r\n\r\n const dataIds = dataNode.getDataRef(key).idRefs;\r\n const recordGroup = getRecordGroup(store, requestContract);\r\n\r\n return recordGroup.getRecords(dataIds);\r\n }\r\n return null;\r\n}\r\n\r\nexport function getDataRef(store, requestContract, dataRefId) {\r\n if (store) {\r\n const schemaNode = requestContract.getSchemaNode();\r\n const dataNode = getDataNode(schemaNode) || createDataNode(schemaNode, store);\r\n return dataNode && dataNode.getDataRef(dataRefId);\r\n }\r\n return null;\r\n}\r\n\r\nexport function updateDataRefWithIds(dataRef, ids) {\r\n dataRef.clear();\r\n _.map(ids, id => {\r\n dataRef.add(id);\r\n });\r\n dataRef.onUpdate(ids);\r\n}\r\n","export const requestVerbs = {\r\n GET: 'GET',\r\n POST: 'POST',\r\n DELETE: 'DELETE',\r\n PATCH: 'PATCH',\r\n PUT: 'PUT',\r\n};\r\n","export class RequestContract {\r\n constructor({\r\n schema,\r\n dataPath,\r\n verb,\r\n fetchPolicy,\r\n uriFactoryFn,\r\n headerFactoryFn,\r\n payloadFactoryFn,\r\n keySelector,\r\n parentKeySelector,\r\n }) {\r\n this.schema = schema;\r\n this.dataPath = dataPath;\r\n this.verb = verb;\r\n this.fetchPolicy = fetchPolicy;\r\n this.uriFactoryFn = uriFactoryFn;\r\n this.headerFactoryFn = headerFactoryFn;\r\n this.payloadFactoryFn = payloadFactoryFn;\r\n this.keySelector = keySelector;\r\n this.parentKeySelector = parentKeySelector;\r\n\r\n this.getSchemaNode = this.getSchemaNode.bind(this);\r\n }\r\n\r\n getSchemaNode() {\r\n // schema is the root of the schema tree that current app has built\r\n // need to either find an existing path in the tree,\r\n // or construct a new path in the tree\r\n\r\n // note that the schema tree is only a sub-tree (or more precisely a sub-graph)\r\n // of the original data schema, such as one found in OData.\r\n return this.schema.insert(this.dataPath);\r\n }\r\n}\r\n\r\nexport function createRequestContract({\r\n schema,\r\n dataPath,\r\n verb,\r\n fetchPolicy,\r\n uriFactoryFn,\r\n headerFactoryFn,\r\n payloadFactoryFn,\r\n keySelector,\r\n parentKeySelector,\r\n}) {\r\n if (!dataPath) {\r\n throw new Error('dataPath cannot be empty');\r\n }\r\n\r\n return new RequestContract({\r\n schema,\r\n dataPath,\r\n verb,\r\n fetchPolicy,\r\n uriFactoryFn,\r\n headerFactoryFn,\r\n payloadFactoryFn,\r\n keySelector,\r\n parentKeySelector,\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport { OVERREACT_ID_FIELD_NAME, createOverreactId } from '../../store/consts';\r\n\r\nexport function getSideEffectCacheStoreHelpers(environment) {\r\n const { store, schema: { schemaToModelMapping } } = environment;\r\n const tryMergeItemsToCacheStore = ({\r\n items,\r\n schemaName,\r\n itemKeySelector,\r\n parentSchemaName,\r\n parentId,\r\n }) => {\r\n const modelName = schemaToModelMapping[schemaName];\r\n const recordGroup = store.getRecordGroup(modelName);\r\n const keysInCache = recordGroup.records.map(r => itemKeySelector(r.data));\r\n const itemsToAdd = _.filter(items, item => !_.include(keysInCache, itemKeySelector(item)));\r\n const itemsToAddWithOverreactId = itemsToAdd.map(item => {\r\n const overreactId = createOverreactId(\r\n itemKeySelector(item),\r\n parentId,\r\n parentSchemaName,\r\n );\r\n\r\n return {\r\n rawData: item,\r\n [OVERREACT_ID_FIELD_NAME]: overreactId,\r\n };\r\n });\r\n recordGroup.addOrUpdateRecords(itemsToAddWithOverreactId);\r\n const ids = itemsToAddWithOverreactId.map(item => item[OVERREACT_ID_FIELD_NAME]);\r\n recordGroup.notify('entitiesCreated', ids);\r\n\r\n const itemsToMerge = _.filter(items, item => _.include(keysInCache, itemKeySelector(item)));\r\n const itemsMerged = itemsToMerge.map(itemToMerge => {\r\n const key = itemKeySelector(itemToMerge);\r\n const records = recordGroup.getRecordsByEntityKeys(itemKeySelector, [key]);\r\n\r\n return {\r\n rawData: {\r\n ...records[0].data,\r\n ...itemToMerge,\r\n },\r\n [OVERREACT_ID_FIELD_NAME]: records[0].id,\r\n };\r\n });\r\n recordGroup.addOrUpdateRecords(itemsMerged);\r\n };\r\n\r\n const tryDeleteItemsInCacheStore = ({\r\n keysToDelete,\r\n schemaName,\r\n itemKeySelector,\r\n }) => {\r\n const modelName = schemaToModelMapping[schemaName];\r\n const recordGroup = store.getRecordGroup(modelName);\r\n\r\n const recordsToRemove = recordGroup.getRecordsByEntityKeys(itemKeySelector, keysToDelete);\r\n const recordsIdsToRemove = recordsToRemove.map(r => r.id);\r\n\r\n recordGroup.deleteRecords(recordsIdsToRemove);\r\n recordGroup.notify('entitiesDeleted', recordsIdsToRemove);\r\n };\r\n\r\n return {\r\n tryMergeItemsToCacheStore,\r\n tryDeleteItemsInCacheStore,\r\n };\r\n}\r\n","/* eslint-disable no-console */\r\n/* eslint-disable max-len */\r\nimport { OVERREACT_ID_FIELD_NAME, createOverreactId } from '../store/consts';\r\nimport { specTypes } from './spec-types';\r\n\r\nimport fetchResponseHandler from './response-handler/fetch';\r\nimport mutationResponseHandler from './response-handler/mutation';\r\nimport refetchResponseHandler from './response-handler/refetch';\r\nimport errorResponseHandler from './response-handler/error';\r\n\r\nexport class ResponseContract {\r\n constructor({\r\n requestContract, responseType, keySelector, processorFn, errorConvertFn,\r\n }) {\r\n this.requestContract = requestContract;\r\n this.responseType = responseType;\r\n this.keySelector = keySelector;\r\n this.processorFn = processorFn;\r\n this.errorConvertFn = errorConvertFn;\r\n this.schemaNode = this.requestContract.getSchemaNode();\r\n\r\n this.selectKey = this.selectKey.bind(this);\r\n this.onGetResponse = this.onGetResponse.bind(this);\r\n this.onGetError = this.onGetError.bind(this);\r\n\r\n this.applyId = this.applyId.bind(this);\r\n }\r\n\r\n selectKey(variables) {\r\n return this.keySelector(variables);\r\n }\r\n\r\n applyId(entity, parentId) {\r\n // create a new OVERREACT_ID_FIELD,\r\n // this will be used to uniquely identify a Record instance.\r\n // Basically we'll append the entity's parent type and ID\r\n // to the ID of the entity itself, which will comes handy\r\n // during the clean-up if the parent entity is deleted.\r\n\r\n const overreactId = createOverreactId(\r\n this.keySelector(entity),\r\n parentId,\r\n this.schemaNode.parentNode.name,\r\n );\r\n\r\n return {\r\n rawData: entity,\r\n [OVERREACT_ID_FIELD_NAME]: overreactId,\r\n };\r\n }\r\n\r\n onGetResponse(environment, response, request) {\r\n let processedResponse = response;\r\n const { spec } = request;\r\n const { specType } = spec;\r\n\r\n if (!request.middlewareStates.isResponseFromStore && this.processorFn) {\r\n processedResponse = this.processorFn(response, request);\r\n }\r\n\r\n switch (specType) {\r\n case specTypes.FETCH:\r\n case specTypes.PAGINATION: {\r\n return fetchResponseHandler(environment, processedResponse, request)(this);\r\n }\r\n case specTypes.ADD:\r\n case specTypes.DELETE:\r\n case specTypes.MUTATION: {\r\n return mutationResponseHandler(environment, processedResponse, request)(this);\r\n }\r\n case specTypes.REFETCH: {\r\n return refetchResponseHandler(environment, processedResponse, request)(this);\r\n }\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n onGetError(environment, request, error) {\r\n return errorResponseHandler(environment, request, error)(this);\r\n }\r\n}\r\n\r\nexport function createResponseContract({\r\n requestContract,\r\n responseType,\r\n keySelector,\r\n processorFn,\r\n errorConvertFn,\r\n}) {\r\n return new ResponseContract({\r\n requestContract, responseType, keySelector, processorFn, errorConvertFn,\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport { getDataNode, createDataNode } from '../../store';\r\nimport { responseTypes } from '../response-types';\r\nimport { OVERREACT_ID_FIELD_NAME } from '../../store/consts';\r\nimport { getSideEffectCacheStoreHelpers } from './sideEffectFnHelper';\r\n\r\nexport default function handler(environment, processedResponse, request) {\r\n return context => {\r\n const { id: dataRefId, variables, spec } = request;\r\n const { locator } = variables;\r\n\r\n const { store } = environment;\r\n\r\n let dataNode = getDataNode(context.schemaNode);\r\n\r\n if (!dataNode) {\r\n dataNode = createDataNode(context.schemaNode, store);\r\n }\r\n\r\n const dataRef = dataNode.getDataRef(dataRefId);\r\n dataRef.clearError();\r\n\r\n const { descriptor, order } = locator;\r\n const { requestContract, sideEffectFn } = spec;\r\n const { parentKeySelector } = requestContract;\r\n let parentId = parentKeySelector ? parentKeySelector(variables) : undefined;\r\n let dataWithOverreactId = null;\r\n\r\n // after the response has been processed, it will either be\r\n // - a single entity\r\n // - an array of entities\r\n if (context.responseType === responseTypes.ENTITY) {\r\n if (!parentId && order.length > 1) {\r\n parentId = descriptor[order[order.length - 2]];\r\n }\r\n\r\n // step 1 - generate _overreact_id\r\n dataWithOverreactId = context.applyId(processedResponse, parentId);\r\n const overreactId = dataWithOverreactId[OVERREACT_ID_FIELD_NAME];\r\n\r\n // step 2 - add/merge _overreact_id to current dataRef\r\n dataRef.add(overreactId);\r\n\r\n // step 3 - insert the data into store, this will trigger callbacks\r\n // in data nodes, which will in turn trigger dataRef refresh.\r\n store.getRecordGroup(context.schemaNode.modelName)\r\n .addOrUpdateRecords([dataWithOverreactId], request);\r\n } else if (context.responseType === responseTypes.COLL) {\r\n // when requests for COLL, the parentId is the last element in the locator\r\n if (!parentId && order.length > 0) {\r\n parentId = descriptor[order[order.length - 1]];\r\n }\r\n dataWithOverreactId = processedResponse.map(entity => {\r\n const data = context.applyId(entity, parentId);\r\n const overreactId = data[OVERREACT_ID_FIELD_NAME];\r\n\r\n dataRef.add(overreactId);\r\n\r\n return data;\r\n });\r\n\r\n store.getRecordGroup(context.schemaNode.modelName)\r\n .addOrUpdateRecords(dataWithOverreactId, request);\r\n\r\n // when the return value is empty, we still need to notify the hook who trigger this call\r\n if (dataWithOverreactId.length === 0) {\r\n dataRef.notify('update', [], request);\r\n }\r\n }\r\n\r\n if (sideEffectFn && !_.isEmpty(dataWithOverreactId)) {\r\n const cacheStoreHelper = getSideEffectCacheStoreHelpers(environment);\r\n sideEffectFn(processedResponse, request, spec, cacheStoreHelper);\r\n }\r\n };\r\n}\r\n","import { responseTypes } from '../response-types';\r\nimport { specTypes } from '../spec-types';\r\nimport { getSideEffectCacheStoreHelpers } from './sideEffectFnHelper';\r\n\r\nexport default function handler(environment, processedResponse, request) {\r\n return context => {\r\n const { variables, dataCb, spec } = request;\r\n const { locator } = variables;\r\n const { requestContract, sideEffectFn } = spec;\r\n const { parentKeySelector } = requestContract;\r\n let parentId = parentKeySelector ? parentKeySelector(variables) : undefined;\r\n let dataWithOverreactId = null;\r\n\r\n const { descriptor, order } = locator;\r\n if (context.responseType === responseTypes.COLL || request.spec.specType === specTypes.ADD) {\r\n // when requests for COLL or create entity, the parentId is the last element in the locator\r\n if (!parentId && order.length > 0) {\r\n parentId = descriptor[order[order.length - 1]];\r\n }\r\n const responseArr = Array.isArray(processedResponse)\r\n ? processedResponse\r\n : [processedResponse];\r\n dataWithOverreactId = responseArr.map(entity => context.applyId(entity, parentId));\r\n\r\n dataCb(dataWithOverreactId, request);\r\n } else if (context.responseType === responseTypes.ENTITY) {\r\n if (!parentId && order.length > 1) {\r\n parentId = descriptor[order[order.length - 2]];\r\n }\r\n\r\n // step 1 - generate _overreact_id\r\n dataWithOverreactId = context.applyId(processedResponse, parentId);\r\n\r\n dataCb([dataWithOverreactId], request);\r\n } else if (context.responseType === responseTypes.NONE) {\r\n // TODO: we need to deal with DELETE\r\n dataCb(null, request);\r\n }\r\n\r\n if (sideEffectFn) {\r\n const cacheStoreHelper = getSideEffectCacheStoreHelpers(environment);\r\n sideEffectFn(processedResponse, request, spec, cacheStoreHelper);\r\n }\r\n };\r\n}\r\n","import { getDataNode, createDataNode } from '../../store';\r\nimport { responseTypes } from '../response-types';\r\nimport { OVERREACT_ID_FIELD_NAME } from '../../store/consts';\r\nimport { getSideEffectCacheStoreHelpers } from './sideEffectFnHelper';\r\n\r\nexport default function handler(environment, processedResponse, request) {\r\n return context => {\r\n const {\r\n id: dataRefId,\r\n variables,\r\n dataCb,\r\n spec,\r\n } = request;\r\n const { locator } = variables;\r\n const { store } = environment;\r\n\r\n let dataNode = getDataNode(context.schemaNode);\r\n\r\n if (!dataNode) {\r\n dataNode = createDataNode(context.schemaNode, store);\r\n }\r\n\r\n const dataRef = dataNode.getDataRef(dataRefId);\r\n dataRef.clear();\r\n\r\n const { descriptor, order } = locator;\r\n const { requestContract, sideEffectFn } = spec;\r\n const { parentKeySelector } = requestContract;\r\n let parentId = parentKeySelector ? parentKeySelector(variables) : undefined;\r\n let dataWithOverreactId = null;\r\n\r\n if (context.responseType === responseTypes.ENTITY) {\r\n if (!parentId && order.length > 1) {\r\n parentId = descriptor[order[order.length - 2]];\r\n }\r\n\r\n dataWithOverreactId = context.applyId(processedResponse, parentId);\r\n const overreactId = dataWithOverreactId[OVERREACT_ID_FIELD_NAME];\r\n\r\n dataRef.add(overreactId);\r\n\r\n store.getRecordGroup(context.schemaNode.modelName)\r\n .addOrUpdateRecords([dataWithOverreactId], request);\r\n\r\n dataCb(processedResponse, request);\r\n } else if (context.responseType === responseTypes.COLL) {\r\n if (!parentId && order.length > 0) {\r\n parentId = descriptor[order[order.length - 1]];\r\n }\r\n dataWithOverreactId = processedResponse.map(entity => {\r\n const data = context.applyId(entity, parentId);\r\n const overreactId = data[OVERREACT_ID_FIELD_NAME];\r\n\r\n dataRef.add(overreactId);\r\n\r\n return data;\r\n });\r\n\r\n store.getRecordGroup(context.schemaNode.modelName)\r\n .addOrUpdateRecords(dataWithOverreactId, request);\r\n\r\n // when the return value is empty, we still need to notify the hook who trigger this call\r\n if (dataWithOverreactId.length === 0) {\r\n dataRef.notify('update', [], request);\r\n }\r\n\r\n dataCb(processedResponse, request);\r\n }\r\n\r\n if (sideEffectFn) {\r\n const cacheStoreHelper = getSideEffectCacheStoreHelpers(environment);\r\n sideEffectFn(processedResponse, request, spec, cacheStoreHelper);\r\n }\r\n };\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport { getDataNode, createDataNode } from '../../store';\r\n\r\nexport default function handler(environment, request, error) {\r\n return context => {\r\n const { id: dataRefId, errorCb } = request;\r\n\r\n const { store } = environment;\r\n\r\n let dataNode = getDataNode(context.schemaNode);\r\n\r\n if (!dataNode) {\r\n dataNode = createDataNode(context.schemaNode, store);\r\n }\r\n\r\n const dataRef = dataNode.getDataRef(dataRefId);\r\n dataRef.onError(error, request);\r\n\r\n if (_.isFunction(errorCb)) {\r\n errorCb(error, request);\r\n }\r\n };\r\n}\r\n","export function createSpec(\r\n requestContract,\r\n responseContract,\r\n specType,\r\n sideEffectFn,\r\n environmentLookupFn,\r\n) {\r\n // FIXME: only the basics. Need to create more based on specType\r\n return {\r\n requestContract,\r\n responseContract,\r\n specType,\r\n sideEffectFn,\r\n environmentLookupFn,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport stringify from 'json-stable-stringify';\r\n\r\nimport { getRecords, getDataRef } from '../../store';\r\nimport { specTypes } from '../../spec/spec-types';\r\nimport { responseTypes } from '../../spec/response-types';\r\n\r\nexport const DEFAULT_STORE_EXPIRATION_DURATION = 5 * 60 * 1000;\r\n\r\nexport const FetchPolicy = {\r\n StoreOnly: 'StoreOnly',\r\n NetworkOnly: 'NetworkOnly',\r\n StoreOrNetwork: 'StoreOrNetwork',\r\n NetworkOrStore: 'NetworkOrStore',\r\n};\r\n\r\nexport function IsNetworkPolicy(fetchPolicy) {\r\n return fetchPolicy === FetchPolicy.NetworkOnly\r\n || fetchPolicy === FetchPolicy.NetworkOrStore\r\n || fetchPolicy === FetchPolicy.StoreOrNetwork;\r\n}\r\n\r\nexport function IsStorePolicy(fetchPolicy) {\r\n return fetchPolicy === FetchPolicy.StoreOnly\r\n || fetchPolicy === FetchPolicy.StoreOrNetwork\r\n || fetchPolicy === FetchPolicy.NetworkOrStore;\r\n}\r\n\r\nexport function IsStoreSecondaryPolicy(fetchPolicy) {\r\n return fetchPolicy === FetchPolicy.NetworkOrStore;\r\n}\r\n\r\nexport function getFetchPolicy(specType, fetchPolicyOption, fetchPolicyInEnv) {\r\n if (specType === specTypes.FETCH\r\n || specType === specTypes.PAGINATION\r\n || fetchPolicyOption !== FetchPolicy.StoreOnly) {\r\n return fetchPolicyOption || fetchPolicyInEnv;\r\n }\r\n\r\n return fetchPolicyInEnv;\r\n}\r\n\r\nexport function getDataFromStore(store, spec, dataRefId) {\r\n const { requestContract } = spec;\r\n const records = getRecords(store, requestContract, dataRefId);\r\n\r\n const dataInStore = _.map(records, record => record.getData());\r\n if (spec.responseContract.responseType === responseTypes.ENTITY\r\n && !_.isEmpty(dataInStore) && _.isArray(dataInStore)) {\r\n return dataInStore[0];\r\n }\r\n return dataInStore;\r\n}\r\n\r\nexport function shouldForceNetwork({\r\n store, spec, dataRefId, variables, storeExpirationDuration, currentTimestamp, requestFetchPolicy,\r\n}) {\r\n const { requestContract, specType } = spec;\r\n const dataRef = getDataRef(store, requestContract, dataRefId);\r\n const {\r\n status: {\r\n previousVariables,\r\n lastUpdateTimestamp,\r\n } = {},\r\n } = dataRef || {};\r\n\r\n return requestFetchPolicy !== FetchPolicy.StoreOnly\r\n && (stringify(variables) !== stringify(previousVariables)\r\n || currentTimestamp - lastUpdateTimestamp > storeExpirationDuration\r\n || specType === specTypes.ADD\r\n || specType === specTypes.DELETE\r\n || specType === specTypes.MUTATION);\r\n}\r\n\r\nexport function updateDataRefStatus({\r\n store, spec, dataRefId, variables, currentTimestamp,\r\n}) {\r\n const { requestContract } = spec;\r\n const dataRef = getDataRef(store, requestContract, dataRefId);\r\n if (dataRef) {\r\n dataRef.updateStatus({\r\n previousVariables: variables,\r\n lastUpdateTimestamp: currentTimestamp,\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport {\r\n FetchPolicy,\r\n IsNetworkPolicy,\r\n IsStorePolicy,\r\n IsStoreSecondaryPolicy,\r\n getFetchPolicy,\r\n getDataFromStore,\r\n shouldForceNetwork,\r\n updateDataRefStatus,\r\n DEFAULT_STORE_EXPIRATION_DURATION,\r\n} from './fetch-policy-utils';\r\n\r\nexport function createFetchPolicyMiddleware(fetchPolicyMiddlewareOptions) {\r\n const {\r\n fetchPolicy = FetchPolicy.StoreOrNetwork,\r\n cacheExpirationDuration = DEFAULT_STORE_EXPIRATION_DURATION,\r\n } = fetchPolicyMiddlewareOptions || {};\r\n\r\n return next => async req => {\r\n const fetchPolicyInReq = (req.variables\r\n && req.variables.options\r\n && req.variables.options.fetchPolicy)\r\n || req.spec.requestContract.fetchPolicy;\r\n const requestFetchPolicy = getFetchPolicy(req.spec.specType, fetchPolicyInReq, fetchPolicy);\r\n\r\n const isStoreSecondaryPolicy = IsStoreSecondaryPolicy(requestFetchPolicy);\r\n let dataInStore = null;\r\n const isNetworkPolicy = IsNetworkPolicy(requestFetchPolicy);\r\n const isStorePolicy = IsStorePolicy(requestFetchPolicy);\r\n\r\n const currentTimestamp = Date.now();\r\n const isForceNetwork = shouldForceNetwork({\r\n store: req.store,\r\n spec: req.spec,\r\n dataRefId: req.dataRefId,\r\n variables: _.omit(req.variables, 'options'),\r\n storeExpirationDuration: cacheExpirationDuration,\r\n currentTimestamp,\r\n requestFetchPolicy,\r\n });\r\n\r\n if (isStorePolicy && !isForceNetwork && !isStoreSecondaryPolicy) {\r\n dataInStore = getDataFromStore(req.store, req.spec, req.dataRefId);\r\n if (!_.isEmpty(dataInStore)) {\r\n req.middlewareStates.isResponseFromStore = true;\r\n return dataInStore;\r\n }\r\n }\r\n\r\n if (isNetworkPolicy) {\r\n const res = await next(req)\r\n .then(response => {\r\n updateDataRefStatus({\r\n store: req.store,\r\n spec: req.spec,\r\n dataRefId: req.dataRefId,\r\n variables: _.omit(req.variables, 'options'),\r\n currentTimestamp,\r\n });\r\n return response;\r\n })\r\n .catch(error => {\r\n // we only try roll back to previous data if policy is networkOrStore\r\n // if policy is storeOrNetwork and we go here, it means we already miss the cache\r\n // or we decided to not trust the cache.\r\n if (requestFetchPolicy === FetchPolicy.NetworkOrStore) {\r\n dataInStore = getDataFromStore(req.store, req.spec, req.dataRefId);\r\n if (!_.isEmpty(dataInStore)) {\r\n req.middlewareStates.isResponseFromStore = true;\r\n return dataInStore;\r\n }\r\n }\r\n throw error;\r\n });\r\n return res;\r\n }\r\n\r\n return next(req);\r\n };\r\n}\r\n","export const middlewareTypes = {\r\n ERROR: 'ERROR',\r\n FETCH_POLICY: 'FETCH_POLICY',\r\n INSTRUMENTATION: 'INSTRUMENTATION',\r\n};\r\n","import {\r\n compose, omit, values, pick,\r\n} from 'underscore';\r\nimport { middlewareTypes } from './middleware-types';\r\n\r\nfunction executeRequestor(wrappedRequestor) {\r\n return wrappedRequestor.executeRequest();\r\n}\r\n\r\nexport function requestWithMiddleware(wrappedRequestor, middlewares) {\r\n const baseMiddlewares = values(omit(middlewares, middlewareTypes.INSTRUMENTATION));\r\n const instrumentationMiddleware = values(pick(middlewares, middlewareTypes.INSTRUMENTATION));\r\n const wrappedRequest = compose(\r\n ...baseMiddlewares,\r\n ...instrumentationMiddleware,\r\n )(executeRequestor);\r\n\r\n // eslint-disable-next-line arrow-body-style\r\n return wrappedRequest(wrappedRequestor).then(response => {\r\n return response;\r\n }).catch(error => {\r\n throw error;\r\n });\r\n}\r\n","export class WrappedRequestor {\r\n constructor(parameter) {\r\n const {\r\n requestor,\r\n uri,\r\n verb,\r\n headers,\r\n payload,\r\n spec,\r\n variables,\r\n store,\r\n dataRefId,\r\n middlewareStates,\r\n } = parameter;\r\n\r\n this.requestor = requestor;\r\n this.uri = uri;\r\n this.verb = verb;\r\n this.headers = headers;\r\n this.payload = payload;\r\n this.variables = variables;\r\n this.spec = spec;\r\n this.store = store;\r\n this.dataRefId = dataRefId;\r\n this.middlewareStates = middlewareStates;\r\n\r\n this.executeRequest = this.executeRequest.bind(this);\r\n }\r\n\r\n executeRequest() {\r\n return this.requestor(this.uri, this.verb, this.headers, this.payload);\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport function createErrorMiddleware(errorMiddlewareOptions) {\r\n const {\r\n errorProcessor = _.noop,\r\n errorConvertor: envErrorConverter = _.noop,\r\n } = errorMiddlewareOptions || {};\r\n return next => async req => {\r\n const {\r\n spec: {\r\n responseContract: {\r\n errorConvertFn,\r\n } = {},\r\n } = {},\r\n } = req || {};\r\n const errorConvertor = errorConvertFn || envErrorConverter;\r\n\r\n const response = next(req).then(res => {\r\n const error = errorConvertor(res);\r\n if (error) {\r\n throw error;\r\n }\r\n return res;\r\n }).catch(error => {\r\n const processedError = errorConvertor(error) || error;\r\n errorProcessor(processedError);\r\n throw error;\r\n });\r\n\r\n return response;\r\n };\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport _ from 'underscore';\r\n\r\nimport { getTimestamp } from '../../utils/primitive-utilities';\r\n\r\nconst errorToString = error => {\r\n const stringError = error && error.toString();\r\n const stringifiedJson = JSON.stringify(error);\r\n\r\n if ((!_.isEmpty(stringifiedJson) && stringifiedJson !== '{}') || stringError === '[object Object]') {\r\n return stringifiedJson;\r\n }\r\n return stringError;\r\n};\r\n\r\nexport const defaultStubOptions = {\r\n serverErrorCodes: [-1],\r\n\r\n detectError(respData, serverErrorCodes) {\r\n const result = {\r\n pass: true,\r\n status: 400, // hard code to 400 for user-defined error\r\n };\r\n\r\n if (respData\r\n && respData.Errors\r\n && respData.Errors[0]\r\n && respData.Errors[0].Code\r\n && _.isArray(serverErrorCodes)\r\n && _.contains(serverErrorCodes, respData.Errors[0].Code)) {\r\n result.pass = false;\r\n result.message = respData.Errors[0].Message;\r\n result.impactUser = true;\r\n }\r\n return result;\r\n },\r\n\r\n getServerPerf(response) {\r\n if (response && _.isFunction(response.getResponseHeader)) {\r\n const perfTimings = response.getResponseHeader('PerfTimings');\r\n if (perfTimings) {\r\n return perfTimings;\r\n }\r\n const perf = {};\r\n _.each(\r\n ['x-ms-mte2eelapsedtimems', 'x-ms-odataapie2eelapsedtimems', 'x-ms-odataapionlye2eelapsedtimems'],\r\n header => {\r\n const value = response.getResponseHeader(header);\r\n if (value) {\r\n perf[header] = value;\r\n }\r\n },\r\n );\r\n\r\n return JSON.stringify(perf);\r\n }\r\n return '';\r\n },\r\n};\r\n\r\nexport function beforeSendHandler(instrumentationContext, req, perfFunc, shouldAddHeaders) {\r\n instrumentationContext.requestStartTime = getTimestamp();\r\n\r\n if (shouldAddHeaders(instrumentationContext) === true) {\r\n req.headers = {\r\n ...req.headers,\r\n 'x-ms-pagetrackingid': instrumentationContext.pageTrackingId,\r\n 'x-ms-lcid': instrumentationContext.stubOptions.lcid,\r\n lcid: instrumentationContext.stubOptions.lcid,\r\n 'x-ms-requestid': instrumentationContext.requestId,\r\n };\r\n }\r\n\r\n perfFunc({\r\n requestId: instrumentationContext.requestId,\r\n api: instrumentationContext.url,\r\n isMethodEnter: true,\r\n httpMethod: instrumentationContext.httpMethod,\r\n timeTaken: 0,\r\n pass: true,\r\n message: '',\r\n });\r\n}\r\n\r\nexport function successHandler(instrumentationContext, response, errorFunc, perfFunc) {\r\n const requestTimeTaken = getTimestamp() - instrumentationContext.requestStartTime;\r\n const result = instrumentationContext.stubOptions.detectError(response);\r\n instrumentationContext.requestTimeTaken = requestTimeTaken;\r\n\r\n if (!result.pass) {\r\n instrumentationContext.requestResult = false;\r\n instrumentationContext.error = result.message;\r\n\r\n errorFunc({\r\n message: instrumentationContext.error,\r\n api: instrumentationContext.url,\r\n requestId: instrumentationContext.requestId,\r\n impactUser: result.impactUser,\r\n httpMethod: instrumentationContext.httpMethod,\r\n statusCode: result.status,\r\n });\r\n }\r\n\r\n perfFunc({\r\n requestId: instrumentationContext.requestId,\r\n api: instrumentationContext.url,\r\n isMethodEnter: false,\r\n httpMethod: instrumentationContext.httpMethod,\r\n timeTaken: instrumentationContext.requestTimeTaken,\r\n pass: instrumentationContext.requestResult,\r\n message: instrumentationContext.stubOptions.getServerPerf(response),\r\n statusCode: 200,\r\n });\r\n}\r\n\r\nexport function errorHandler(\r\n instrumentationContext, error, isUserError,\r\n traceFunc, errorFunc, perfFunc,\r\n) {\r\n const requestTimeTaken = getTimestamp() - instrumentationContext.requestStartTime;\r\n instrumentationContext.requestTimeTaken = requestTimeTaken;\r\n\r\n if (error && error.status !== 0 && error.status) {\r\n instrumentationContext.responseJSON = error.responseJSON;\r\n instrumentationContext.requestResult = false;\r\n\r\n instrumentationContext.error = `Overreact server response error: [${error.status}], error: ${JSON.stringify(error)}`;\r\n\r\n if (error.responseJSON) {\r\n instrumentationContext.error += (`, responseJSON: ${errorToString(error.responseJSON)}`);\r\n }\r\n\r\n switch (error.status) {\r\n case 400:\r\n case 404:\r\n // If error maps to a user error, log at trace level\r\n if (isUserError(error)) {\r\n instrumentationContext.requestResult = true;\r\n }\r\n break;\r\n case 401:\r\n // Log 401 unauthorized error at trace level\r\n instrumentationContext.requestResult = true;\r\n break;\r\n default:\r\n instrumentationContext.requestResult = false;\r\n }\r\n } else {\r\n // If error maps to a user error, log at trace level\r\n if (isUserError(error)) {\r\n instrumentationContext.requestResult = true;\r\n } else {\r\n instrumentationContext.requestResult = false;\r\n }\r\n const errMsg = _.isError(error) ? error : JSON.stringify(error);\r\n instrumentationContext.error = `Overreact general error: ${errMsg}`;\r\n }\r\n\r\n const logFunc = instrumentationContext.requestResult ? traceFunc : errorFunc;\r\n logFunc({\r\n message: instrumentationContext.error,\r\n api: instrumentationContext.url,\r\n requestId: instrumentationContext.requestId,\r\n httpMethod: instrumentationContext.httpMethod,\r\n statusCode: error.status,\r\n });\r\n\r\n perfFunc({\r\n requestId: instrumentationContext.requestId,\r\n api: instrumentationContext.url,\r\n isMethodEnter: false,\r\n httpMethod: instrumentationContext.httpMethod,\r\n timeTaken: instrumentationContext.requestTimeTaken,\r\n pass: instrumentationContext.requestResult,\r\n statusCode: error.status,\r\n });\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport { defaultStubOptions } from './instrumentation-utils';\r\n\r\nexport class InstrumentationContext {\r\n constructor(parameter) {\r\n const {\r\n pageTrackingId,\r\n errorMappers,\r\n url,\r\n requestId,\r\n httpMethod,\r\n stubOptions,\r\n } = parameter;\r\n\r\n this.pageTrackingId = pageTrackingId;\r\n this.errorMappers = errorMappers;\r\n this.url = url;\r\n this.requestId = requestId;\r\n this.httpMethod = httpMethod;\r\n this.stubOptions = _.defaults(stubOptions || {}, defaultStubOptions);\r\n }\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport _ from 'underscore';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nimport { InstrumentationContext } from './instrumentation-context';\r\nimport { beforeSendHandler, successHandler, errorHandler } from './instrumentation-utils';\r\n\r\nexport function createInstrumentationMiddleware(instrumentationOptions) {\r\n const {\r\n pageTrackingId,\r\n errorMappers,\r\n stubOptions,\r\n loggerFunc: {\r\n traceFunc = _.noop,\r\n errorFunc = _.noop,\r\n perfFunc = _.noop,\r\n } = {},\r\n } = instrumentationOptions || {};\r\n\r\n const shouldAddHeaders = instrumentationOptions.shouldAddHeaders || _.constant(true);\r\n\r\n function isUserError(error) {\r\n return _.any(errorMappers, errorMapper => errorMapper.check(error));\r\n }\r\n\r\n return next => async req => {\r\n const {\r\n headers: {\r\n 'x-ms-requestid': requestId = uuidv4(),\r\n } = {},\r\n } = req;\r\n\r\n const instrumentationContext = new InstrumentationContext({\r\n pageTrackingId,\r\n errorMappers,\r\n url: req.uri,\r\n requestId,\r\n httpMethod: req.spec.requestContract.verb,\r\n stubOptions,\r\n });\r\n\r\n beforeSendHandler(instrumentationContext, req, perfFunc, shouldAddHeaders);\r\n\r\n const response = next(req).then(res => {\r\n successHandler(instrumentationContext, res, errorFunc, perfFunc);\r\n return res;\r\n }).catch(error => {\r\n errorHandler(instrumentationContext, error, isUserError, traceFunc, errorFunc, perfFunc);\r\n throw error;\r\n });\r\n\r\n return response;\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { useContext, useCallback } from 'react';\r\nimport { EnvironmentContext } from '../environment/context';\r\n\r\nexport function useCleanAllCache() {\r\n const [, environments] = useContext(EnvironmentContext);\r\n\r\n const cleanAllCache = useCallback(() => {\r\n _.each(environments, environment => {\r\n if (environment) {\r\n const { store } = environment;\r\n const allRecordGroups = store.recordGroups;\r\n _.each(allRecordGroups, recordGroup => {\r\n const allRecords = recordGroup && recordGroup.records;\r\n const allRecordsIdsToRemove = _.pluck(allRecords, 'id');\r\n if (allRecordsIdsToRemove && allRecordsIdsToRemove.length > 0) {\r\n recordGroup.deleteRecords(allRecordsIdsToRemove);\r\n recordGroup.notify('entitiesDeleted', allRecordsIdsToRemove);\r\n }\r\n });\r\n }\r\n });\r\n }, [environments]);\r\n\r\n return cleanAllCache;\r\n}\r\n","import React from 'react';\r\n\r\nexport const EnvironmentContext = React.createContext();\r\n","/**\r\n * Get the current timestamp\r\n * @returns {number} - the timestamp since epoch in milliseconds\r\n*/\r\nexport function getTimestamp() {\r\n return Date.now();\r\n}\r\n","import _ from 'underscore';\r\nimport { useRef, useEffect, useDebugValue } from 'react';\r\n\r\nexport function usePrevious(value) {\r\n const ref = useRef();\r\n\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n\r\n return ref.current;\r\n}\r\n\r\n\r\nexport function useDeepMemo(value) {\r\n const ref = useRef();\r\n\r\n if (!_.isEqual(value, ref.current)) {\r\n ref.current = value;\r\n }\r\n\r\n return ref.current;\r\n}\r\n\r\nexport function useDeepEqualEffect(fn, deps) {\r\n const isFirst = useRef(true);\r\n const prevDeps = useRef(deps);\r\n\r\n useEffect(() => {\r\n const isSame = prevDeps.current.every((obj, key) => _.isEqual(obj, deps[key]));\r\n\r\n if (isFirst.current || !isSame) {\r\n fn();\r\n }\r\n\r\n isFirst.current = false;\r\n prevDeps.current = deps;\r\n }, [deps, fn]);\r\n\r\n useDebugValue('useDeepEqualEffect');\r\n}\r\n","export const specTypes = {\r\n ADD: 'ADD',\r\n DELETE: 'DELETE',\r\n FETCH: 'FETCH',\r\n MUTATION: 'MUTATION',\r\n PAGINATION: 'PAGINATION',\r\n REFETCH: 'REFETCH',\r\n};\r\n","export class OverreactRequest {\r\n constructor(options) {\r\n Object.assign(this, options);\r\n\r\n if (!this.id || !this.requestContract) {\r\n throw new Error('id and requestContract are required fields to build request object');\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { getRecordGroup } from '../store';\r\n\r\nexport function getCacheIds({\r\n store,\r\n requestContract,\r\n variables,\r\n lookupFn,\r\n}) {\r\n const recordGroup = getRecordGroup(store, requestContract);\r\n const { records } = recordGroup;\r\n const cacheRawItems = _.map(records, record => record.data);\r\n const cacheHit = lookupFn(cacheRawItems, variables);\r\n const overreactIds = _.chain(_.flatten([cacheHit], true))\r\n .map(data => {\r\n const record = _.find(records, r => r.data === data);\r\n return record ? record.id : undefined;\r\n })\r\n .compact()\r\n .value();\r\n\r\n return overreactIds;\r\n}\r\n","import _ from 'underscore';\r\nimport { responseTypes } from '../spec';\r\nimport { FetchPolicy } from '../middleware';\r\n\r\nexport function getDataFromRecords(records, responseContract) {\r\n const values = _.map(records, record => record.getData());\r\n return responseContract.responseType === responseTypes.COLL ? values : values[0];\r\n}\r\n\r\nfunction getDefaultLookupCacheFn(varKeySelector, dataKeySelector) {\r\n return (items, variables) => _.find(items,\r\n item => dataKeySelector(item) === varKeySelector(variables));\r\n}\r\n\r\nexport function getLookupCacheFn(lookupCacheFn, spec, fetchPolicy) {\r\n const { requestContract, responseContract } = spec;\r\n if (fetchPolicy === FetchPolicy.StoreOrNetwork) {\r\n if (lookupCacheFn) {\r\n return lookupCacheFn;\r\n }\r\n\r\n if (_.isFunction(requestContract.keySelector)\r\n && _.isFunction(responseContract.keySelector)\r\n && responseContract.responseType === responseTypes.ENTITY) {\r\n return getDefaultLookupCacheFn(requestContract.keySelector, responseContract.keySelector);\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n","import { useMemo } from 'react';\r\n\r\n/* eslint-disable no-continue */\r\nexport function useComponent() {\r\n // TODO: Detect DEBUG mode\r\n return useMemo(() => {\r\n try {\r\n throw new Error('fake error');\r\n } catch (ex) {\r\n const { stack } = ex;\r\n const stacks = stack.split('\\n');\r\n\r\n for (let i = 0; i < stacks.length; i += 1) {\r\n if (i === 0) {\r\n // first line will be 'Error: fake error'\r\n continue;\r\n }\r\n\r\n // a typical stack line looks like this:\r\n // \"at useComponent (webpack://1:2:3)\"\r\n const stackSegs = stacks[i].trim().split(' ');\r\n\r\n // we only need the 2nd segment, which is the function name\r\n const funcName = stackSegs[1] || '';\r\n\r\n // we'll ignore anything that is a React hook\r\n if (!funcName\r\n || funcName === 'eval'\r\n || funcName === 'mountMemo'\r\n || funcName === 'Object.useMemo'\r\n || funcName.startsWith('use')) {\r\n continue;\r\n }\r\n\r\n // we'll return on the first non-hook function name, which is most likely\r\n // to be our calling component name;\r\n return funcName;\r\n }\r\n }\r\n\r\n return '__noname__';\r\n }, []);\r\n}\r\n","import _ from 'underscore';\r\nimport {\r\n useRef, useReducer, useCallback, useMemo, useEffect,\r\n} from 'react';\r\nimport { useEnvironment } from '../environment';\r\nimport { useDeepEqualEffect, useDeepMemo } from '../utils/primitive-utilities';\r\nimport {\r\n getDataNode, createDataNode, getRecords, getDataRef, getRecordsById, updateDataRefWithIds,\r\n} from '../store';\r\nimport { OverreactRequest } from './overreact-request';\r\nimport { getCacheIds } from './lookup-cache';\r\nimport { getDataFromRecords, getLookupCacheFn } from './helper';\r\nimport { useComponent } from './use-component';\r\n\r\nexport function equalityFn(newData, oldData) {\r\n return _.isEqual(newData, oldData);\r\n}\r\n\r\nexport function useFetch(dataRefId, spec, variables, config) {\r\n // DEBUG ONLY\r\n const componentName = useComponent();\r\n const memoedConfig = useDeepMemo(config);\r\n\r\n const {\r\n requestContract,\r\n responseContract,\r\n environmentLookupFn,\r\n } = spec;\r\n\r\n const requestRequired = useRef(true);\r\n const currentData = useRef(undefined);\r\n const currentError = useRef(undefined);\r\n\r\n const [, forceRender] = useReducer(x => x + 1, 0);\r\n\r\n const environment = useEnvironment(environmentLookupFn);\r\n const { postponeRead, lookupCacheByVariables } = memoedConfig || {};\r\n const { options: { fetchPolicy: fetchPolicyInReq } = {} } = variables || {};\r\n const fetchPolicy = fetchPolicyInReq || requestContract.fetchPolicy;\r\n\r\n const lookupFn = useMemo(\r\n () => getLookupCacheFn(lookupCacheByVariables, spec, fetchPolicy),\r\n [fetchPolicy, lookupCacheByVariables, spec],\r\n );\r\n\r\n // TODO: dataCallback shall take a param, which is a set of\r\n // overreact IDs, to efficiently compare data and force render\r\n const dataCallback = useCallback(() => {\r\n // fetch data from store\r\n if (environment) {\r\n const { store } = environment;\r\n\r\n const records = getRecords(store, requestContract, dataRefId);\r\n const dataRef = getDataRef(store, requestContract, dataRefId);\r\n dataRef.registerComponent({ componentName });\r\n\r\n if (records) {\r\n const data = getDataFromRecords(records, responseContract);\r\n if (equalityFn(data, currentData.current)) {\r\n return;\r\n }\r\n\r\n currentData.current = data;\r\n\r\n forceRender();\r\n }\r\n }\r\n }, [componentName, dataRefId, environment, requestContract, responseContract]);\r\n\r\n const errorCallback = useCallback(() => {\r\n if (environment) {\r\n const { store } = environment;\r\n\r\n const dataRef = getDataRef(store, requestContract, dataRefId);\r\n const {\r\n status: {\r\n error,\r\n } = {},\r\n } = dataRef;\r\n\r\n if (equalityFn(error, currentError.current)) {\r\n return;\r\n }\r\n\r\n currentError.current = error;\r\n forceRender();\r\n }\r\n }, [dataRefId, environment, requestContract]);\r\n\r\n const dataObserver = useMemo(() => ({\r\n update: dataCallback,\r\n onError: errorCallback,\r\n }), [dataCallback, errorCallback]);\r\n\r\n useEffect(() => {\r\n if (environment) {\r\n const schemaNode = requestContract.getSchemaNode();\r\n const { store } = environment;\r\n const dataNode = getDataNode(schemaNode) || createDataNode(schemaNode, store);\r\n const dataRef = dataNode.getDataRef(dataRefId);\r\n dataRef.subscribe(dataObserver);\r\n\r\n return () => dataRef.unsubscribe(dataObserver);\r\n }\r\n return _.noop;\r\n }, [dataObserver, dataRefId, environment, requestContract]);\r\n\r\n useEffect(() => {\r\n if (environment && !currentData.current && _.isFunction(lookupFn)) {\r\n const schemaNode = requestContract.getSchemaNode();\r\n const { store } = environment;\r\n const dataNode = getDataNode(schemaNode) || createDataNode(schemaNode, store);\r\n const dataRef = dataNode.getDataRef(dataRefId);\r\n\r\n try {\r\n const overreactIds = getCacheIds({\r\n store,\r\n requestContract,\r\n variables,\r\n lookupFn,\r\n });\r\n\r\n if (!_.isEmpty(overreactIds)) {\r\n updateDataRefWithIds(dataRef, overreactIds);\r\n const records = getRecordsById(store, requestContract, overreactIds);\r\n currentData.current = getDataFromRecords(records, responseContract);\r\n requestRequired.current = false;\r\n forceRender();\r\n }\r\n } catch (error) {\r\n // TODO: log error and send request\r\n }\r\n }\r\n // we only try hit cache once when environment is ready\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [environment]);\r\n\r\n useDeepEqualEffect(() => {\r\n if (requestRequired.current && environment) {\r\n if (!postponeRead) {\r\n const request = new OverreactRequest({\r\n id: dataRefId,\r\n requestContract,\r\n spec,\r\n variables,\r\n data: null,\r\n componentName,\r\n });\r\n environment.pushRequest(request);\r\n }\r\n requestRequired.current = false;\r\n }\r\n // TODO: need to unregister this request\r\n }, [dataCallback, environment, requestContract, spec, variables]);\r\n\r\n return [currentData.current, currentError.current];\r\n}\r\n","import { isFunction } from 'underscore';\r\n\r\nexport function getMergedConfig(config, origin) {\r\n // create new instance of origin, origin is also required to be an object\r\n const newInstance = { ...origin };\r\n\r\n if (!config) {\r\n return newInstance;\r\n }\r\n\r\n if (isFunction(config)) {\r\n return config(newInstance);\r\n }\r\n\r\n return {\r\n ...origin,\r\n ...config,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { useCallback, useRef } from 'react';\r\nimport { useEnvironment } from '../environment';\r\nimport {\r\n getRecords, getDataRef, getRecordGroup, getRecordsByEntityKey,\r\n} from '../store';\r\nimport { specTypes } from '../spec/spec-types';\r\nimport { OVERREACT_ID_FIELD_NAME } from '../store/consts';\r\nimport { responseTypes } from '../spec/response-types';\r\nimport { OverreactRequest } from './overreact-request';\r\nimport { getMergedConfig } from './merge-config';\r\nimport { useDeepMemo } from '../utils/primitive-utilities';\r\n\r\nimport { useComponent } from './use-component';\r\n\r\nconst getRawData = data => data && _.map(data, d => d.rawData);\r\n\r\nconst getDataWithOverreactIdFromRecords = records => _.map(records, r => ({\r\n rawData: r.getData(),\r\n [OVERREACT_ID_FIELD_NAME]: r.id,\r\n}));\r\n\r\nfunction mutateRecords(\r\n store,\r\n requestContract,\r\n recordsBeforeMutation,\r\n newRecords,\r\n) {\r\n if (store) {\r\n const recordGroup = getRecordGroup(store, requestContract);\r\n\r\n recordGroup.addOrUpdateRecords(recordsBeforeMutation);\r\n recordGroup.addOrUpdateRecords(newRecords);\r\n }\r\n}\r\n\r\nfunction addRecords(\r\n store,\r\n requestContract,\r\n records,\r\n) {\r\n if (store && records && records.length > 0) {\r\n const recordGroup = getRecordGroup(store, requestContract);\r\n recordGroup.addOrUpdateRecords(records);\r\n const ids = records.map(record => record[OVERREACT_ID_FIELD_NAME]);\r\n\r\n // notify hooks, so that they can adjust the refIds accordingly\r\n recordGroup.notify('entitiesCreated', ids);\r\n }\r\n}\r\n\r\nfunction deleteRecords(store, requestContract, records = []) {\r\n if (store) {\r\n const recordGroup = getRecordGroup(store, requestContract);\r\n const ids = records.map(record => record[OVERREACT_ID_FIELD_NAME]);\r\n\r\n recordGroup.deleteRecords(ids);\r\n recordGroup.notify('entitiesDeleted', ids);\r\n }\r\n}\r\n\r\nfunction addPreemptiveRecords(store, requestContract, request, records) {\r\n if (store) {\r\n store.addPreemptiveRecords(request, records);\r\n addRecords(store, requestContract, records);\r\n }\r\n}\r\n\r\nfunction replacePreemptiveRecords(store, requestContract, request, records) {\r\n const preemptiveRecords = store.removePreemptiveRecords(request);\r\n deleteRecords(store, requestContract, preemptiveRecords);\r\n addRecords(store, requestContract, records);\r\n}\r\n\r\nfunction applyId(variables, spec, data, specType) {\r\n const { locator } = variables;\r\n const { requestContract, responseContract } = spec;\r\n const { parentKeySelector } = requestContract;\r\n let parentId = parentKeySelector ? parentKeySelector(variables) : undefined;\r\n\r\n const { descriptor, order } = locator;\r\n\r\n if (responseContract.responseType === responseTypes.COLL || specType === specTypes.ADD) {\r\n // when requests for COLL or create entity, the parentId is the last element in the locator\r\n if (!parentId && order.length > 0) {\r\n parentId = descriptor[order[order.length - 1]];\r\n }\r\n const dataArr = Array.isArray(data) ? data : [data];\r\n return dataArr.map(entity => responseContract.applyId(entity, parentId));\r\n }\r\n\r\n if (responseContract.responseType === responseTypes.ENTITY) {\r\n if (!parentId && order.length > 1) {\r\n parentId = descriptor[order[order.length - 2]];\r\n }\r\n\r\n // step 1 - generate _overreact_id\r\n return responseContract.applyId(data, parentId);\r\n }\r\n\r\n throw new Error('unknown response type, cannot apply id');\r\n}\r\n\r\nexport function useMutation(dataRefId, spec, config) {\r\n // DEBUG ONLY\r\n const componentName = useComponent();\r\n const memoedConfig = useDeepMemo(config);\r\n\r\n const {\r\n requestContract,\r\n responseContract,\r\n specType,\r\n environmentLookupFn,\r\n } = spec;\r\n const recordsBeforeMutationRef = useRef();\r\n const environment = useEnvironment(environmentLookupFn);\r\n\r\n const dataCallback = useCallback((dataWithOverreactId, request) => {\r\n if (environment) {\r\n const { store } = environment;\r\n const dataRef = getDataRef(store, requestContract, dataRefId);\r\n dataRef.clearError();\r\n\r\n const {\r\n onComplete,\r\n preemptiveResponseFn,\r\n } = (request && request.mergedConfig) || {};\r\n\r\n if (preemptiveResponseFn) {\r\n if (specType === specTypes.MUTATION) {\r\n const recordsBeforeMutation = recordsBeforeMutationRef.current || [];\r\n const dataBeforeWithId = getDataWithOverreactIdFromRecords(recordsBeforeMutation);\r\n mutateRecords(\r\n store,\r\n requestContract,\r\n dataBeforeWithId,\r\n dataWithOverreactId,\r\n );\r\n } else if (specType === specTypes.ADD) {\r\n replacePreemptiveRecords(\r\n store,\r\n requestContract,\r\n request,\r\n dataWithOverreactId,\r\n );\r\n }\r\n } else if (specType === specTypes.ADD) {\r\n addRecords(store, requestContract, dataWithOverreactId);\r\n } else if (specType === specTypes.MUTATION) {\r\n mutateRecords(\r\n store,\r\n requestContract,\r\n [],\r\n dataWithOverreactId,\r\n );\r\n }\r\n\r\n if (specType === specTypes.DELETE) {\r\n const { data } = request;\r\n const dataArray = Array.isArray(data) ? data : [data];\r\n const { keySelector } = responseContract;\r\n const keys = dataArray.map(d => keySelector(d));\r\n const records = getRecordsByEntityKey(store, spec, keys);\r\n const dataWithId = getDataWithOverreactIdFromRecords(records);\r\n\r\n deleteRecords(store, requestContract, dataWithId);\r\n }\r\n\r\n const data = getRawData(dataWithOverreactId);\r\n\r\n if (onComplete) {\r\n onComplete(data);\r\n }\r\n }\r\n }, [dataRefId, environment, requestContract, responseContract, spec, specType]);\r\n\r\n const errorCallback = useCallback((error, request) => {\r\n if (environment) {\r\n const { store } = environment;\r\n const {\r\n onError,\r\n preemptiveResponseFn,\r\n } = (request && request.mergedConfig) || {};\r\n\r\n const recordsBeforeMutation = recordsBeforeMutationRef.current || [];\r\n const dataBeforeWithId = getDataWithOverreactIdFromRecords(recordsBeforeMutation);\r\n\r\n if (preemptiveResponseFn) {\r\n if (specType === specTypes.MUTATION) {\r\n mutateRecords(\r\n store,\r\n requestContract,\r\n dataBeforeWithId,\r\n [],\r\n );\r\n } else if (specType === specTypes.ADD) {\r\n replacePreemptiveRecords(\r\n store,\r\n requestContract,\r\n request,\r\n [],\r\n );\r\n }\r\n }\r\n\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n }, [environment, requestContract, specType]);\r\n\r\n const mutateFn = useCallback((variables, mutationData, ...rest) => {\r\n if (environment) {\r\n const { store } = environment;\r\n const requestConfig = rest.slice(-1)[0];\r\n const mergedConfig = getMergedConfig(requestConfig, memoedConfig);\r\n const { preemptiveResponseFn } = mergedConfig;\r\n\r\n // stash current value. This will be useful when preemptive updates is enabled,\r\n // and we need to revert to original state before applying actual response from server.\r\n if (dataRefId) {\r\n const recordsBeforeMutation = getRecords(store, requestContract, dataRefId);\r\n if (recordsBeforeMutation) {\r\n recordsBeforeMutationRef.current = recordsBeforeMutation;\r\n }\r\n }\r\n\r\n const request = new OverreactRequest({\r\n id: dataRefId,\r\n requestContract,\r\n spec,\r\n variables,\r\n data: mutationData,\r\n dataCb: dataCallback,\r\n errorCb: errorCallback,\r\n mergedConfig,\r\n componentName,\r\n });\r\n\r\n // we can perform preemptive updates right now (before actual request)\r\n // the store will be reverted/merged with response in data callbacks - when the response\r\n // comes back.\r\n if (preemptiveResponseFn) {\r\n if (specType === specTypes.MUTATION) {\r\n const recordsBeforeMutation = recordsBeforeMutationRef.current || [];\r\n const dataBeforeWithId = getDataWithOverreactIdFromRecords(recordsBeforeMutation);\r\n const dataBefore = _.map(dataBeforeWithId, d => d.rawData);\r\n const preemptiveData = preemptiveResponseFn(dataBefore, mutationData);\r\n\r\n const { keySelector } = responseContract;\r\n const dataWithOverreactId = _.map(preemptiveData, d => {\r\n const key = keySelector(d);\r\n const [record] = getRecordsByEntityKey(store, spec, [key]);\r\n return {\r\n rawData: d,\r\n [OVERREACT_ID_FIELD_NAME]: record.id,\r\n };\r\n });\r\n\r\n mutateRecords(\r\n store,\r\n requestContract,\r\n dataBeforeWithId,\r\n dataWithOverreactId,\r\n );\r\n } else if (specType === specTypes.ADD) {\r\n const data = preemptiveResponseFn(mutationData);\r\n const records = applyId(request.variables, spec, data, specType);\r\n addPreemptiveRecords(\r\n store,\r\n requestContract,\r\n request,\r\n records,\r\n );\r\n }\r\n }\r\n\r\n // Register the request to be issued - in this implementation the request will go to the\r\n // request queue in DataFetcher, waiting to be invoked. So one shall not assume\r\n // the request will go out immediately.\r\n environment.pushRequest(request);\r\n }\r\n }, [\r\n componentName,\r\n dataCallback,\r\n dataRefId,\r\n environment,\r\n errorCallback,\r\n memoedConfig,\r\n requestContract,\r\n responseContract,\r\n spec,\r\n specType,\r\n ]);\r\n\r\n return mutateFn;\r\n}\r\n","import _ from 'underscore';\r\nimport { useCallback } from 'react';\r\nimport { useEnvironment } from '../environment';\r\nimport { getRecords, getDataRef, updateDataRefWithIds } from '../store';\r\nimport { OverreactRequest } from './overreact-request';\r\nimport { getMergedConfig } from './merge-config';\r\nimport { getCacheIds } from './lookup-cache';\r\nimport { getDataFromRecords, getLookupCacheFn } from './helper';\r\nimport { useDeepMemo } from '../utils/primitive-utilities';\r\n\r\nimport { useComponent } from './use-component';\r\n\r\nexport function useRefetch(dataRefId, spec, config) {\r\n // DEBUG ONLY\r\n const componentName = useComponent();\r\n const memoedConfig = useDeepMemo(config);\r\n\r\n const {\r\n requestContract,\r\n responseContract,\r\n environmentLookupFn,\r\n } = spec;\r\n const environment = useEnvironment(environmentLookupFn);\r\n\r\n const dataCallback = useCallback((dataItems, request) => {\r\n if (environment) {\r\n const {\r\n onComplete,\r\n } = (request && request.mergedConfig) || {};\r\n\r\n const { store } = environment;\r\n const records = getRecords(store, requestContract, dataRefId);\r\n const data = getDataFromRecords(records, responseContract);\r\n\r\n if (onComplete) {\r\n onComplete(data);\r\n }\r\n }\r\n }, [dataRefId, environment, requestContract, responseContract]);\r\n\r\n const errorCallback = useCallback((error, request) => {\r\n const {\r\n onError = _.noop,\r\n } = (request && request.mergedConfig) || {};\r\n onError(error);\r\n }, []);\r\n\r\n const refetchFn = useCallback((parameter, ...rest) => {\r\n if (environment) {\r\n const { store } = environment;\r\n const requestConfig = rest.slice(-1)[0];\r\n const mergedConfig = getMergedConfig(requestConfig, memoedConfig);\r\n const { lookupCacheByVariables } = mergedConfig;\r\n\r\n const {\r\n variables,\r\n payload,\r\n } = parameter;\r\n const { options: { fetchPolicy: fetchPolicyInReq } = {} } = variables || {};\r\n const fetchPolicy = fetchPolicyInReq || requestContract.fetchPolicy;\r\n\r\n const request = new OverreactRequest({\r\n id: dataRefId,\r\n requestContract,\r\n spec,\r\n variables,\r\n data: payload,\r\n dataCb: dataCallback,\r\n errorCb: errorCallback,\r\n mergedConfig,\r\n componentName,\r\n });\r\n\r\n const lookupFn = getLookupCacheFn(lookupCacheByVariables, spec, fetchPolicy);\r\n\r\n if (_.isFunction(lookupFn)) {\r\n try {\r\n const overreactIds = getCacheIds({\r\n store,\r\n requestContract,\r\n variables,\r\n lookupFn,\r\n });\r\n\r\n if (!_.isEmpty(overreactIds)) {\r\n const dataRef = getDataRef(store, requestContract, dataRefId);\r\n\r\n updateDataRefWithIds(dataRef, overreactIds);\r\n\r\n const records = getRecords(store, requestContract, dataRefId);\r\n const data = getDataFromRecords(records, responseContract);\r\n\r\n dataCallback(data, request);\r\n\r\n return;\r\n }\r\n } catch (error) {\r\n // TODO: log error and send request\r\n }\r\n }\r\n environment.pushRequest(request);\r\n }\r\n }, [\r\n componentName,\r\n dataCallback,\r\n dataRefId,\r\n environment,\r\n errorCallback,\r\n memoedConfig,\r\n requestContract,\r\n responseContract,\r\n spec,\r\n ]);\r\n\r\n return refetchFn;\r\n}\r\n","import _ from 'underscore';\r\nimport {\r\n useState, useCallback, useMemo, useRef, useEffect,\r\n} from 'react';\r\n\r\nimport { useEnvironment } from '../environment';\r\nimport {\r\n getDataNode, createDataNode, getRecords, getDataRef, getRecordsById, updateDataRefWithIds,\r\n getRecordsFromResponseDataArray,\r\n} from '../store';\r\nimport { OverreactRequest } from './overreact-request';\r\nimport { getMergedConfig } from './merge-config';\r\nimport { getLookupCacheFn } from './helper';\r\nimport { getCacheIds } from './lookup-cache';\r\nimport { useDeepMemo } from '../utils/primitive-utilities';\r\n\r\nimport { useComponent } from './use-component';\r\n\r\nconst getRecordsDataInDataRef = (store, requestContract, dataRefId) => {\r\n const records = getRecords(store, requestContract, dataRefId);\r\n\r\n return records && records.map(record => record.getData());\r\n};\r\n\r\nconst getRecordsDataById = (store, requestContract, ids) => {\r\n const records = getRecordsById(store, requestContract, ids);\r\n return records && records.map(record => record.getData());\r\n};\r\n\r\nexport function usePagination(dataRefId, spec, config) {\r\n // DEBUG ONLY\r\n const componentName = useComponent();\r\n const memoedConfig = useDeepMemo(config);\r\n\r\n const {\r\n fetchVariables,\r\n strictMode = false,\r\n mergeNewRecords,\r\n lookupCacheByVariables,\r\n } = memoedConfig;\r\n const refId = useRef(dataRefId);\r\n const { requestContract, environmentLookupFn } = spec;\r\n\r\n const cursorIndex = useRef(0);\r\n const loadingId = useRef(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const environment = useEnvironment(environmentLookupFn);\r\n\r\n const [data, setData] = useState(undefined);\r\n const [error, setError] = useState(undefined);\r\n\r\n const resetInternalState = useCallback(() => {\r\n loadingId.current = null;\r\n setIsLoading(false);\r\n cursorIndex.current = 0;\r\n }, []);\r\n\r\n if (refId.current !== dataRefId) {\r\n refId.current = dataRefId;\r\n resetInternalState();\r\n }\r\n\r\n const setInternalStateOnResponse = useCallback(records => {\r\n cursorIndex.current = records.length;\r\n }, []);\r\n\r\n // using registerRequest to fire request, we cannot get the total count\r\n // so we set it to true for now\r\n const hasMore = useCallback(() => true, []);\r\n\r\n const loadMoreCallback = useCallback((__, updatedIds, request) => {\r\n const { store } = environment;\r\n const recordsData = getRecordsDataInDataRef(store, requestContract, dataRefId);\r\n const dataRef = getDataRef(store, requestContract, dataRefId);\r\n dataRef.clearError();\r\n setInternalStateOnResponse(recordsData);\r\n setData(recordsData);\r\n\r\n // setData first, then setIsLoading as false\r\n loadingId.current = null;\r\n setIsLoading(false);\r\n\r\n dataRef.registerComponent({ componentName });\r\n\r\n const {\r\n onComplete,\r\n } = (request && request.mergedConfig) || {};\r\n\r\n if (onComplete && request.id === dataRefId) {\r\n onComplete(recordsData);\r\n }\r\n }, [componentName, dataRefId, environment, requestContract, setInternalStateOnResponse]);\r\n\r\n const onErrorCallback = useCallback((__, err, request) => {\r\n if (environment) {\r\n const { store } = environment;\r\n\r\n const dataRef = getDataRef(store, requestContract, dataRefId);\r\n const {\r\n status: {\r\n error: currentError,\r\n } = {},\r\n } = dataRef;\r\n\r\n if (currentError) {\r\n loadingId.current = null;\r\n setIsLoading(false);\r\n }\r\n setError(currentError);\r\n\r\n const {\r\n onError,\r\n } = (request && request.mergedConfig) || {};\r\n\r\n if (onError && request.id === dataRefId && !_.isUndefined(err)) {\r\n onError(err);\r\n }\r\n }\r\n }, [dataRefId, environment, requestContract]);\r\n\r\n const onEntitiesCreated = useCallback((dataRef, newIds) => {\r\n if (_.isFunction(mergeNewRecords)) {\r\n const { store } = environment;\r\n const records = getRecordsDataInDataRef(store, requestContract, dataRefId);\r\n const newRecords = getRecordsDataById(store, requestContract, newIds);\r\n const recordsToShow = mergeNewRecords(records, newRecords);\r\n const storeRecordsToShow = getRecordsFromResponseDataArray(store, spec, recordsToShow);\r\n const overreactIds = _.map(storeRecordsToShow, r => r.id);\r\n\r\n dataRef.reset(overreactIds);\r\n }\r\n }, [dataRefId, environment, mergeNewRecords, requestContract, spec]);\r\n\r\n const dataObserver = useMemo(() => ({\r\n update: loadMoreCallback,\r\n onError: onErrorCallback,\r\n onEntitiesCreated,\r\n }), [loadMoreCallback, onEntitiesCreated, onErrorCallback]);\r\n\r\n useEffect(() => {\r\n if (environment) {\r\n const schemaNode = requestContract.getSchemaNode();\r\n const { store } = environment;\r\n const dataNode = getDataNode(schemaNode) || createDataNode(schemaNode, store);\r\n const dataRef = dataNode.getDataRef(dataRefId);\r\n dataRef.subscribe(dataObserver);\r\n\r\n return () => dataRef.unsubscribe(dataObserver);\r\n }\r\n return _.noop;\r\n }, [dataObserver, dataRefId, environment, requestContract]);\r\n\r\n const loadMore = useCallback(requestConfig => {\r\n if (loadingId.current) {\r\n return;\r\n }\r\n\r\n if (!environment) {\r\n return;\r\n }\r\n const { pageSize, options: { fetchPolicy: fetchPolicyInReq } = {} } = fetchVariables;\r\n const { store } = environment;\r\n const recordsData = getRecordsDataInDataRef(store, requestContract, dataRefId);\r\n const mergedConfig = getMergedConfig(requestConfig, memoedConfig);\r\n\r\n if (recordsData && recordsData.length >= cursorIndex.current + pageSize) {\r\n cursorIndex.current = recordsData.length;\r\n setData(recordsData);\r\n if (mergedConfig && mergedConfig.onComplete) {\r\n mergedConfig.onComplete(recordsData);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const fetchPolicy = fetchPolicyInReq || requestContract.fetchPolicy;\r\n const lookupFn = getLookupCacheFn(lookupCacheByVariables, spec, fetchPolicy);\r\n\r\n if (_.isFunction(lookupFn)) {\r\n try {\r\n const overreactIds = getCacheIds({\r\n store,\r\n requestContract,\r\n variables: fetchVariables,\r\n lookupFn,\r\n });\r\n\r\n if (!_.isEmpty(overreactIds)) {\r\n const dataRef = getDataRef(store, requestContract, dataRefId);\r\n\r\n updateDataRefWithIds(dataRef, overreactIds);\r\n\r\n return;\r\n }\r\n } catch (err) {\r\n // TODO: log error and send request\r\n }\r\n }\r\n\r\n const requestVars = {\r\n ...fetchVariables,\r\n cursorIndex: strictMode\r\n ? cursorIndex.current - (cursorIndex.current % pageSize)\r\n : cursorIndex.current,\r\n };\r\n\r\n const myId = _.uniqueId();\r\n\r\n loadingId.current = myId;\r\n setIsLoading(true);\r\n\r\n const request = new OverreactRequest({\r\n id: dataRefId,\r\n requestContract,\r\n spec,\r\n variables: requestVars,\r\n data: null,\r\n mergedConfig,\r\n componentName,\r\n });\r\n environment.pushRequest(request);\r\n }, [\r\n componentName,\r\n dataRefId,\r\n environment,\r\n fetchVariables,\r\n lookupCacheByVariables,\r\n memoedConfig,\r\n requestContract,\r\n spec,\r\n strictMode,\r\n ]);\r\n\r\n const ret = useMemo(() => [{ data, error }, {\r\n isLoading,\r\n hasMore,\r\n loadMore,\r\n }], [data, error, hasMore, isLoading, loadMore]);\r\n\r\n return ret;\r\n}\r\n","// this hook is used to create/retrieve a dataRefId, which\r\n// will then be used/shared amongst useFetch/useMutation/usePagination/etc hooks.\r\n// In a React component settings, this will act as a \"component ID\", where\r\n// all the custom hooks share a same dataRefId, so they can work on the same\r\n// set of data records.\r\n// For example, a \"usePagination\" hook will retrieve a set of records, and store\r\n// the data IDs in a certain dataRefId \"A\". Consequent \"useMutation\" call\r\n// bound to the same dataRefId will have immediate access to the current data from pagination.\r\n// Next time the mutation call tries to CREATE a new entity, it will now where\r\n// to append the new entity.\r\n\r\n// The hook adds/retrieves dataRefId from a pool in context. An optional \"name\"\r\n// can be given so a compnent can restore previous data state even after unmounting.\r\n// A direct example will be when a Paginated timeline component was unmounted/remounted,\r\n// previously loaded feeds and scroll position can be reinstiated.\r\nimport { useRef } from 'react';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { useEnvironment } from '../environment';\r\n\r\nfunction generateNewDataRefId() {\r\n return uuidv4();\r\n}\r\n\r\nexport function useDataRefId(name, environmentLookupFn) {\r\n const environment = useEnvironment(environmentLookupFn);\r\n const dataRefIdRef = useRef(null);\r\n\r\n if (!name && dataRefIdRef.current) {\r\n return dataRefIdRef.current;\r\n }\r\n\r\n if (environment) {\r\n if (name) {\r\n // when using named dataRefId, we'll want to preserve it.\r\n if (!environment.dataRefIdPool[name]) {\r\n environment.dataRefIdPool[name] = generateNewDataRefId();\r\n }\r\n\r\n dataRefIdRef.current = environment.dataRefIdPool[name];\r\n } else {\r\n dataRefIdRef.current = generateNewDataRefId();\r\n }\r\n }\r\n\r\n return dataRefIdRef.current;\r\n}\r\n","import { useMemo } from 'react';\r\nimport Promise from 'bluebird';\r\n\r\nexport function usePromisify(actions) {\r\n return useMemo(() => actions.map(action => (...args) => new Promise((resolve, reject) => {\r\n const configBuilder = config => ({\r\n ...config,\r\n onComplete: processedResponse => {\r\n if (config.onComplete) {\r\n config.onComplete(processedResponse);\r\n }\r\n resolve(processedResponse);\r\n },\r\n onError: error => {\r\n if (config.onError) {\r\n config.onError(error);\r\n }\r\n reject(error);\r\n },\r\n });\r\n\r\n const mergedArgs = [...args, configBuilder];\r\n action(...mergedArgs);\r\n })), actions); // eslint-disable-line react-hooks/exhaustive-deps\r\n}\r\n","import 'regenerator-runtime/runtime';\r\n\r\nimport { requestWithMiddleware, WrappedRequestor } from '../middleware';\r\n\r\nexport class Environment {\r\n constructor(networkRequestor, schema, store, middlewares, tag) {\r\n this.networkRequestor = networkRequestor;\r\n\r\n this.schema = schema;\r\n\r\n // an FIFO queue\r\n this.requestQueue = [];\r\n this.dataFetcherSubscriber = [];\r\n\r\n // initialize the store\r\n this.store = store;\r\n\r\n this.middlewares = middlewares || {};\r\n\r\n this.tag = tag;\r\n\r\n this.notifyObservers = this.notifyObservers.bind(this);\r\n this.pushRequest = this.pushRequest.bind(this);\r\n this.removeRequest = this.removeRequest.bind(this);\r\n this.requestCount = this.requestCount.bind(this);\r\n\r\n this.subscribe = this.subscribe.bind(this);\r\n this.unsubscribe = this.unsubscribe.bind(this);\r\n\r\n this.getSchema = this.getSchema.bind(this);\r\n this.getRequestor = this.getRequestor.bind(this);\r\n\r\n this.dataRefIdPool = {};\r\n }\r\n\r\n getRequestor(id, spec, variables, middlewareStates, additionalParams) {\r\n const requestorWithDevTools = (uri, verb, headers, payload) => {\r\n const requestor = this.networkRequestor(uri, verb, headers, payload);\r\n\r\n if (window.__OVERREACT_DEVTOOLS__) {\r\n const { onRequest, onError } = window.__OVERREACT_DEVTOOLS__;\r\n const { componentName } = additionalParams;\r\n return requestor\r\n .then(value => {\r\n onRequest({\r\n id,\r\n uri,\r\n verb,\r\n headers,\r\n payload,\r\n spec: spec.toString(),\r\n componentName,\r\n responseValue: value,\r\n });\r\n return value;\r\n })\r\n .catch(ex => {\r\n onError({\r\n id,\r\n uri,\r\n verb,\r\n headers,\r\n payload,\r\n spec: spec.toString(),\r\n componentName,\r\n exception: ex,\r\n });\r\n\r\n throw ex;\r\n });\r\n }\r\n\r\n return requestor;\r\n };\r\n\r\n return (uri, verb, headers, payload) => ({\r\n execute: sink => {\r\n if (!this.middlewares || this.middlewares.length === 0) {\r\n requestorWithDevTools(uri, verb, headers, payload)\r\n .then(value => sink.onComplete(value))\r\n .catch(err => sink.onError(err));\r\n } else {\r\n const wrappedRequestor = new WrappedRequestor({\r\n requestor: requestorWithDevTools,\r\n uri,\r\n verb,\r\n headers,\r\n payload,\r\n spec,\r\n variables,\r\n store: this.store,\r\n dataRefId: id,\r\n middlewareStates,\r\n });\r\n const res = requestWithMiddleware(wrappedRequestor, this.middlewares);\r\n\r\n res\r\n .then(value => sink.onComplete(value))\r\n .catch(err => sink.onError(err));\r\n }\r\n },\r\n });\r\n }\r\n\r\n getSchema() {\r\n return this.schema;\r\n }\r\n\r\n notifyObservers() {\r\n for (let i = 0; i < this.dataFetcherSubscriber.length; i += 1) {\r\n this.dataFetcherSubscriber[i].notify(this.requestQueue);\r\n }\r\n }\r\n\r\n /*\r\n The request will have the following shape:\r\n\r\n {\r\n id,\r\n requestContract,\r\n spec,\r\n variables,\r\n data,\r\n dataCb,\r\n }\r\n */\r\n pushRequest(request) {\r\n this.requestQueue.push(request);\r\n\r\n this.notifyObservers();\r\n }\r\n\r\n removeRequest() {\r\n return this.requestQueue.shift();\r\n }\r\n\r\n requestCount() {\r\n return this.requestQueue.length;\r\n }\r\n\r\n subscribe(notifyCb) {\r\n this.dataFetcherSubscriber.push({\r\n notify: notifyCb,\r\n });\r\n\r\n return this.dataFetcherSubscriber.length - 1;\r\n }\r\n\r\n unsubscribe(id) {\r\n return this.dataFetcherSubscriber.splice(id, 1).length;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { useContext } from 'react';\r\nimport { EnvironmentContext } from './context';\r\n\r\nexport function useEnvironment(environmentLookupFn) {\r\n const [environment, environments] = useContext(EnvironmentContext);\r\n if (_.isFunction(environmentLookupFn)) {\r\n const specificEnv = _.find(environments, env => env && env.tag && environmentLookupFn(env.tag));\r\n if (!_.isEmpty(specificEnv)) {\r\n return specificEnv;\r\n }\r\n }\r\n return environment || _.first(environments);\r\n}\r\n","export const responseTypes = {\r\n ENTITY: 'ENTITY',\r\n COLL: 'COLL',\r\n NONE: 'NONE', // useful when deleting\r\n};\r\n","/* eslint-disable react-hooks/rules-of-hooks */\r\nimport _ from 'underscore';\r\nimport React, { useRef, memo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { EnvironmentContext } from '../environment/context';\r\n\r\nconst MAX_REQUEST_BATCH_SIZE = 10;\r\nconst FETCH_INTERVAL = 50;\r\nconst INIT_MIDDLEWARE_STATES = { isResponseFromStore: false };\r\n\r\nfunction executeRequests(environment, requests) {\r\n const pendingRequests = [\r\n ...requests,\r\n ];\r\n while (pendingRequests.length > 0) {\r\n const req = pendingRequests.shift();\r\n\r\n const {\r\n requestContract,\r\n spec,\r\n variables,\r\n data,\r\n id,\r\n componentName,\r\n } = req;\r\n\r\n req.middlewareStates = {\r\n ...INIT_MIDDLEWARE_STATES,\r\n };\r\n\r\n const { responseContract } = spec;\r\n const {\r\n verb, uriFactoryFn, headerFactoryFn, payloadFactoryFn,\r\n } = requestContract;\r\n\r\n const uri = uriFactoryFn({ requestContract, variables, data });\r\n const header = headerFactoryFn && headerFactoryFn({ requestContract, variables, data });\r\n const payload = payloadFactoryFn && payloadFactoryFn({ requestContract, variables, data });\r\n\r\n const requestor = environment.getRequestor(\r\n id,\r\n spec,\r\n variables,\r\n req.middlewareStates,\r\n { componentName }\r\n );\r\n\r\n requestor(uri, verb, header, payload).execute({\r\n onComplete: response => {\r\n responseContract.onGetResponse(environment, response, req);\r\n },\r\n onError: error => {\r\n responseContract.onGetError(environment, req, error);\r\n },\r\n });\r\n }\r\n}\r\n\r\nfunction batchRequests(environment, batchSize) {\r\n // console.log(`executing requests for batch size ${batchSize}`);\r\n\r\n // we'll try to batch requests\r\n const requests = [];\r\n while (requests.length < batchSize) {\r\n const request = environment.removeRequest();\r\n requests.push(request);\r\n }\r\n\r\n executeRequests(environment, requests);\r\n}\r\n\r\nexport function useEnvironmentInitialization(environment) {\r\n // const [currentEnvironment, setCurrEnv] = useState(environment);\r\n const timer = useRef(null);\r\n\r\n // TODO: we need better way to subscribe here\r\n // current way will result in memory leak or other bugs when environment change\r\n environment.subscribe(() => {\r\n if (!timer.current) {\r\n clearTimeout(timer.current);\r\n }\r\n\r\n if (environment.requestCount() >= MAX_REQUEST_BATCH_SIZE) {\r\n // immediately execute requests to reduce queue size\r\n batchRequests(environment, MAX_REQUEST_BATCH_SIZE);\r\n } else {\r\n // a few requests outstanding, wait a bit to accumulate more.\r\n timer.current = setTimeout(() => {\r\n batchRequests(environment, environment.requestCount());\r\n }, FETCH_INTERVAL);\r\n }\r\n });\r\n}\r\n\r\n// default top-level data fetcher\r\nexport const DataFetcher = memo(props => {\r\n const {\r\n environment,\r\n environments,\r\n children,\r\n } = props;\r\n useEnvironmentInitialization(environment);\r\n _.each(environments, env => useEnvironmentInitialization(env));\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n});\r\n\r\nDataFetcher.propTypes = {\r\n // eslint-disable-next-line react/forbid-prop-types\r\n environment: PropTypes.object.isRequired,\r\n environments: PropTypes.arrayOf(PropTypes.object),\r\n children: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.node),\r\n PropTypes.node,\r\n ]).isRequired,\r\n};\r\n\r\nDataFetcher.defaultProps = {\r\n environments: null,\r\n};\r\n","export class SchemaNode {\r\n constructor(name, modelName, parentNode, modelSchema) {\r\n this.name = name;\r\n this.childNodes = [];\r\n this.parentNode = parentNode;\r\n this.modelName = modelName;\r\n this.modelSchema = modelSchema;\r\n\r\n // extensions will serve as an extension point\r\n // where we can attach arbitrary information to\r\n // a schema node.\r\n // this is useful when we want to extend the schema\r\n // tree to include data.\r\n this.extensions = {};\r\n\r\n this.append = this.append.bind(this);\r\n this.setExtension = this.setExtension.bind(this);\r\n this.getExtension = this.getExtension.bind(this);\r\n }\r\n\r\n append(node) {\r\n this.childNodes.push(node);\r\n }\r\n\r\n setExtension(name, ext) {\r\n this.extensions[name] = ext;\r\n }\r\n\r\n getExtension(name) {\r\n return this.extensions[name];\r\n }\r\n\r\n toJson() {\r\n return ({\r\n name: this.name,\r\n modelName: this.modelName,\r\n // modelSchema: this.modelSchema, Can contain non-serializable properties\r\n childNodes: this.childNodes.length > 0 ? this.childNodes.map(c => c.toJson()) : undefined,\r\n extensions: Object.keys(this.extensions).length > 0\r\n ? Object.keys(this.extensions).map(k => this.extensions[k].toJson()) : undefined,\r\n });\r\n }\r\n}\r\n","import { SchemaNode } from './schema-node';\r\n\r\nconst PATH_DELIMITER = ':';\r\n\r\nexport class Schema {\r\n constructor(schemaToModelMapping, modelGetter) {\r\n this.root = new SchemaNode('$ROOT', null, null);\r\n this.schemaToModelMapping = schemaToModelMapping;\r\n this.modelGetter = modelGetter;\r\n\r\n this.modelToSchemaMapping = {};\r\n\r\n this.buildModelToSchemaMap();\r\n\r\n this.insert = this.insert.bind(this);\r\n this.getSchemaNames = this.getSchemaNames.bind(this);\r\n }\r\n\r\n buildModelToSchemaMap() {\r\n const keys = Object.keys(this.schemaToModelMapping);\r\n keys.forEach(schemaName => {\r\n const modelName = this.schemaToModelMapping[schemaName];\r\n if (!this.modelToSchemaMapping[modelName]) {\r\n this.modelToSchemaMapping[modelName] = [];\r\n }\r\n this.modelToSchemaMapping[modelName].push(schemaName);\r\n });\r\n }\r\n\r\n getSchemaNames(modelName) {\r\n return this.modelToSchemaMapping[modelName];\r\n }\r\n\r\n insert(path) {\r\n const parts = path.split(PATH_DELIMITER);\r\n let currentNode = this.root;\r\n\r\n for (let i = 0; i < parts.length; i += 1) {\r\n const partName = parts[i];\r\n\r\n let existingPathFound = false;\r\n for (let j = 0; j < currentNode.childNodes.length; j += 1) {\r\n const t = currentNode.childNodes[j];\r\n if (t.name === partName) {\r\n currentNode = t;\r\n existingPathFound = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!existingPathFound) {\r\n const modelName = this.schemaToModelMapping[partName];\r\n if (!modelName) {\r\n throw new Error(`Model name not found for schema name(data path) ${partName}`);\r\n }\r\n const modelSchema = this.modelGetter(this.schemaToModelMapping[partName]);\r\n const newNode = new SchemaNode(partName, modelName, currentNode, modelSchema);\r\n\r\n currentNode.childNodes.push(newNode);\r\n currentNode = newNode;\r\n }\r\n }\r\n\r\n if (window.__OVERREACT_DEVTOOLS__) {\r\n const { getSchema } = window.__OVERREACT_DEVTOOLS__;\r\n\r\n getSchema(this.root.toJson());\r\n }\r\n\r\n return currentNode;\r\n }\r\n}\r\n"],"sourceRoot":""}