{"version":3,"sources":["../../../../client-data/packages/overreact-odata/src/edm/url-util.js","../../../../client-data/packages/overreact-odata/src/hooks/use-specs.js","../../../../client-data/packages/overreact-odata/src/edm/lodash.js","../../../../client-data/packages/overreact-odata/src/helpers/parse-search.js","../../../../client-data/packages/overreact-odata/src/edm/reflection.js","../../../../client-data/packages/overreact-odata/src/hooks/use-odata-coll.js","../../../../client-data/packages/overreact/index.js","../../../../client-data/packages/overreact-odata/src/hooks/use-odata-call.js","../../../../client-data/packages/overreact-odata/index.js","../../../../client-data/packages/overreact-odata/src/helpers/compose-search-string.js","../../../../client-data/packages/overreact-odata/src/hooks/use-odata-entity.js","../../../../client-data/packages/overreact-smart/src/environment/edm.js","../../../../client-data/packages/overreact-smart/src/environment/schema.js","../../../../client-data/packages/overreact-smart/src/environment/requestor.js","../../../../client-data/packages/overreact-smart/src/environment/index.js","../../../../client-data/packages/overreact-smart/src/request-contract-helper/search-string-parser.js","../../../../client-data/packages/overreact-smart/src/request-contract-helper/header.js","../../../../client-data/packages/overreact-smart/src/request-contract-helper/bulk.js","../../../../client-data/packages/overreact-smart/src/entity/campaign/spec/coll-fetch.js","../../../../client-data/packages/overreact-smart/src/entity/campaign/spec/mutation.js","../../../../client-data/packages/overreact-smart/src/entity/campaign/hooks/use-campaigns.js","../../../../client-data/packages/overreact-smart/src/entity/campaign/spec/fetch.js","../../../../client-data/packages/overreact-smart/src/entity/campaign/hooks/use-campaign.js","../../../../client-data/packages/overreact-smart/src/entity/search-phrase/spec/coll-fetch.js","../../../../client-data/packages/overreact-smart/src/entity/search-phrase/spec/coll-mutation.js","../../../../client-data/packages/overreact-smart/src/entity/search-phrase/hooks/use-search-phrases.js","../../../../client-data/packages/overreact-smart/src/entity/campaign-criterions/spec/coll-fetch.js","../../../../client-data/packages/overreact-smart/src/entity/campaign-criterions/hooks/use-campaign-criterions.js","../../../../client-data/packages/overreact-smart/src/entity/ad-group/spec/coll-fetch.js","../../../../client-data/packages/overreact-smart/src/entity/ad-group/hooks/use-ad-groups.js","../../../../client-data/packages/overreact-smart/src/entity/performance-time-series/spec/contract.js","../../../../client-data/packages/overreact-smart/src/entity/performance-time-series/spec/fetch.js","../../../../client-data/packages/overreact-smart/src/entity/performance-time-series/spec/refetch.js","../../../../client-data/packages/overreact-smart/src/entity/performance-time-series/hooks/use-performance-time-series.js","../../../../client-data/packages/overreact-smart/src/entity/alert-information/spec/account-fetch.js","../../../../client-data/packages/overreact-smart/src/entity/alert-information/hooks/use-account-altert-information.js","../../../../client-data/packages/overreact-smart/src/entity/alert-information/spec/campaign-fetch.js","../../../../client-data/packages/overreact-smart/src/entity/alert-information/hooks/use-campaign-alert-information.js","../../../../client-data/packages/overreact-smart/src/entity/ads/spec/coll-fetch.js","../../../../client-data/packages/overreact-smart/src/entity/ads/spec/mutation.js","../../../../client-data/packages/overreact-smart/src/entity/ads/hooks/use-ads.js","../../../../client-data/packages/overreact-smart/src/entity/business/spec/fetch.js","../../../../client-data/packages/overreact-smart/src/entity/business/spec/mutation.js","../../../../client-data/packages/overreact-smart/src/entity/business/hooks/use-business.js","../../../../client-data/packages/overreact-smart/src/entity/smart-listing/spec/coll-fetch.js","../../../../client-data/packages/overreact-smart/src/entity/smart-listing/hooks/use-smart-listings.js","../../../../client-data/packages/overreact-smart/src/entity/kpi-estimations/spec/fetch.js","../../../../client-data/packages/overreact-smart/src/entity/kpi-estimations/hooks/use-kpi-estimations.js","../../../../client-data/packages/overreact-smart/src/entity/editorial-reasons/spec/coll-fetch.js","../../../../client-data/packages/overreact-smart/src/entity/editorial-reasons/hooks/use-editorial-reasons.js","../../../../client-data/packages/overreact-smart/src/entity/ad-extension-association/spec/coll-fetch.js","../../../../client-data/packages/overreact-smart/src/entity/ad-extension-association/hooks/use-ad-extension-associations.js","../../../../client-data/packages/overreact-odata/src/edm/types-plugin.js","../../../../client-data/packages/overreact-odata/src/edm/resource-identifiers.js","../../../../client-data/packages/overreact-odata/src/edm/schema-plugin.js","../../../../client-data/packages/overreact-odata/src/edm/registry.js","../../../../client-data/packages/overreact-odata/src/edm/core.js"],"names":["_","require","module","exports","join","first","_len","arguments","length","frags","Array","_key","reduce","memo","frag","isEmpty","eSlash","test","sSlash","substring","concat","useMemo","useSpecs","specs","path","selectedSpecs","error","get","object","defaultValue","sub","i","keyPath","value","isArray","has","compact","split","castPath","isObject","isUndefined","parseOrderBy","orderby","$orderby","map","v","index","toLowerCase","lowerCaseOrderValue","key","parseSearch","search","edmResource","filter","top","skip","count","select","searchString","nonODataSearch","_objectWithoutProperties","_excluded","_objectSpread","where","$filter","parseFilter","$top","parseTop","$skip","parseSkip","undefined","$count","parseCount","resource","parsed","navigationPropertyNames","type","elementType","$select","item","contains","$expand","parseSelect","$search","parseSearchString","defineConstProperty","obj","name","Object","defineProperty","enumerable","writable","defineProducedProperty","factory","apply","configurable","defineProducedPropertyOnClass","Class","className","random","symbol","prototype","hasOwnProperty","call","this","defineComputedProperty","getter","mixin","getOwnPropertyDescriptor","_require","useCallback","_require2","useDataRefId","usePagination","useMutation","useODataCollection","variables","config","dataRefId","collSpecs","fetchSpec","fetch","mutationSpec","mutation","destroySpec","destroy","addSpec","add","paginationConfig","fetchVariables","_usePagination","_usePagination2","_slicedToArray","data","methods","mutateFn","destroyFn","createFn","update","newData","rest","_len2","_key2","create","_len3","_key3","loadMore","hasMore","isLoading","__webpack_require__","r","__webpack_exports__","_src_data_fetcher__WEBPACK_IMPORTED_MODULE_0__","d","_src_environment__WEBPACK_IMPORTED_MODULE_1__","_src_spec__WEBPACK_IMPORTED_MODULE_2__","_src_store__WEBPACK_IMPORTED_MODULE_3__","_src_schema__WEBPACK_IMPORTED_MODULE_4__","_src_hooks__WEBPACK_IMPORTED_MODULE_5__","_src_middleware__WEBPACK_IMPORTED_MODULE_6__","_src_test_utils__WEBPACK_IMPORTED_MODULE_7__","useFetch","useODataCall","sideEffectFn","actionSpec","EDM","resIdsPlugin","useODataEntity","composeSearchString","queryString","DEFAULT_PAGE_SIZE","edmEntity","isColl","cursorIndex","initialSearch","omit","parsedSearch","searchCompact","x","isNull","stringify","entitySpecs","_useFetch","_useFetch2","edm","schemas","$ROOT","$$ref","properties","Customers","items","$$ODataExtension","Name","NavigationProperty","mapObject","schema","extend","odataPlugin","odataBulkUpsertPlugin","window","campaignODataConfigs","bulkUpsertSchema","rootResourceIdentifier","types","resolve","ResourceIdentifier","Schema","customer","account","campaign","ad_group","ad_extension_association","search_phrase","campaign_criterion","performance_time_series","alert_information","ad","business","smart_listing","kpi_estimations","editorial_reasons","getRequestor","_ref","serviceRoot","token","uri","requestVerb","headers","body","cache","url","headerWithToken","Authorization","method","JSON","then","response","Promise","all","ok","json","_ref2","_ref3","responseOk","responseJSON","status","middlewares","_defineProperty","middlewareTypes","FETCH_POLICY","createFetchPolicyMiddleware","ERROR","createErrorMiddleware","store","Store","env","SMART_ENVIRONMENT_TAG","getEnvironmentInstance","requestor","extraMiddleware","Environment","environmentLookupFn","environmentTag","getDefaultHeaderObj","cache-control","content-type","x-ms-lastwritetime","x-ms-applicationname","x-ms-requestid","uuidv4","BulkError","_Error","_this","entity","errors","_classCallCheck","_callSuper","_inherits","_createClass","_wrapNativeSuper","Error","getBulkUrl","params","descriptor","locator","cid","aid","$withKey","Accounts","getBulkPayload","entitySchema","CsvRows","serialize","getProcessedBulkResult","request","csvData","parse","results","ret","populateIds","fetchRequestContract","createRequestContract","dataPath","verb","requestVerbs","GET","uriFactoryFn","pageSize","_variables$filter","_variables$orderby","Status","_variables$count","startDate","endDate","Campaigns","startdate","enddate","includesmartcampaign","headerFactoryFn","keySelector","Id","parentKeySelector","fetchResponseContract","createResponseContract","requestContract","responseType","responseTypes","COLL","processorFn","mutationRequestContract","POST","fetchPolicy","FetchPolicy","NetworkOrStore","payloadFactoryFn","mutationResponseContract","mutationEntityResponseContract","ENTITY","createSpec","specTypes","PAGINATION","REFETCH","MUTATION","id","StartDate","EndDate","_yesterday$toISOStrin","Date","now","toISOString","gridDataParameters","DateRange","FETCH","_variables$pageSize","_variables$returnRepr","returnRepresentativeSearchPhrases","cpid","adgid","AdGroups","returnrepresentativesearchphrases","searchPhrase","Text","updateVariables","ParamSearchPhrases","fetchCollRequestContract","fetchCollResponseContract","mutationCollRequestContract","mutationCollResponseContract","campaignCriterion","_variables$select","_variables$includeSma","includeSmartCampaign","adGroup","odataUrlFactory","granularity","campaignId","functionEdmResource","functionCallParameters","comparisonStartDate","comparisonEndDate","metrics","movingAverage","$call","smartFilter","returnphonecalls","odataHeaderFactory","PerformanceTimeSeriesRequestContract","_RequestContract","options","assign","chartData","ClientId","RequestContract","PerformanceTimeSeriesResponseContract","_ResponseContract","ResponseContract","refetchRequestContract","NetworkOnly","refetchResponseContract","DEFAULT_FIELDS","alertInformation","_variables$top","Ads","dateString","responseContract","ADD","DELETE","businessId","Businesses","PATCH","Website","SmartListings","smartListing","currencyMapping","ars","aud","brl","cad","chf","clp","cny","cop","dkk","dzd","egp","eur","gbp","hkd","idr","inr","jpy","lbp","mad","mex","myr","nok","nzd","pen","php","qar","sar","sek","sgd","thb","twd","usd","vef","vnd","zar","currencyId","Currency","editorialReasons","EntityId","AdExtensionAssociations","adextensiontype","adExtensionAssociation","AdExtension","Registry","ONEOF_TYPE_PREFIX","COLLECTION_TYPE_POSTFIX","oneOfTypes","Map","resolveType","namespace","postfix","slice","str","removePostfix","collectionType","indexOf","prefixLength","typeNames","substr","set","OneOfType","Property","typeName","Parameter","Type","getNamespace","getShortName","register","PrimitiveType","_Type","_ref4","jsType","_Type2","_ref5","_this2","oneOfTypeName","_this3","sortedNames","resolveQualifiedName","sort","compileProperties","_ref6","ObjectType","_Type3","_ref7","_this4","_ref7$navigationPrope","baseTypeName","pick","property","propertyName","_this$navigationPrope","push","_toConsumableArray","keys","addProperties","ComplexType","_ObjectType","EntityType","_ObjectType2","_ref8","_this5","baseType","keyProperty","CollectionType","_ObjectType3","_ref9","_this6","elementTypeName","collectionTypeName","CallableType","_Type4","_ref11","_this7","callableName","parameters","returnTypeName","_ref10","ActionType","_CallableType","_ref12","FunctionType","_CallableType2","_ref13","resourceIdentifiers","Navigation","source","toJSON","toSelfJSON","PropertyNavigation","_Navigation","TypeResID","navigationProperties","each","navigation","CallableNavigation","_Navigation2","callable","defineCallableOn","resID","callableTypes","actions","functions","CastNavigation","_Navigation3","_ref4$name","chain","navigationName","entityType","WithKeyNavigation","_Navigation4","isString","keyType","result","match","CallNavigation","_Navigation5","_ref6$parameters","returnType","entitySet","_entitySet","CollectionResourceIdentifier","_ResourceIdentifier","resourceIdentifierForType","DefaultBase","Base","AccessorType","_Base","ObjectTypeResID","defineOn","CollectionTypeResID","CallableTypeResID","def","_require3","typesPlugin","getSchemaBaseTypeName","clrTypeBase","BaseType","$ref","getSchemaKey","Key","getSchemaNavigationPropertyNames","_ref$schemas","_ref$namespace","_edm$types","getSchemaFullName","possiblePath","replace","getQualifiedName","getSchemaName","getTypeName","dependencies","typeInfo","oneOf","enum","defineCallableOnType","acts","funcs","qualifiedName","forEntityType","getCallableTypeName","parameter","ReturnType","defineSchemaType","entityActions","entityFunctions","collCallable","Action","Function","string","String","integer","Number","number","datetime","boolean","Boolean","null","Namespace","parent","segments","ns","seg","pop","worker","rootNamespace","qualifiedNames","realName","isObjectWithName","last","schemaPlugin"],"mappings":"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","file":"static/js/application.initial~78e9113a.815e0bf4.chunk.js","sourcesContent":["const _ = require('underscore');\r\n\r\nfunction join(first, ...frags) {\r\n return frags.reduce((memo, frag) => {\r\n if (_.isEmpty(frag)) {\r\n return memo;\r\n }\r\n const eSlash = /\\/$/.test(memo);\r\n const sSlash = /^\\//.test(frag);\r\n\r\n if (!eSlash && !sSlash) {\r\n return `${memo}/${frag}`;\r\n }\r\n if (eSlash && sSlash) {\r\n return memo + frag.substring(1);\r\n }\r\n return memo + frag;\r\n }, first);\r\n}\r\n\r\nmodule.exports = {\r\n join,\r\n};\r\n","const { useMemo } = require('react');\r\n\r\nfunction useSpecs(specs, path) {\r\n // find the spec needed from path\r\n return useMemo(() => {\r\n const selectedSpecs = specs[path];\r\n\r\n if (!selectedSpecs) {\r\n return [{ error: `specs for path ${path} not found` }];\r\n }\r\n\r\n return selectedSpecs;\r\n }, [path, specs]);\r\n}\r\n\r\nmodule.exports = {\r\n useSpecs,\r\n};\r\n","const _ = require('underscore');\r\n\r\nfunction castPath(value, object) {\r\n if (_.isArray(value)) {\r\n return value;\r\n }\r\n\r\n if (_.has(object, value)) {\r\n return [value];\r\n }\r\n\r\n return _.compact(value.split(/[[\\].]/));\r\n}\r\n\r\nfunction get(object, path, defaultValue) {\r\n let sub;\r\n let i;\r\n const keyPath = castPath(path, object);\r\n\r\n for (i = 0, sub = object; i < keyPath.length; i += 1) {\r\n if (!_.isObject(sub)) {\r\n return defaultValue;\r\n }\r\n\r\n sub = sub[keyPath[i]];\r\n\r\n if (_.isUndefined(sub)) {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n return sub;\r\n}\r\n\r\nmodule.exports = {\r\n get,\r\n};\r\n","const _ = require('underscore');\r\n// support a mongoDB like orderby object for now: { age : -1, name: 1 }\r\n// for backward compatibility, support array format: [['age', 'desc'], ['name', 'asc]]\r\nfunction parseOrderBy(orderby) {\r\n function lowerCaseOrderValue(value) {\r\n return _.map(value, (v, index) => (index === 1 ? v.toLowerCase() : v));\r\n }\r\n\r\n if (_.isEmpty(orderby)) {\r\n return {};\r\n }\r\n\r\n let $orderby;\r\n if (_.isArray(orderby)) {\r\n $orderby = _.map(orderby, value => lowerCaseOrderValue(value).join(' ')).join(',');\r\n } else {\r\n $orderby = _.map(orderby, (value, key) => `${key} ${value > 0 ? 'asc' : 'desc'}`).join(',');\r\n }\r\n\r\n return {\r\n $orderby,\r\n };\r\n}\r\n\r\nfunction parseFilter(filter) {\r\n if (_.isEmpty(filter) || _.isEmpty(filter.where)) {\r\n return {};\r\n }\r\n\r\n return {\r\n $filter: filter.where,\r\n };\r\n}\r\n\r\nfunction parseTop(top) {\r\n if (!top) {\r\n return {};\r\n }\r\n\r\n return {\r\n $top: top,\r\n };\r\n}\r\n\r\nfunction parseSkip(skip) {\r\n if (!skip) {\r\n return {};\r\n }\r\n\r\n return {\r\n $skip: skip,\r\n };\r\n}\r\n\r\nfunction parseCount(count) {\r\n if (count === undefined) {\r\n return {};\r\n }\r\n\r\n return {\r\n $count: count,\r\n };\r\n}\r\n\r\nfunction parseSelect(select, resource) {\r\n if (!select) return {};\r\n const parsed = {};\r\n const elementType = resource.type.elementType ? resource.type.elementType : resource.type;\r\n const { navigationPropertyNames } = elementType;\r\n const $select = select.filter(item => !_.contains(navigationPropertyNames, item)).join(',');\r\n const $expand = select.filter(item => _.contains(navigationPropertyNames, item)).join(',');\r\n\r\n if ($select.length) {\r\n parsed.$select = $select;\r\n }\r\n\r\n if ($expand.length) {\r\n parsed.$expand = $expand;\r\n }\r\n\r\n return parsed;\r\n}\r\n\r\nfunction parseSearchString(search) {\r\n if (!search) {\r\n return {};\r\n }\r\n\r\n return {\r\n $search: search,\r\n };\r\n}\r\n\r\nfunction parseSearch(search, edmResource) {\r\n const {\r\n orderby,\r\n filter,\r\n top,\r\n skip,\r\n count,\r\n select,\r\n search: searchString,\r\n ...nonODataSearch\r\n } = search;\r\n\r\n return {\r\n ...parseOrderBy(orderby),\r\n ...parseFilter(filter),\r\n ...parseTop(top),\r\n ...parseSkip(skip),\r\n ...parseCount(count),\r\n ...parseSelect(select, edmResource),\r\n ...parseSearchString(searchString),\r\n ...nonODataSearch,\r\n };\r\n}\r\n\r\nmodule.exports = {\r\n parseSearch,\r\n};\r\n","/**\r\n * the reflection module for property defintions\r\n */\r\nconst _ = require('underscore');\r\n\r\n/**\r\n* Define a const property\r\n* @param {Object} obj - the host object of the proprty\r\n* @param {String} name - the name of the property\r\n* @param {Object} value - the value of the property\r\n* @return {Object} the host object\r\n*/\r\nfunction defineConstProperty(obj, name, value) {\r\n return Object.defineProperty(obj, name, {\r\n value,\r\n enumerable: true,\r\n writable: false,\r\n });\r\n}\r\n\r\n/**\r\n* Define a produced property with a factory\r\n* @param {Object} obj - the host object of the proprty\r\n* @param {String} name - the name of the property\r\n* @param {Function} factory - the factory to produce the property value\r\n* @return {Object} the host object\r\n*/\r\nfunction defineProducedProperty(obj, name, factory) {\r\n return Object.defineProperty(obj, name, {\r\n get() {\r\n const value = factory.apply(obj);\r\n\r\n defineConstProperty(obj, name, value);\r\n return value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n}\r\n\r\n/**\r\n* Define a produced property on a class\r\n* @param {Class} Class - the host class of the proprty\r\n* @param {String} name - the name of the property\r\n* @param {Function} factory - the factory to produce the property value\r\n* @return {Class} the host class\r\n*/\r\nfunction defineProducedPropertyOnClass(Class, name, factory) {\r\n const RAND_MAX = 65535;\r\n const className = Class.name || `Anony${_.random(0, RAND_MAX)}`;\r\n const symbol = `__${className}_${name}`;\r\n\r\n Object.defineProperty(Class.prototype, name, {\r\n get() {\r\n if (!Object.prototype.hasOwnProperty.call(this, symbol)) {\r\n defineConstProperty(this, symbol, factory.apply(this));\r\n }\r\n return this[symbol];\r\n },\r\n enumerable: true,\r\n });\r\n\r\n return Class;\r\n}\r\n\r\n/**\r\n* Define a computed property whose value is computed each time the getter being called\r\n* @param {Object} obj - the host object of the proprty\r\n* @param {String} name - the name of the property\r\n* @param {Function} getter - the getter to compute the property value\r\n* @return {Object} the host object\r\n*/\r\nfunction defineComputedProperty(obj, name, getter) {\r\n return Object.defineProperty(obj, name, {\r\n get: getter,\r\n enumerable: true,\r\n });\r\n}\r\n\r\n// Make the functions chainable with underscorejs\r\n_.mixin({\r\n defineConstProperty,\r\n defineProducedProperty,\r\n defineProducedPropertyOnClass,\r\n defineComputedProperty,\r\n});\r\n\r\n/**\r\n* Detect whether or not a object has certain property without evaluation\r\n* @param {Object} obj - the host class of the proprty\r\n* @param {String} name - the name of the property\r\n* @return {Boolean} whether the property is defined\r\n*/\r\nfunction hasOwnProperty(obj, name) {\r\n return !!Object.getOwnPropertyDescriptor(obj, name);\r\n}\r\n\r\nmodule.exports = {\r\n defineConstProperty,\r\n defineProducedProperty,\r\n defineProducedPropertyOnClass,\r\n defineComputedProperty,\r\n hasOwnProperty,\r\n};\r\n","const { useCallback, useMemo } = require('react');\r\nconst { useDataRefId, usePagination, useMutation } = require('@bingads-webui-react/overreact');\r\n\r\nconst { useSpecs } = require('./use-specs');\r\n\r\nfunction useODataCollection(specs, path, variables, config) {\r\n const dataRefId = useDataRefId();\r\n const { collSpecs } = useSpecs(specs, path);\r\n\r\n const {\r\n fetch: fetchSpec,\r\n mutation: mutationSpec,\r\n destroy: destroySpec,\r\n add: addSpec,\r\n } = collSpecs;\r\n\r\n // FIXME: extract fetchVariables out from the config\r\n const paginationConfig = useMemo(() => ({\r\n fetchVariables: {\r\n ...variables,\r\n },\r\n ...config,\r\n }), [config, variables]);\r\n\r\n const [data, methods] = usePagination(dataRefId, fetchSpec, paginationConfig);\r\n\r\n const mutateFn = useMutation(dataRefId, mutationSpec, config);\r\n const destroyFn = useMutation(dataRefId, destroySpec, config);\r\n const createFn = useMutation(dataRefId, addSpec, config);\r\n\r\n const update = useCallback((newData, ...rest) => {\r\n mutateFn(variables, newData, ...rest);\r\n }, [mutateFn, variables]);\r\n\r\n // FIXME: likezh: Why would destroy need data?\r\n const destroy = useCallback((newData, ...rest) => {\r\n destroyFn(variables, newData, ...rest);\r\n }, [destroyFn, variables]);\r\n\r\n const create = useCallback((newData, ...rest) => {\r\n createFn(variables, newData, ...rest);\r\n }, [createFn, variables]);\r\n\r\n const { loadMore, hasMore, isLoading } = methods;\r\n\r\n return [data, {\r\n loadMore,\r\n hasMore,\r\n isLoading,\r\n create,\r\n update,\r\n destroy,\r\n }];\r\n}\r\n\r\nmodule.exports = {\r\n useODataCollection,\r\n};\r\n","export * from './src/data-fetcher';\r\nexport * from './src/environment';\r\nexport * from './src/spec';\r\nexport * from './src/store';\r\nexport * from './src/schema';\r\nexport * from './src/hooks';\r\nexport {\r\n FetchPolicy,\r\n middlewareTypes,\r\n createFetchPolicyMiddleware,\r\n createErrorMiddleware,\r\n createInstrumentationMiddleware,\r\n} from './src/middleware';\r\nexport * from './src/test-utils';\r\n","const {\r\n useFetch,\r\n useDataRefId,\r\n} = require('@bingads-webui-react/overreact');\r\n\r\nconst { useSpecs } = require('./use-specs');\r\n\r\nfunction useODataCall(specs, path, sideEffectFn, variables) {\r\n const dataRefId = useDataRefId();\r\n const { actionSpec } = useSpecs(specs, path);\r\n\r\n return useFetch(dataRefId, actionSpec, variables);\r\n}\r\n\r\nmodule.exports = {\r\n useODataCall,\r\n};\r\n","const { EDM } = require('./src/edm/core');\r\nconst { resIdsPlugin } = require('./src/edm/resource-identifiers');\r\nconst { defineConstProperty } = require('./src/edm/reflection');\r\n\r\nconst { useODataCall } = require('./src/hooks/use-odata-call');\r\nconst { useODataCollection } = require('./src/hooks/use-odata-coll');\r\nconst { useODataEntity } = require('./src/hooks/use-odata-entity');\r\n\r\nconst { composeSearchString } = require('./src/helpers/compose-search-string');\r\n\r\nmodule.exports = {\r\n EDM,\r\n resIdsPlugin,\r\n defineConstProperty,\r\n\r\n useODataCall,\r\n useODataCollection,\r\n useODataEntity,\r\n\r\n composeSearchString,\r\n};\r\n","const _ = require('underscore');\r\nconst queryString = require('query-string');\r\n\r\nconst { parseSearch } = require('./parse-search');\r\n\r\nconst DEFAULT_PAGE_SIZE = 20;\r\n\r\nfunction composeSearchString(variables, edmEntity, isColl = true) {\r\n const { cursorIndex } = variables;\r\n const initialSearch = _.omit(variables, ['locator', 'cursorIndex', 'skip', 'options']);\r\n let search = {\r\n top: DEFAULT_PAGE_SIZE,\r\n count: true,\r\n skip: cursorIndex,\r\n ...initialSearch,\r\n };\r\n\r\n if (!isColl) {\r\n // $filter, $orderby, $count, $skip, and $top are only valid for collections.\r\n search = _.omit(search, ['filter', 'orderby', 'count', 'skip', 'top']);\r\n }\r\n\r\n const parsedSearch = parseSearch(search, edmEntity);\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return searchString;\r\n}\r\n\r\nmodule.exports = {\r\n composeSearchString,\r\n};\r\n","const { useCallback } = require('react');\r\n\r\nconst { useDataRefId, useFetch, useMutation } = require('@bingads-webui-react/overreact');\r\nconst { useSpecs } = require('./use-specs');\r\n\r\nfunction useODataEntity(specs, path, variables, config = {}) {\r\n const dataRefId = useDataRefId();\r\n const { entitySpecs } = useSpecs(specs, path);\r\n\r\n const {\r\n fetch: fetchSpec,\r\n mutation: mutationSpec,\r\n destroy: destroySpec,\r\n } = entitySpecs;\r\n\r\n const [data, error] = useFetch(dataRefId, fetchSpec, variables, config);\r\n const mutateFn = useMutation(dataRefId, mutationSpec, config);\r\n const destroyFn = useMutation(dataRefId, destroySpec, config);\r\n\r\n const update = useCallback((newData, ...rest) => {\r\n mutateFn(variables, newData, ...rest);\r\n }, [mutateFn, variables]);\r\n\r\n // FIXME: likezh: Why would destroy need data?\r\n const destroy = useCallback((newData, ...rest) => {\r\n destroyFn(variables, newData, ...rest);\r\n }, [destroyFn, variables]);\r\n\r\n return [{ data, error }, { update, destroy }];\r\n}\r\n\r\nmodule.exports = {\r\n useODataEntity,\r\n};\r\n","// TODO: make this edm as a separate package in smart project?\r\nimport _ from 'underscore';\r\nimport { EDM } from '@bingads-webui/edm-core';\r\nimport { resIdsPlugin } from '@bingads-webui/edm-resource-identifiers';\r\nimport { odataPlugin } from '@bingads-webui/edm-odata';\r\nimport { odataBulkUpsertPlugin } from '@bingads-webui/edm-bulk';\r\nimport { defineConstProperty } from '@bingads-webui/reflection';\r\nimport { schemas } from '@bingads-webui/campaign-odata-schemas';\r\nimport * as bulkUpsertSchema from '@bingads-webui/odata-bulk-upsert-config';\r\n\r\nexport const edm = new EDM({\r\n schemas: {\r\n $ROOT: {\r\n $$ref: '$ROOT',\r\n type: 'object',\r\n properties: {\r\n Customers: {\r\n type: 'array',\r\n items: schemas['Model/Customer'],\r\n },\r\n },\r\n $$ODataExtension: {\r\n Name: '$ROOT',\r\n NavigationProperty: [\r\n 'Customers',\r\n ],\r\n },\r\n },\r\n ..._.mapObject(\r\n schemas,\r\n (schema, name) => _.extend(schema, { $$ref: name })\r\n ),\r\n },\r\n});\r\n\r\nresIdsPlugin(edm);\r\n\r\nodataPlugin(edm, '' /* we don't use edm to send request so make host url empty */, {});\r\n\r\nodataBulkUpsertPlugin(edm, _.extend({}, window.campaignODataConfigs, {\r\n bulkUpsertSchema,\r\n}));\r\n\r\nconst root = edm.types.resolve('$ROOT');\r\n\r\nconst rootResourceIdentifier = new root.ResourceIdentifier();\r\ndefineConstProperty(edm, 'root', rootResourceIdentifier);\r\ndefineConstProperty(edm, 'Customers', rootResourceIdentifier.Customers);\r\n","import { Schema } from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from './edm';\r\n\r\nconst schemaToModelMapping = {\r\n customer: 'Model/Customer',\r\n account: 'Model/Account',\r\n campaign: 'Model/Campaign',\r\n ad_group: 'Model/AdGroup',\r\n ad_extension_association: 'Model/AdExtensionAssociation',\r\n search_phrase: 'Model/SearchPhrase',\r\n campaign_criterion: 'Model/CampaignCriterion',\r\n performance_time_series: 'Model/PerformanceTimeSeries',\r\n alert_information: 'Model/AlertInformation',\r\n ad: 'Model/Ad',\r\n business: 'Model/Business',\r\n smart_listing: 'Model/SmartListing',\r\n kpi_estimations: 'Model/BudgetKpiEstimationsResponse',\r\n editorial_reasons: 'Model/EntityEditorialReasonsCollection',\r\n};\r\n\r\nexport const schema = new Schema(schemaToModelMapping, name => edm.schema.schemas[name]);\r\n","import Promise from 'bluebird';\r\n\r\nexport function getRequestor({\r\n serviceRoot,\r\n token,\r\n}) {\r\n return function networkRequestor(uri, requestVerb, headers, body, cache = 'default') {\r\n const url = `${serviceRoot}${uri}`;\r\n const headerWithToken = {\r\n ...headers,\r\n Authorization: `CCMTSmallToken ${token}`,\r\n };\r\n return fetch(url, {\r\n method: requestVerb,\r\n headers: headerWithToken,\r\n body: JSON.stringify(body),\r\n cache,\r\n }).then(response => Promise.all([response.ok, response.json(), response]))\r\n .then(([responseOk, responseJSON, response]) => {\r\n if (responseOk) {\r\n return responseJSON;\r\n }\r\n const error = {\r\n status: response.status,\r\n responseJSON,\r\n };\r\n\r\n throw error;\r\n });\r\n };\r\n}\r\n","import {\r\n Environment,\r\n middlewareTypes,\r\n createFetchPolicyMiddleware,\r\n createErrorMiddleware,\r\n Store,\r\n} from '@bingads-webui-react/overreact';\r\nimport { schema } from './schema';\r\n\r\nexport { getRequestor } from './requestor';\r\n\r\nconst middlewares = {\r\n [middlewareTypes.FETCH_POLICY]: createFetchPolicyMiddleware(),\r\n [middlewareTypes.ERROR]: createErrorMiddleware(),\r\n};\r\n\r\n// TODO: do we really need to export this Store from overreact?\r\nconst store = new Store();\r\nlet env = null;\r\n\r\nexport const SMART_ENVIRONMENT_TAG = 'Smart_Endpoint';\r\n\r\nexport function getEnvironmentInstance(requestor, extraMiddleware = {}) {\r\n if (!env) {\r\n env = new Environment(requestor, schema, store, {\r\n ...middlewares,\r\n ...extraMiddleware,\r\n }, SMART_ENVIRONMENT_TAG);\r\n }\r\n\r\n return env;\r\n}\r\n\r\nexport function environmentLookupFn(environmentTag) {\r\n return environmentTag === SMART_ENVIRONMENT_TAG;\r\n}\r\n","import _ from 'underscore';\r\n// support a mongoDB like orderby object for now: { age : -1, name: 1 }\r\n// for backward compatibility, support array format: [['age', 'desc'], ['name', 'asc]]\r\nfunction parseOrderBy(orderby) {\r\n function lowerCaseOrderValue(value) {\r\n return _.map(value, (v, index) => (index === 1 ? v.toLowerCase() : v));\r\n }\r\n\r\n if (_.isEmpty(orderby)) {\r\n return {};\r\n }\r\n\r\n let $orderby;\r\n if (_.isArray(orderby)) {\r\n $orderby = _.map(orderby, value => lowerCaseOrderValue(value).join(' ')).join(',');\r\n } else {\r\n $orderby = _.map(orderby, (value, key) => `${key} ${value > 0 ? 'asc' : 'desc'}`).join(',');\r\n }\r\n\r\n return {\r\n $orderby,\r\n };\r\n}\r\n\r\nfunction parseFilter(filter) {\r\n if (_.isEmpty(filter) || _.isEmpty(filter.where)) {\r\n return {};\r\n }\r\n\r\n return {\r\n $filter: filter.where,\r\n };\r\n}\r\n\r\nfunction parseTop(top) {\r\n if (!top) {\r\n return {};\r\n }\r\n\r\n return {\r\n $top: top,\r\n };\r\n}\r\n\r\nfunction parseSkip(skip) {\r\n if (!skip) {\r\n return {};\r\n }\r\n\r\n return {\r\n $skip: skip,\r\n };\r\n}\r\n\r\nfunction parseCount(count) {\r\n if (count === undefined) {\r\n return {};\r\n }\r\n\r\n return {\r\n $count: count,\r\n };\r\n}\r\n\r\nfunction parseSelect(select, resource) {\r\n if (!select) return {};\r\n const parsed = {};\r\n const elementType = resource.type.elementType ? resource.type.elementType : resource.type;\r\n const { navigationPropertyNames } = elementType;\r\n const $select = select.filter(item => !_.contains(navigationPropertyNames, item)).join(',');\r\n const $expand = select.filter(item => _.contains(navigationPropertyNames, item)).join(',');\r\n\r\n if ($select.length) {\r\n parsed.$select = $select;\r\n }\r\n\r\n if ($expand.length) {\r\n parsed.$expand = $expand;\r\n }\r\n\r\n return parsed;\r\n}\r\n\r\nexport function parseSearch(search, edmResource) {\r\n const {\r\n orderby,\r\n filter,\r\n top,\r\n skip,\r\n count,\r\n select,\r\n ...nonODataSearch\r\n } = search;\r\n\r\n return {\r\n ...parseOrderBy(orderby),\r\n ...parseFilter(filter),\r\n ...parseTop(top),\r\n ...parseSkip(skip),\r\n ...parseCount(count),\r\n ...parseSelect(select, edmResource),\r\n ...nonODataSearch,\r\n };\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\n\r\nfunction generateRequestId() {\r\n return uuidv4();\r\n}\r\n\r\nexport function getDefaultHeaderObj() {\r\n return {\r\n 'cache-control': 'no-cache',\r\n 'content-type': 'application/json',\r\n 'x-ms-lastwritetime': 'Max',\r\n 'x-ms-applicationname': 'bingadsweb',\r\n 'x-ms-requestid': generateRequestId(),\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { serialize, parse, populateIds } from '@bingads-webui/odata-bulk-upsert';\r\nimport { edm } from '../environment/edm';\r\n\r\nclass BulkError extends Error {\r\n constructor({\r\n entity,\r\n errors,\r\n }) {\r\n super();\r\n this.entity = entity;\r\n this.errors = errors;\r\n }\r\n}\r\n\r\nexport function getBulkUrl(params) {\r\n const { variables } = params;\r\n const { locator } = variables;\r\n const { descriptor } = locator;\r\n const { cid, aid } = descriptor;\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid);\r\n\r\n return `${entity.path}/Default.BulkUpsert`;\r\n}\r\n\r\nexport function getBulkPayload(entitySchema, data) {\r\n const CsvRows = serialize(entitySchema, data);\r\n const payload = {\r\n CsvRows,\r\n };\r\n\r\n return payload;\r\n}\r\n\r\nexport function getProcessedBulkResult(response, request) {\r\n const { data } = request;\r\n const csvData = parse(response);\r\n const {\r\n results,\r\n errors,\r\n } = csvData;\r\n\r\n const ret = populateIds(results, data);\r\n\r\n if (!_.isEmpty(errors)) {\r\n throw new BulkError({\r\n entity: ret,\r\n errors,\r\n });\r\n }\r\n\r\n return Array.isArray(ret) ? ret : [ret];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n pageSize,\r\n cursorIndex,\r\n filter = {\r\n where: \"(CampaignType eq Enum.CampaignType'Smart')\",\r\n },\r\n orderby = {\r\n Status: 1,\r\n },\r\n select,\r\n count = true,\r\n startDate,\r\n endDate,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const { cid, aid } = descriptor;\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns;\r\n const search = {\r\n top: pageSize,\r\n skip: cursorIndex,\r\n filter,\r\n orderby,\r\n select,\r\n count,\r\n };\r\n\r\n const parsedSearch = {\r\n ...parseSearch(search, entity),\r\n startdate: startDate,\r\n enddate: endDate,\r\n includesmartcampaign: true,\r\n };\r\n\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${entity.path}${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign',\r\n verb: requestVerbs.GET,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n keySelector: campaign => campaign.Id,\r\n parentKeySelector: variables => variables.locator.descriptor.aid,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: campaign => campaign.Id,\r\n processorFn: response => response.value,\r\n});\r\n","import {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n FetchPolicy,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { getBulkUrl, getBulkPayload, getProcessedBulkResult, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n return getBulkUrl(params);\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nfunction odataPayloadFactory(params) {\r\n const { data } = params;\r\n return getBulkPayload(edm.schema.schemas['Model/Campaign'], data);\r\n}\r\n\r\nfunction processor(response, request) {\r\n return getProcessedBulkResult(response, request);\r\n}\r\n\r\nfunction entityProcessor(response, request) {\r\n return getProcessedBulkResult(response, request)[0];\r\n}\r\n\r\nexport const mutationRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign',\r\n verb: requestVerbs.POST,\r\n fetchPolicy: FetchPolicy.NetworkOrStore,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n payloadFactoryFn: odataPayloadFactory,\r\n keySelector: campaign => campaign.Id,\r\n parentKeySelector: variables => variables.locator.descriptor.aid,\r\n});\r\n\r\nexport const mutationResponseContract = createResponseContract({\r\n requestContract: mutationRequestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: campaign => campaign.Id,\r\n processorFn: processor,\r\n});\r\n\r\nexport const mutationEntityResponseContract = createResponseContract({\r\n requestContract: mutationRequestContract,\r\n responseType: responseTypes.ENTITY,\r\n keySelector: campaign => campaign.Id,\r\n processorFn: entityProcessor,\r\n});\r\n","import _ from 'underscore';\r\nimport { useCallback, useMemo, useState } from 'react';\r\n\r\nimport {\r\n createSpec, specTypes, FetchPolicy,\r\n useMutation,\r\n usePagination,\r\n useDataRefId,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract,\r\n fetchResponseContract,\r\n} from '../spec/coll-fetch';\r\nimport {\r\n mutationRequestContract,\r\n mutationResponseContract,\r\n} from '../spec/mutation';\r\nimport { environmentLookupFn } from '../../../environment/index';\r\n\r\nconst fetchCollSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.PAGINATION, null, environmentLookupFn\r\n );\r\nconst refetchCollSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.REFETCH, null, environmentLookupFn\r\n );\r\nconst mutationCollSpec =\r\n createSpec(\r\n mutationRequestContract, mutationResponseContract,\r\n specTypes.MUTATION, null, environmentLookupFn\r\n );\r\n\r\nexport function useCampaigns(dataLocator, config) {\r\n const dataRefId = useDataRefId(null, environmentLookupFn);\r\n const [isRefreshing, setIsRefreshing] = useState(false);\r\n const defaultConfig = useMemo(() => ({\r\n mutation: config && config.mutation ? config.mutation : {},\r\n pagination: config && config.pagination ? config.pagination : {},\r\n refetch: config && config.refetch ? config.refetch : {\r\n onComplete: () => { setIsRefreshing(false); },\r\n onError: () => { setIsRefreshing(false); },\r\n },\r\n }), [config]);\r\n\r\n const { mutation, pagination, refetch } = defaultConfig;\r\n\r\n const paginationConfig = useMemo(() => ({\r\n fetchVariables: {\r\n ...dataLocator,\r\n },\r\n strictMode: true,\r\n ...pagination,\r\n }), [dataLocator, pagination]);\r\n const page = usePagination(dataRefId, fetchCollSpec, paginationConfig);\r\n\r\n const updateFn = useMutation(dataRefId, mutationCollSpec, mutation.update);\r\n\r\n const update = useCallback((data) => {\r\n updateFn({ ...dataLocator }, data);\r\n }, [dataLocator, updateFn]);\r\n\r\n const refetchFn = useRefetch(dataRefId, refetchCollSpec, refetch);\r\n\r\n const refresh = useCallback(() => {\r\n setIsRefreshing(true);\r\n\r\n refetchFn({\r\n variables: {\r\n ...dataLocator,\r\n cursorIndex: 0,\r\n // fetch-policy-middleware will check this fetchPolicy\r\n options: {\r\n fetchPolicy: FetchPolicy.NetworkOnly,\r\n },\r\n },\r\n });\r\n }, [dataLocator, refetchFn]);\r\n\r\n const [data, { isLoading, ...method }] = page;\r\n\r\n return [data, _.extend({}, method, {\r\n update,\r\n refresh,\r\n isLoading: isLoading || isRefreshing,\r\n })];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n id,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const { cid, aid } = descriptor;\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns['Default.GridData'];\r\n const search = {\r\n top: 5,\r\n skip: 0,\r\n filter: {\r\n where: `Id eq ${id}`,\r\n },\r\n select: ['Id', 'Name', 'Status', 'PerformanceMetrics/Clicks', 'PerformanceMetrics/Impressions', 'PerformanceMetrics/Spend'],\r\n count: true,\r\n };\r\n\r\n const parsedSearch = {\r\n ...parseSearch(search, entity),\r\n includesmartcampaign: true,\r\n };\r\n\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${entity.path}${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nfunction odataPayloadFactory(params) {\r\n const { variables } = params;\r\n const {\r\n startDate,\r\n endDate,\r\n } = variables;\r\n\r\n let StartDate = startDate;\r\n let EndDate = endDate;\r\n if (!StartDate) {\r\n const yesterday = new Date(Date.now() - 864e5);\r\n [StartDate] = yesterday.toISOString().split('T');\r\n }\r\n if (!EndDate) {\r\n EndDate = StartDate;\r\n }\r\n\r\n return {\r\n gridDataParameters: {\r\n DateRange: {\r\n StartDate,\r\n EndDate,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign',\r\n verb: requestVerbs.POST,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n payloadFactoryFn: odataPayloadFactory,\r\n keySelector: campaign => campaign.Id,\r\n parentKeySelector: variables => variables.locator.descriptor.aid,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.ENTITY,\r\n keySelector: campaign => campaign.Id,\r\n processorFn: response => response.value[0],\r\n});\r\n","import { useCallback } from 'react';\r\n\r\nimport {\r\n createSpec, specTypes,\r\n useFetch,\r\n useRefetch,\r\n useMutation,\r\n useDataRefId,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract,\r\n fetchResponseContract,\r\n} from '../spec/fetch';\r\n\r\nimport {\r\n mutationRequestContract,\r\n mutationEntityResponseContract,\r\n} from '../spec/mutation';\r\nimport { environmentLookupFn } from '../../../environment/index';\r\n\r\nconst fetchSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.FETCH, null, environmentLookupFn\r\n );\r\nconst mutationSpec =\r\n createSpec(\r\n mutationRequestContract, mutationEntityResponseContract,\r\n specTypes.MUTATION, null, environmentLookupFn\r\n );\r\nconst refetchSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.REFETCH, null, environmentLookupFn\r\n );\r\n\r\nexport function useCampaign(dataLocator, config = {}) {\r\n const dataRefId = useDataRefId(null, environmentLookupFn);\r\n const [data, error] = useFetch(dataRefId, fetchSpec, dataLocator);\r\n\r\n const { mutation = {}, refetch = {} } = config;\r\n const updateFn = useMutation(dataRefId, mutationSpec, mutation.update);\r\n\r\n const update = useCallback((item) => {\r\n if (Array.isArray(item)) {\r\n throw Error('useCampaign cannot update multiple object. Do not provide array as argument.');\r\n }\r\n updateFn({ ...dataLocator }, item);\r\n }, [dataLocator, updateFn]);\r\n\r\n const refetchFn = useRefetch(dataRefId, refetchSpec, refetch);\r\n\r\n const read = useCallback((param) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n });\r\n }, [dataLocator, refetchFn]);\r\n\r\n return [{ data, error }, { update, read }];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n pageSize = 50,\r\n cursorIndex,\r\n count = true,\r\n returnRepresentativeSearchPhrases = true,\r\n orderby,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const {\r\n cid,\r\n aid,\r\n cpid,\r\n adgid,\r\n } = descriptor;\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(cpid)\r\n .AdGroups.$withKey(adgid);\r\n\r\n const search = {\r\n top: pageSize,\r\n skip: cursorIndex,\r\n count,\r\n returnRepresentativeSearchPhrases,\r\n orderby,\r\n };\r\n\r\n const parsedSearch = {\r\n ...parseSearch(search, entity),\r\n returnrepresentativesearchphrases: returnRepresentativeSearchPhrases,\r\n };\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${entity.path}/SearchPhrases/Default.GridData${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\n\r\nfunction odataPayloadFactory(params) {\r\n const { variables } = params;\r\n const { data } = variables;\r\n\r\n return data;\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign:ad_group:search_phrase',\r\n verb: requestVerbs.POST,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n payloadFactoryFn: odataPayloadFactory,\r\n keySelector: searchPhrase => searchPhrase.Text,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: searchPhrase => searchPhrase.Text,\r\n processorFn: response => response.value,\r\n});\r\n","import {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n FetchPolicy,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const {\r\n cid,\r\n aid,\r\n cpid,\r\n } = descriptor;\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(cpid);\r\n\r\n return `${entity.path}/SearchPhrases/Default.SetSearchPhrases`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\n\r\nfunction odataPayloadFactory(params) {\r\n const { data } = params;\r\n const { updateVariables } = data;\r\n\r\n return updateVariables;\r\n}\r\n\r\nfunction processor(_, request) {\r\n const { data } = request;\r\n return data.updateVariables.ParamSearchPhrases;\r\n}\r\n\r\nexport const mutationRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign:ad_group:search_phrase',\r\n verb: requestVerbs.POST,\r\n fetchPolicy: FetchPolicy.NetworkOrStore,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n payloadFactoryFn: odataPayloadFactory,\r\n keySelector: searchPhrase => searchPhrase.Text,\r\n});\r\n\r\nexport const mutationResponseContract = createResponseContract({\r\n requestContract: mutationRequestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: searchPhrase => searchPhrase.Text,\r\n processorFn: processor,\r\n});\r\n","import _ from 'underscore';\r\nimport { useCallback, useMemo } from 'react';\r\n\r\nimport {\r\n createSpec,\r\n specTypes,\r\n usePagination,\r\n useDataRefId,\r\n useMutation,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract as fetchCollRequestContract,\r\n fetchResponseContract as fetchCollResponseContract,\r\n} from '../spec/coll-fetch';\r\n\r\nimport {\r\n mutationRequestContract as mutationCollRequestContract,\r\n mutationResponseContract as mutationCollResponseContract,\r\n} from '../spec/coll-mutation';\r\n\r\nconst fetchCollSpec =\r\n createSpec(fetchCollRequestContract, fetchCollResponseContract, specTypes.PAGINATION);\r\n\r\nconst mutationCollSpec =\r\n createSpec(mutationCollRequestContract, mutationCollResponseContract, specTypes.MUTATION);\r\n\r\nconst refetchCollSpec =\r\n createSpec(fetchCollRequestContract, fetchCollResponseContract, specTypes.REFETCH);\r\n\r\nexport function useSearchPhrases(dataLocator, config = {}) {\r\n const dataRefId = useDataRefId();\r\n const paginationConfig = useMemo(() => ({\r\n fetchVariables: {\r\n ...dataLocator,\r\n },\r\n }), [dataLocator]);\r\n const page = usePagination(dataRefId, fetchCollSpec, paginationConfig);\r\n\r\n const { mutation = {}, refetch = {} } = config;\r\n const updateFn = useMutation(dataRefId, mutationCollSpec, mutation.update);\r\n\r\n const update = useCallback((data) => {\r\n updateFn({ ...dataLocator }, data);\r\n }, [dataLocator, updateFn]);\r\n\r\n const [data, method] = page;\r\n\r\n const refetchFn = useRefetch(dataRefId, refetchCollSpec, refetch);\r\n\r\n const read = useCallback((param) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n });\r\n }, [dataLocator, refetchFn]);\r\n\r\n\r\n return [data, _.extend({}, method, { update, read })];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n pageSize = 20,\r\n cursorIndex,\r\n count = true,\r\n filter = {\r\n where: \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion')\",\r\n },\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const {\r\n cid,\r\n aid,\r\n cpid,\r\n } = descriptor;\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(cpid);\r\n\r\n const search = {\r\n top: pageSize,\r\n skip: cursorIndex,\r\n count,\r\n filter,\r\n };\r\n\r\n const parsedSearch = {\r\n ...parseSearch(search, entity),\r\n };\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${entity.path}/CampaignCriterions/Model.CampaignCriterion/${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nfunction odataPayloadFactory(params) {\r\n const { variables } = params;\r\n const { data } = variables;\r\n\r\n return data;\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign:campaign_criterion',\r\n verb: requestVerbs.GET,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n payloadFactoryFn: odataPayloadFactory,\r\n keySelector: campaignCriterion => campaignCriterion.Id,\r\n parentKeySelector: variables => variables.locator.descriptor.cpid,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: campaignCriterion => campaignCriterion.Id,\r\n processorFn: response => response.value,\r\n});\r\n","import _ from 'underscore';\r\nimport { useMemo, useCallback } from 'react';\r\n\r\nimport {\r\n createSpec,\r\n specTypes,\r\n usePagination,\r\n useDataRefId,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract as fetchCollRequestContract,\r\n fetchResponseContract as fetchCollResponseContract,\r\n} from '../spec/coll-fetch';\r\nimport { environmentLookupFn } from '../../../environment/index';\r\n\r\nconst fetchCollSpec =\r\n createSpec(\r\n fetchCollRequestContract, fetchCollResponseContract,\r\n specTypes.PAGINATION, null, environmentLookupFn\r\n );\r\nconst refetchCollSpec =\r\n createSpec(\r\n fetchCollRequestContract, fetchCollResponseContract,\r\n specTypes.REFETCH, null, environmentLookupFn\r\n );\r\n\r\nexport function useCampaignCriterions(dataLocator, config = {}) {\r\n const dataRefId = useDataRefId();\r\n const paginationConfig = useMemo(() => ({\r\n fetchVariables: {\r\n ...dataLocator,\r\n },\r\n }), [dataLocator]);\r\n const page = usePagination(dataRefId, fetchCollSpec, paginationConfig);\r\n\r\n const { refetch = {} } = config;\r\n const refetchFn = useRefetch(dataRefId, refetchCollSpec, refetch);\r\n\r\n const refresh = useCallback((param) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n });\r\n }, [dataLocator, refetchFn]);\r\n\r\n const [data, { isLoading, ...method }] = page;\r\n\r\n return [data, _.extend({}, method, {\r\n isLoading,\r\n refresh,\r\n })];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n select = ['Id', 'Name', 'Status'],\r\n pageSize = 1,\r\n includeSmartCampaign = true,\r\n orderby,\r\n count = true,\r\n startDate,\r\n endDate,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const {\r\n cid,\r\n aid,\r\n cpid,\r\n } = descriptor;\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(cpid)\r\n .AdGroups;\r\n\r\n const search = {\r\n top: pageSize,\r\n select,\r\n orderby,\r\n count,\r\n };\r\n\r\n const parsedSearch = {\r\n ...parseSearch(search, entity),\r\n includesmartcampaign: includeSmartCampaign,\r\n startdate: startDate,\r\n enddate: endDate,\r\n };\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${entity.path}${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign:ad_group',\r\n verb: requestVerbs.GET,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n keySelector: adGroup => adGroup.Id,\r\n parentKeySelector: variables => variables.locator.descriptor.cpid,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: adGroup => adGroup.Id,\r\n processorFn: response => response.value,\r\n});\r\n","import { useCallback } from 'react';\r\n\r\nimport {\r\n createSpec,\r\n specTypes,\r\n useFetch,\r\n useDataRefId,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract as fetchCollRequestContract,\r\n fetchResponseContract as fetchCollResponseContract,\r\n} from '../spec/coll-fetch';\r\nimport { environmentLookupFn } from '../../../environment/index';\r\n\r\nconst fetchCollSpec =\r\n createSpec(\r\n fetchCollRequestContract, fetchCollResponseContract,\r\n specTypes.FETCH, null, environmentLookupFn\r\n );\r\nconst refetchCollSpec =\r\n createSpec(\r\n fetchCollRequestContract, fetchCollResponseContract,\r\n specTypes.REFETCH, null, environmentLookupFn\r\n );\r\n\r\nexport function useAdGroups(dataLocator, config = {}) {\r\n const dataRefId = useDataRefId();\r\n const fetch = useFetch(dataRefId, fetchCollSpec, dataLocator, config.fetch);\r\n\r\n const { refetch = {} } = config;\r\n const refetchFn = useRefetch(dataRefId, refetchCollSpec, refetch);\r\n\r\n const read = useCallback((param = {}, requestConfig) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n }, requestConfig);\r\n }, [dataLocator, refetchFn]);\r\n\r\n const [data, error] = fetch;\r\n\r\n return [{ data, error }, { read }];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n RequestContract,\r\n ResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\nimport stringify from 'json-stable-stringify';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n startDate,\r\n endDate,\r\n granularity,\r\n } = variables;\r\n const { descriptor } = locator;\r\n const { cid, aid, campaignId } = descriptor;\r\n\r\n if (!startDate || !endDate) {\r\n throw new Error('Performance time series function call need startDate and endDate of \"yyyy-mm-dd\" format');\r\n }\r\n\r\n if (!granularity) {\r\n throw new Error('Performance time series function call need granularity');\r\n }\r\n\r\n const functionEdmResource = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns['Default.PerformanceTimeSeries'];\r\n const functionCallParameters = {\r\n granularity: `Enum.Granularity'${granularity}'`,\r\n startDate,\r\n endDate,\r\n comparisonStartDate: null,\r\n comparisonEndDate: null,\r\n metrics: \"'All'\",\r\n movingAverage: false,\r\n };\r\n\r\n const { path } = functionEdmResource.$call(functionCallParameters);\r\n const smartFilter = \"(CampaignType eq Enum.CampaignType'Smart')\";\r\n const search = {\r\n top: 20,\r\n filter: {\r\n where: campaignId ? `${smartFilter} and Id eq ${campaignId}` : smartFilter,\r\n },\r\n count: true,\r\n returnphonecalls: true,\r\n };\r\n\r\n const parsedSearch = parseSearch(search);\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${path}${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nexport class PerformanceTimeSeriesRequestContract extends RequestContract {\r\n constructor(options) {\r\n super(Object.assign({}, {\r\n schema,\r\n dataPath: 'customer:account:performance_time_series',\r\n verb: requestVerbs.GET,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n keySelector: chartData => chartData.ClientId,\r\n }, options));\r\n }\r\n}\r\n\r\nexport class PerformanceTimeSeriesResponseContract extends ResponseContract {\r\n constructor(options) {\r\n super(Object.assign({}, {\r\n responseType: responseTypes.ENTITY,\r\n keySelector: chartData => chartData.ClientId,\r\n processorFn: (response, request) => ({\r\n ...response,\r\n ClientId: stringify(request.variables),\r\n }),\r\n }, options));\r\n }\r\n}\r\n","import {\r\n PerformanceTimeSeriesRequestContract,\r\n PerformanceTimeSeriesResponseContract,\r\n} from './contract';\r\n\r\nexport const fetchRequestContract = new PerformanceTimeSeriesRequestContract();\r\n\r\nexport const fetchResponseContract = new PerformanceTimeSeriesResponseContract({\r\n requestContract: fetchRequestContract,\r\n});\r\n","import { FetchPolicy } from '@bingads-webui-react/overreact';\r\nimport {\r\n PerformanceTimeSeriesResponseContract,\r\n PerformanceTimeSeriesRequestContract,\r\n} from './contract';\r\n\r\nexport const refetchRequestContract = new PerformanceTimeSeriesRequestContract({\r\n fetchPolicy: FetchPolicy.NetworkOnly,\r\n});\r\n\r\nexport const refetchResponseContract = new PerformanceTimeSeriesResponseContract({\r\n requestContract: refetchRequestContract,\r\n});\r\n","import { useCallback, useMemo } from 'react';\r\nimport {\r\n createSpec, specTypes,\r\n useFetch,\r\n useRefetch,\r\n useDataRefId,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract,\r\n fetchResponseContract,\r\n} from '../spec/fetch';\r\n\r\nimport {\r\n refetchRequestContract,\r\n refetchResponseContract,\r\n} from '../spec/refetch';\r\n\r\nconst fetchSpec =\r\n createSpec(fetchRequestContract, fetchResponseContract, specTypes.FETCH, null);\r\nconst refetchSpec =\r\n createSpec(refetchRequestContract, refetchResponseContract, specTypes.REFETCH, null);\r\n\r\nexport function usePerformanceTimeSeries(dataLocator, config = {}) {\r\n const dataRefId = useDataRefId();\r\n const [data, error] = useFetch(dataRefId, fetchSpec, dataLocator);\r\n\r\n const { refetch = {} } = config;\r\n const refetchConfig = useMemo(() => ({\r\n ...refetch,\r\n }), [refetch]);\r\n const refetchFn = useRefetch(dataRefId, refetchSpec, refetchConfig);\r\n\r\n const read = useCallback((param) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n });\r\n }, [dataLocator, refetchFn]);\r\n\r\n return [{ data, error }, { read }];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nconst DEFAULT_FIELDS = [\r\n 'HasCampaigns',\r\n 'HasNotPausedCampaigns',\r\n 'HasAdGroups',\r\n 'HasNotPausedAdGroups',\r\n 'HasAds',\r\n 'HasNotPausedAds',\r\n 'HasKeywords',\r\n 'HasNotPausedKeywords',\r\n 'HasActiveNonDefaultCampaigns',\r\n];\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n select = DEFAULT_FIELDS,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const { cid, aid } = descriptor;\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid);\r\n const search = {\r\n select,\r\n };\r\n\r\n const parsedSearch = parseSearch(search, entity);\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${entity.path}/Default.AlertInformation()${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nfunction processor(response, request) {\r\n const {\r\n variables: {\r\n locator: {\r\n descriptor: {\r\n aid,\r\n },\r\n },\r\n },\r\n } = request;\r\n\r\n return {\r\n ...response,\r\n Id: aid,\r\n };\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:alert_information',\r\n verb: requestVerbs.GET,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n keySelector: alertInformation => alertInformation.Id,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.ENTITY,\r\n keySelector: alertInformation => alertInformation.Id,\r\n processorFn: processor,\r\n});\r\n","import { useCallback } from 'react';\r\n\r\nimport {\r\n createSpec,\r\n specTypes,\r\n useDataRefId,\r\n useFetch,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract,\r\n fetchResponseContract,\r\n} from '../spec/account-fetch';\r\nimport { environmentLookupFn } from '../../../environment/index';\r\n\r\nconst fetchSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.FETCH, null, environmentLookupFn\r\n );\r\nconst refetchSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.REFETCH, null, environmentLookupFn\r\n );\r\n\r\nexport function useAccountAlertInformation(dataLocator) {\r\n const dataRefId = useDataRefId();\r\n const [data, error] = useFetch(dataRefId, fetchSpec, dataLocator);\r\n\r\n const refetchFn = useRefetch(dataRefId, refetchSpec, {});\r\n\r\n const read = useCallback((param) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n });\r\n }, [dataLocator, refetchFn]);\r\n\r\n return [{ data, error }, { read }];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nconst DEFAULT_FIELDS = [\r\n 'RejectedAdsCount',\r\n 'RejectedSmartListingsCount',\r\n];\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n top = 100,\r\n select = DEFAULT_FIELDS,\r\n count = true,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const { cid, aid, cpid } = descriptor;\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(cpid);\r\n const search = {\r\n select,\r\n top,\r\n count,\r\n };\r\n\r\n const parsedSearch = parseSearch(search, entity);\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${entity.path}/Default.AlertInformation()${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nfunction processor(response, request) {\r\n const {\r\n variables: {\r\n locator: {\r\n descriptor: {\r\n cpid,\r\n },\r\n },\r\n },\r\n } = request;\r\n\r\n return {\r\n ...response,\r\n Id: cpid,\r\n };\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign:alert_information',\r\n verb: requestVerbs.GET,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n keySelector: alertInformation => alertInformation.Id,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.ENTITY,\r\n keySelector: alertInformation => alertInformation.Id,\r\n processorFn: processor,\r\n});\r\n","import { useCallback } from 'react';\r\n\r\nimport {\r\n createSpec,\r\n specTypes,\r\n FetchPolicy,\r\n useDataRefId,\r\n useFetch,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract,\r\n fetchResponseContract,\r\n} from '../spec/campaign-fetch';\r\nimport { environmentLookupFn } from '../../../environment/index';\r\n\r\nconst fetchSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.FETCH, null, environmentLookupFn\r\n );\r\nconst refetchSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.REFETCH, null, environmentLookupFn\r\n );\r\n\r\nexport function useCampaignAlertInformation(dataLocator, config = {}) {\r\n const dataRefId = useDataRefId();\r\n const [data, error] = useFetch(dataRefId, fetchSpec, dataLocator);\r\n\r\n const refetchFn = useRefetch(dataRefId, refetchSpec, config);\r\n\r\n const read = useCallback((param) => {\r\n refetchFn({\r\n variables: {\r\n ...dataLocator,\r\n ...param.variables,\r\n options: {\r\n fetchPolicy: FetchPolicy.NetworkOnly,\r\n },\r\n },\r\n });\r\n }, [dataLocator, refetchFn]);\r\n\r\n return [{ data, error }, { read }];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n pageSize,\r\n cursorIndex,\r\n orderby = {\r\n Status: 1,\r\n },\r\n select,\r\n count = true,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const { cid, aid, cpid } = descriptor;\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(cpid)\r\n .Ads;\r\n\r\n const search = {\r\n top: pageSize,\r\n skip: cursorIndex,\r\n orderby,\r\n select,\r\n count,\r\n };\r\n\r\n // this odata api require date info, it does not impact response, provide one here\r\n const yesterday = new Date(Date.now() - 864e5);\r\n // odata use the yyyy-mm-dd format;\r\n const dateString = yesterday.toISOString().split('T')[0];\r\n const parsedSearch = {\r\n ...parseSearch(search, entity),\r\n startdate: dateString,\r\n enddate: dateString,\r\n includesmartcampaign: true,\r\n };\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${entity.path}${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign:ad',\r\n verb: requestVerbs.GET,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n keySelector: ad => ad.Id,\r\n parentKeySelector: variables => variables.locator.descriptor.cpid,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: ad => ad.Id,\r\n processorFn: response => response.value,\r\n});\r\n","import {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n FetchPolicy,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { getBulkUrl, getBulkPayload, getProcessedBulkResult, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n return getBulkUrl(params);\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nfunction odataPayloadFactory(params) {\r\n const { data } = params;\r\n return getBulkPayload(edm.schema.schemas['Model/ExpandedTextAd'], data);\r\n}\r\n\r\nfunction processor(response, request) {\r\n return getProcessedBulkResult(response, request);\r\n}\r\n\r\nexport const requestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign:ad',\r\n verb: requestVerbs.POST,\r\n fetchPolicy: FetchPolicy.NetworkOnly,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n payloadFactoryFn: odataPayloadFactory,\r\n keySelector: ad => ad.Id,\r\n});\r\n\r\nexport const responseContract = createResponseContract({\r\n requestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: ad => ad.Id,\r\n processorFn: processor,\r\n});\r\n","import _ from 'underscore';\r\nimport { useMemo, useCallback, useState } from 'react';\r\n\r\nimport {\r\n createSpec, specTypes, FetchPolicy,\r\n useMutation,\r\n usePagination,\r\n useDataRefId,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract,\r\n fetchResponseContract,\r\n} from '../spec/coll-fetch';\r\nimport {\r\n requestContract,\r\n responseContract,\r\n} from '../spec/mutation';\r\nimport { environmentLookupFn } from '../../../environment/index';\r\n\r\nconst fetchCollSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.PAGINATION, null, environmentLookupFn\r\n );\r\nconst refetchCollSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.REFETCH, null, environmentLookupFn\r\n );\r\nconst addCollSpec =\r\n createSpec(requestContract, responseContract, specTypes.ADD, null, environmentLookupFn);\r\nconst deleteCollSpec =\r\n createSpec(requestContract, responseContract, specTypes.DELETE, null, environmentLookupFn);\r\nconst mutationCollSpec =\r\n createSpec(requestContract, responseContract, specTypes.MUTATION, null, environmentLookupFn);\r\n\r\nexport function useAds(dataLocator, config) {\r\n const dataRefId = useDataRefId();\r\n const [isRefreshing, setIsRefreshing] = useState(false);\r\n const defaultConfig = useMemo(() => ({\r\n mutation: config && config.mutation ? config.mutation : {},\r\n pagination: config && config.pagination ? config.pagination : {},\r\n refetch: config && config.refetch ? config.refetch : {\r\n onComplete: () => { setIsRefreshing(false); },\r\n onError: () => { setIsRefreshing(false); },\r\n },\r\n }), [config]);\r\n\r\n const { mutation, pagination, refetch } = defaultConfig;\r\n\r\n const paginationConfig = useMemo(() => ({\r\n fetchVariables: {\r\n ...dataLocator,\r\n },\r\n strictMode: true,\r\n ...pagination,\r\n }), [dataLocator, pagination]);\r\n const page = usePagination(dataRefId, fetchCollSpec, paginationConfig);\r\n\r\n const createFn = useMutation(dataRefId, addCollSpec, mutation.add);\r\n\r\n const create = useCallback((data) => {\r\n createFn({ ...dataLocator }, data);\r\n }, [dataLocator, createFn]);\r\n\r\n const removeFn = useMutation(dataRefId, deleteCollSpec, mutation.delete);\r\n const remove = useCallback((data) => {\r\n removeFn({ ...dataLocator }, data);\r\n }, [dataLocator, removeFn]);\r\n\r\n const updateFn = useMutation(dataRefId, mutationCollSpec, mutation.update);\r\n const update = useCallback((data) => {\r\n updateFn({ ...dataLocator }, data);\r\n }, [dataLocator, updateFn]);\r\n\r\n const refetchFn = useRefetch(dataRefId, refetchCollSpec, refetch);\r\n\r\n const refresh = useCallback(() => {\r\n setIsRefreshing(true);\r\n\r\n refetchFn({\r\n variables: {\r\n ...dataLocator,\r\n cursorIndex: 0,\r\n // fetch-policy-middleware will check this fetchPolicy\r\n options: {\r\n fetchPolicy: FetchPolicy.NetworkOnly,\r\n },\r\n },\r\n });\r\n }, [dataLocator, refetchFn]);\r\n\r\n const [data, { isLoading, ...method }] = page;\r\n\r\n return [data, _.extend({}, method, {\r\n isLoading: isLoading || isRefreshing,\r\n create,\r\n remove,\r\n update,\r\n refresh,\r\n })];\r\n}\r\n","import _ from 'underscore';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n } = variables;\r\n const { descriptor } = locator;\r\n const { cid, aid, businessId } = descriptor;\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Businesses.$withKey(businessId || '');\r\n\r\n return entity.path;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nfunction processor(response) {\r\n return _.omit(response, '@odata.context');\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:business',\r\n verb: requestVerbs.GET,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n keySelector: business => business.Id,\r\n parentKeySelector: variables => variables.locator.descriptor.aid,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.ENTITY,\r\n keySelector: business => business.Id,\r\n processorFn: processor,\r\n});\r\n","import {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n FetchPolicy,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n } = variables;\r\n const { descriptor } = locator;\r\n const { cid, aid, businessId } = descriptor;\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Businesses.$withKey(businessId || '');\r\n\r\n return entity.path;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nfunction odataPayloadFactory(params) {\r\n const { data, variables } = params;\r\n const { Name, Website } = data;\r\n const {\r\n locator,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const { businessId } = descriptor;\r\n\r\n return {\r\n Id: businessId,\r\n Name,\r\n Website,\r\n };\r\n}\r\n\r\nfunction processor(response, request) {\r\n const { data } = request;\r\n const { Name, Website } = data;\r\n\r\n return {\r\n Id: response.value,\r\n Name,\r\n Website,\r\n };\r\n}\r\n\r\nexport const mutationRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:business',\r\n verb: requestVerbs.PATCH,\r\n fetchPolicy: FetchPolicy.NetworkOrStore,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n payloadFactoryFn: odataPayloadFactory,\r\n keySelector: business => business.Id,\r\n});\r\n\r\nexport const mutationResponseContract = createResponseContract({\r\n requestContract: mutationRequestContract,\r\n responseType: responseTypes.ENTITY,\r\n keySelector: business => business.Id,\r\n processorFn: processor,\r\n});\r\n","import { useCallback } from 'react';\r\n\r\nimport {\r\n createSpec,\r\n specTypes,\r\n useDataRefId,\r\n useFetch,\r\n useRefetch,\r\n useMutation,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { fetchRequestContract, fetchResponseContract } from '../spec/fetch';\r\nimport { mutationRequestContract, mutationResponseContract } from '../spec/mutation';\r\nimport { environmentLookupFn } from '../../../environment/index';\r\n\r\nconst fetchSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.FETCH, null, environmentLookupFn\r\n );\r\nconst refetchSpec =\r\n createSpec(\r\n fetchRequestContract, fetchResponseContract,\r\n specTypes.REFETCH, null, environmentLookupFn\r\n );\r\nconst mutationSpec =\r\n createSpec(\r\n mutationRequestContract, mutationResponseContract,\r\n specTypes.MUTATION, null, environmentLookupFn\r\n );\r\n\r\nexport function useBusiness(dataLocator, config = {}) {\r\n const dataRefId = useDataRefId();\r\n const fetch = useFetch(dataRefId, fetchSpec, dataLocator, config.fetch);\r\n\r\n const { refetch = {} } = config;\r\n const refetchFn = useRefetch(dataRefId, refetchSpec, refetch);\r\n\r\n const read = useCallback((param = {}, requestConfig) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n }, requestConfig);\r\n }, [dataLocator, refetchFn]);\r\n\r\n const { mutation = {} } = config;\r\n const updateFn = useMutation(dataRefId, mutationSpec, mutation.update);\r\n\r\n const update = useCallback((data) => {\r\n updateFn({ ...dataLocator }, data);\r\n }, [dataLocator, updateFn]);\r\n\r\n const [data, error] = fetch;\r\n\r\n return [{ data, error }, { read, update }];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n pageSize = 20,\r\n count = true,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const {\r\n cid,\r\n aid,\r\n cpid,\r\n adgid,\r\n } = descriptor;\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(cpid)\r\n .AdGroups.$withKey(adgid)\r\n .SmartListings;\r\n\r\n const search = {\r\n top: pageSize,\r\n count,\r\n };\r\n\r\n const parsedSearch = {\r\n ...parseSearch(search, entity),\r\n };\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${entity.path}${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign:ad_group:smart_listing',\r\n verb: requestVerbs.GET,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n keySelector: smartListing => smartListing.Id,\r\n parentKeySelector: variables => variables.locator.descriptor.adgid,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: smartListing => smartListing.Id,\r\n processorFn: response => response.value,\r\n});\r\n","import { useCallback } from 'react';\r\n\r\nimport {\r\n createSpec,\r\n specTypes,\r\n useFetch,\r\n useDataRefId,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract as fetchCollRequestContract,\r\n fetchResponseContract as fetchCollResponseContract,\r\n} from '../spec/coll-fetch';\r\nimport { environmentLookupFn } from '../../../environment/index';\r\n\r\nconst fetchCollSpec =\r\n createSpec(\r\n fetchCollRequestContract, fetchCollResponseContract,\r\n specTypes.FETCH, null, environmentLookupFn\r\n );\r\nconst refetchCollSpec =\r\n createSpec(\r\n fetchCollRequestContract, fetchCollResponseContract,\r\n specTypes.REFETCH, null, environmentLookupFn\r\n );\r\n\r\nexport function useSmartListings(dataLocator, config = {}) {\r\n const dataRefId = useDataRefId();\r\n const fetch = useFetch(dataRefId, fetchCollSpec, dataLocator, config.fetch);\r\n\r\n const { refetch = {} } = config;\r\n const refetchFn = useRefetch(dataRefId, refetchCollSpec, refetch);\r\n\r\n const read = useCallback((param = {}, requestConfig) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n }, requestConfig);\r\n }, [dataLocator, refetchFn]);\r\n\r\n const [data, error] = fetch;\r\n\r\n return [{ data, error }, { read }];\r\n}\r\n","import {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\nimport stringify from 'json-stable-stringify';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\n// FIXME: Extract consts and utils in @bingads-webui-campaign-react/smart-app-capi into two packages\r\n// The mapping is copied from @bingads-webui-campaign-react/smart-app-capi\r\n// We cannot simply import it due to some dependecies incompatible with react-native\r\nconst currencyMapping = {\r\n ars: 'ArgentinePeso',\r\n aud: 'AustralianDollar',\r\n brl: 'BrazilianReal',\r\n cad: 'CanadianDollar',\r\n chf: 'SwissFranc',\r\n clp: 'ChileanPeso',\r\n cny: 'YuanRenminbi',\r\n cop: 'ColombianPeso',\r\n dkk: 'DanishKrone',\r\n dzd: 'AlgerianDinar',\r\n egp: 'EgyptianPound',\r\n eur: 'Euro',\r\n gbp: 'UKPound',\r\n hkd: 'HongKongDollar',\r\n idr: 'IndonesianRupiah',\r\n inr: 'IndianRupee',\r\n jpy: 'JapaneseYen',\r\n lbp: 'LebanesePound',\r\n mad: 'MoroccanDirham',\r\n mex: 'MexicanPeso',\r\n myr: 'MalaysianRingit',\r\n nok: 'NorwegianKrone',\r\n nzd: 'NewZealandDollar',\r\n pen: 'PeruvianNuevoSol',\r\n php: 'PhilippinePeso',\r\n qar: 'QatariRiyal',\r\n sar: 'SaudiRiyal',\r\n sek: 'SwedishKrona',\r\n sgd: 'SingaporeDollar',\r\n thb: 'ThaiBaht',\r\n twd: 'NewTaiwanDollar',\r\n usd: 'UsDollar',\r\n vef: 'VenezuelanBolivar',\r\n vnd: 'VietnamDong',\r\n zar: 'SouthAfricanRand',\r\n};\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n } = variables;\r\n const { descriptor } = locator;\r\n const { cid, aid, campaignId } = descriptor;\r\n\r\n if (!campaignId) {\r\n throw new Error('Kpi estimation function call need campaign Id');\r\n }\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(campaignId);\r\n\r\n return `${entity.path}/KpiEstimations`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nfunction odataPayloadFactory(params) {\r\n const { variables } = params;\r\n const {\r\n currencyId,\r\n } = variables;\r\n\r\n return {\r\n Currency: currencyMapping[currencyId],\r\n };\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign:kpi_estimations',\r\n verb: requestVerbs.POST,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n payloadFactoryFn: odataPayloadFactory,\r\n keySelector: chartData => chartData.ClientId,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.ENTITY,\r\n keySelector: chartData => chartData.ClientId,\r\n processorFn: (response, request) => ({\r\n ...response,\r\n ClientId: stringify(request.variables),\r\n }),\r\n});\r\n","import { useCallback } from 'react';\r\n\r\nimport {\r\n createSpec,\r\n specTypes,\r\n useDataRefId,\r\n useFetch,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract,\r\n fetchResponseContract,\r\n} from '../spec/fetch';\r\n\r\nconst fetchSpec =\r\n createSpec(fetchRequestContract, fetchResponseContract, specTypes.FETCH);\r\nconst refetchSpec =\r\n createSpec(fetchRequestContract, fetchResponseContract, specTypes.REFETCH);\r\n\r\nexport function useKpiEstimations(dataLocator) {\r\n const dataRefId = useDataRefId();\r\n const [data, error] = useFetch(dataRefId, fetchSpec, dataLocator);\r\n\r\n const refetchFn = useRefetch(dataRefId, refetchSpec, {});\r\n\r\n const read = useCallback((param) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n });\r\n }, [dataLocator, refetchFn]);\r\n\r\n return [{ data, error }, { read }];\r\n}\r\n","import {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const {\r\n cid,\r\n aid,\r\n } = descriptor;\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid);\r\n\r\n return `${entity.path}/Ads/Default.EditorialReasons`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nfunction odataPayloadFactory(params) {\r\n const { variables } = params;\r\n const { data } = variables;\r\n\r\n return data;\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:editorial_reasons',\r\n verb: requestVerbs.POST,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n payloadFactoryFn: odataPayloadFactory,\r\n keySelector: editorialReasons => editorialReasons.EntityId,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: editorialReasons => editorialReasons.EntityId,\r\n processorFn: response => response.value,\r\n});\r\n","import { useCallback } from 'react';\r\n\r\nimport {\r\n createSpec,\r\n specTypes,\r\n useDataRefId,\r\n useFetch,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract,\r\n fetchResponseContract,\r\n} from '../spec/coll-fetch';\r\n\r\nconst fetchSpec =\r\n createSpec(fetchRequestContract, fetchResponseContract, specTypes.FETCH);\r\nconst refetchSpec =\r\n createSpec(fetchRequestContract, fetchResponseContract, specTypes.REFETCH);\r\n\r\nexport function useEditorialReasons(dataLocator, config = {}) {\r\n const dataRefId = useDataRefId();\r\n const [data, error] = useFetch(dataRefId, fetchSpec, dataLocator);\r\n\r\n const { refetch = {} } = config;\r\n const refetchFn = useRefetch(dataRefId, refetchSpec, refetch);\r\n\r\n const read = useCallback((param) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n });\r\n }, [dataLocator, refetchFn]);\r\n\r\n return [{ data, error }, { read }];\r\n}\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport {\r\n createRequestContract,\r\n createResponseContract,\r\n\r\n requestVerbs,\r\n responseTypes,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport { edm } from '../../../environment/edm';\r\nimport { schema } from '../../../environment/schema';\r\nimport { parseSearch, getDefaultHeaderObj } from '../../../request-contract-helper';\r\n\r\n// this odata api require date info, it does not impact response, provide one here\r\nconst yesterday = new Date(Date.now() - 864e5);\r\n// odata use the yyyy-mm-dd format;\r\nconst dateString = yesterday.toISOString().split('T')[0];\r\n\r\nfunction odataUrlFactory(params) {\r\n const { variables } = params;\r\n\r\n const {\r\n locator,\r\n select = ['AdExtension'],\r\n pageSize = 100,\r\n count = true,\r\n } = variables;\r\n\r\n const { descriptor } = locator;\r\n const {\r\n cid,\r\n aid,\r\n cpid,\r\n } = descriptor;\r\n\r\n const entity = edm\r\n .Customers.$withKey(cid)\r\n .Accounts.$withKey(aid)\r\n .Campaigns.$withKey(cpid)\r\n .AdExtensionAssociations;\r\n\r\n const search = {\r\n top: pageSize,\r\n select,\r\n count,\r\n filter: {\r\n where: \"AdExtension/Status eq Enum.AdExtensionStatus'Active'\",\r\n },\r\n };\r\n\r\n const parsedSearch = {\r\n ...parseSearch(search, entity),\r\n startdate: dateString,\r\n enddate: dateString,\r\n adextensiontype: 'CallAdExtension',\r\n };\r\n const searchCompact = _.omit(parsedSearch, x => _.isNull(x) || _.isUndefined(x));\r\n const searchString = _.isEmpty(searchCompact) ? '' : `?${queryString.stringify(searchCompact)}`;\r\n\r\n return `${entity.path}${searchString}`;\r\n}\r\n\r\nfunction odataHeaderFactory() {\r\n return getDefaultHeaderObj();\r\n}\r\n\r\nexport const fetchRequestContract = createRequestContract({\r\n schema,\r\n dataPath: 'customer:account:campaign:ad_extension_association',\r\n verb: requestVerbs.GET,\r\n uriFactoryFn: odataUrlFactory,\r\n headerFactoryFn: odataHeaderFactory,\r\n keySelector: adExtensionAssociation => adExtensionAssociation.AdExtension.Id,\r\n parentKeySelector: variables => variables.locator.descriptor.cpid,\r\n});\r\n\r\nexport const fetchResponseContract = createResponseContract({\r\n requestContract: fetchRequestContract,\r\n responseType: responseTypes.COLL,\r\n keySelector: adExtensionAssociation => adExtensionAssociation.AdExtension.Id,\r\n processorFn: response => response.value,\r\n});\r\n","import { useCallback } from 'react';\r\n\r\nimport {\r\n createSpec,\r\n specTypes,\r\n useFetch,\r\n useDataRefId,\r\n useRefetch,\r\n} from '@bingads-webui-react/overreact';\r\n\r\nimport {\r\n fetchRequestContract as fetchCollRequestContract,\r\n fetchResponseContract as fetchCollResponseContract,\r\n} from '../spec/coll-fetch';\r\nimport { environmentLookupFn } from '../../../environment/index';\r\n\r\nconst fetchCollSpec =\r\n createSpec(\r\n fetchCollRequestContract, fetchCollResponseContract,\r\n specTypes.FETCH, null, environmentLookupFn\r\n );\r\nconst refetchCollSpec =\r\n createSpec(\r\n fetchCollRequestContract, fetchCollResponseContract,\r\n specTypes.REFETCH, null, environmentLookupFn\r\n );\r\n\r\nexport function useAdExtensionAssociations(dataLocator, config = {}) {\r\n const dataRefId = useDataRefId();\r\n const fetch = useFetch(dataRefId, fetchCollSpec, dataLocator, config.fetch);\r\n\r\n const { refetch = {} } = config;\r\n const refetchFn = useRefetch(dataRefId, refetchCollSpec, refetch);\r\n\r\n const read = useCallback((param, requestConfig) => {\r\n refetchFn({\r\n variables: { ...dataLocator, ...param.variables },\r\n }, requestConfig);\r\n }, [dataLocator, refetchFn]);\r\n\r\n const [data, error] = fetch;\r\n\r\n return [{ data, error }, { read }];\r\n}\r\n","/* eslint-disable max-classes-per-file */\r\n\r\nconst _ = require('underscore');\r\nconst { Registry } = require('./registry');\r\nconst {\r\n defineConstProperty,\r\n defineProducedProperty,\r\n defineProducedPropertyOnClass,\r\n} = require('./reflection');\r\n\r\nconst ONEOF_TYPE_PREFIX = '@ONEOF';\r\nconst COLLECTION_TYPE_POSTFIX = '@COLL';\r\n\r\nfunction isOneOfType(typeName) {\r\n return typeName.indexOf(ONEOF_TYPE_PREFIX) === 0;\r\n}\r\n\r\nfunction hasPostfix(str, postfix) {\r\n return str.slice(-postfix.length) === postfix;\r\n}\r\n\r\nfunction removePostfix(str, postfix) {\r\n return str.slice(0, -postfix.length);\r\n}\r\n\r\n/**\r\n * @param {EDM} edm - The EDM object to apply this plugin to\r\n * @return {void}\r\n */\r\nmodule.exports = edm => {\r\n if (edm.types) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line no-undef\r\n const oneOfTypes = new Map();\r\n\r\n /**\r\n * @name edm\r\n * @type {EDM}\r\n * @property {Registry} types - A registry of all types\r\n * @property {Class} types.Type - The base type of all meta Types\r\n * @property {Class} types.PrimitiveType - The meta type of primitive types\r\n * @property {Class} types.ObjectType - The meta type of the key/value types\r\n * @property {Class} types.ComplexType - The meta type of the complex types\r\n * @property {Class} types.EntityType - The meta type of the entity types\r\n * @property {Class} types.CollectionType - The meta type of the collection types\r\n * @property {Class} types.CallableType - The meta type of the callable types\r\n */\r\n defineConstProperty(edm, 'types', (() => {\r\n const types = new Registry();\r\n\r\n function resolveType(name, namespace) {\r\n if (hasPostfix(name, COLLECTION_TYPE_POSTFIX)) {\r\n return resolveType(removePostfix(name, COLLECTION_TYPE_POSTFIX), namespace).collectionType;\r\n }\r\n\r\n if (isOneOfType(name)) {\r\n if (!oneOfTypes.has(name)) {\r\n const prefixLength = ONEOF_TYPE_PREFIX.length + 1;\r\n const typeNames = name.substr(prefixLength, name.length - prefixLength - 1).split(',');\r\n // eslint-disable-next-line no-use-before-define\r\n oneOfTypes.set(name, new OneOfType({ typeNames }));\r\n }\r\n\r\n return oneOfTypes.get(name);\r\n }\r\n\r\n return types.resolve(name, namespace);\r\n }\r\n\r\n /**\r\n * @class Property\r\n * @property {String} name - The name of the property\r\n * @property {String} typeName - The name of the property's type\r\n * @property {Type} type - The type of the property\r\n */\r\n class Property {\r\n /**\r\n * Create a property\r\n * @param {Object} options - The constructor options\r\n * @param {String} options.name - The name of the property\r\n * @param {String} options.typeName - The name of the propertie's type\r\n * @param {String} options.namespace - The namespace of the propertie's type\r\n * @return {void}\r\n */\r\n constructor({\r\n name,\r\n typeName,\r\n namespace,\r\n }) {\r\n defineConstProperty(this, 'name', name);\r\n defineConstProperty(this, 'typeName', typeName);\r\n defineProducedProperty(this, 'type', () => resolveType(typeName, namespace));\r\n }\r\n }\r\n\r\n /**\r\n * @class Parameter\r\n * @property {String} name - The name of the parameter\r\n * @property {String} typeName - The name of the paramter's type\r\n * @property {type} type - The type of the parameter\r\n */\r\n class Parameter {\r\n /**\r\n * Create a parameter\r\n * @param {Object} options - The constructor options\r\n * @param {String} options.name - The name of the parameter\r\n * @param {String} options.typeName - The name of the parameter's type\r\n * @param {String} options.namespace - The namespace of the parameter's type\r\n * @return {void}\r\n */\r\n constructor({\r\n name,\r\n typeName,\r\n namespace,\r\n }) {\r\n defineConstProperty(this, 'name', name);\r\n defineConstProperty(this, 'typeName', typeName);\r\n defineProducedProperty(this, 'type', () => resolveType(typeName, namespace));\r\n }\r\n }\r\n\r\n /**\r\n * @class Type\r\n * @property {String} name - The qualified name of the type\r\n * @property {String} namespace - The namespace of the type\r\n * @property {String} shortName - The short name of the type\r\n */\r\n class Type {\r\n /**\r\n * Create and register a type\r\n * A side effect of Type creation is registering itself to the type registry\r\n * @param {Object} options - The constructor options\r\n * @param {String} options.name - The name of the type\r\n * @return {void}\r\n */\r\n constructor({\r\n name,\r\n }) {\r\n defineConstProperty(this, 'name', name);\r\n defineConstProperty(this, 'namespace', Registry.getNamespace(name));\r\n defineConstProperty(this, 'shortName', Registry.getShortName(name));\r\n types.register(this);\r\n }\r\n }\r\n\r\n /**\r\n * @class PrimitiveType\r\n * @extends Type\r\n * @property {Class} jsType - The corresponding JavaScript type\r\n */\r\n class PrimitiveType extends Type {\r\n /**\r\n * Create a PrimitiveType\r\n * @param {Object} options - The constructor options\r\n * @param {String} options.name - The name of the type\r\n * @param {Class} options.jsType - The JavaScript type of the primitive type\r\n * @return {void}\r\n */\r\n constructor({\r\n name,\r\n jsType,\r\n }) {\r\n super({ name });\r\n defineConstProperty(this, 'jsType', jsType);\r\n }\r\n }\r\n\r\n /**\r\n * @class OneOfType\r\n * @extends Type\r\n * @property {Class} types - Data could be one of these types\r\n * @see {@link http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.7.3}\r\n */\r\n class OneOfType extends Type {\r\n /**\r\n * Create a PrimitiveType\r\n * @param {Object} options - The constructor options\r\n * @param {String} options.name - The name of the type\r\n * @param {Type[]} options.types - The JavaScript type of the primitive type\r\n * @return {void}\r\n */\r\n constructor({\r\n typeNames,\r\n }) {\r\n super({\r\n name: OneOfType.oneOfTypeName(typeNames),\r\n });\r\n\r\n defineConstProperty(this, 'typeNames', typeNames);\r\n defineConstProperty(this, 'types', typeNames.map(typeName => resolveType(typeName, this.namespace)));\r\n }\r\n\r\n /**\r\n * Get the OneOfType's name from it's elements type name\r\n * @param {String[]} typeNames - The name of the elementTypes\r\n * @return {String} The name of the OneOfType\r\n */\r\n static oneOfTypeName(typeNames) {\r\n // We don't support nested one for now\r\n const sortedNames = typeNames\r\n .map(name => types.resolveQualifiedName(name, this.namespace))\r\n .sort();\r\n\r\n return `${ONEOF_TYPE_PREFIX}(${sortedNames.join(',')})`;\r\n }\r\n }\r\n\r\n /**\r\n * @typedef {Object} PropertyInfo\r\n * @property {String} typeName - The name of the propertie's type\r\n *\r\n * @memberof ObjectType#\r\n * @this ObjectType\r\n * @param {Object.} properties - The properties to be compiled\r\n * @return {Object.} a mapping for name to compiled Properties\r\n */\r\n function compileProperties(properties) {\r\n const { namespace } = this;\r\n\r\n return _.mapObject(properties, ({\r\n typeName,\r\n }, name) => new Property({\r\n name,\r\n typeName,\r\n namespace,\r\n }));\r\n }\r\n\r\n /**\r\n * @class ObjectType\r\n * @extends Type\r\n * @property {Object.} properties - The properties of the object type\r\n * @property {String} baseTypeName - The name of the base type\r\n * @property {Type} baseType - The base type\r\n */\r\n class ObjectType extends Type {\r\n /**\r\n * Create an ObjectType\r\n * @param {Object} options - The constructor options\r\n * @param {String} options.name - The name of the type\r\n * @param {Object.} options.properties - The property definition\r\n * @param {string[]} [options.navigationPropertyNames] - Navigation properties names\r\n * @param {String} options.baseTypeName - The name of the base type\r\n * @return {void}\r\n */\r\n constructor({\r\n name,\r\n properties,\r\n navigationPropertyNames = [],\r\n baseTypeName,\r\n }) {\r\n super({ name });\r\n\r\n defineConstProperty(this, 'properties', compileProperties.call(this, properties));\r\n defineConstProperty(this, 'navigationPropertyNames', navigationPropertyNames.slice());\r\n defineProducedProperty(this, 'navigationProperties', () => _.pick(this.properties, (property, propertyName) => _.contains(this.navigationPropertyNames, propertyName)));\r\n if (baseTypeName) {\r\n defineConstProperty(this, 'baseTypeName', baseTypeName);\r\n defineProducedProperty(this, 'baseType', () => resolveType(this.baseTypeName, this.namespace));\r\n }\r\n }\r\n\r\n addProperties(properties) {\r\n _.extend(this.properties, compileProperties.call(this, properties));\r\n // only for backward compability, should use addNavigationProperties for this case\r\n this.navigationPropertyNames.push(..._.keys(properties));\r\n }\r\n\r\n addNavigationProperties(properties) {\r\n this.addProperties(properties);\r\n }\r\n }\r\n\r\n /**\r\n * @class ComplexType\r\n * @extends ObjectType\r\n */\r\n class ComplexType extends ObjectType {\r\n\r\n }\r\n\r\n /**\r\n * @class EntityType\r\n * @extends ObjectType\r\n * @property {String} key - The name of the key property\r\n * @property {Property} keyProperty - The key property of the entity type\r\n * @return {void}\r\n */\r\n class EntityType extends ObjectType {\r\n /**\r\n * Create an EntityType\r\n * @param {Object} options - The constructor options\r\n * @param {String} options.name - The name of the type\r\n * @param {Object.} options.properties - The property definition\r\n * @param {String} options.baseTypeName - The name of the base type\r\n * @param {String} [options.key] - The name of the key property\r\n * @return {void}\r\n */\r\n constructor({\r\n name,\r\n properties,\r\n navigationPropertyNames,\r\n baseTypeName,\r\n key,\r\n }) {\r\n super({\r\n name,\r\n properties,\r\n navigationPropertyNames,\r\n baseTypeName,\r\n });\r\n\r\n if (key) {\r\n defineConstProperty(this, 'key', key);\r\n defineConstProperty(this, 'keyProperty', this.properties[this.key]);\r\n } else if (baseTypeName) {\r\n // The key property is inherited if there's a base type\r\n defineProducedProperty(this, 'key', () => this.baseType.key);\r\n defineProducedProperty(this, 'keyProperty', () => this.baseType.keyProperty);\r\n } else {\r\n throw new Error('The \"key\" property is required for an EntityType');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @class CollectionType\r\n * @extends ObjectType\r\n * @property {String} elementTypeName - The name of the element type\r\n * @property {Type} elementType - The type of the elements\r\n */\r\n class CollectionType extends ObjectType {\r\n /**\r\n * Create a CollectionType\r\n * @param {Object} options - The constructor options\r\n * @param {Object.} options.properties - The property definition\r\n * @param {String} options.baseTypeName - The name of the base type\r\n * @param {String} options.elementTypeName - The name of the element type\r\n * @return {void}\r\n */\r\n constructor({\r\n properties,\r\n baseTypeName,\r\n elementTypeName,\r\n }) {\r\n super({\r\n name: CollectionType.collectionTypeName(elementTypeName),\r\n properties,\r\n baseTypeName,\r\n });\r\n defineConstProperty(this, 'elementTypeName', elementTypeName);\r\n defineProducedProperty(this, 'elementType', () => resolveType(this.elementTypeName, this.namespace));\r\n }\r\n\r\n /**\r\n * Get the CollectionType's name from it's element type name\r\n * @param {String} typeName - The name of the elementType\r\n * @return {String} The name of the CollectionType\r\n */\r\n static collectionTypeName(typeName) {\r\n return `${typeName}${COLLECTION_TYPE_POSTFIX}`;\r\n }\r\n }\r\n\r\n /**\r\n * @memberof Type#\r\n * @this Type\r\n * @returns {CollectionType} The CollectionType of the given Type\r\n */\r\n function collectionTypeFactory() {\r\n return new CollectionType({ elementTypeName: this.name });\r\n }\r\n\r\n /**\r\n * @name type\r\n * @type Type\r\n * @property {CollectionType} collectionType - The collection type of the given type\r\n */\r\n defineProducedPropertyOnClass(Type, 'collectionType', collectionTypeFactory);\r\n\r\n /**\r\n * @typedef {Object} ParameterInfo\r\n * @property {String} typeName - The name of the parameter's type\r\n *\r\n * @memberof CallableType#\r\n * @this CallableType\r\n * @param {Object.} parameters - The parameters to compile\r\n * @return {Object.} A mapping for name to compiled Parameters\r\n */\r\n function compileParameters(parameters) {\r\n const { namespace } = this;\r\n\r\n return _.mapObject(\r\n parameters,\r\n ({ typeName }, name) => new Parameter({ name, namespace, typeName }),\r\n );\r\n }\r\n\r\n /**\r\n * @class CallableType\r\n * @property {Parameter[]} parameters - The parameters required to call the callable\r\n * @property {String} returnTypeName - The name of the return type\r\n * @property {Type} returnType - The return type of the callable\r\n */\r\n class CallableType extends Type {\r\n /**\r\n * Create a CallableType\r\n * @param {Object} options - The constructor options\r\n * @param {String} options.name - The name of the type\r\n * @param {Object.} parameters - The parameter definitions\r\n * @param {String} returnTypeName - The name of the return type\r\n * @return {void}\r\n */\r\n constructor({\r\n name,\r\n callableName,\r\n parameters,\r\n returnTypeName,\r\n }) {\r\n super({ name });\r\n\r\n defineConstProperty(this, 'callableName', callableName);\r\n defineConstProperty(this, 'parameters', compileParameters.call(this, parameters));\r\n defineConstProperty(this, 'returnTypeName', returnTypeName);\r\n defineProducedProperty(this, 'returnType', () => resolveType(returnTypeName, this.namespace));\r\n }\r\n }\r\n\r\n /**\r\n * @class ActionType\r\n * @property {Parameter[]} parameters - The parameters required to call the callable\r\n * @property {String} returnTypeName - The name of the return type\r\n * @property {Type} returnType - The return type of the callable\r\n */\r\n class ActionType extends CallableType {\r\n /**\r\n * Create a CallableType\r\n * @param {Object} options - The constructor options\r\n * @param {String} options.name - The name of the type\r\n * @param {Object.} parameters - The parameter definitions\r\n * @param {String} returnTypeName - The name of the return type\r\n * @return {void}\r\n */\r\n constructor({\r\n name,\r\n callableName,\r\n parameters,\r\n returnTypeName,\r\n }) {\r\n super({\r\n name,\r\n callableName,\r\n parameters,\r\n returnTypeName,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @class FunctionType\r\n * @property {Parameter[]} parameters - The parameters required to call the callable\r\n * @property {String} returnTypeName - The name of the return type\r\n * @property {Type} returnType - The return type of the callable\r\n */\r\n class FunctionType extends CallableType {\r\n /**\r\n * Create a CallableType\r\n * @param {Object} options - The constructor options\r\n * @param {String} options.name - The name of the type\r\n * @param {Object.} parameters - The parameter definitions\r\n * @param {String} returnTypeName - The name of the return type\r\n * @return {void}\r\n */\r\n constructor({\r\n name,\r\n callableName,\r\n parameters,\r\n returnTypeName,\r\n }) {\r\n super({\r\n name,\r\n callableName,\r\n parameters,\r\n returnTypeName,\r\n });\r\n }\r\n }\r\n\r\n // TODO: wewei, support EnumType\r\n\r\n defineConstProperty(types, 'Property', Property);\r\n defineConstProperty(types, 'Parameter', Parameter);\r\n defineConstProperty(types, 'Type', Type);\r\n defineConstProperty(types, 'PrimitiveType', PrimitiveType);\r\n defineConstProperty(types, 'OneOfType', OneOfType);\r\n defineConstProperty(types, 'ObjectType', ObjectType);\r\n defineConstProperty(types, 'ComplexType', ComplexType);\r\n defineConstProperty(types, 'EntityType', EntityType);\r\n defineConstProperty(types, 'CollectionType', CollectionType);\r\n defineConstProperty(types, 'CallableType', CallableType);\r\n defineConstProperty(types, 'ActionType', ActionType);\r\n defineConstProperty(types, 'FunctionType', FunctionType);\r\n\r\n return types;\r\n })());\r\n};\r\n","/* eslint-disable max-classes-per-file */\r\n\r\nconst _ = require('underscore');\r\n\r\nconst { Registry } = require('./registry');\r\nconst {\r\n defineConstProperty,\r\n defineProducedPropertyOnClass,\r\n} = require('./reflection');\r\n\r\nconst url = require('./url-util');\r\n\r\n/**\r\n * @param {EDM} edm - The EDM object to apply this plugin to\r\n * @return {Void} nothing to return\r\n */\r\nfunction resIdsPlugin(edm) {\r\n if (edm.resourceIdentifiers) {\r\n return;\r\n }\r\n\r\n /**\r\n * @name edm\r\n * @property {Registry} resourceIdentifiers - A registry of all resource-identifiers\r\n * @property {Class} resourceIdentifiers.Navigation - The base type of all navigations\r\n * @property {Class} resourceIdentifiers.PropertyNavigation - The navigation following a property\r\n * @property {Class} resourceIdentifiers.CastNavigation - The navigation following a type casting\r\n * @property {Class} resourceIdentifiers.WithKeyNavigation\r\n * - The navigation of selecting a single instance from an entity set\r\n * @property {Class} resourceIdentifiers.CallNavigation - The navigation of calling a callable\r\n * @property {Class} resourceIdentifiers.ResourceIdentifier\r\n * - The base type of all resource-identifiers\r\n */\r\n defineConstProperty(edm, 'resourceIdentifiers', (() => {\r\n const resourceIdentifiers = new Registry();\r\n\r\n /**\r\n * @class Navigation\r\n * @property {ResourceIdentifier} source - The source accessor navigated from\r\n */\r\n class Navigation {\r\n constructor({\r\n source,\r\n }) {\r\n defineConstProperty(this, 'source', source);\r\n }\r\n\r\n toJSON() {\r\n return [...this.source.toJSON(), this.toSelfJSON()];\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n toSelfJSON() {\r\n throw new Error('I\\'m abstract');\r\n }\r\n }\r\n\r\n /**\r\n * @class PropertyNavigation\r\n * @extends Navigation\r\n * @property {Property} property - The property navigated with\r\n */\r\n class PropertyNavigation extends Navigation {\r\n constructor({\r\n source,\r\n property,\r\n name,\r\n }) {\r\n super({\r\n source,\r\n });\r\n defineConstProperty(this, 'property', property);\r\n defineConstProperty(this, 'name', name);\r\n defineConstProperty(this, 'path', url.join(source.path, name));\r\n }\r\n\r\n toSelfJSON() {\r\n return {\r\n type: 'property',\r\n name: this.name,\r\n };\r\n }\r\n\r\n static defineOn(TypeResID, navigationProperties) {\r\n _.each(navigationProperties, (property, name) => {\r\n /**\r\n * Navigation property factory for the defined property\r\n * @memberof TypeResID#\r\n * @this TypeResID\r\n * @returns {ResourceIdentifier} The ResourceIdentifier to access the property\r\n */\r\n function navPropFactory() {\r\n return new property.type.ResourceIdentifier({\r\n navigation: new PropertyNavigation({ source: this, property, name }),\r\n });\r\n }\r\n\r\n defineProducedPropertyOnClass(TypeResID, name, navPropFactory);\r\n });\r\n }\r\n }\r\n\r\n class CallableNavigation extends Navigation {\r\n constructor({\r\n source,\r\n name,\r\n }) {\r\n super({\r\n source,\r\n });\r\n defineConstProperty(this, 'name', name);\r\n defineConstProperty(this, 'path', url.join(source.path, name));\r\n }\r\n\r\n static defineOn(TypeResID, callable) {\r\n function defineCallableOn(resID, callableTypes) {\r\n _.each(callableTypes, type => {\r\n /**\r\n * factory for the callables\r\n * @memberof resID#\r\n * @this resID\r\n * @returns {ResourceIdentifier} The ResourceIdentifier to access the property\r\n */\r\n function factory() {\r\n return new type.ResourceIdentifier({\r\n navigation: new CallableNavigation({ source: this, name: type.callableName }),\r\n });\r\n }\r\n\r\n defineProducedPropertyOnClass(resID, type.callableName, factory);\r\n });\r\n }\r\n defineCallableOn(TypeResID, callable.actions);\r\n defineCallableOn(TypeResID, callable.functions);\r\n }\r\n }\r\n\r\n /**\r\n * @class CastNavigation\r\n * @extends Navigation\r\n * @property {Type} type - The type casting to\r\n * @property {String} name - The type name used for casting\r\n */\r\n class CastNavigation extends Navigation {\r\n constructor({\r\n source,\r\n type,\r\n name = type.name,\r\n }) {\r\n super({\r\n source,\r\n });\r\n\r\n _.chain(this)\r\n .defineConstProperty('type', type)\r\n .defineConstProperty('name', name)\r\n .value();\r\n\r\n defineConstProperty(this, 'path', url.join(source.path, name));\r\n }\r\n\r\n toSelfJSON() {\r\n return {\r\n type: 'function',\r\n name: CastNavigation.navigationName,\r\n parameters: [this.name],\r\n };\r\n }\r\n\r\n static get navigationName() {\r\n return '$cast';\r\n }\r\n\r\n static defineOn(TypeResID) {\r\n /**\r\n * $cast navigation method of the TypeResID\r\n * @memberof TypeResID#\r\n * @this TypeResID\r\n * @param {String} name - The name of the subclass\r\n * @returns {TypeResID} The ResourceIdentifier to access the subclass object\r\n */\r\n function navCastMethod(name) {\r\n const entityType = edm.types.resolve(name, this.type.namespace);\r\n const type = TypeResID.prototype.type instanceof edm.types.CollectionType\r\n ? entityType.collectionType\r\n : entityType;\r\n const navigation = new CastNavigation({ source: this, type: entityType, name });\r\n\r\n return new type.ResourceIdentifier({ navigation });\r\n }\r\n\r\n defineConstProperty(TypeResID.prototype, CastNavigation.navigationName, navCastMethod);\r\n }\r\n }\r\n\r\n /**\r\n * @class WithKeyNavigation\r\n * @extends Navigation\r\n * @property {String|Number} key - The key of the selected entity\r\n */\r\n class WithKeyNavigation extends Navigation {\r\n constructor({\r\n source,\r\n key,\r\n }) {\r\n super({\r\n source,\r\n });\r\n\r\n defineConstProperty(this, 'key', key);\r\n defineConstProperty(this, 'path', (() => {\r\n // In case people pass a decimal string for a integer key\r\n // We cannot use parseInt directly, it would get a wrong number if the\r\n // key is beyond Number.MAX_SAFE_INTEGER\r\n if (_.isString(key)) {\r\n const keyType = _.chain(source)\r\n .result('type')\r\n .result('elementType')\r\n .result('keyProperty')\r\n .result('typeName')\r\n .value();\r\n\r\n if (keyType === 'integer') {\r\n if (key.match(/^[+-]?(0|[1-9][0-9]*)$/)) {\r\n return `${source.path}(${key})`;\r\n }\r\n }\r\n if (keyType === 'string') {\r\n return `${source.path}('${key}')`;\r\n }\r\n }\r\n\r\n return `${source.path}(${JSON.stringify(key)})`;\r\n })());\r\n }\r\n\r\n toSelfJSON() {\r\n return {\r\n type: 'function',\r\n name: WithKeyNavigation.navigationName,\r\n parameters: [this.key],\r\n };\r\n }\r\n\r\n static get navigationName() {\r\n return '$withKey';\r\n }\r\n\r\n static defineOn(TypeResID) {\r\n /**\r\n * $withKey navigation method of the TypeResID\r\n * @memberof TypeResID#\r\n * @this TypeResID\r\n * @param {String} key - The key of the element\r\n * @returns {ResourceIdentifier}\r\n * The ResourceIdentifier to access the element with the given key\r\n */\r\n function navWithKeyMethod(key) {\r\n const navigation = new WithKeyNavigation({ source: this, key });\r\n\r\n return new this.type.elementType.ResourceIdentifier({ navigation });\r\n }\r\n\r\n defineConstProperty(\r\n TypeResID.prototype,\r\n WithKeyNavigation.navigationName,\r\n navWithKeyMethod,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * @class CallNavigation\r\n * @extends Navigation\r\n * @property {Object} parameters - The parameters for the function call\r\n */\r\n class CallNavigation extends Navigation {\r\n constructor({\r\n source,\r\n parameters = {},\r\n }) {\r\n super({\r\n source,\r\n });\r\n defineConstProperty(this, 'parameters', parameters);\r\n\r\n const path = source.type instanceof edm.types.ActionType\r\n ? source.path : `${source.path}(${_.map(parameters, (value, name) => `${name}=${value}`).join(',')})`;\r\n\r\n defineConstProperty(this, 'path', path);\r\n }\r\n\r\n toSelfJSON() {\r\n return {\r\n type: 'function',\r\n name: CallNavigation.navigationName,\r\n // for callable, parameters are named\r\n parameters: [this.parameters],\r\n };\r\n }\r\n\r\n static get navigationName() {\r\n return '$call';\r\n }\r\n\r\n static defineOn(TypeResID) {\r\n /**\r\n * $call navigation method of the TypeResID\r\n * @memberof TypeResID#\r\n * @this TypeResID\r\n * @param {object} parameters - The parameters to call the callable\r\n * @return {ResourceIdentifier}\r\n * The ResourceIdentifier accessing the return value of the callable\r\n */\r\n function navCallMethod(parameters) {\r\n const navigation = new CallNavigation({ source: this, parameters });\r\n\r\n return new this.type.returnType.ResourceIdentifier({ navigation });\r\n }\r\n\r\n defineConstProperty(TypeResID.prototype, CallNavigation.navigationName, navCallMethod);\r\n }\r\n }\r\n\r\n /**\r\n * @class ResourceIdentifier\r\n * @property {Navigation} navigation\r\n * - The navigation back tracking the parent ResourceIdentifier\r\n */\r\n class ResourceIdentifier {\r\n /**\r\n * Create a ResourceIdentifier\r\n * @param {Object} [options] - The constructor options\r\n * @param {Navigation} [options.navigation]\r\n * - The navigation back tracking the parent ResourceIdentifier\r\n * @return {Void} Nothing to return\r\n */\r\n constructor({\r\n navigation,\r\n } = {}) {\r\n if (navigation) {\r\n defineConstProperty(this, 'navigation', navigation);\r\n defineConstProperty(this, 'path', navigation.path);\r\n } else {\r\n defineConstProperty(this, 'path', '');\r\n }\r\n }\r\n\r\n toJSON() {\r\n if (this.navigation) {\r\n return this.navigation.toJSON();\r\n }\r\n\r\n return [];\r\n }\r\n\r\n identifyEntitySet(json) {\r\n // eslint-disable-next-line\r\n let entitySet = this;\r\n\r\n /* eslint guard-for-in: 0 */\r\n /* eslint no-restricted-syntax: 0 */\r\n for (const i in json) {\r\n const item = json[i];\r\n\r\n if (item.type === 'property') {\r\n entitySet = entitySet[item.name];\r\n } else if (item.type === 'function') {\r\n entitySet = entitySet[item.name](...item.parameters);\r\n }\r\n\r\n if (!entitySet) {\r\n return null;\r\n }\r\n }\r\n\r\n return entitySet;\r\n }\r\n }\r\n /**\r\n * @class CollectionResourceIdentifier\r\n * @property {Navigation} navigation\r\n * - The navigation back tracking the parent ResourceIdentifier\r\n */\r\n class CollectionResourceIdentifier extends ResourceIdentifier {\r\n /**\r\n * Create a ResourceIdentifier\r\n * @param {Object} [options] - The constructor options\r\n * @param {Navigation} [options.navigation]\r\n * - The navigation back tracking the parent ResourceIdentifier\r\n * @return {Void} Nothing to return\r\n */\r\n constructor({\r\n navigation,\r\n } = {}) {\r\n super({ navigation });\r\n }\r\n }\r\n\r\n /**\r\n * define ResourceIdentifier type for the given type\r\n * @param {Type} type - An instance of one of the meta types\r\n * @return {Class} the ResourceIdentifier class\r\n */\r\n function resourceIdentifierForType(type) {\r\n // duck type, if the type has a \"baseType\", use its ResourceIdentifier as the super class\r\n const DefaultBase = type instanceof edm.types.CollectionType\r\n ? CollectionResourceIdentifier\r\n : ResourceIdentifier;\r\n const Base = type.baseType ? type.baseType.ResourceIdentifier : DefaultBase;\r\n\r\n const AccessorType = class extends Base {\r\n };\r\n\r\n /**\r\n * @name resId\r\n * @type ResourceIdentifier\r\n * @property {Type} type - The type associated with the ResourceIdentifier\r\n */\r\n defineConstProperty(AccessorType.prototype, 'type', type);\r\n\r\n resourceIdentifiers.register(AccessorType, type.name);\r\n\r\n return AccessorType;\r\n }\r\n\r\n // For each of the meta types defined by the type mixin, define the\r\n // \"ResourceIdentifier\" property\r\n _.each({\r\n\r\n // the root class 'Type' don't have an ResourceIdentifier property\r\n // Type: { factory() { } },\r\n\r\n PrimitiveType: {\r\n\r\n /**\r\n * PrimitiveType ResourceIdentifier type factory\r\n * @memberof PrimitiveType#\r\n * @this PrimitiveType\r\n * @returns {Class} The ResourceIdentifier type of the PrimitiveType\r\n */\r\n factory() {\r\n const PrimitiveTypeResID = resourceIdentifierForType(this);\r\n\r\n return PrimitiveTypeResID;\r\n },\r\n },\r\n\r\n ObjectType: {\r\n\r\n /**\r\n * ObjectType ResourceIdentifier type factory\r\n * @memberof ObjectType#\r\n * @this ObjectType\r\n * @returns {Class} The ResourceIdentifier type of the ObjectType\r\n */\r\n factory() {\r\n const ObjectTypeResID = resourceIdentifierForType(this);\r\n\r\n CastNavigation.defineOn(ObjectTypeResID);\r\n PropertyNavigation.defineOn(ObjectTypeResID, this.navigationProperties);\r\n if (this.callable) {\r\n CallableNavigation.defineOn(ObjectTypeResID, this.callable);\r\n }\r\n return ObjectTypeResID;\r\n },\r\n },\r\n\r\n // fallback to ObjectType.prototype.ResourceIdentifier\r\n // EntityType: { factory () { } },\r\n\r\n // fallback to ObjectType.prototype.ResourceIdentifier\r\n // ComplexType: { factory () { } },\r\n\r\n CollectionType: {\r\n\r\n /**\r\n * CollectionType ResourceIdentifier type factory\r\n * @memberof CollectionType#\r\n * @this CollectionType\r\n * @returns {Class} the ResourceIdentifier type of the CollectionType\r\n */\r\n factory() {\r\n const CollectionTypeResID = resourceIdentifierForType(this);\r\n\r\n CastNavigation.defineOn(CollectionTypeResID);\r\n // Only the entity sets can be navigated with keys\r\n if (this.elementType instanceof edm.types.EntityType) {\r\n WithKeyNavigation.defineOn(CollectionTypeResID);\r\n }\r\n PropertyNavigation.defineOn(CollectionTypeResID, this.navigationProperties);\r\n if (this.callable) {\r\n CallableNavigation.defineOn(CollectionTypeResID, this.callable);\r\n }\r\n\r\n return CollectionTypeResID;\r\n },\r\n },\r\n\r\n CallableType: {\r\n\r\n /**\r\n * CallableType ResourceIdentifier type factory\r\n * @memberof CallableType#\r\n * @this CallableType\r\n * @returns {Class} The ResourceIdentifier type of the CallableType\r\n */\r\n factory() {\r\n const CallableTypeResID = resourceIdentifierForType(this);\r\n\r\n CallNavigation.defineOn(CallableTypeResID);\r\n\r\n return CallableTypeResID;\r\n },\r\n },\r\n\r\n }, (def, typeName) => {\r\n /**\r\n * @name type\r\n * @type Type\r\n * @property {Class} ResourceIdentifier - The ResourceIdentifier type of the type\r\n */\r\n defineProducedPropertyOnClass(edm.types[typeName], 'ResourceIdentifier', def.factory);\r\n });\r\n\r\n _.chain(resourceIdentifiers)\r\n .defineConstProperty('ResourceIdentifier', ResourceIdentifier)\r\n .defineConstProperty('CollectionResourceIdentifier', CollectionResourceIdentifier)\r\n .defineConstProperty('Navigation', Navigation)\r\n .defineConstProperty('PropertyNavigation', PropertyNavigation)\r\n .defineConstProperty('CastNavigation', CastNavigation)\r\n .defineConstProperty('WithKeyNavigation', WithKeyNavigation)\r\n .defineConstProperty('CallNavigation', CallNavigation)\r\n .defineConstProperty('CallableNavigation', CallableNavigation)\r\n .value();\r\n\r\n return resourceIdentifiers;\r\n })());\r\n}\r\n\r\nmodule.exports = {\r\n resIdsPlugin,\r\n};\r\n","/**\r\n * the schema plugin module\r\n */\r\n\r\nconst _ = require('underscore');\r\nconst { get } = require('./lodash');\r\nconst { Registry } = require('./registry');\r\nconst {\r\n defineConstProperty,\r\n hasOwnProperty,\r\n} = require('./reflection');\r\n\r\nconst typesPlugin = require('./types-plugin');\r\n\r\nfunction getSchemaName(schema) {\r\n const { $$ODataExtension, name } = schema;\r\n if ($$ODataExtension) {\r\n return $$ODataExtension.Name;\r\n }\r\n\r\n // deprecated\r\n // There is no such keyword as \"name\" in JSON Schema, it's specific to OData\r\n // See:\r\n // http://json-schema.org/latest/json-schema-core.html\r\n // http://json-schema.org/latest/json-schema-validation.html\r\n return name;\r\n}\r\n\r\nfunction getSchemaBaseTypeName(schema) {\r\n const { $$ODataExtension, clrTypeBase } = schema;\r\n if ($$ODataExtension) {\r\n return $$ODataExtension.BaseType && $$ODataExtension.BaseType.$ref;\r\n }\r\n\r\n // deprecated\r\n // There is no such keyword as \"clrTypeBase\" in JSON Schema, it's specific to OData\r\n // See:\r\n // http://json-schema.org/latest/json-schema-core.html\r\n // http://json-schema.org/latest/json-schema-validation.html\r\n return clrTypeBase;\r\n}\r\n\r\nfunction getSchemaKey(schema) {\r\n const { $$ODataExtension, key } = schema;\r\n if ($$ODataExtension) {\r\n return $$ODataExtension.Key;\r\n }\r\n\r\n // deprecated\r\n // There is no such keyword as \"key\" in JSON Schema, it's specific to OData\r\n // See:\r\n // http://json-schema.org/latest/json-schema-core.html\r\n // http://json-schema.org/latest/json-schema-validation.html\r\n return key;\r\n}\r\n\r\nfunction getSchemaNavigationPropertyNames(schema) {\r\n const { $$ODataExtension } = schema;\r\n if ($$ODataExtension) {\r\n return $$ODataExtension.NavigationProperty;\r\n }\r\n\r\n return [];\r\n}\r\n\r\nmodule.exports = (edm, {\r\n schemas = {},\r\n // TODO: deprecated, every schemas should be able to have different namespaces\r\n // we are still using it with legacy schemas\r\n namespace = null,\r\n} = {}) => {\r\n if (hasOwnProperty(edm, 'schema')) {\r\n return;\r\n }\r\n\r\n typesPlugin(edm);\r\n\r\n const {\r\n CollectionType,\r\n EntityType,\r\n PrimitiveType,\r\n ComplexType,\r\n OneOfType,\r\n ActionType,\r\n FunctionType,\r\n } = edm.types;\r\n\r\n defineConstProperty(edm, 'schema', (() => {\r\n function getSchemaFullName(schema, path) {\r\n // $$ref exists in resolved schema\r\n const possiblePath = (_.isString(path) && path) || schema.$$ref || schema.$ref;\r\n return possiblePath\r\n ? possiblePath.replace(/\\//g, '.')\r\n : Registry.getQualifiedName(getSchemaName(schema), namespace);\r\n }\r\n\r\n /**\r\n * Get type name object with its information\r\n * @param {Schema[]} dependencies - An output paramter, a queue of dependent schemas\r\n * @param {Object} typeInfo - The schema information of the property\r\n * @return {String} The type name\r\n */\r\n function getTypeName(dependencies, typeInfo) {\r\n let schema = null;\r\n let typeName = null;\r\n\r\n if (!typeInfo) {\r\n return null;\r\n }\r\n\r\n if (typeInfo.type === 'array') {\r\n return CollectionType.collectionTypeName(getTypeName(dependencies, typeInfo.items));\r\n } if (typeInfo.oneOf) {\r\n return OneOfType.oneOfTypeName(typeInfo.oneOf.map(item => getTypeName(dependencies, item)));\r\n } if (typeInfo.type === 'object') {\r\n ({ schema } = typeInfo);\r\n // it's possible for the schema to be undefined, use 'object' type by default\r\n typeName = getSchemaFullName(schema || typeInfo);\r\n } else if (typeInfo.type === 'string' && typeInfo.enum) {\r\n // enum type is string, but we need to get a meanful name for different enum type\r\n // this is to help us disable cache accurately, as enum can be odata call return type now\r\n typeName = (typeInfo.$$ref || 'string').split('/').join('.');\r\n } else {\r\n // primitive types\r\n typeName = typeInfo.type;\r\n }\r\n\r\n if (schema) {\r\n dependencies.push(schema);\r\n }\r\n\r\n return typeName;\r\n }\r\n\r\n function defineCallableOnType(acts, funcs, type, qualifiedName, forEntityType = true) {\r\n const actions = [];\r\n const functions = [];\r\n\r\n function getCallableTypeName(key) {\r\n return `${key}##${qualifiedName}${forEntityType ? '' : '@@COLL'}`;\r\n }\r\n\r\n _.each(_.keys(acts), key => {\r\n const typeName = getCallableTypeName(key);\r\n const parameters = _.mapObject(\r\n acts[key].Parameter,\r\n parameter => getTypeName([], parameter),\r\n );\r\n\r\n actions.push(new ActionType({\r\n name: typeName,\r\n callableName: key,\r\n parameters,\r\n returnTypeName: getTypeName([], acts[key].ReturnType),\r\n }));\r\n });\r\n\r\n _.each(_.keys(funcs), key => {\r\n const typeName = getCallableTypeName(key);\r\n const parameters = _.mapObject(\r\n funcs[key].Parameter,\r\n parameter => getTypeName([], parameter),\r\n );\r\n\r\n functions.push(new FunctionType({\r\n name: typeName,\r\n callableName: key,\r\n parameters,\r\n returnTypeName: getTypeName([], funcs[key].ReturnType),\r\n }));\r\n });\r\n\r\n defineConstProperty(type, 'callable', {\r\n actions,\r\n functions,\r\n });\r\n }\r\n\r\n /**\r\n * Define an entity type, and its dependencies\r\n *\r\n * @param {Schema} schema - The schema for the entity type\r\n * @param {string} [path] - Possible full path of the schema\r\n * @return {Void} Nothing to return\r\n */\r\n function defineSchemaType(schema, path) {\r\n const qualifiedName = getSchemaFullName(schema, path);\r\n\r\n if (!edm.types.resolve(qualifiedName)) {\r\n const dependencies = [];\r\n const properties = _.mapObject(schema.properties, typeInfo => ({\r\n typeName: getTypeName(dependencies, typeInfo),\r\n }));\r\n\r\n const type = new EntityType({\r\n name: qualifiedName,\r\n baseTypeName: getSchemaBaseTypeName(schema) || 'object',\r\n key: getSchemaKey(schema),\r\n properties,\r\n navigationPropertyNames: getSchemaNavigationPropertyNames(schema),\r\n });\r\n\r\n defineConstProperty(type, 'schema', schema);\r\n\r\n _.each(dependencies, defineSchemaType);\r\n\r\n const entityActions = get(schema, '$$ODataExtension.Action', null);\r\n const entityFunctions = get(schema, '$$ODataExtension.Function', null);\r\n\r\n if (entityActions || entityFunctions) {\r\n defineCallableOnType(entityActions, entityFunctions, type, qualifiedName);\r\n }\r\n\r\n const collCallable = get(schema, '$$ODataExtension.Collection', null);\r\n\r\n if (collCallable) {\r\n defineCallableOnType(\r\n collCallable.Action,\r\n collCallable.Function,\r\n type.collectionType,\r\n qualifiedName,\r\n false,\r\n );\r\n }\r\n }\r\n }\r\n\r\n // Define all the primitive types\r\n _.each({\r\n string: String,\r\n integer: Number,\r\n number: Number,\r\n datetime: Date,\r\n boolean: Boolean,\r\n null: null,\r\n }, (jsType, name) => new PrimitiveType({ name, jsType }));\r\n\r\n // Define the base object type\r\n /* eslint no-new: 0 */\r\n new ComplexType({\r\n name: 'object',\r\n properties: {},\r\n });\r\n\r\n _.each(schemas, (schema, index) => {\r\n if (_.isString(index)) {\r\n defineSchemaType(schema, index);\r\n } else {\r\n defineSchemaType(schema);\r\n }\r\n });\r\n\r\n return _.chain({})\r\n .defineConstProperty('schemas', schemas)\r\n .defineConstProperty('namespace', namespace)\r\n .value();\r\n })());\r\n};\r\n","/* eslint-disable max-classes-per-file */\r\n/* eslint-disable no-mixed-operators */\r\n/* eslint no-param-reassign: 0 */\r\nconst _ = require('underscore');\r\n\r\n/** Class representing a namespace */\r\nclass Namespace {\r\n /**\r\n * Create a namespace\r\n * @param {Namespace|null} parent - The parent namespace\r\n */\r\n constructor(parent) {\r\n this.map = {};\r\n this.parent = parent;\r\n }\r\n\r\n /**\r\n * Resolve an object by name\r\n * @param {String[]} segments - The name segments\r\n * @return {Object} The object registered with the given name\r\n */\r\n resolve(segments) {\r\n const iterator = (ns, seg) => {\r\n if (ns && ns instanceof Namespace) {\r\n return ns.map[seg];\r\n }\r\n return ns;\r\n };\r\n\r\n return _.reduce(segments, iterator, this)\r\n || this.parent && this.parent.resolve(segments);\r\n }\r\n\r\n /**\r\n * Register an object\r\n * @param {Object} obj - The object to be registered\r\n * @param {String[]} segments - The name segments for the object\r\n * @return {Void} Nothing to return\r\n */\r\n register(obj, segments) {\r\n const key = segments.pop();\r\n const iterator = (ns, seg) => {\r\n if (ns instanceof Namespace) {\r\n if (_.isUndefined(ns.map[seg])) {\r\n ns.map[seg] = new Namespace(ns);\r\n }\r\n return ns.map[seg];\r\n }\r\n throw new Error(`There are conflicts when defining registry for ${segments.join('.')}`);\r\n };\r\n\r\n const nsTarget = _.reduce(segments, iterator, this);\r\n\r\n nsTarget.map[key] = obj;\r\n }\r\n\r\n /**\r\n * Iterate through all objects in this namespace\r\n * @param {Function} worker - The callback for each of the objects\r\n * @return {void} Nothing to return\r\n */\r\n each(worker) {\r\n _.each(this.map, obj => {\r\n if (obj instanceof Namespace) {\r\n obj.each(worker);\r\n } else {\r\n worker(obj);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction isObjectWithName(obj) {\r\n return typeof obj.name === 'string';\r\n}\r\n\r\n/** Class representing a namespaced registry */\r\nclass Registry {\r\n /**\r\n * Create a registry\r\n */\r\n constructor() {\r\n this.rootNamespace = new Namespace(null);\r\n // eslint-disable-next-line no-undef\r\n this.qualifiedNames = new Map();\r\n }\r\n\r\n /**\r\n * Resolve an object by name\r\n * @param {String} name - The name of the object\r\n * @param {String} [namespace=this.rootNamespace] - The base namespace to resolve against\r\n * @return {Object|null} The object registered with the name\r\n */\r\n resolve(name, namespace) {\r\n const ns = namespace\r\n ? this.rootNamespace.resolve(namespace.split('.'))\r\n : this.rootNamespace;\r\n const obj = ns instanceof Namespace ? ns.resolve(name.split('.')) : null;\r\n\r\n return obj || null;\r\n }\r\n\r\n resolveQualifiedName(name, namespace) {\r\n const obj = this.resolve(name, namespace);\r\n if (obj instanceof Namespace || !obj) {\r\n return null;\r\n }\r\n\r\n return this.qualifiedNames.get(obj) || null;\r\n }\r\n\r\n /**\r\n * Register an object\r\n * @param {Object} obj - The object to be registered\r\n * @param {String} [name=obj.name] - The qualified name for the object\r\n * @return {void} Nothing to return\r\n */\r\n register(obj, name) {\r\n const realName = !name && isObjectWithName(obj) ? obj.name : name;\r\n if (typeof realName === 'undefined') {\r\n throw new Error(`name not passed in and obj ${JSON.stringify(obj)} doesn't have name property`);\r\n }\r\n this.rootNamespace.register(obj, realName.split('.'));\r\n this.qualifiedNames.set(obj, realName);\r\n }\r\n\r\n /**\r\n * Iterate through all registered objects\r\n * @param {Function} worker - The callback for each of the objects\r\n * @return {void} Nothing to return\r\n */\r\n each(worker) {\r\n this.rootNamespace.each(worker);\r\n }\r\n\r\n /**\r\n * Get namespace from a qualified name\r\n * @param {String} name - The qualified name\r\n * @return {String} The namespace\r\n */\r\n static getNamespace(name) {\r\n const segments = name.split('.');\r\n\r\n segments.pop();\r\n return segments.join('.');\r\n }\r\n\r\n /**\r\n * Get short name from a qualified name\r\n * @param {String} name - The qualified name\r\n * @return {String} The short name\r\n */\r\n static getShortName(name) {\r\n return _.last(name.split('.'));\r\n }\r\n\r\n static getQualifiedName(name, namespace) {\r\n return namespace ? `${namespace}.${name}` : name;\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n Registry,\r\n};\r\n","/**\r\n * the Entity Data Model module\r\n */\r\nconst typesPlugin = require('./types-plugin');\r\nconst schemaPlugin = require('./schema-plugin');\r\n\r\nclass EDM {\r\n constructor(options) {\r\n typesPlugin(this);\r\n if (options) {\r\n schemaPlugin(this, options);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n EDM,\r\n};\r\n"],"sourceRoot":""}