breeze-client
Version:
Breeze data management for JavaScript clients
108 lines (104 loc) • 5.07 kB
JavaScript
import * as breeze from 'breeze-client';
// import { JsonResultsAdapter, KeyMapping } from './breeze';
/** @hidden */
class DataServiceWebApiAdapter extends breeze.AbstractDataServiceAdapter {
constructor() {
super();
this.name = "webApi";
}
static register(config) {
config = config || breeze.config;
config.registerAdapter("dataService", DataServiceWebApiAdapter);
return config.initializeAdapterInstance("dataService", "webApi", true);
}
/** @hidden @internal */
_prepareSaveBundle(saveContext, saveBundle) {
let changeRequestInterceptor = this._createChangeRequestInterceptor(saveContext, saveBundle);
let em = saveContext.entityManager;
let metadataStore = em.metadataStore;
let helper = em.helper;
let serSaveBundle = {};
serSaveBundle.entities = saveBundle.entities.map(function (e, ix) {
let rawEntity = helper.unwrapInstance(e, transformValue);
let autoGeneratedKey;
if (e.entityType.autoGeneratedKeyType !== breeze.AutoGeneratedKeyType.None) {
autoGeneratedKey = {
propertyName: e.entityType.keyProperties[0].nameOnServer,
autoGeneratedKeyType: e.entityType.autoGeneratedKeyType.name
};
}
let originalValuesOnServer = helper.unwrapOriginalValues(e, metadataStore);
rawEntity.entityAspect = {
entityTypeName: e.entityType.name,
defaultResourceName: e.entityType.defaultResourceName,
entityState: e.entityAspect.entityState.name,
originalValuesMap: originalValuesOnServer,
autoGeneratedKey: autoGeneratedKey
};
rawEntity = changeRequestInterceptor.getRequest(rawEntity, e, ix);
return rawEntity;
});
serSaveBundle.saveOptions = { tag: saveBundle.saveOptions.tag };
changeRequestInterceptor.done(serSaveBundle.entities);
return serSaveBundle;
}
/** @hidden @internal */
_prepareSaveResult(saveContext, data) {
// use the jsonResultAdapter to extractResults and extractKeyMappings
let jra = saveContext.dataService.jsonResultsAdapter || this.jsonResultsAdapter;
let entities = jra.extractSaveResults(data) || [];
let keyMappings = jra.extractKeyMappings(data) || [];
let deletedKeys = jra.extractDeletedKeys ? (jra.extractDeletedKeys(data)) || [] : [];
if (keyMappings.length) {
// HACK: need to change the 'case' of properties in the saveResult
// but KeyMapping properties internally are still ucase. ugh...
keyMappings = keyMappings.map(function (km) {
if (km.entityTypeName)
return km; // it's already lower case
let kmHack = km;
let entityTypeName = breeze.MetadataStore.normalizeTypeName(kmHack.EntityTypeName);
return { entityTypeName: entityTypeName, tempValue: kmHack.TempValue, realValue: kmHack.RealValue };
});
}
if (deletedKeys.length) {
deletedKeys = deletedKeys.map(function (dk) {
if (dk.entityTypeName)
return dk; // it's already lower case
let entityTypeName = breeze.MetadataStore.normalizeTypeName(dk.EntityTypeName);
// NOTE the dk.KeyValue => keyValues transition - needed because we are deserializing an .NET EntityKey
return { entityTypeName: entityTypeName, keyValues: dk.KeyValue };
});
}
return { entities: entities, keyMappings: keyMappings, deletedKeys: deletedKeys };
}
jsonResultsAdapter = new breeze.JsonResultsAdapter({
name: "webApi_default",
visitNode: function (node, mappingContext, nodeContext) {
if (node == null)
return {};
let entityTypeName = breeze.MetadataStore.normalizeTypeName(node.$type);
let entityType = entityTypeName && mappingContext.entityManager.metadataStore.getEntityType(entityTypeName, true);
let propertyName = nodeContext.propertyName;
let ignore = propertyName && propertyName.substr(0, 1) === "$";
return {
entityType: entityType,
nodeId: node.$id,
nodeRefId: node.$ref,
ignore: ignore
};
}
});
}
/** Transform data properties while unwrapping entities before save */
function transformValue(prop, val) {
if (prop.dataType === breeze.DataType.DateOnly) {
val = breeze.DataType.toDateOnlyString(val);
}
return val;
}
breeze.config.registerAdapter("dataService", DataServiceWebApiAdapter);
/**
* Generated bundle index. Do not edit.
*/
export { DataServiceWebApiAdapter };
//# sourceMappingURL=breeze-client-adapter-data-service-webapi.mjs.map