From 68cc7e8504cedf466297ae0d1ea73ed2bfce6f6a Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Thu, 9 Mar 2017 14:54:45 +0300 Subject: [PATCH 01/12] Add parsing custom meta-data from http --- package.json | 52 +- .../json-api-model-config.decorator.ts | 11 +- src/index.ts | 2 + src/models/json-api-meta.model.ts | 8 + src/models/json-api-query-data.ts | 14 + src/services/json-api-datastore.service.ts | 446 +++++++++--------- 6 files changed, 288 insertions(+), 245 deletions(-) create mode 100644 src/models/json-api-meta.model.ts create mode 100644 src/models/json-api-query-data.ts diff --git a/package.json b/package.json index 24f55e3c..ef5db8d6 100644 --- a/package.json +++ b/package.json @@ -37,47 +37,47 @@ "moment": "^2.15.2" }, "peerDependencies": { - "@angular/http": "2.2.3", - "@angular/core": "2.2.3", + "@angular/http": "2.4.9", + "@angular/core": "2.4.9", "reflect-metadata": "^0.1.3", - "rxjs": "5.0.0-beta.12" + "rxjs": "5.2.0" }, "devDependencies": { - "@angular/common": "2.2.3", - "@angular/compiler": "2.2.3", - "@angular/compiler-cli": "2.2.3", - "@angular/core": "2.2.3", - "@angular/http": "2.2.3", - "@angular/platform-browser": "2.2.3", - "@angular/platform-browser-dynamic": "2.2.3", - "@angular/platform-server": "2.2.3", - "@types/jasmine": "2.5.38", + "@angular/common": "2.4.9", + "@angular/compiler": "2.4.9", + "@angular/compiler-cli": "2.4.9", + "@angular/core": "2.4.9", + "@angular/http": "2.4.9", + "@angular/platform-browser": "2.4.9", + "@angular/platform-browser-dynamic": "2.4.9", + "@angular/platform-server": "2.4.9", + "@types/jasmine": "2.5.43", "@types/lodash": "^4.14.37", - "@types/reflect-metadata": "0.0.4", - "@types/selenium-webdriver": "^2.53.30", - "codelyzer": "~2.0.0-beta.1", + "@types/reflect-metadata": "0.0.5", + "@types/selenium-webdriver": "^3.0.0", + "codelyzer": "~3.0.0-beta.3", "core-js": "^2.4.1", "coveralls": "^2.11.14", "jasmine-core": "2.5.2", - "karma": "1.3.0", + "karma": "1.5.0", "karma-chrome-launcher": "^2.0.0", "karma-coverage": "^1.1.1", - "karma-jasmine": "1.0.2", + "karma-jasmine": "1.1.0", "karma-phantomjs-launcher": "^1.0.2", - "karma-remap-istanbul": "^0.2.1", + "karma-remap-istanbul": "^0.6.0", "karma-sourcemap-loader": "0.3.7", - "karma-spec-reporter": "0.0.26", - "karma-webpack": "1.8.0", - "phantomjs-prebuilt": "2.1.12", + "karma-spec-reporter": "0.0.30", + "karma-webpack": "2.0.2", + "phantomjs-prebuilt": "2.1.14", "reflect-metadata": "^0.1.3", "rimraf": "^2.5.4", - "rxjs": "5.0.0-beta.12", + "rxjs": "5.2.0", "sourcemap-istanbul-instrumenter-loader": "^0.2.0", - "ts-loader": "^0.8.2", + "ts-loader": "^2.0.1", "tslint": "^4.0.2", - "typescript": "~2.0.3", - "webpack": "1.13.2", - "zone.js": "^0.6.23" + "typescript": "~2.2.1", + "webpack": "2.2.1", + "zone.js": "^0.7.7" }, "engines": { "node": ">=0.8.0" diff --git a/src/decorators/json-api-model-config.decorator.ts b/src/decorators/json-api-model-config.decorator.ts index c8b51345..4326b99e 100644 --- a/src/decorators/json-api-model-config.decorator.ts +++ b/src/decorators/json-api-model-config.decorator.ts @@ -1,5 +1,10 @@ +import {JsonApiMetaModel} from '../models/json-api-meta.model'; + export function JsonApiModelConfig(config: any = {}) { - return function (target: any) { - Reflect.defineMetadata('JsonApiModelConfig', config, target); - }; + return function (target: any) { + if (typeof config['meta'] === 'undefined' || config['meta'] == null) { + config['meta'] = JsonApiMetaModel; + } + Reflect.defineMetadata('JsonApiModelConfig', config, target); + }; } diff --git a/src/index.ts b/src/index.ts index 28ac2698..fb692f21 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,8 +4,10 @@ export * from './decorators/attribute.decorator'; export * from './decorators/json-api-model-config.decorator'; export * from './decorators/json-api-datastore-config.decorator'; +export * from './models/json-api-meta.model'; export * from './models/json-api.model'; export * from './models/error-response.model'; +export * from './models/json-api-query-data'; export * from './providers'; diff --git a/src/models/json-api-meta.model.ts b/src/models/json-api-meta.model.ts new file mode 100644 index 00000000..f1fb70d7 --- /dev/null +++ b/src/models/json-api-meta.model.ts @@ -0,0 +1,8 @@ +export class JsonApiMetaModel { + public links: Array; + + constructor() { + this.links = []; + } + +} diff --git a/src/models/json-api-query-data.ts b/src/models/json-api-query-data.ts new file mode 100644 index 00000000..f78373a3 --- /dev/null +++ b/src/models/json-api-query-data.ts @@ -0,0 +1,14 @@ +import {JsonApiModel} from './json-api.model'; + +export class JsonApiQueryData { + constructor(public jsonApiModels: Array, public metaData?: any) { + } + + public getModels(): T[] { + return this.jsonApiModels; + } + + public getMeta(): any { + return this.metaData; + } +} diff --git a/src/services/json-api-datastore.service.ts b/src/services/json-api-datastore.service.ts index 1bfb85fe..1b74a133 100644 --- a/src/services/json-api-datastore.service.ts +++ b/src/services/json-api-datastore.service.ts @@ -1,267 +1,281 @@ import * as _ from 'lodash'; -import { Injectable } from '@angular/core'; -import { Http, Headers, RequestOptions, Response } from '@angular/http'; -import { Observable } from 'rxjs/Observable'; -import { ErrorObservable } from 'rxjs/observable/ErrorObservable'; +import {Injectable} from '@angular/core'; +import {Http, Headers, RequestOptions, Response} from '@angular/http'; +import {Observable} from 'rxjs/Observable'; +import {ErrorObservable} from 'rxjs/observable/ErrorObservable'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; import 'rxjs/add/observable/throw'; -import { JsonApiModel } from '../models/json-api.model'; +import {JsonApiModel} from '../models/json-api.model'; import {ErrorResponse} from '../models/error-response.model'; +import {JsonApiQueryData} from '../models/json-api-query-data'; +import {JsonApiMetaModel} from '../models/json-api-meta.model'; export type ModelType = { new(datastore: JsonApiDatastore, data: any): T; }; @Injectable() export class JsonApiDatastore { - private _headers: Headers; - private _store: any = {}; + private _headers: Headers; + private _store: any = {}; - constructor(private http: Http) { - } + constructor(private http: Http) { + } - query(modelType: ModelType, params?: any, headers?: Headers): Observable { - let options: RequestOptions = this.getOptions(headers); - let url: string = this.buildUrl(modelType, params); - return this.http.get(url, options) - .map((res: any) => this.extractQueryData(res, modelType)) - .catch((res: any) => this.handleError(res)); - } + query(modelType: ModelType, params?: any, headers?: Headers): Observable { + let options: RequestOptions = this.getOptions(headers); + let url: string = this.buildUrl(modelType, params); + return this.http.get(url, options) + .map((res: any) => this.extractQueryData(res, modelType)) + .catch((res: any) => this.handleError(res)); + } - findRecord(modelType: ModelType, id: string, params?: any, headers?: Headers): Observable { - let options: RequestOptions = this.getOptions(headers); - let url: string = this.buildUrl(modelType, params, id); - return this.http.get(url, options) - .map((res: any) => this.extractRecordData(res, modelType)) - .catch((res: any) => this.handleError(res)); - } + findRecord(modelType: ModelType, id: string, params?: any, headers?: Headers): Observable { + let options: RequestOptions = this.getOptions(headers); + let url: string = this.buildUrl(modelType, params, id); + return this.http.get(url, options) + .map((res: any) => this.extractRecordData(res, modelType)) + .catch((res: any) => this.handleError(res)); + } - createRecord(modelType: ModelType, data?: any): T { - return new modelType(this, {attributes: data}); - } + createRecord(modelType: ModelType, data?: any): T { + return new modelType(this, {attributes: data}); + } - saveRecord(attributesMetadata: any, model?: T, params?: any, headers?: Headers): Observable { - let modelType = >model.constructor; - let typeName: string = Reflect.getMetadata('JsonApiModelConfig', modelType).type; - let options: RequestOptions = this.getOptions(headers); - let relationships: any = !model.id ? this.getRelationships(model) : undefined; - let url: string = this.buildUrl(modelType, params, model.id); - let dirtyData: any = {}; - for (let propertyName in attributesMetadata) { - if (attributesMetadata.hasOwnProperty(propertyName)) { - let metadata: any = attributesMetadata[propertyName]; - if (metadata.hasDirtyAttributes) { - dirtyData[propertyName] = metadata.serialisationValue ? metadata.serialisationValue : metadata.newValue; + saveRecord(attributesMetadata: any, model?: T, params?: any, headers?: Headers): Observable { + let modelType = >model.constructor; + let typeName: string = Reflect.getMetadata('JsonApiModelConfig', modelType).type; + let options: RequestOptions = this.getOptions(headers); + let relationships: any = !model.id ? this.getRelationships(model) : undefined; + let url: string = this.buildUrl(modelType, params, model.id); + let dirtyData: any = {}; + for (let propertyName in attributesMetadata) { + if (attributesMetadata.hasOwnProperty(propertyName)) { + let metadata: any = attributesMetadata[propertyName]; + if (metadata.hasDirtyAttributes) { + dirtyData[propertyName] = metadata.serialisationValue ? metadata.serialisationValue : metadata.newValue; + } + } } - } - } - let httpCall: Observable; - let body: any = { - data: { - type: typeName, - id: model.id, - attributes: dirtyData, - relationships: relationships - } - }; - if (model.id) { - httpCall = this.http.patch(url, body, options); - } else { - httpCall = this.http.post(url, body, options); + let httpCall: Observable; + let body: any = { + data: { + type: typeName, + id: model.id, + attributes: dirtyData, + relationships: relationships + } + }; + if (model.id) { + httpCall = this.http.patch(url, body, options); + } else { + httpCall = this.http.post(url, body, options); + } + return httpCall + .map((res: any) => this.extractRecordData(res, modelType, model)) + .map((res: any) => this.resetMetadataAttributes(res, attributesMetadata, modelType)) + .map((res: any) => this.updateRelationships(res, relationships)) + .catch((res: any) => this.handleError(res)); } - return httpCall - .map((res: any) => this.extractRecordData(res, modelType, model)) - .map((res: any) => this.resetMetadataAttributes(res, attributesMetadata, modelType)) - .map((res: any) => this.updateRelationships(res, relationships)) - .catch((res: any) => this.handleError(res)); - } - deleteRecord(modelType: ModelType, id: string, headers?: Headers): Observable { - let options: RequestOptions = this.getOptions(headers); - let url: string = this.buildUrl(modelType, null, id); - return this.http.delete(url, options) - .catch((res: any) => this.handleError(res)); - } + deleteRecord(modelType: ModelType, id: string, headers?: Headers): Observable { + let options: RequestOptions = this.getOptions(headers); + let url: string = this.buildUrl(modelType, null, id); + return this.http.delete(url, options) + .catch((res: any) => this.handleError(res)); + } - peekRecord(modelType: ModelType, id: string): T { - let type: string = Reflect.getMetadata('JsonApiModelConfig', modelType).type; - return this._store[type] ? this._store[type][id] : null; - } + peekRecord(modelType: ModelType, id: string): T { + let type: string = Reflect.getMetadata('JsonApiModelConfig', modelType).type; + return this._store[type] ? this._store[type][id] : null; + } - peekAll(modelType: ModelType): T[] { - let type = Reflect.getMetadata('JsonApiModelConfig', modelType).type; - return _.values(this._store[type]); - } + peekAll(modelType: ModelType): T[] { + let type = Reflect.getMetadata('JsonApiModelConfig', modelType).type; + return _.values(this._store[type]); + } - set headers(headers: Headers) { - this._headers = headers; - } + set headers(headers: Headers) { + this._headers = headers; + } - private buildUrl(modelType: ModelType, params?: any, id?: string): string { - let typeName: string = Reflect.getMetadata('JsonApiModelConfig', modelType).type; - let baseUrl: string = Reflect.getMetadata('JsonApiDatastoreConfig', this.constructor).baseUrl; - let idToken: string = id ? `/${id}` : null; - return [baseUrl, typeName, idToken, (params ? '?' : ''), this.toQueryString(params)].join(''); - } + private buildUrl(modelType: ModelType, params?: any, id?: string): string { + let typeName: string = Reflect.getMetadata('JsonApiModelConfig', modelType).type; + let baseUrl: string = Reflect.getMetadata('JsonApiDatastoreConfig', this.constructor).baseUrl; + let idToken: string = id ? `/${id}` : null; + return [baseUrl, typeName, idToken, (params ? '?' : ''), this.toQueryString(params)].join(''); + } - private getRelationships(data: any): any { - let relationships: any; - for (let key in data) { - if (data.hasOwnProperty(key)) { - if (data[key] instanceof JsonApiModel) { - relationships = relationships || {}; - let relationshipType: string = Reflect.getMetadata('JsonApiModelConfig', data[key].constructor).type; - relationships[key] = { - data: { - type: relationshipType, - id: data[key].id + private getRelationships(data: any): any { + let relationships: any; + for (let key in data) { + if (data.hasOwnProperty(key)) { + if (data[key] instanceof JsonApiModel) { + relationships = relationships || {}; + let relationshipType: string = Reflect.getMetadata('JsonApiModelConfig', data[key].constructor).type; + relationships[key] = { + data: { + type: relationshipType, + id: data[key].id + } + }; + } } - }; } - } + return relationships; } - return relationships; - } - private extractQueryData(res: any, modelType: ModelType): T[] { - let body: any = res.json(); - let models: T[] = []; - body.data.forEach((data: any) => { - let model: T = new modelType(this, data); - this.addToStore(model); - if (body.included) { - model.syncRelationships(data, body.included, 0); - this.addToStore(model); - } - models.push(model); - }); - return models; - } - - private extractRecordData(res: any, modelType: ModelType, model?: T): T { - let body: any = res.json(); - if (model) { - model.id = body.data.id; - _.extend(model, body.data.attributes); - } - model = model || new modelType(this, body.data); - this.addToStore(model); - if (body.included) { - model.syncRelationships(body.data, body.included, 0); - this.addToStore(model); + private extractQueryData(res: any, modelType: ModelType): JsonApiQueryData { + let body: any = res.json(); + let models: T[] = []; + body.data.forEach((data: any) => { + let model: T = new modelType(this, data); + this.addToStore(model); + if (body.included) { + model.syncRelationships(data, body.included, 0); + this.addToStore(model); + } + models.push(model); + }); + return new JsonApiQueryData(models, this.parseMeta(body, modelType)); } - return model; - } - protected handleError(error: any): ErrorObservable { - let errMsg: string = (error.message) ? error.message : - error.status ? `${error.status} - ${error.statusText}` : 'Server error'; - try { - let body: any = error.json(); - if (body.errors && body.errors instanceof Array) { - let errors: ErrorResponse = new ErrorResponse(body.errors); - console.error(errMsg, errors); - return Observable.throw(errors); - } - } catch (e) { - // no valid JSON + private extractRecordData(res: any, modelType: ModelType, model?: T): T { + let body: any = res.json(); + if (model) { + model.id = body.data.id; + _.extend(model, body.data.attributes); + } + model = model || new modelType(this, body.data); + this.addToStore(model); + if (body.included) { + model.syncRelationships(body.data, body.included, 0); + this.addToStore(model); + } + return model; } - console.error(errMsg); - return Observable.throw(errMsg); - } + protected handleError(error: any): ErrorObservable { + let errMsg: string = (error.message) ? error.message : + error.status ? `${error.status} - ${error.statusText}` : 'Server error'; + try { + let body: any = error.json(); + if (body.errors && body.errors instanceof Array) { + let errors: ErrorResponse = new ErrorResponse(body.errors); + console.error(errMsg, errors); + return Observable.throw(errors); + } + } catch (e) { + // no valid JSON + } - private getOptions(customHeaders?: Headers): RequestOptions { - let requestHeaders = new Headers(); - requestHeaders.set('Accept', 'application/vnd.api+json'); - requestHeaders.set('Content-Type', 'application/vnd.api+json'); - if (this._headers) { - this._headers.forEach((values, name) => { - requestHeaders.set(name, values); - }); + console.error(errMsg); + return Observable.throw(errMsg); } - if (customHeaders) { - customHeaders.forEach((values, name) => { - requestHeaders.set(name, values); - }); + protected parseMeta(body: any, modelType: ModelType): any { + let metaModel: any = Reflect.getMetadata('JsonApiModelConfig', modelType).meta; + let jsonApiMeta = new metaModel(); + + for (let key in body) { + if (jsonApiMeta.hasOwnProperty(key)) { + jsonApiMeta[key] = body[key]; + } + } + return jsonApiMeta; } - return new RequestOptions({headers: requestHeaders}); - } - private toQueryString(params: any) { - let encodedStr = ''; - for (let key in params) { - if (params.hasOwnProperty(key)) { - if (encodedStr && encodedStr[encodedStr.length - 1] !== '&') { - encodedStr = encodedStr + '&'; + private getOptions(customHeaders?: Headers): RequestOptions { + let requestHeaders = new Headers(); + requestHeaders.set('Accept', 'application/vnd.api+json'); + requestHeaders.set('Content-Type', 'application/vnd.api+json'); + if (this._headers) { + this._headers.forEach((values, name) => { + requestHeaders.set(name, values); + }); } - let value: any = params[key]; - if (value instanceof Array) { - for (let i = 0; i < value.length; i++) { - encodedStr = encodedStr + key + '=' + encodeURIComponent(value[i]) + '&'; - } - } else if (typeof value === 'object') { - for (let innerKey in value) { - if (value.hasOwnProperty(innerKey)) { - encodedStr = encodedStr + key + '[' + innerKey + ']=' + encodeURIComponent(value[innerKey]) + '&'; - } - } - } else { - encodedStr = encodedStr + key + '=' + encodeURIComponent(value); + + if (customHeaders) { + customHeaders.forEach((values, name) => { + requestHeaders.set(name, values); + }); } - } + return new RequestOptions({headers: requestHeaders}); } - if (encodedStr[encodedStr.length - 1] === '&') { - encodedStr = encodedStr.substr(0, encodedStr.length - 1); + + private toQueryString(params: any) { + let encodedStr = ''; + for (let key in params) { + if (params.hasOwnProperty(key)) { + if (encodedStr && encodedStr[encodedStr.length - 1] !== '&') { + encodedStr = encodedStr + '&'; + } + let value: any = params[key]; + if (value instanceof Array) { + for (let i = 0; i < value.length; i++) { + encodedStr = encodedStr + key + '=' + encodeURIComponent(value[i]) + '&'; + } + } else if (typeof value === 'object') { + for (let innerKey in value) { + if (value.hasOwnProperty(innerKey)) { + encodedStr = encodedStr + key + '[' + innerKey + ']=' + encodeURIComponent(value[innerKey]) + '&'; + } + } + } else { + encodedStr = encodedStr + key + '=' + encodeURIComponent(value); + } + } + } + if (encodedStr[encodedStr.length - 1] === '&') { + encodedStr = encodedStr.substr(0, encodedStr.length - 1); + } + return encodedStr; } - return encodedStr; - } - public addToStore(models: JsonApiModel | JsonApiModel[]): void { - let model: JsonApiModel = models instanceof Array ? models[0] : models; - let type: string = Reflect.getMetadata('JsonApiModelConfig', model.constructor).type; - if (!this._store[type]) { - this._store[type] = {}; + public addToStore(models: JsonApiModel | JsonApiModel[]): void { + let model: JsonApiModel = models instanceof Array ? models[0] : models; + let type: string = Reflect.getMetadata('JsonApiModelConfig', model.constructor).type; + if (!this._store[type]) { + this._store[type] = {}; + } + let hash: any = this.fromArrayToHash(models); + _.extend(this._store[type], hash); } - let hash: any = this.fromArrayToHash(models); - _.extend(this._store[type], hash); - } - private fromArrayToHash(models: JsonApiModel | JsonApiModel[]): any { - let modelsArray: JsonApiModel[] = models instanceof Array ? models : [models]; - return _.keyBy(modelsArray, 'id'); - } + private fromArrayToHash(models: JsonApiModel | JsonApiModel[]): any { + let modelsArray: JsonApiModel[] = models instanceof Array ? models : [models]; + return _.keyBy(modelsArray, 'id'); + } - private resetMetadataAttributes(res: any, attributesMetadata: any, modelType: ModelType) { - attributesMetadata = Reflect.getMetadata('Attribute', res); - for (let propertyName in attributesMetadata) { - if (attributesMetadata.hasOwnProperty(propertyName)) { - let metadata: any = attributesMetadata[propertyName]; - if (metadata.hasDirtyAttributes) { - metadata.hasDirtyAttributes = false; + private resetMetadataAttributes(res: any, attributesMetadata: any, modelType: ModelType) { + attributesMetadata = Reflect.getMetadata('Attribute', res); + for (let propertyName in attributesMetadata) { + if (attributesMetadata.hasOwnProperty(propertyName)) { + let metadata: any = attributesMetadata[propertyName]; + if (metadata.hasDirtyAttributes) { + metadata.hasDirtyAttributes = false; + } + } } - } + Reflect.defineMetadata('Attribute', attributesMetadata, res); + return res; } - Reflect.defineMetadata('Attribute', attributesMetadata, res); - return res; - } - private updateRelationships(model: JsonApiModel, relationships: any): JsonApiModel { - let modelsTypes: any = Reflect.getMetadata('JsonApiDatastoreConfig', this.constructor).models; - for (let relationship in relationships) { - if (relationships.hasOwnProperty(relationship) && model.hasOwnProperty(relationship)) { - let relationshipModel: JsonApiModel = model[relationship]; - let hasMany: any[] = Reflect.getMetadata('HasMany', relationshipModel); - let propertyHasMany: any = _.find(hasMany, (property) => { - return modelsTypes[property.relationship] === model.constructor; - }); - if (propertyHasMany) { - relationshipModel[propertyHasMany.propertyName].push(model); + private updateRelationships(model: JsonApiModel, relationships: any): JsonApiModel { + let modelsTypes: any = Reflect.getMetadata('JsonApiDatastoreConfig', this.constructor).models; + for (let relationship in relationships) { + if (relationships.hasOwnProperty(relationship) && model.hasOwnProperty(relationship)) { + let relationshipModel: JsonApiModel = model[relationship]; + let hasMany: any[] = Reflect.getMetadata('HasMany', relationshipModel); + let propertyHasMany: any = _.find(hasMany, (property) => { + return modelsTypes[property.relationship] === model.constructor; + }); + if (propertyHasMany) { + relationshipModel[propertyHasMany.propertyName].push(model); + } + } } - } - } - return model; - }; + return model; + }; } From 260bc21c44295572c47f5f94cae506c45a078823 Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Thu, 9 Mar 2017 14:56:54 +0300 Subject: [PATCH 02/12] Change version to 3.4.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ef5db8d6..df56ba99 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular2-jsonapi", - "version": "3.4.0", + "version": "3.4.1", "description": "A lightweight Angular 2 adapter for JSON API", "scripts": { "build": "rimraf dist src/compiled && tslint src/**/*.ts && ngc", From ecccfb7dc0bc82eac44e0487c8a6ccb3d6415155 Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Fri, 10 Mar 2017 15:53:47 +0300 Subject: [PATCH 03/12] refactore code for use it on production --- src/services/json-api-datastore.service.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/services/json-api-datastore.service.ts b/src/services/json-api-datastore.service.ts index 1b74a133..88ca0259 100644 --- a/src/services/json-api-datastore.service.ts +++ b/src/services/json-api-datastore.service.ts @@ -22,6 +22,7 @@ export class JsonApiDatastore { constructor(private http: Http) { } + /** @deprecated - use findAll method to take all models **/ query(modelType: ModelType, params?: any, headers?: Headers): Observable { let options: RequestOptions = this.getOptions(headers); let url: string = this.buildUrl(modelType, params); @@ -30,6 +31,14 @@ export class JsonApiDatastore { .catch((res: any) => this.handleError(res)); } + findAll(modelType: ModelType, params?: any, headers?: Headers): Observable { + let options: RequestOptions = this.getOptions(headers); + let url: string = this.buildUrl(modelType, params); + return this.http.get(url, options) + .map((res: any) => this.extractQueryData(res, modelType, true)) + .catch((res: any) => this.handleError(res)); + } + findRecord(modelType: ModelType, id: string, params?: any, headers?: Headers): Observable { let options: RequestOptions = this.getOptions(headers); let url: string = this.buildUrl(modelType, params, id); @@ -125,7 +134,7 @@ export class JsonApiDatastore { return relationships; } - private extractQueryData(res: any, modelType: ModelType): JsonApiQueryData { + private extractQueryData(res: any, modelType: ModelType, withMeta = false): T[] | JsonApiQueryData { let body: any = res.json(); let models: T[] = []; body.data.forEach((data: any) => { @@ -137,7 +146,12 @@ export class JsonApiDatastore { } models.push(model); }); - return new JsonApiQueryData(models, this.parseMeta(body, modelType)); + + if (withMeta && withMeta === true) { + return new JsonApiQueryData(models, this.parseMeta(body, modelType)); + } else { + return models; + } } private extractRecordData(res: any, modelType: ModelType, model?: T): T { From e2f32e365a01140520674e5d48c78c4be38b136c Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Fri, 10 Mar 2017 16:16:04 +0300 Subject: [PATCH 04/12] add postinstall to packages.json --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index df56ba99..ebed2c49 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "test": "karma start", "prepublish": "ngc", "ngc": "ngc", - "servetest": "npm run pretest & karma start karma.dev.conf.js" + "servetest": "npm run pretest & karma start karma.dev.conf.js", + "postinstall": "ngc" }, "repository": { "type": "git", From 4a2ce599eca29ee987f343dc4372b6dd2c9cb076 Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Fri, 10 Mar 2017 16:30:05 +0300 Subject: [PATCH 05/12] postintall --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ebed2c49..4f6917b2 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "prepublish": "ngc", "ngc": "ngc", "servetest": "npm run pretest & karma start karma.dev.conf.js", - "postinstall": "ngc" + "postinstall": "npm i && ngc" }, "repository": { "type": "git", From ba578cc50e74c1d7759ea0754462f83cf750a1cd Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Fri, 10 Mar 2017 17:07:56 +0300 Subject: [PATCH 06/12] postintall --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4f6917b2..6f5e49d6 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "prepublish": "ngc", "ngc": "ngc", "servetest": "npm run pretest & karma start karma.dev.conf.js", - "postinstall": "npm i && ngc" + "postinstall": "npm run build" }, "repository": { "type": "git", From c04535a47058044228ba253045935b748545168c Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Fri, 10 Mar 2017 17:29:13 +0300 Subject: [PATCH 07/12] add dist to project for install that package from git --- .gitignore | 4 - dist/decorators/attribute.decorator.d.ts | 1 + dist/decorators/attribute.decorator.js | 56 ++++ dist/decorators/attribute.decorator.js.map | 1 + .../attribute.decorator.metadata.json | 1 + dist/decorators/belongs-to.decorator.d.ts | 1 + dist/decorators/belongs-to.decorator.js | 15 + dist/decorators/belongs-to.decorator.js.map | 1 + .../belongs-to.decorator.metadata.json | 1 + dist/decorators/has-many.decorator.d.ts | 1 + dist/decorators/has-many.decorator.js | 15 + dist/decorators/has-many.decorator.js.map | 1 + .../has-many.decorator.metadata.json | 1 + .../json-api-datastore-config.decorator.d.ts | 1 + .../json-api-datastore-config.decorator.js | 10 + ...json-api-datastore-config.decorator.js.map | 1 + ...i-datastore-config.decorator.metadata.json | 1 + .../json-api-model-config.decorator.d.ts | 1 + .../json-api-model-config.decorator.js | 14 + .../json-api-model-config.decorator.js.map | 1 + ...n-api-model-config.decorator.metadata.json | 1 + dist/index.d.ts | 11 + dist/index.js | 17 + dist/index.js.map | 1 + dist/index.metadata.json | 1 + dist/models/error-response.model.d.ts | 17 + dist/models/error-response.model.js | 13 + dist/models/error-response.model.js.map | 1 + .../models/error-response.model.metadata.json | 1 + dist/models/json-api-meta.model.d.ts | 4 + dist/models/json-api-meta.model.js | 10 + dist/models/json-api-meta.model.js.map | 1 + dist/models/json-api-meta.model.metadata.json | 1 + dist/models/json-api-query-data.d.ts | 8 + dist/models/json-api-query-data.js | 17 + dist/models/json-api-query-data.js.map | 1 + dist/models/json-api-query-data.metadata.json | 1 + dist/models/json-api.model.d.ts | 18 ++ dist/models/json-api.model.js | 144 +++++++++ dist/models/json-api.model.js.map | 1 + dist/models/json-api.model.metadata.json | 1 + dist/module.d.ts | 2 + dist/module.js | 24 ++ dist/module.js.map | 1 + dist/module.metadata.json | 1 + dist/providers.d.ts | 2 + dist/providers.js | 11 + dist/providers.js.map | 1 + dist/providers.metadata.json | 1 + dist/services/json-api-datastore.service.d.ts | 39 +++ dist/services/json-api-datastore.service.js | 296 ++++++++++++++++++ .../json-api-datastore.service.js.map | 1 + .../json-api-datastore.service.metadata.json | 1 + 53 files changed, 774 insertions(+), 4 deletions(-) create mode 100644 dist/decorators/attribute.decorator.d.ts create mode 100644 dist/decorators/attribute.decorator.js create mode 100644 dist/decorators/attribute.decorator.js.map create mode 100644 dist/decorators/attribute.decorator.metadata.json create mode 100644 dist/decorators/belongs-to.decorator.d.ts create mode 100644 dist/decorators/belongs-to.decorator.js create mode 100644 dist/decorators/belongs-to.decorator.js.map create mode 100644 dist/decorators/belongs-to.decorator.metadata.json create mode 100644 dist/decorators/has-many.decorator.d.ts create mode 100644 dist/decorators/has-many.decorator.js create mode 100644 dist/decorators/has-many.decorator.js.map create mode 100644 dist/decorators/has-many.decorator.metadata.json create mode 100644 dist/decorators/json-api-datastore-config.decorator.d.ts create mode 100644 dist/decorators/json-api-datastore-config.decorator.js create mode 100644 dist/decorators/json-api-datastore-config.decorator.js.map create mode 100644 dist/decorators/json-api-datastore-config.decorator.metadata.json create mode 100644 dist/decorators/json-api-model-config.decorator.d.ts create mode 100644 dist/decorators/json-api-model-config.decorator.js create mode 100644 dist/decorators/json-api-model-config.decorator.js.map create mode 100644 dist/decorators/json-api-model-config.decorator.metadata.json create mode 100644 dist/index.d.ts create mode 100644 dist/index.js create mode 100644 dist/index.js.map create mode 100644 dist/index.metadata.json create mode 100644 dist/models/error-response.model.d.ts create mode 100644 dist/models/error-response.model.js create mode 100644 dist/models/error-response.model.js.map create mode 100644 dist/models/error-response.model.metadata.json create mode 100644 dist/models/json-api-meta.model.d.ts create mode 100644 dist/models/json-api-meta.model.js create mode 100644 dist/models/json-api-meta.model.js.map create mode 100644 dist/models/json-api-meta.model.metadata.json create mode 100644 dist/models/json-api-query-data.d.ts create mode 100644 dist/models/json-api-query-data.js create mode 100644 dist/models/json-api-query-data.js.map create mode 100644 dist/models/json-api-query-data.metadata.json create mode 100644 dist/models/json-api.model.d.ts create mode 100644 dist/models/json-api.model.js create mode 100644 dist/models/json-api.model.js.map create mode 100644 dist/models/json-api.model.metadata.json create mode 100644 dist/module.d.ts create mode 100644 dist/module.js create mode 100644 dist/module.js.map create mode 100644 dist/module.metadata.json create mode 100644 dist/providers.d.ts create mode 100644 dist/providers.js create mode 100644 dist/providers.js.map create mode 100644 dist/providers.metadata.json create mode 100644 dist/services/json-api-datastore.service.d.ts create mode 100644 dist/services/json-api-datastore.service.js create mode 100644 dist/services/json-api-datastore.service.js.map create mode 100644 dist/services/json-api-datastore.service.metadata.json diff --git a/.gitignore b/.gitignore index 29d7f939..0cf2f86b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,10 +3,6 @@ node_modules/* npm-debug.log # TypeScript -*.js -*.map -*.d.ts -*.metadata.json src/compiled # JetBrains diff --git a/dist/decorators/attribute.decorator.d.ts b/dist/decorators/attribute.decorator.d.ts new file mode 100644 index 00000000..e8182e22 --- /dev/null +++ b/dist/decorators/attribute.decorator.d.ts @@ -0,0 +1 @@ +export declare function Attribute(config?: any): (target: any, propertyName: string) => void; diff --git a/dist/decorators/attribute.decorator.js b/dist/decorators/attribute.decorator.js new file mode 100644 index 00000000..f496fd80 --- /dev/null +++ b/dist/decorators/attribute.decorator.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var moment = require("moment"); +function Attribute(config) { + if (config === void 0) { config = {}; } + return function (target, propertyName) { + var converter = function (dataType, value, forSerialisation) { + if (forSerialisation === void 0) { forSerialisation = false; } + if (!forSerialisation) { + if (dataType === Date) { + return moment(value).toDate(); + } + } + else { + if (dataType === Date) { + return moment(value).format(moment.defaultFormatUtc); + } + } + return value; + }; + var saveAnnotations = function (hasDirtyAttributes, oldValue, newValue, isNew) { + var annotations = Reflect.getMetadata('Attribute', target) || {}; + var targetType = Reflect.getMetadata('design:type', target, propertyName); + hasDirtyAttributes = typeof oldValue === 'undefined' && !isNew ? false : hasDirtyAttributes; + annotations[propertyName] = { + hasDirtyAttributes: hasDirtyAttributes, + oldValue: oldValue, + newValue: newValue, + serialisationValue: converter(targetType, newValue, true) + }; + Reflect.defineMetadata('Attribute', annotations, target); + }; + var getter = function () { + return this['_' + propertyName]; + }; + var setter = function (newVal) { + var targetType = Reflect.getMetadata('design:type', target, propertyName); + var convertedValue = converter(targetType, newVal); + if (convertedValue !== this['_' + propertyName]) { + saveAnnotations(true, this['_' + propertyName], newVal, !this.id); + this['_' + propertyName] = convertedValue; + } + }; + if (delete target[propertyName]) { + saveAnnotations(false, undefined, target[propertyName], target.id); + Object.defineProperty(target, propertyName, { + get: getter, + set: setter, + enumerable: true, + configurable: true + }); + } + }; +} +exports.Attribute = Attribute; +//# sourceMappingURL=attribute.decorator.js.map \ No newline at end of file diff --git a/dist/decorators/attribute.decorator.js.map b/dist/decorators/attribute.decorator.js.map new file mode 100644 index 00000000..09fb6637 --- /dev/null +++ b/dist/decorators/attribute.decorator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"attribute.decorator.js","sourceRoot":"","sources":["../../src/decorators/attribute.decorator.ts"],"names":[],"mappings":";;AAAA,+BAAiC;AAEjC,mBAA0B,MAAgB;IAAhB,uBAAA,EAAA,WAAgB;IACxC,MAAM,CAAC,UAAU,MAAW,EAAE,YAAoB;QAEhD,IAAI,SAAS,GAAG,UAAS,QAAa,EAAE,KAAU,EAAE,gBAAwB;YAAxB,iCAAA,EAAA,wBAAwB;YAC1E,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACtB,EAAE,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;oBACtB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;gBAChC,CAAC;YACH,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,EAAE,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;oBACtB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;YAED,MAAM,CAAC,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,IAAI,eAAe,GAAG,UAAU,kBAA2B,EAAE,QAAa,EAAE,QAAa,EAAE,KAAc;YACvG,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YACjE,IAAI,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YAE1E,kBAAkB,GAAG,OAAO,QAAQ,KAAK,WAAW,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,kBAAkB,CAAC;YAC5F,WAAW,CAAC,YAAY,CAAC,GAAG;gBAC1B,kBAAkB,EAAE,kBAAkB;gBACtC,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,kBAAkB,EAAE,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC;aAC1D,CAAC;YACF,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC,CAAC;QAEF,IAAI,MAAM,GAAG;YACX,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,IAAI,MAAM,GAAG,UAAU,MAAW;YAChC,IAAI,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YAC1E,IAAI,cAAc,GAAG,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACnD,EAAE,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAChD,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClE,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,cAAc,CAAC;YAC5C,CAAC;QACH,CAAC,CAAC;QAEF,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;gBAC1C,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE,MAAM;gBACX,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAtDD,8BAsDC"} \ No newline at end of file diff --git a/dist/decorators/attribute.decorator.metadata.json b/dist/decorators/attribute.decorator.metadata.json new file mode 100644 index 00000000..4520d2d3 --- /dev/null +++ b/dist/decorators/attribute.decorator.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"Attribute":{"__symbolic":"function","parameters":["config"],"value":{"__symbolic":"error","message":"Function call not supported","line":3,"character":9},"defaults":[{}]}}},{"__symbolic":"module","version":1,"metadata":{"Attribute":{"__symbolic":"function","parameters":["config"],"value":{"__symbolic":"error","message":"Function call not supported","line":3,"character":9},"defaults":[{}]}}}] \ No newline at end of file diff --git a/dist/decorators/belongs-to.decorator.d.ts b/dist/decorators/belongs-to.decorator.d.ts new file mode 100644 index 00000000..e3261e99 --- /dev/null +++ b/dist/decorators/belongs-to.decorator.d.ts @@ -0,0 +1 @@ +export declare function BelongsTo(config?: any): (target: any, propertyName: string | symbol) => void; diff --git a/dist/decorators/belongs-to.decorator.js b/dist/decorators/belongs-to.decorator.js new file mode 100644 index 00000000..7c906f07 --- /dev/null +++ b/dist/decorators/belongs-to.decorator.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function BelongsTo(config) { + if (config === void 0) { config = {}; } + return function (target, propertyName) { + var annotations = Reflect.getMetadata('BelongsTo', target) || []; + annotations.push({ + propertyName: propertyName, + relationship: config.key || propertyName + }); + Reflect.defineMetadata('BelongsTo', annotations, target); + }; +} +exports.BelongsTo = BelongsTo; +//# sourceMappingURL=belongs-to.decorator.js.map \ No newline at end of file diff --git a/dist/decorators/belongs-to.decorator.js.map b/dist/decorators/belongs-to.decorator.js.map new file mode 100644 index 00000000..01b47eb4 --- /dev/null +++ b/dist/decorators/belongs-to.decorator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"belongs-to.decorator.js","sourceRoot":"","sources":["../../src/decorators/belongs-to.decorator.ts"],"names":[],"mappings":";;AAAA,mBAA0B,MAAgB;IAAhB,uBAAA,EAAA,WAAgB;IACxC,MAAM,CAAC,UAAU,MAAW,EAAE,YAA6B;QACzD,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACjE,WAAW,CAAC,IAAI,CAAC;YACf,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,MAAM,CAAC,GAAG,IAAI,YAAY;SACzC,CAAC,CAAC;QACH,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC,CAAC;AACJ,CAAC;AATD,8BASC"} \ No newline at end of file diff --git a/dist/decorators/belongs-to.decorator.metadata.json b/dist/decorators/belongs-to.decorator.metadata.json new file mode 100644 index 00000000..af3adcc9 --- /dev/null +++ b/dist/decorators/belongs-to.decorator.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"BelongsTo":{"__symbolic":"function","parameters":["config"],"value":{"__symbolic":"error","message":"Function call not supported","line":1,"character":9},"defaults":[{}]}}},{"__symbolic":"module","version":1,"metadata":{"BelongsTo":{"__symbolic":"function","parameters":["config"],"value":{"__symbolic":"error","message":"Function call not supported","line":1,"character":9},"defaults":[{}]}}}] \ No newline at end of file diff --git a/dist/decorators/has-many.decorator.d.ts b/dist/decorators/has-many.decorator.d.ts new file mode 100644 index 00000000..f3e62709 --- /dev/null +++ b/dist/decorators/has-many.decorator.d.ts @@ -0,0 +1 @@ +export declare function HasMany(config?: any): (target: any, propertyName: string | symbol) => void; diff --git a/dist/decorators/has-many.decorator.js b/dist/decorators/has-many.decorator.js new file mode 100644 index 00000000..03fdf175 --- /dev/null +++ b/dist/decorators/has-many.decorator.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function HasMany(config) { + if (config === void 0) { config = {}; } + return function (target, propertyName) { + var annotations = Reflect.getMetadata('HasMany', target) || []; + annotations.push({ + propertyName: propertyName, + relationship: config.key || propertyName + }); + Reflect.defineMetadata('HasMany', annotations, target); + }; +} +exports.HasMany = HasMany; +//# sourceMappingURL=has-many.decorator.js.map \ No newline at end of file diff --git a/dist/decorators/has-many.decorator.js.map b/dist/decorators/has-many.decorator.js.map new file mode 100644 index 00000000..2df84eaf --- /dev/null +++ b/dist/decorators/has-many.decorator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"has-many.decorator.js","sourceRoot":"","sources":["../../src/decorators/has-many.decorator.ts"],"names":[],"mappings":";;AAAA,iBAAwB,MAAgB;IAAhB,uBAAA,EAAA,WAAgB;IACtC,MAAM,CAAC,UAAU,MAAW,EAAE,YAA6B;QACzD,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/D,WAAW,CAAC,IAAI,CAAC;YACf,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,MAAM,CAAC,GAAG,IAAI,YAAY;SACzC,CAAC,CAAC;QACH,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC;AATD,0BASC"} \ No newline at end of file diff --git a/dist/decorators/has-many.decorator.metadata.json b/dist/decorators/has-many.decorator.metadata.json new file mode 100644 index 00000000..7075a769 --- /dev/null +++ b/dist/decorators/has-many.decorator.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"HasMany":{"__symbolic":"function","parameters":["config"],"value":{"__symbolic":"error","message":"Function call not supported","line":1,"character":9},"defaults":[{}]}}},{"__symbolic":"module","version":1,"metadata":{"HasMany":{"__symbolic":"function","parameters":["config"],"value":{"__symbolic":"error","message":"Function call not supported","line":1,"character":9},"defaults":[{}]}}}] \ No newline at end of file diff --git a/dist/decorators/json-api-datastore-config.decorator.d.ts b/dist/decorators/json-api-datastore-config.decorator.d.ts new file mode 100644 index 00000000..362418c2 --- /dev/null +++ b/dist/decorators/json-api-datastore-config.decorator.d.ts @@ -0,0 +1 @@ +export declare function JsonApiDatastoreConfig(config?: any): (target: any) => void; diff --git a/dist/decorators/json-api-datastore-config.decorator.js b/dist/decorators/json-api-datastore-config.decorator.js new file mode 100644 index 00000000..d12fbd19 --- /dev/null +++ b/dist/decorators/json-api-datastore-config.decorator.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function JsonApiDatastoreConfig(config) { + if (config === void 0) { config = {}; } + return function (target) { + Reflect.defineMetadata('JsonApiDatastoreConfig', config, target); + }; +} +exports.JsonApiDatastoreConfig = JsonApiDatastoreConfig; +//# sourceMappingURL=json-api-datastore-config.decorator.js.map \ No newline at end of file diff --git a/dist/decorators/json-api-datastore-config.decorator.js.map b/dist/decorators/json-api-datastore-config.decorator.js.map new file mode 100644 index 00000000..e0e8600c --- /dev/null +++ b/dist/decorators/json-api-datastore-config.decorator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"json-api-datastore-config.decorator.js","sourceRoot":"","sources":["../../src/decorators/json-api-datastore-config.decorator.ts"],"names":[],"mappings":";;AAAA,gCAAuC,MAAgB;IAAhB,uBAAA,EAAA,WAAgB;IACrD,MAAM,CAAC,UAAU,MAAW;QAC1B,OAAO,CAAC,cAAc,CAAC,wBAAwB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC,CAAC;AACJ,CAAC;AAJD,wDAIC"} \ No newline at end of file diff --git a/dist/decorators/json-api-datastore-config.decorator.metadata.json b/dist/decorators/json-api-datastore-config.decorator.metadata.json new file mode 100644 index 00000000..b3faf563 --- /dev/null +++ b/dist/decorators/json-api-datastore-config.decorator.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"JsonApiDatastoreConfig":{"__symbolic":"function","parameters":["config"],"value":{"__symbolic":"error","message":"Function call not supported","line":1,"character":9},"defaults":[{}]}}},{"__symbolic":"module","version":1,"metadata":{"JsonApiDatastoreConfig":{"__symbolic":"function","parameters":["config"],"value":{"__symbolic":"error","message":"Function call not supported","line":1,"character":9},"defaults":[{}]}}}] \ No newline at end of file diff --git a/dist/decorators/json-api-model-config.decorator.d.ts b/dist/decorators/json-api-model-config.decorator.d.ts new file mode 100644 index 00000000..55def8c9 --- /dev/null +++ b/dist/decorators/json-api-model-config.decorator.d.ts @@ -0,0 +1 @@ +export declare function JsonApiModelConfig(config?: any): (target: any) => void; diff --git a/dist/decorators/json-api-model-config.decorator.js b/dist/decorators/json-api-model-config.decorator.js new file mode 100644 index 00000000..9f85ef06 --- /dev/null +++ b/dist/decorators/json-api-model-config.decorator.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var json_api_meta_model_1 = require("../models/json-api-meta.model"); +function JsonApiModelConfig(config) { + if (config === void 0) { config = {}; } + return function (target) { + if (typeof config['meta'] === 'undefined' || config['meta'] == null) { + config['meta'] = json_api_meta_model_1.JsonApiMetaModel; + } + Reflect.defineMetadata('JsonApiModelConfig', config, target); + }; +} +exports.JsonApiModelConfig = JsonApiModelConfig; +//# sourceMappingURL=json-api-model-config.decorator.js.map \ No newline at end of file diff --git a/dist/decorators/json-api-model-config.decorator.js.map b/dist/decorators/json-api-model-config.decorator.js.map new file mode 100644 index 00000000..f5bf4db6 --- /dev/null +++ b/dist/decorators/json-api-model-config.decorator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"json-api-model-config.decorator.js","sourceRoot":"","sources":["../../src/decorators/json-api-model-config.decorator.ts"],"names":[],"mappings":";;AAAA,qEAA+D;AAE/D,4BAAmC,MAAgB;IAAhB,uBAAA,EAAA,WAAgB;IAC/C,MAAM,CAAC,UAAU,MAAW;QACxB,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,GAAG,sCAAgB,CAAC;QACtC,CAAC;QACD,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC,CAAC;AACN,CAAC;AAPD,gDAOC"} \ No newline at end of file diff --git a/dist/decorators/json-api-model-config.decorator.metadata.json b/dist/decorators/json-api-model-config.decorator.metadata.json new file mode 100644 index 00000000..dbf90089 --- /dev/null +++ b/dist/decorators/json-api-model-config.decorator.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"JsonApiModelConfig":{"__symbolic":"function","parameters":["config"],"value":{"__symbolic":"error","message":"Function call not supported","line":3,"character":11},"defaults":[{}]}}},{"__symbolic":"module","version":1,"metadata":{"JsonApiModelConfig":{"__symbolic":"function","parameters":["config"],"value":{"__symbolic":"error","message":"Function call not supported","line":3,"character":11},"defaults":[{}]}}}] \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 00000000..5947c456 --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,11 @@ +export * from './decorators/has-many.decorator'; +export * from './decorators/belongs-to.decorator'; +export * from './decorators/attribute.decorator'; +export * from './decorators/json-api-model-config.decorator'; +export * from './decorators/json-api-datastore-config.decorator'; +export * from './models/json-api-meta.model'; +export * from './models/json-api.model'; +export * from './models/error-response.model'; +export * from './models/json-api-query-data'; +export * from './providers'; +export * from './module'; diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 00000000..ec8b4336 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,17 @@ +"use strict"; +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", { value: true }); +__export(require("./decorators/has-many.decorator")); +__export(require("./decorators/belongs-to.decorator")); +__export(require("./decorators/attribute.decorator")); +__export(require("./decorators/json-api-model-config.decorator")); +__export(require("./decorators/json-api-datastore-config.decorator")); +__export(require("./models/json-api-meta.model")); +__export(require("./models/json-api.model")); +__export(require("./models/error-response.model")); +__export(require("./models/json-api-query-data")); +__export(require("./providers")); +__export(require("./module")); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map new file mode 100644 index 00000000..3b4ce8e3 --- /dev/null +++ b/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,qDAAgD;AAChD,uDAAkD;AAClD,sDAAiD;AACjD,kEAA6D;AAC7D,sEAAiE;AAEjE,kDAA6C;AAC7C,6CAAwC;AACxC,mDAA8C;AAC9C,kDAA6C;AAE7C,iCAA4B;AAE5B,8BAAyB"} \ No newline at end of file diff --git a/dist/index.metadata.json b/dist/index.metadata.json new file mode 100644 index 00000000..5e465f08 --- /dev/null +++ b/dist/index.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{},"exports":[{"from":"./decorators/has-many.decorator"},{"from":"./decorators/belongs-to.decorator"},{"from":"./decorators/attribute.decorator"},{"from":"./decorators/json-api-model-config.decorator"},{"from":"./decorators/json-api-datastore-config.decorator"},{"from":"./models/json-api-meta.model"},{"from":"./models/json-api.model"},{"from":"./models/error-response.model"},{"from":"./models/json-api-query-data"},{"from":"./providers"},{"from":"./module"}]},{"__symbolic":"module","version":1,"metadata":{},"exports":[{"from":"./decorators/has-many.decorator"},{"from":"./decorators/belongs-to.decorator"},{"from":"./decorators/attribute.decorator"},{"from":"./decorators/json-api-model-config.decorator"},{"from":"./decorators/json-api-datastore-config.decorator"},{"from":"./models/json-api-meta.model"},{"from":"./models/json-api.model"},{"from":"./models/error-response.model"},{"from":"./models/json-api-query-data"},{"from":"./providers"},{"from":"./module"}]}] \ No newline at end of file diff --git a/dist/models/error-response.model.d.ts b/dist/models/error-response.model.d.ts new file mode 100644 index 00000000..e20ac9eb --- /dev/null +++ b/dist/models/error-response.model.d.ts @@ -0,0 +1,17 @@ +export interface JsonApiError { + id?: string; + links?: Array; + status?: string; + code?: string; + title?: string; + detail?: string; + source?: { + pointer?: string; + parameter?: string; + }; + meta?: any; +} +export declare class ErrorResponse { + errors?: JsonApiError[]; + constructor(errors?: JsonApiError[]); +} diff --git a/dist/models/error-response.model.js b/dist/models/error-response.model.js new file mode 100644 index 00000000..8dab228f --- /dev/null +++ b/dist/models/error-response.model.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var ErrorResponse = (function () { + function ErrorResponse(errors) { + this.errors = []; + if (errors) { + this.errors = errors; + } + } + return ErrorResponse; +}()); +exports.ErrorResponse = ErrorResponse; +//# sourceMappingURL=error-response.model.js.map \ No newline at end of file diff --git a/dist/models/error-response.model.js.map b/dist/models/error-response.model.js.map new file mode 100644 index 00000000..11a0ce63 --- /dev/null +++ b/dist/models/error-response.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"error-response.model.js","sourceRoot":"","sources":["../../src/models/error-response.model.ts"],"names":[],"mappings":";;AAcA;IAGI,uBAAY,MAAwB;QAFpC,WAAM,GAAoB,EAAE,CAAC;QAGzB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,CAAC;IACL,CAAC;IACL,oBAAC;AAAD,CAAC,AARD,IAQC;AARY,sCAAa"} \ No newline at end of file diff --git a/dist/models/error-response.model.metadata.json b/dist/models/error-response.model.metadata.json new file mode 100644 index 00000000..df512720 --- /dev/null +++ b/dist/models/error-response.model.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"ErrorResponse":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":17,"character":26,"context":{"typeName":"JsonApiError"}}]}]}]}}}},{"__symbolic":"module","version":1,"metadata":{"ErrorResponse":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":17,"character":26,"context":{"typeName":"JsonApiError"}}]}]}]}}}}] \ No newline at end of file diff --git a/dist/models/json-api-meta.model.d.ts b/dist/models/json-api-meta.model.d.ts new file mode 100644 index 00000000..5a5e8305 --- /dev/null +++ b/dist/models/json-api-meta.model.d.ts @@ -0,0 +1,4 @@ +export declare class JsonApiMetaModel { + links: Array; + constructor(); +} diff --git a/dist/models/json-api-meta.model.js b/dist/models/json-api-meta.model.js new file mode 100644 index 00000000..e4dbe617 --- /dev/null +++ b/dist/models/json-api-meta.model.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var JsonApiMetaModel = (function () { + function JsonApiMetaModel() { + this.links = []; + } + return JsonApiMetaModel; +}()); +exports.JsonApiMetaModel = JsonApiMetaModel; +//# sourceMappingURL=json-api-meta.model.js.map \ No newline at end of file diff --git a/dist/models/json-api-meta.model.js.map b/dist/models/json-api-meta.model.js.map new file mode 100644 index 00000000..b8591a3c --- /dev/null +++ b/dist/models/json-api-meta.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"json-api-meta.model.js","sourceRoot":"","sources":["../../src/models/json-api-meta.model.ts"],"names":[],"mappings":";;AAAA;IAGI;QACI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACpB,CAAC;IAEL,uBAAC;AAAD,CAAC,AAPD,IAOC;AAPY,4CAAgB"} \ No newline at end of file diff --git a/dist/models/json-api-meta.model.metadata.json b/dist/models/json-api-meta.model.metadata.json new file mode 100644 index 00000000..581acfe6 --- /dev/null +++ b/dist/models/json-api-meta.model.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"JsonApiMetaModel":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor"}]}}}},{"__symbolic":"module","version":1,"metadata":{"JsonApiMetaModel":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor"}]}}}}] \ No newline at end of file diff --git a/dist/models/json-api-query-data.d.ts b/dist/models/json-api-query-data.d.ts new file mode 100644 index 00000000..9b846360 --- /dev/null +++ b/dist/models/json-api-query-data.d.ts @@ -0,0 +1,8 @@ +import { JsonApiModel } from './json-api.model'; +export declare class JsonApiQueryData { + jsonApiModels: Array; + metaData: any; + constructor(jsonApiModels: Array, metaData?: any); + getModels(): T[]; + getMeta(): any; +} diff --git a/dist/models/json-api-query-data.js b/dist/models/json-api-query-data.js new file mode 100644 index 00000000..a45042cf --- /dev/null +++ b/dist/models/json-api-query-data.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var JsonApiQueryData = (function () { + function JsonApiQueryData(jsonApiModels, metaData) { + this.jsonApiModels = jsonApiModels; + this.metaData = metaData; + } + JsonApiQueryData.prototype.getModels = function () { + return this.jsonApiModels; + }; + JsonApiQueryData.prototype.getMeta = function () { + return this.metaData; + }; + return JsonApiQueryData; +}()); +exports.JsonApiQueryData = JsonApiQueryData; +//# sourceMappingURL=json-api-query-data.js.map \ No newline at end of file diff --git a/dist/models/json-api-query-data.js.map b/dist/models/json-api-query-data.js.map new file mode 100644 index 00000000..1bcac31b --- /dev/null +++ b/dist/models/json-api-query-data.js.map @@ -0,0 +1 @@ +{"version":3,"file":"json-api-query-data.js","sourceRoot":"","sources":["../../src/models/json-api-query-data.ts"],"names":[],"mappings":";;AAEA;IACI,0BAAmB,aAAyB,EAAS,QAAc;QAAhD,kBAAa,GAAb,aAAa,CAAY;QAAS,aAAQ,GAAR,QAAQ,CAAM;IACnE,CAAC;IAEM,oCAAS,GAAhB;QACI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAEM,kCAAO,GAAd;QACI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IACL,uBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,4CAAgB"} \ No newline at end of file diff --git a/dist/models/json-api-query-data.metadata.json b/dist/models/json-api-query-data.metadata.json new file mode 100644 index 00000000..d0406c70 --- /dev/null +++ b/dist/models/json-api-query-data.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"JsonApiQueryData":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"any"}]}],"getModels":[{"__symbolic":"method"}],"getMeta":[{"__symbolic":"method"}]}}}},{"__symbolic":"module","version":1,"metadata":{"JsonApiQueryData":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"any"}]}],"getModels":[{"__symbolic":"method"}],"getMeta":[{"__symbolic":"method"}]}}}}] \ No newline at end of file diff --git a/dist/models/json-api.model.d.ts b/dist/models/json-api.model.d.ts new file mode 100644 index 00000000..0360e2fe --- /dev/null +++ b/dist/models/json-api.model.d.ts @@ -0,0 +1,18 @@ +import { Headers } from '@angular/http'; +import { Observable } from 'rxjs/Observable'; +import { JsonApiDatastore } from '../services/json-api-datastore.service'; +export declare class JsonApiModel { + private _datastore; + id: string; + [key: string]: any; + constructor(_datastore: JsonApiDatastore, data?: any); + syncRelationships(data: any, included: any, level: number): void; + save(params?: any, headers?: Headers): Observable; + readonly hasDirtyAttributes: boolean; + rollbackAttributes(): void; + private parseHasMany(data, included, level); + private parseBelongsTo(data, included, level); + private getHasManyRelationship(modelType, data, included, typeName, level); + private getBelongsToRelationship(modelType, data, included, typeName, level); + private createOrPeek(modelType, data); +} diff --git a/dist/models/json-api.model.js b/dist/models/json-api.model.js new file mode 100644 index 00000000..e2f9e3af --- /dev/null +++ b/dist/models/json-api.model.js @@ -0,0 +1,144 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var _ = require("lodash"); +var JsonApiModel = (function () { + function JsonApiModel(_datastore, data) { + this._datastore = _datastore; + if (data) { + this.id = data.id; + _.extend(this, data.attributes); + } + } + JsonApiModel.prototype.syncRelationships = function (data, included, level) { + if (data) { + this.parseHasMany(data, included, level); + this.parseBelongsTo(data, included, level); + } + }; + JsonApiModel.prototype.save = function (params, headers) { + var attributesMetadata = Reflect.getMetadata('Attribute', this); + return this._datastore.saveRecord(attributesMetadata, this, params, headers); + }; + Object.defineProperty(JsonApiModel.prototype, "hasDirtyAttributes", { + get: function () { + var attributesMetadata = Reflect.getMetadata('Attribute', this); + var hasDirtyAttributes = false; + for (var propertyName in attributesMetadata) { + if (attributesMetadata.hasOwnProperty(propertyName)) { + var metadata = attributesMetadata[propertyName]; + if (metadata.hasDirtyAttributes) { + hasDirtyAttributes = true; + break; + } + } + } + return hasDirtyAttributes; + }, + enumerable: true, + configurable: true + }); + JsonApiModel.prototype.rollbackAttributes = function () { + var attributesMetadata = Reflect.getMetadata('Attribute', this); + var metadata; + for (var propertyName in attributesMetadata) { + if (attributesMetadata.hasOwnProperty(propertyName)) { + if (attributesMetadata[propertyName].hasDirtyAttributes) { + this[propertyName] = attributesMetadata[propertyName].oldValue; + metadata = { + hasDirtyAttributes: false, + newValue: attributesMetadata[propertyName].oldValue, + oldValue: undefined + }; + attributesMetadata[propertyName] = metadata; + } + } + } + Reflect.defineMetadata('Attribute', attributesMetadata, this); + }; + JsonApiModel.prototype.parseHasMany = function (data, included, level) { + var hasMany = Reflect.getMetadata('HasMany', this); + if (hasMany) { + for (var _i = 0, hasMany_1 = hasMany; _i < hasMany_1.length; _i++) { + var metadata = hasMany_1[_i]; + var relationship = data.relationships ? data.relationships[metadata.relationship] : null; + if (relationship && relationship.data && relationship.data.length > 0) { + var typeName = relationship.data[0].type; + var modelType = Reflect.getMetadata('JsonApiDatastoreConfig', this._datastore.constructor).models[typeName]; + if (modelType) { + var relationshipModel = this.getHasManyRelationship(modelType, relationship.data, included, typeName, level); + if (relationshipModel.length > 0) { + this[metadata.propertyName] = relationshipModel; + } + } + else { + throw { message: 'parseHasMany - Model type for relationship ' + typeName + ' not found.' }; + } + } + } + } + }; + JsonApiModel.prototype.parseBelongsTo = function (data, included, level) { + var belongsTo = Reflect.getMetadata('BelongsTo', this); + if (belongsTo) { + for (var _i = 0, belongsTo_1 = belongsTo; _i < belongsTo_1.length; _i++) { + var metadata = belongsTo_1[_i]; + var relationship = data.relationships ? data.relationships[metadata.relationship] : null; + if (relationship && relationship.data) { + var dataRelationship = (relationship.data instanceof Array) ? relationship.data[0] : relationship.data; + if (dataRelationship) { + var typeName = dataRelationship.type; + var modelType = Reflect.getMetadata('JsonApiDatastoreConfig', this._datastore.constructor).models[typeName]; + if (modelType) { + var relationshipModel = this.getBelongsToRelationship(modelType, dataRelationship, included, typeName, level); + if (relationshipModel) { + this[metadata.propertyName] = relationshipModel; + } + } + else { + throw { message: 'parseBelongsTo - Model type for relationship ' + typeName + ' not found.' }; + } + } + } + } + } + }; + JsonApiModel.prototype.getHasManyRelationship = function (modelType, data, included, typeName, level) { + var _this = this; + var relationshipList = []; + data.forEach(function (item) { + var relationshipData = _.find(included, { id: item.id, type: typeName }); + if (relationshipData) { + var newObject = _this.createOrPeek(modelType, relationshipData); + if (level <= 1) { + newObject.syncRelationships(relationshipData, included, level + 1); + } + relationshipList.push(newObject); + } + }); + return relationshipList; + }; + JsonApiModel.prototype.getBelongsToRelationship = function (modelType, data, included, typeName, level) { + var id = data.id; + var relationshipData = _.find(included, { id: id, type: typeName }); + if (relationshipData) { + var newObject = this.createOrPeek(modelType, relationshipData); + if (level <= 1) { + newObject.syncRelationships(relationshipData, included, level + 1); + } + return newObject; + } + return this._datastore.peekRecord(modelType, id); + }; + JsonApiModel.prototype.createOrPeek = function (modelType, data) { + var peek = this._datastore.peekRecord(modelType, data.id); + if (peek) { + return peek; + } + var newObject = new modelType(this._datastore, data); + this._datastore.addToStore(newObject); + return newObject; + }; + return JsonApiModel; +}()); +exports.JsonApiModel = JsonApiModel; +//# sourceMappingURL=json-api.model.js.map \ No newline at end of file diff --git a/dist/models/json-api.model.js.map b/dist/models/json-api.model.js.map new file mode 100644 index 00000000..673e784e --- /dev/null +++ b/dist/models/json-api.model.js.map @@ -0,0 +1 @@ +{"version":3,"file":"json-api.model.js","sourceRoot":"","sources":["../../src/models/json-api.model.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/models/json-api.model.metadata.json b/dist/models/json-api.model.metadata.json new file mode 100644 index 00000000..ec30981d --- /dev/null +++ b/dist/models/json-api.model.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"JsonApiModel":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../services/json-api-datastore.service","name":"JsonApiDatastore"},{"__symbolic":"reference","name":"any"}]}],"syncRelationships":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}],"rollbackAttributes":[{"__symbolic":"method"}],"parseHasMany":[{"__symbolic":"method"}],"parseBelongsTo":[{"__symbolic":"method"}],"getHasManyRelationship":[{"__symbolic":"method"}],"getBelongsToRelationship":[{"__symbolic":"method"}],"createOrPeek":[{"__symbolic":"method"}]}}}},{"__symbolic":"module","version":1,"metadata":{"JsonApiModel":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../services/json-api-datastore.service","name":"JsonApiDatastore"},{"__symbolic":"reference","name":"any"}]}],"syncRelationships":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}],"rollbackAttributes":[{"__symbolic":"method"}],"parseHasMany":[{"__symbolic":"method"}],"parseBelongsTo":[{"__symbolic":"method"}],"getHasManyRelationship":[{"__symbolic":"method"}],"getBelongsToRelationship":[{"__symbolic":"method"}],"createOrPeek":[{"__symbolic":"method"}]}}}}] \ No newline at end of file diff --git a/dist/module.d.ts b/dist/module.d.ts new file mode 100644 index 00000000..ac1e3dc1 --- /dev/null +++ b/dist/module.d.ts @@ -0,0 +1,2 @@ +export declare class JsonApiModule { +} diff --git a/dist/module.js b/dist/module.js new file mode 100644 index 00000000..9ee64798 --- /dev/null +++ b/dist/module.js @@ -0,0 +1,24 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (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; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var core_1 = require("@angular/core"); +var http_1 = require("@angular/http"); +var providers_1 = require("./providers"); +var JsonApiModule = (function () { + function JsonApiModule() { + } + return JsonApiModule; +}()); +JsonApiModule = __decorate([ + core_1.NgModule({ + providers: [providers_1.PROVIDERS], + exports: [http_1.HttpModule] + }) +], JsonApiModule); +exports.JsonApiModule = JsonApiModule; +//# sourceMappingURL=module.js.map \ No newline at end of file diff --git a/dist/module.js.map b/dist/module.js.map new file mode 100644 index 00000000..bc42e19e --- /dev/null +++ b/dist/module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;;AAAA,sCAAyC;AACzC,sCAA2C;AAC3C,yCAAwC;AAMxC,IAAa,aAAa;IAA1B;IACA,CAAC;IAAD,oBAAC;AAAD,CAAC,AADD,IACC;AADY,aAAa;IAJzB,eAAQ,CAAC;QACR,SAAS,EAAE,CAAC,qBAAS,CAAC;QACtB,OAAO,EAAE,CAAC,iBAAU,CAAC;KACtB,CAAC;GACW,aAAa,CACzB;AADY,sCAAa"} \ No newline at end of file diff --git a/dist/module.metadata.json b/dist/module.metadata.json new file mode 100644 index 00000000..1a51c265 --- /dev/null +++ b/dist/module.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"JsonApiModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule"},"arguments":[{"providers":[{"__symbolic":"reference","module":"./providers","name":"PROVIDERS"}],"exports":[{"__symbolic":"reference","module":"@angular/http","name":"HttpModule"}]}]}]}}},{"__symbolic":"module","version":1,"metadata":{"JsonApiModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule"},"arguments":[{"providers":[{"__symbolic":"reference","module":"./providers","name":"PROVIDERS"}],"exports":[{"__symbolic":"reference","module":"@angular/http","name":"HttpModule"}]}]}]}}}] \ No newline at end of file diff --git a/dist/providers.d.ts b/dist/providers.d.ts new file mode 100644 index 00000000..8ed20933 --- /dev/null +++ b/dist/providers.d.ts @@ -0,0 +1,2 @@ +export * from './services/json-api-datastore.service'; +export declare const PROVIDERS: any[]; diff --git a/dist/providers.js b/dist/providers.js new file mode 100644 index 00000000..ff01df79 --- /dev/null +++ b/dist/providers.js @@ -0,0 +1,11 @@ +"use strict"; +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", { value: true }); +var json_api_datastore_service_1 = require("./services/json-api-datastore.service"); +__export(require("./services/json-api-datastore.service")); +exports.PROVIDERS = [ + json_api_datastore_service_1.JsonApiDatastore +]; +//# sourceMappingURL=providers.js.map \ No newline at end of file diff --git a/dist/providers.js.map b/dist/providers.js.map new file mode 100644 index 00000000..64e74612 --- /dev/null +++ b/dist/providers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":";;;;;AAAA,oFAAyE;AAEzE,2DAAsD;AAEzC,QAAA,SAAS,GAAU;IAC9B,6CAAgB;CACjB,CAAC"} \ No newline at end of file diff --git a/dist/providers.metadata.json b/dist/providers.metadata.json new file mode 100644 index 00000000..8349c2eb --- /dev/null +++ b/dist/providers.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"PROVIDERS":[{"__symbolic":"reference","module":"./services/json-api-datastore.service","name":"JsonApiDatastore"}]},"exports":[{"from":"./services/json-api-datastore.service"}]},{"__symbolic":"module","version":1,"metadata":{"PROVIDERS":[{"__symbolic":"reference","module":"./services/json-api-datastore.service","name":"JsonApiDatastore"}]},"exports":[{"from":"./services/json-api-datastore.service"}]}] \ No newline at end of file diff --git a/dist/services/json-api-datastore.service.d.ts b/dist/services/json-api-datastore.service.d.ts new file mode 100644 index 00000000..5c0e6683 --- /dev/null +++ b/dist/services/json-api-datastore.service.d.ts @@ -0,0 +1,39 @@ +import { Http, Headers, Response } from '@angular/http'; +import { Observable } from 'rxjs/Observable'; +import { ErrorObservable } from 'rxjs/observable/ErrorObservable'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/catch'; +import 'rxjs/add/observable/throw'; +import { JsonApiModel } from '../models/json-api.model'; +import { JsonApiQueryData } from '../models/json-api-query-data'; +export declare type ModelType = { + new (datastore: JsonApiDatastore, data: any): T; +}; +export declare class JsonApiDatastore { + private http; + private _headers; + private _store; + constructor(http: Http); + /** @deprecated - use findAll method to take all models **/ + query(modelType: ModelType, params?: any, headers?: Headers): Observable; + findAll(modelType: ModelType, params?: any, headers?: Headers): Observable; + findRecord(modelType: ModelType, id: string, params?: any, headers?: Headers): Observable; + createRecord(modelType: ModelType, data?: any): T; + saveRecord(attributesMetadata: any, model?: T, params?: any, headers?: Headers): Observable; + deleteRecord(modelType: ModelType, id: string, headers?: Headers): Observable; + peekRecord(modelType: ModelType, id: string): T; + peekAll(modelType: ModelType): T[]; + headers: Headers; + private buildUrl(modelType, params?, id?); + private getRelationships(data); + private extractQueryData(res, modelType, withMeta?); + private extractRecordData(res, modelType, model?); + protected handleError(error: any): ErrorObservable; + protected parseMeta(body: any, modelType: ModelType): any; + private getOptions(customHeaders?); + private toQueryString(params); + addToStore(models: JsonApiModel | JsonApiModel[]): void; + private fromArrayToHash(models); + private resetMetadataAttributes(res, attributesMetadata, modelType); + private updateRelationships(model, relationships); +} diff --git a/dist/services/json-api-datastore.service.js b/dist/services/json-api-datastore.service.js new file mode 100644 index 00000000..ecbae9ae --- /dev/null +++ b/dist/services/json-api-datastore.service.js @@ -0,0 +1,296 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (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; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var _ = require("lodash"); +var core_1 = require("@angular/core"); +var http_1 = require("@angular/http"); +var Observable_1 = require("rxjs/Observable"); +require("rxjs/add/operator/map"); +require("rxjs/add/operator/catch"); +require("rxjs/add/observable/throw"); +var json_api_model_1 = require("../models/json-api.model"); +var error_response_model_1 = require("../models/error-response.model"); +var json_api_query_data_1 = require("../models/json-api-query-data"); +var JsonApiDatastore = (function () { + function JsonApiDatastore(http) { + this.http = http; + this._store = {}; + } + /** @deprecated - use findAll method to take all models **/ + JsonApiDatastore.prototype.query = function (modelType, params, headers) { + var _this = this; + var options = this.getOptions(headers); + var url = this.buildUrl(modelType, params); + return this.http.get(url, options) + .map(function (res) { return _this.extractQueryData(res, modelType); }) + .catch(function (res) { return _this.handleError(res); }); + }; + JsonApiDatastore.prototype.findAll = function (modelType, params, headers) { + var _this = this; + var options = this.getOptions(headers); + var url = this.buildUrl(modelType, params); + return this.http.get(url, options) + .map(function (res) { return _this.extractQueryData(res, modelType, true); }) + .catch(function (res) { return _this.handleError(res); }); + }; + JsonApiDatastore.prototype.findRecord = function (modelType, id, params, headers) { + var _this = this; + var options = this.getOptions(headers); + var url = this.buildUrl(modelType, params, id); + return this.http.get(url, options) + .map(function (res) { return _this.extractRecordData(res, modelType); }) + .catch(function (res) { return _this.handleError(res); }); + }; + JsonApiDatastore.prototype.createRecord = function (modelType, data) { + return new modelType(this, { attributes: data }); + }; + JsonApiDatastore.prototype.saveRecord = function (attributesMetadata, model, params, headers) { + var _this = this; + var modelType = model.constructor; + var typeName = Reflect.getMetadata('JsonApiModelConfig', modelType).type; + var options = this.getOptions(headers); + var relationships = !model.id ? this.getRelationships(model) : undefined; + var url = this.buildUrl(modelType, params, model.id); + var dirtyData = {}; + for (var propertyName in attributesMetadata) { + if (attributesMetadata.hasOwnProperty(propertyName)) { + var metadata = attributesMetadata[propertyName]; + if (metadata.hasDirtyAttributes) { + dirtyData[propertyName] = metadata.serialisationValue ? metadata.serialisationValue : metadata.newValue; + } + } + } + var httpCall; + var body = { + data: { + type: typeName, + id: model.id, + attributes: dirtyData, + relationships: relationships + } + }; + if (model.id) { + httpCall = this.http.patch(url, body, options); + } + else { + httpCall = this.http.post(url, body, options); + } + return httpCall + .map(function (res) { return _this.extractRecordData(res, modelType, model); }) + .map(function (res) { return _this.resetMetadataAttributes(res, attributesMetadata, modelType); }) + .map(function (res) { return _this.updateRelationships(res, relationships); }) + .catch(function (res) { return _this.handleError(res); }); + }; + JsonApiDatastore.prototype.deleteRecord = function (modelType, id, headers) { + var _this = this; + var options = this.getOptions(headers); + var url = this.buildUrl(modelType, null, id); + return this.http.delete(url, options) + .catch(function (res) { return _this.handleError(res); }); + }; + JsonApiDatastore.prototype.peekRecord = function (modelType, id) { + var type = Reflect.getMetadata('JsonApiModelConfig', modelType).type; + return this._store[type] ? this._store[type][id] : null; + }; + JsonApiDatastore.prototype.peekAll = function (modelType) { + var type = Reflect.getMetadata('JsonApiModelConfig', modelType).type; + return _.values(this._store[type]); + }; + Object.defineProperty(JsonApiDatastore.prototype, "headers", { + set: function (headers) { + this._headers = headers; + }, + enumerable: true, + configurable: true + }); + JsonApiDatastore.prototype.buildUrl = function (modelType, params, id) { + var typeName = Reflect.getMetadata('JsonApiModelConfig', modelType).type; + var baseUrl = Reflect.getMetadata('JsonApiDatastoreConfig', this.constructor).baseUrl; + var idToken = id ? "/" + id : null; + return [baseUrl, typeName, idToken, (params ? '?' : ''), this.toQueryString(params)].join(''); + }; + JsonApiDatastore.prototype.getRelationships = function (data) { + var relationships; + for (var key in data) { + if (data.hasOwnProperty(key)) { + if (data[key] instanceof json_api_model_1.JsonApiModel) { + relationships = relationships || {}; + var relationshipType = Reflect.getMetadata('JsonApiModelConfig', data[key].constructor).type; + relationships[key] = { + data: { + type: relationshipType, + id: data[key].id + } + }; + } + } + } + return relationships; + }; + JsonApiDatastore.prototype.extractQueryData = function (res, modelType, withMeta) { + var _this = this; + if (withMeta === void 0) { withMeta = false; } + var body = res.json(); + var models = []; + body.data.forEach(function (data) { + var model = new modelType(_this, data); + _this.addToStore(model); + if (body.included) { + model.syncRelationships(data, body.included, 0); + _this.addToStore(model); + } + models.push(model); + }); + if (withMeta && withMeta === true) { + return new json_api_query_data_1.JsonApiQueryData(models, this.parseMeta(body, modelType)); + } + else { + return models; + } + }; + JsonApiDatastore.prototype.extractRecordData = function (res, modelType, model) { + var body = res.json(); + if (model) { + model.id = body.data.id; + _.extend(model, body.data.attributes); + } + model = model || new modelType(this, body.data); + this.addToStore(model); + if (body.included) { + model.syncRelationships(body.data, body.included, 0); + this.addToStore(model); + } + return model; + }; + JsonApiDatastore.prototype.handleError = function (error) { + var errMsg = (error.message) ? error.message : + error.status ? error.status + " - " + error.statusText : 'Server error'; + try { + var body = error.json(); + if (body.errors && body.errors instanceof Array) { + var errors = new error_response_model_1.ErrorResponse(body.errors); + console.error(errMsg, errors); + return Observable_1.Observable.throw(errors); + } + } + catch (e) { + // no valid JSON + } + console.error(errMsg); + return Observable_1.Observable.throw(errMsg); + }; + JsonApiDatastore.prototype.parseMeta = function (body, modelType) { + var metaModel = Reflect.getMetadata('JsonApiModelConfig', modelType).meta; + var jsonApiMeta = new metaModel(); + for (var key in body) { + if (jsonApiMeta.hasOwnProperty(key)) { + jsonApiMeta[key] = body[key]; + } + } + return jsonApiMeta; + }; + JsonApiDatastore.prototype.getOptions = function (customHeaders) { + var requestHeaders = new http_1.Headers(); + requestHeaders.set('Accept', 'application/vnd.api+json'); + requestHeaders.set('Content-Type', 'application/vnd.api+json'); + if (this._headers) { + this._headers.forEach(function (values, name) { + requestHeaders.set(name, values); + }); + } + if (customHeaders) { + customHeaders.forEach(function (values, name) { + requestHeaders.set(name, values); + }); + } + return new http_1.RequestOptions({ headers: requestHeaders }); + }; + JsonApiDatastore.prototype.toQueryString = function (params) { + var encodedStr = ''; + for (var key in params) { + if (params.hasOwnProperty(key)) { + if (encodedStr && encodedStr[encodedStr.length - 1] !== '&') { + encodedStr = encodedStr + '&'; + } + var value = params[key]; + if (value instanceof Array) { + for (var i = 0; i < value.length; i++) { + encodedStr = encodedStr + key + '=' + encodeURIComponent(value[i]) + '&'; + } + } + else if (typeof value === 'object') { + for (var innerKey in value) { + if (value.hasOwnProperty(innerKey)) { + encodedStr = encodedStr + key + '[' + innerKey + ']=' + encodeURIComponent(value[innerKey]) + '&'; + } + } + } + else { + encodedStr = encodedStr + key + '=' + encodeURIComponent(value); + } + } + } + if (encodedStr[encodedStr.length - 1] === '&') { + encodedStr = encodedStr.substr(0, encodedStr.length - 1); + } + return encodedStr; + }; + JsonApiDatastore.prototype.addToStore = function (models) { + var model = models instanceof Array ? models[0] : models; + var type = Reflect.getMetadata('JsonApiModelConfig', model.constructor).type; + if (!this._store[type]) { + this._store[type] = {}; + } + var hash = this.fromArrayToHash(models); + _.extend(this._store[type], hash); + }; + JsonApiDatastore.prototype.fromArrayToHash = function (models) { + var modelsArray = models instanceof Array ? models : [models]; + return _.keyBy(modelsArray, 'id'); + }; + JsonApiDatastore.prototype.resetMetadataAttributes = function (res, attributesMetadata, modelType) { + attributesMetadata = Reflect.getMetadata('Attribute', res); + for (var propertyName in attributesMetadata) { + if (attributesMetadata.hasOwnProperty(propertyName)) { + var metadata = attributesMetadata[propertyName]; + if (metadata.hasDirtyAttributes) { + metadata.hasDirtyAttributes = false; + } + } + } + Reflect.defineMetadata('Attribute', attributesMetadata, res); + return res; + }; + JsonApiDatastore.prototype.updateRelationships = function (model, relationships) { + var modelsTypes = Reflect.getMetadata('JsonApiDatastoreConfig', this.constructor).models; + for (var relationship in relationships) { + if (relationships.hasOwnProperty(relationship) && model.hasOwnProperty(relationship)) { + var relationshipModel = model[relationship]; + var hasMany = Reflect.getMetadata('HasMany', relationshipModel); + var propertyHasMany = _.find(hasMany, function (property) { + return modelsTypes[property.relationship] === model.constructor; + }); + if (propertyHasMany) { + relationshipModel[propertyHasMany.propertyName].push(model); + } + } + } + return model; + }; + ; + return JsonApiDatastore; +}()); +JsonApiDatastore = __decorate([ + core_1.Injectable(), + __metadata("design:paramtypes", [http_1.Http]) +], JsonApiDatastore); +exports.JsonApiDatastore = JsonApiDatastore; +//# sourceMappingURL=json-api-datastore.service.js.map \ No newline at end of file diff --git a/dist/services/json-api-datastore.service.js.map b/dist/services/json-api-datastore.service.js.map new file mode 100644 index 00000000..4448bd01 --- /dev/null +++ b/dist/services/json-api-datastore.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"json-api-datastore.service.js","sourceRoot":"","sources":["../../src/services/json-api-datastore.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/services/json-api-datastore.service.metadata.json b/dist/services/json-api-datastore.service.metadata.json new file mode 100644 index 00000000..cc6d53aa --- /dev/null +++ b/dist/services/json-api-datastore.service.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"JsonApiDatastore":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/http","name":"Http"}]}],"query":[{"__symbolic":"method"}],"findAll":[{"__symbolic":"method"}],"findRecord":[{"__symbolic":"method"}],"createRecord":[{"__symbolic":"method"}],"saveRecord":[{"__symbolic":"method"}],"deleteRecord":[{"__symbolic":"method"}],"peekRecord":[{"__symbolic":"method"}],"peekAll":[{"__symbolic":"method"}],"buildUrl":[{"__symbolic":"method"}],"getRelationships":[{"__symbolic":"method"}],"extractQueryData":[{"__symbolic":"method"}],"extractRecordData":[{"__symbolic":"method"}],"handleError":[{"__symbolic":"method"}],"parseMeta":[{"__symbolic":"method"}],"getOptions":[{"__symbolic":"method"}],"toQueryString":[{"__symbolic":"method"}],"addToStore":[{"__symbolic":"method"}],"fromArrayToHash":[{"__symbolic":"method"}],"resetMetadataAttributes":[{"__symbolic":"method"}],"updateRelationships":[{"__symbolic":"method"}]}}}},{"__symbolic":"module","version":1,"metadata":{"JsonApiDatastore":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable"}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/http","name":"Http"}]}],"query":[{"__symbolic":"method"}],"findAll":[{"__symbolic":"method"}],"findRecord":[{"__symbolic":"method"}],"createRecord":[{"__symbolic":"method"}],"saveRecord":[{"__symbolic":"method"}],"deleteRecord":[{"__symbolic":"method"}],"peekRecord":[{"__symbolic":"method"}],"peekAll":[{"__symbolic":"method"}],"buildUrl":[{"__symbolic":"method"}],"getRelationships":[{"__symbolic":"method"}],"extractQueryData":[{"__symbolic":"method"}],"extractRecordData":[{"__symbolic":"method"}],"handleError":[{"__symbolic":"method"}],"parseMeta":[{"__symbolic":"method"}],"getOptions":[{"__symbolic":"method"}],"toQueryString":[{"__symbolic":"method"}],"addToStore":[{"__symbolic":"method"}],"fromArrayToHash":[{"__symbolic":"method"}],"resetMetadataAttributes":[{"__symbolic":"method"}],"updateRelationships":[{"__symbolic":"method"}]}}}}] \ No newline at end of file From b6690cadd6c49c01af8faa2f16ccd49d54e55560 Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Fri, 10 Mar 2017 17:29:49 +0300 Subject: [PATCH 08/12] disable postinstall script --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 6f5e49d6..871cb569 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,6 @@ "prepublish": "ngc", "ngc": "ngc", "servetest": "npm run pretest & karma start karma.dev.conf.js", - "postinstall": "npm run build" }, "repository": { "type": "git", From 2151af71c29e959b6f37617296465af6bbcfd8b0 Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Fri, 10 Mar 2017 17:48:06 +0300 Subject: [PATCH 09/12] disable postinstall script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 871cb569..df56ba99 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "test": "karma start", "prepublish": "ngc", "ngc": "ngc", - "servetest": "npm run pretest & karma start karma.dev.conf.js", + "servetest": "npm run pretest & karma start karma.dev.conf.js" }, "repository": { "type": "git", From b7e424879e26cbbff863520b9f4c8889eb5899ea Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Tue, 14 Mar 2017 09:23:10 +0300 Subject: [PATCH 10/12] Generic class for JsonApiQueryData --- dist/models/json-api-query-data.d.ts | 6 +++--- dist/models/json-api-query-data.js.map | 2 +- dist/services/json-api-datastore.service.d.ts | 2 +- src/models/json-api-query-data.ts | 4 ++-- src/services/json-api-datastore.service.ts | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dist/models/json-api-query-data.d.ts b/dist/models/json-api-query-data.d.ts index 9b846360..3ea46924 100644 --- a/dist/models/json-api-query-data.d.ts +++ b/dist/models/json-api-query-data.d.ts @@ -1,7 +1,7 @@ import { JsonApiModel } from './json-api.model'; -export declare class JsonApiQueryData { - jsonApiModels: Array; - metaData: any; +export declare class JsonApiQueryData { + protected jsonApiModels: Array; + protected metaData: any; constructor(jsonApiModels: Array, metaData?: any); getModels(): T[]; getMeta(): any; diff --git a/dist/models/json-api-query-data.js.map b/dist/models/json-api-query-data.js.map index 1bcac31b..8be430d9 100644 --- a/dist/models/json-api-query-data.js.map +++ b/dist/models/json-api-query-data.js.map @@ -1 +1 @@ -{"version":3,"file":"json-api-query-data.js","sourceRoot":"","sources":["../../src/models/json-api-query-data.ts"],"names":[],"mappings":";;AAEA;IACI,0BAAmB,aAAyB,EAAS,QAAc;QAAhD,kBAAa,GAAb,aAAa,CAAY;QAAS,aAAQ,GAAR,QAAQ,CAAM;IACnE,CAAC;IAEM,oCAAS,GAAhB;QACI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAEM,kCAAO,GAAd;QACI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IACL,uBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,4CAAgB"} \ No newline at end of file +{"version":3,"file":"json-api-query-data.js","sourceRoot":"","sources":["../../src/models/json-api-query-data.ts"],"names":[],"mappings":";;AAEA;IACI,0BAAsB,aAAyB,EAAY,QAAc;QAAnD,kBAAa,GAAb,aAAa,CAAY;QAAY,aAAQ,GAAR,QAAQ,CAAM;IACzE,CAAC;IAEM,oCAAS,GAAhB;QACI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAEM,kCAAO,GAAd;QACI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IACL,uBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,4CAAgB"} \ No newline at end of file diff --git a/dist/services/json-api-datastore.service.d.ts b/dist/services/json-api-datastore.service.d.ts index 5c0e6683..edde637e 100644 --- a/dist/services/json-api-datastore.service.d.ts +++ b/dist/services/json-api-datastore.service.d.ts @@ -16,7 +16,7 @@ export declare class JsonApiDatastore { constructor(http: Http); /** @deprecated - use findAll method to take all models **/ query(modelType: ModelType, params?: any, headers?: Headers): Observable; - findAll(modelType: ModelType, params?: any, headers?: Headers): Observable; + findAll(modelType: ModelType, params?: any, headers?: Headers): Observable>; findRecord(modelType: ModelType, id: string, params?: any, headers?: Headers): Observable; createRecord(modelType: ModelType, data?: any): T; saveRecord(attributesMetadata: any, model?: T, params?: any, headers?: Headers): Observable; diff --git a/src/models/json-api-query-data.ts b/src/models/json-api-query-data.ts index f78373a3..0d410a7e 100644 --- a/src/models/json-api-query-data.ts +++ b/src/models/json-api-query-data.ts @@ -1,7 +1,7 @@ import {JsonApiModel} from './json-api.model'; -export class JsonApiQueryData { - constructor(public jsonApiModels: Array, public metaData?: any) { +export class JsonApiQueryData { + constructor(protected jsonApiModels: Array, protected metaData?: any) { } public getModels(): T[] { diff --git a/src/services/json-api-datastore.service.ts b/src/services/json-api-datastore.service.ts index 88ca0259..a7403d8d 100644 --- a/src/services/json-api-datastore.service.ts +++ b/src/services/json-api-datastore.service.ts @@ -31,7 +31,7 @@ export class JsonApiDatastore { .catch((res: any) => this.handleError(res)); } - findAll(modelType: ModelType, params?: any, headers?: Headers): Observable { + findAll(modelType: ModelType, params?: any, headers?: Headers): Observable> { let options: RequestOptions = this.getOptions(headers); let url: string = this.buildUrl(modelType, params); return this.http.get(url, options) @@ -134,7 +134,7 @@ export class JsonApiDatastore { return relationships; } - private extractQueryData(res: any, modelType: ModelType, withMeta = false): T[] | JsonApiQueryData { + private extractQueryData(res: any, modelType: ModelType, withMeta = false): T[] | JsonApiQueryData { let body: any = res.json(); let models: T[] = []; body.data.forEach((data: any) => { From 14aa29b3a16e2d67844c7c4496d22601e5cbf976 Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Tue, 14 Mar 2017 10:07:41 +0300 Subject: [PATCH 11/12] Refactor generic class for JsonApiQueryData --- src/models/json-api-query-data.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/models/json-api-query-data.ts b/src/models/json-api-query-data.ts index 0d410a7e..18fdfa69 100644 --- a/src/models/json-api-query-data.ts +++ b/src/models/json-api-query-data.ts @@ -1,10 +1,8 @@ -import {JsonApiModel} from './json-api.model'; - export class JsonApiQueryData { - constructor(protected jsonApiModels: Array, protected metaData?: any) { + constructor(protected jsonApiModels: Array, protected metaData?: any) { } - public getModels(): T[] { + public getModels(): T[] { return this.jsonApiModels; } From 1b269e7ddf5fe8f7de40389b0eb1e61b568e2747 Mon Sep 17 00:00:00 2001 From: Konstantin T Date: Tue, 14 Mar 2017 10:14:06 +0300 Subject: [PATCH 12/12] Refactor generic class for JsonApiQueryData --- dist/models/json-api-query-data.d.ts | 7 +++---- dist/models/json-api-query-data.js.map | 2 +- dist/models/json-api-query-data.metadata.json | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/dist/models/json-api-query-data.d.ts b/dist/models/json-api-query-data.d.ts index 3ea46924..768005b9 100644 --- a/dist/models/json-api-query-data.d.ts +++ b/dist/models/json-api-query-data.d.ts @@ -1,8 +1,7 @@ -import { JsonApiModel } from './json-api.model'; export declare class JsonApiQueryData { - protected jsonApiModels: Array; + protected jsonApiModels: Array; protected metaData: any; - constructor(jsonApiModels: Array, metaData?: any); - getModels(): T[]; + constructor(jsonApiModels: Array, metaData?: any); + getModels(): T[]; getMeta(): any; } diff --git a/dist/models/json-api-query-data.js.map b/dist/models/json-api-query-data.js.map index 8be430d9..ffe86834 100644 --- a/dist/models/json-api-query-data.js.map +++ b/dist/models/json-api-query-data.js.map @@ -1 +1 @@ -{"version":3,"file":"json-api-query-data.js","sourceRoot":"","sources":["../../src/models/json-api-query-data.ts"],"names":[],"mappings":";;AAEA;IACI,0BAAsB,aAAyB,EAAY,QAAc;QAAnD,kBAAa,GAAb,aAAa,CAAY;QAAY,aAAQ,GAAR,QAAQ,CAAM;IACzE,CAAC;IAEM,oCAAS,GAAhB;QACI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAEM,kCAAO,GAAd;QACI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IACL,uBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,4CAAgB"} \ No newline at end of file +{"version":3,"file":"json-api-query-data.js","sourceRoot":"","sources":["../../src/models/json-api-query-data.ts"],"names":[],"mappings":";;AAAA;IACI,0BAAsB,aAAuB,EAAY,QAAc;QAAjD,kBAAa,GAAb,aAAa,CAAU;QAAY,aAAQ,GAAR,QAAQ,CAAM;IACvE,CAAC;IAEM,oCAAS,GAAhB;QACI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAEM,kCAAO,GAAd;QACI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IACL,uBAAC;AAAD,CAAC,AAXD,IAWC;AAXY,4CAAgB"} \ No newline at end of file diff --git a/dist/models/json-api-query-data.metadata.json b/dist/models/json-api-query-data.metadata.json index d0406c70..fc7ba9ee 100644 --- a/dist/models/json-api-query-data.metadata.json +++ b/dist/models/json-api-query-data.metadata.json @@ -1 +1 @@ -[{"__symbolic":"module","version":3,"metadata":{"JsonApiQueryData":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"any"}]}],"getModels":[{"__symbolic":"method"}],"getMeta":[{"__symbolic":"method"}]}}}},{"__symbolic":"module","version":1,"metadata":{"JsonApiQueryData":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","name":"any"}]},{"__symbolic":"reference","name":"any"}]}],"getModels":[{"__symbolic":"method"}],"getMeta":[{"__symbolic":"method"}]}}}}] \ No newline at end of file +[{"__symbolic":"module","version":3,"metadata":{"JsonApiQueryData":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":1,"character":47,"context":{"typeName":"T"}}]},{"__symbolic":"reference","name":"any"}]}],"getModels":[{"__symbolic":"method"}],"getMeta":[{"__symbolic":"method"}]}}}},{"__symbolic":"module","version":1,"metadata":{"JsonApiQueryData":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":1,"character":47,"context":{"typeName":"T"}}]},{"__symbolic":"reference","name":"any"}]}],"getModels":[{"__symbolic":"method"}],"getMeta":[{"__symbolic":"method"}]}}}}] \ No newline at end of file