Skip to content

typings #32

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 19, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .idea/typescript-compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion index.d.ts

This file was deleted.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"version": "0.4.0",
"description": "Hydra Core hypermedia-aware client library",
"main": "dist/alcaeus.js",
"types": "dist/src/index.d.ts",
"directories": {
"test": "tests"
},
Expand Down Expand Up @@ -64,7 +65,7 @@
"sinon": "^3.2.1",
"ts-loader": "^2.3.3",
"tslint": "^5.9.1",
"typescript": "^2.4.2",
"typescript": "^2.9.2",
"webpack": "^3.5.5",
"webpack-karma-jasmine": "^1.0.4",
"whatwg-fetch": "^2.0.3"
Expand Down
2 changes: 1 addition & 1 deletion src/Constants.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// tslint:disable:no-namespace object-literal-sort-keys

type HydraTerm = 'apiDocumentation' |
export type HydraTerm = 'apiDocumentation' |
'ApiDocumentation' |
'title' |
'description' |
Expand Down
33 changes: 30 additions & 3 deletions src/HydraResponse.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,37 @@
import {HydraResource, IHydraResponse, IResponseWrapper, IRootSelector} from './interfaces';
import {ResponseWrapper} from './ResponseWrapper';
import {HydraResource} from './Resources';
import {IResource} from './Resources/Resource';
import {IResponseWrapper, ResponseWrapper} from './ResponseWrapper';
import {IRootSelector} from './RootSelectors';

interface IResourceGraph {
export interface IResourceGraph {
[uri: string]: HydraResource;
}

export interface IHydraResponse extends Iterable<HydraResource>, IResponseWrapper {

/**
* Gets the root of the representation or undefined if it cannot be determined
*/
root: HydraResource;

/**
* Gets the number of resource within this representation
*/
length: number;

/**
* Indexer to look up any arbitrary resource by its id within the representation
*/
get(uri: string): HydraResource;

/**
* Gets all resources of given RDF type from the representation
* @param {string} classId RDF class identifier
* @returns {Array<HydraResource>}
*/
ofType(classId: string): IResource[];
}

export function create(
uri: string,
response: IResponseWrapper,
Expand Down
18 changes: 15 additions & 3 deletions src/MediaTypeProcessors/RdfProcessor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,27 @@ import {FlattenOptions} from 'jsonld';
import * as $rdf from 'rdf-ext';
import * as JsonLdSerializer from 'rdf-serializer-jsonld-ext';
import * as stringToStream from 'string-to-stream';
import {IHydraClient} from '../alcaeus';
import * as Constants from '../Constants';
import {JsonLd} from '../Constants';
import {
ApiDocumentation, IHydraClient, IMediaTypeProcessor, IResource, IResourceFactory, IResourceGraph, IResponseWrapper,
} from '../interfaces';
import {IResourceGraph} from '../HydraResponse';
import {forOwn} from '../LodashUtil';
import {ParserFactory} from '../ParserFactory';
import {IResourceFactory} from '../ResourceFactory';
import {ApiDocumentation} from '../Resources';
import {IResource} from '../Resources/Resource';
import {IResponseWrapper} from '../ResponseWrapper';
import {rdf} from '../Vocabs';

export interface IMediaTypeProcessor {
canProcess(mediaType: string);
process(
alcaeus: IHydraClient,
uri: string,
response: IResponseWrapper,
apiDocumentation: ApiDocumentation): Promise<IResourceGraph>;
}

const propertyRangeMappings = [
[Constants.Core.Vocab('supportedClass'), Constants.Core.Vocab('Class')],
[Constants.Core.Vocab('expects'), Constants.Core.Vocab('Class')],
Expand Down
16 changes: 13 additions & 3 deletions src/ResourceFactory.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
import {IHydraClient} from './alcaeus';
import {JsonLd} from './Constants';
import {ApiDocumentation, IHydraClient, IResource, IResourceFactory} from './interfaces';
import {IIncomingLink} from './internals';
import {forOwn, values} from './LodashUtil';
import {ApiDocumentation} from './Resources';
import createBase from './Resources/HydraResource';
import {IResource} from './Resources/Resource';

type Constructor<T = {}> = new (...args: any[]) => T;
interface IMixin {
export interface IResourceFactory {
createResource(
obj: object,
apiDocumentation: ApiDocumentation,
resources,
clientAccessorMixin?): IResource;
}

export type Constructor<T = {}> = new (...args: any[]) => T;
export interface IMixin {
Mixin: Constructor;
shouldApply(obj: object): boolean;
}
Expand Down
4 changes: 2 additions & 2 deletions src/Resources/CoreMixins/ClientAccessor.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import {nonenumerable} from 'core-decorators';
import IHydraClient from '../../interfaces';
import {IHydraClient} from '../../alcaeus';
import {Constructor} from '../Mixin';

export default function(alcaeus: IHydraClient) {
return <TBase extends Constructor>(Base: TBase) => {
class HydraResource extends Base {
@nonenumerable
private get _alcaeus() {
public get _alcaeus() {
return alcaeus;
}
}
Expand Down
8 changes: 3 additions & 5 deletions src/Resources/HydraResource.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import {nonenumerable} from 'core-decorators';
import {JsonLd} from '../Constants';
import {
ApiDocumentation, IHydraClient, IHydraResource, IResource,
} from '../interfaces';
import {IHydraClient} from '../alcaeus';
import {IAsObject, IIncomingLink} from '../internals';
import ClientAccessor from './CoreMixins/ClientAccessor';
import LinkAccessor from './CoreMixins/LinkAccessor';
import {ApiDocumentation, IHydraResource} from './index';
import {Operation} from './Operation';
import Resource from './Resource';
import Resource, {IResource} from './Resource';

const apiDocumentation = new WeakMap<IResource, ApiDocumentation>();

Expand Down
3 changes: 2 additions & 1 deletion src/Resources/Mixins/ApiDocumentation.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import {deprecated} from 'core-decorators';
import {Core, JsonLd} from '../../Constants';
import {IApiDocumentation, IResource, ISupportedProperty} from '../../interfaces';
import {IApiDocumentation, ISupportedProperty} from '../index';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';

export function Mixin<TBase extends Constructor>(Base: TBase) {
abstract class ApiDocumentation extends Base implements IApiDocumentation {
Expand Down
2 changes: 1 addition & 1 deletion src/Resources/Mixins/BasicRepresentationExpansion.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Core, JsonLd} from '../../Constants';
import {IResource} from '../../interfaces';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';
import ExpansionModelBuilder, {IExpandedValue} from './ExpansionModelBuilder';

export function Mixin<TBase extends Constructor>(Base: TBase) {
Expand Down
3 changes: 2 additions & 1 deletion src/Resources/Mixins/Class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {Core} from '../../Constants';
import {IClass, IResource} from '../../interfaces';
import {IClass} from '../index';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';

export function Mixin<TBase extends Constructor>(Base: TBase) {
abstract class Class extends Base implements IClass {
Expand Down
3 changes: 2 additions & 1 deletion src/Resources/Mixins/Collection.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import {nonenumerable} from 'core-decorators';
import {Core} from '../../Constants';
import {ICollection, IResource} from '../../interfaces';
import {ICollection} from '../index';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';

export function Mixin <TBase extends Constructor>(Base: TBase) {
abstract class Collection extends Base implements ICollection {
Expand Down
2 changes: 1 addition & 1 deletion src/Resources/Mixins/DocumentedResource.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Core} from '../../Constants';
import {IDocumentedResource} from '../../interfaces';
import {rdfs, Schema} from '../../Vocabs';
import {IDocumentedResource} from '../index';
import {Constructor} from '../Mixin';

function getTitle(res) {
Expand Down
2 changes: 1 addition & 1 deletion src/Resources/Mixins/ExpansionModelBuilder.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import URITemplate from 'es6-url-template';
import {IIriTemplate, IIriTemplateMapping} from '../../interfaces';
import {IIriTemplate, IIriTemplateMapping} from '../index';
import {Constructor} from '../Mixin';

export interface IExpandedValue {
Expand Down
2 changes: 1 addition & 1 deletion src/Resources/Mixins/ExplicitRepresentationExpansion.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {Core, JsonLd} from '../../Constants';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';
import ExpansionModelBuilder, {IExpandedValue} from './ExpansionModelBuilder';
import {IResource} from '../../interfaces';

export function Mixin<TBase extends Constructor>(Base: TBase) {
class ExplicitRepresentationExpansion extends Base {
Expand Down
3 changes: 2 additions & 1 deletion src/Resources/Mixins/IriTemplate.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import {nonenumerable} from 'core-decorators';
import {Core} from '../../Constants';
import {IIriTemplate, IResource} from '../../interfaces';
import {IIriTemplate} from '../index';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';

export function Mixin<TBase extends Constructor>(Base: TBase) {
abstract class IriTemplate extends Base implements IIriTemplate {
Expand Down
3 changes: 2 additions & 1 deletion src/Resources/Mixins/IriTemplateMapping.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import {nonenumerable} from 'core-decorators';
import {Core} from '../../Constants';
import {IIriTemplateMapping, IResource} from '../../interfaces';
import {IIriTemplateMapping} from '../index';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';

export function Mixin<TBase extends Constructor>(Base: TBase) {
class IriTemplateMapping extends Base implements IIriTemplateMapping {
Expand Down
3 changes: 2 additions & 1 deletion src/Resources/Mixins/PartialCollectionView.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import {nonenumerable} from 'core-decorators';
import {Core} from '../../Constants';
import {IPartialCollectionView, IResource, IView} from '../../interfaces';
import {IAsObject, IIncomingLink} from '../../internals';
import {IPartialCollectionView, IView} from '../index';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';

export function Mixin<TBase extends Constructor>(Base: TBase) {
class PartialCollectionView extends Base implements IPartialCollectionView, IView {
Expand Down
3 changes: 2 additions & 1 deletion src/Resources/Mixins/RdfProperty.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import {Core} from '../../Constants';
import {IRdfProperty, IResource} from '../../interfaces';
import {rdf, rdfs} from '../../Vocabs';
import {IRdfProperty} from '../index';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';

export function Mixin<TBase extends Constructor>(Base: TBase) {
abstract class RdfProperty extends Base implements IRdfProperty {
Expand Down
3 changes: 2 additions & 1 deletion src/Resources/Mixins/StatusCodeDescription.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {Core} from '../../Constants';
import {IResource, IStatusCodeDescription} from '../../interfaces';
import {IStatusCodeDescription} from '../index';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';

export function Mixin <TBase extends Constructor>(Base: TBase) {
return class StatusCodeDescription extends Base implements IStatusCodeDescription {
Expand Down
2 changes: 1 addition & 1 deletion src/Resources/Mixins/SupportedOperation.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Core} from '../../Constants';
import {IClass, ISupportedOperation} from '../../interfaces';
import {owl} from '../../Vocabs';
import {ISupportedOperation} from '../index';
import {Constructor} from '../Mixin';

export function Mixin<TBase extends Constructor>(Base: TBase) {
Expand Down
3 changes: 2 additions & 1 deletion src/Resources/Mixins/SupportedProperty.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {Core} from '../../Constants';
import {IResource, ISupportedProperty} from '../../interfaces';
import {ISupportedProperty} from '../index';
import {Constructor} from '../Mixin';
import {IResource} from '../Resource';

export function Mixin<TBase extends Constructor>(Base: TBase) {
return class SupportedProperty extends Base implements ISupportedProperty {
Expand Down
8 changes: 3 additions & 5 deletions src/Resources/Operation.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import {nonenumerable} from 'core-decorators';
import {IHydraClient} from '../alcaeus';
import {MediaTypes} from '../Constants';
import {
HydraResource, IHydraClient, IOperation, IResource,
SupportedOperation,
} from '../interfaces';
import Resource from './Resource';
import {HydraResource, IOperation, SupportedOperation} from './index';
import Resource, {IResource} from './Resource';

const supportedOperations = new WeakMap<IOperation, SupportedOperation>();
const resources = new WeakMap<IOperation, IResource>();
Expand Down
12 changes: 8 additions & 4 deletions src/Resources/Resource.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import {nonenumerable} from 'core-decorators';
import {promises as jsonld} from 'jsonld';
import {Core, JsonLd} from '../Constants';
import {IResource} from '../interfaces';
import TypeCollection from '../TypeCollection';
import TypeCollection, {ITypeCollection} from '../TypeCollection';

export interface IResource {
id: string;
types: ITypeCollection;
}

const isProcessed = new WeakMap<IResource, boolean>();

Expand Down Expand Up @@ -36,15 +40,15 @@ export default class implements IResource {
return jsonld.compact(this, context || Core.Context);
}

protected _get(property: string) {
public _get(property: string) {
if (this[property] === false) {
return false;
}

return this[property] || null;
}

protected _getArray(property: string) {
public _getArray(property: string) {
const values = this[property];

if (!values) {
Expand Down
Loading