angular2-data
Version:
A datastore for angular2
107 lines (99 loc) • 5.23 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('angular2/core'), require('angular2/http'), require('angular2/src/core/reflection/reflection'), require('rxjs/Rx'), require('angular2/src/core/util/decorators')) :
typeof define === 'function' && define.amd ? define(['exports', 'angular2/core', 'angular2/http', 'angular2/src/core/reflection/reflection', 'rxjs/Rx', 'angular2/src/core/util/decorators'], factory) :
(factory((global.angular2data = {}),global.angular2_core,global.angular2_http,global.angular2_src_core_reflection_reflection,global.rxjs_Rx,global.angular2_src_core_util_decorators));
}(this, function (exports,angular2_core,angular2_http,angular2_src_core_reflection_reflection,rxjs_Rx,angular2_src_core_util_decorators) { 'use strict';
function __decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function __param(paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
}
var DefaultSerializer = (function () {
function DefaultSerializer() {
}
DefaultSerializer.prototype.serialize = function (instance) {
return JSON.stringify({ data: instance });
};
DefaultSerializer.prototype.deserializeOne = function (response, domainClass) {
return new domainClass(response.json().data);
};
DefaultSerializer.prototype.deserializeMany = function (response, domainClass) {
return response.json().data.map(function (props) { return new domainClass(props); });
};
return DefaultSerializer;
})();
var StoreConfigMetadata = (function () {
function StoreConfigMetadata(config) {
this.config = config;
}
return StoreConfigMetadata;
})();
var StoreConfig = angular2_src_core_util_decorators.makeDecorator(StoreConfigMetadata);
var ModelDecoratorMetadata = (function () {
function ModelDecoratorMetadata(options) {
this.options = options;
}
return ModelDecoratorMetadata;
})();
var Model = angular2_src_core_util_decorators.makeDecorator(ModelDecoratorMetadata);
var Store = (function () {
function Store(http) {
this.http = http;
}
Object.defineProperty(Store.prototype, "config", {
get: function () {
return angular2_src_core_reflection_reflection.reflector.annotations(this.constructor)[0].config;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Store.prototype, "serializer", {
get: function () {
if (!this._serializer) {
this._serializer = new DefaultSerializer();
}
return this._serializer;
},
enumerable: true,
configurable: true
});
Store.prototype.getModelMetadata = function (domainClass) {
// we're assuming model annotation is always first
return angular2_src_core_reflection_reflection.reflector.annotations(domainClass)[0].options;
};
Store.prototype.buildUrl = function (domainClass) {
var modelMetadata = this.getModelMetadata(domainClass);
return "" + this.config.baseURL + modelMetadata.path;
};
Store.prototype.query = function (domainClass) {
var _this = this;
return this.http.get(this.buildUrl(domainClass))
.map(function (res) { return _this.serializer.deserializeMany(res, domainClass); });
};
Store.prototype.find = function (domainClass, id) {
var _this = this;
return this.http.get(this.buildUrl(domainClass) + "/" + id)
.map(function (res) { return _this.serializer.deserializeOne(res, domainClass); });
};
Store.prototype.create = function (instance) {
var _this = this;
var headers = new angular2_http.Headers();
headers.append("Content-Type", "application/json");
return this.http.post(this.buildUrl(instance.constructor), this.serializer.serialize(instance), { headers: headers })
.map(function (res) { return _this.serializer.deserializeOne(res, instance.constructor); });
};
Store = __decorate([
__param(0, angular2_core.Inject(angular2_http.Http))
], Store);
return Store;
})();
exports.DefaultSerializer = DefaultSerializer;
exports.Store = Store;
exports.StoreConfig = StoreConfig;
exports.Model = Model;
}));
//# sourceMappingURL=angular2-data.umd.js.map